#pragma once #include "CModule.h" #include "CRCalib.h" #include "CNozzleTable.h" #include "CEjector.h" #include "CTransferTable.h" #include "CForceControl.h" #include "CMatrixCommon.h" /* 1、Wafer取晶头没有相机,有顶针 2、不带视觉,只到特定位置取晶和放晶 */ class __declspec(dllexport) CWaferHead : public CModule { public: CWaferHead(MODULE_LIST eModuleType); ~CWaferHead(); virtual void SetDataChangFunction() override; virtual LONG SetParam() override;//保存配置参数 virtual LONG GetParam() override;//加载配置参数 virtual LONG ToHome() override; virtual LONG Sync() override; virtual LONG ToSafePosition() override; virtual LONG InitResource() override; //分配轴、IO、标定等资源 virtual void DataChangNotice(string strDbName, string strTableName) override; //回调触发处理函数 virtual LONG AllocateAxis(vector vecAxis) override; virtual LONG AllocateIo(vector vecIo) override; ULONG GetCurrentBondIndex() {return m_iCurrentBondIndex;} void SetCurrentBondIndex(ULONG index) { m_iCurrentBondIndex = index; } void SetZEPZCoord(CCoord* crd) { m_pZEPZCoord = crd; } void SetXYCoord(CCoord* crd) { m_pXYCrd = crd; } void SetNozzleTable(CNozzleTable* nozzleTable) { m_pNozzleTable = nozzleTable; } void SetEjector(CEjector* ej) { m_pEjector = ej; } void SetTransferTable(CTransferTable* tt) { m_pTransferTable = tt; } void SetForceControl(CForceControl* force) { m_pForceControl = force; } //手动: //更换吸嘴 LONG ChangeNozzle(int nozzleIndex); LONG UnLoadNozzle(); LONG LoadNozzle(int nozzleIndex); //自动: LONG CheckDieExistStatus(bool& bExist); LONG VacuumOn(LONG lDelay); //真空开 LONG VacuumOff(LONG lDelay); //真空关 LONG UpdateForce(double dForce); //切换力的大小 LONG FindForce(double dForce); //LONG UpdatePickParam(int dieIndex); //LONG WaitZTrigYToPick(int index); //手动流程调用 LONG PickDie(int dieIndex, bool bSync); LONG XYZToPrePickPos(int dieIndex, bool bSync); LONG ZSlowToPickPos(int dieIndex, bool bSync); LONG PlaceDie(int dieIndex, bool bSync); LONG XYZToPrePlacePos(int dieIndex, bool bSync); //自动流程调用 LONG ZSlowToPlacePos(int dieIndex, bool bSync); //自动流程调用 LONG PickDie(bool bSync) { return PickDie(m_iCurrentBondIndex, bSync); }; LONG XYZToPrePickPos(bool bSync) { return XYZToPrePickPos(m_iCurrentBondIndex, bSync); }; LONG ZSlowToPickPos(bool bSync) { return ZSlowToPickPos(m_iCurrentBondIndex, bSync); }; LONG PlaceDie(bool bSync) { return PlaceDie(m_iCurrentBondIndex, bSync); }; LONG XYZToPrePlacePos(bool bSync) { return XYZToPrePlacePos(m_iCurrentBondIndex, bSync); }; LONG ZSlowToPlacePos(bool bSync) { return ZSlowToPlacePos(m_iCurrentBondIndex, bSync); }; //LONG ZEPZSyncUp(bool waitDone);//Z和顶针Z同步插补上升,不等待完成待完善 LONG ZUpToInitPos(bool waitDone); /*LONG WaitYDone(); LONG WaitZDone();*/ //LONG WaitZTrigYToPlace(int index); //LONG SlowDownPlaceDie(bool waitDone); //自动流程调用 private: //当前固晶点Id UINT m_iCurrentBondIndex = NONE_POINT_INDEX; //晶片当前位置状态 PICK_STATUS m_ePickDieStatus = PICK_STATUS::NO_PICK; //CAxis* m_pXAxis = nullptr; CAxis* m_pYAxis = nullptr; CAxis* m_pZAxis = nullptr; CIO* m_pForcerDO = nullptr; CIO* m_pForcerAO = nullptr; //CAxis* m_pForceAxis = nullptr; CCoord* m_pZEPZCoord = nullptr; CCoord* m_pXYCrd = nullptr; CIO* m_pVacGpo = nullptr; CIO* m_pFlowGpo = nullptr; CIO* m_pVacGpi = nullptr; CIO* m_pFlowGpi = nullptr; CPRStrategy* m_pPR = nullptr; CNozzleTable* m_pNozzleTable = nullptr; CEjector* m_pEjector = nullptr; CTransferTable* m_pTransferTable = nullptr; CForceControl* m_pForceControl = nullptr; CBondMatrix* m_pBondMatrix = nullptr; //PICK_PARAM m_stPickParam; //位置参数 double m_dSafePosX = 0;//安全位置 double m_dSafePosY = 0; double m_dSafePosZ = 0; double m_dInitPosR = 0; double m_dPickPosX = 0; //取晶位置 double m_dPickPosY = 0; double m_dPlacePosX = 0;//放下芯片的位置 double m_dPlacePosY = 0;// double m_dEjHightPos = 0; double m_dEjContactPos = 0;//顶针接触位 double m_dYTrigZToBond = 0; double m_dYTrigZToPick = 0; double m_dZTrigYToPick = 0; double m_dZTrigYToBond = 0; double m_dPreChangeNozzleDisY = 0;//预更换吸嘴偏差位置 double m_dNozzlePosX = 0; double m_dNozzlePosY = 0; double m_dNozzlePosZ = 0; //吸嘴架位置Z //统计参数 int m_nTipUsedNum = 0; int m_nTipUsedMaxNum = 0; int m_nCurNozzleIndex; //当前吸嘴在吸嘴架上的编号 //速度、延时、力控 double m_dPickSlowVel = 0;//软着陆拾取速度 double m_dPlaceSlowVel = 0;//软着陆放晶速度 double m_dSearchForce = 0; double m_dHoldForce = 0;//保持力 int m_nEjUpDelay = 0;//顶针高位延时 ms double m_dGivenForceZPos = 0; double m_dNozzleTableOriginPosX = 0; double m_dNozzleTableOriginPosY = 0; };