#pragma once #include "CModule.h" #include "CCameraBase.h" #include "CNozzleTable.h" #include "CWafflePackMatrix.h" #include "CXYCalib.h" #include "CRCalib.h" #include "CLookUpCalib.h" #include "CPRStrategy.h" #include "TipMatrix.h" //#include "CBondMatrix.h" class __declspec(dllexport) CWafflePackHead : public CModule { public: CWafflePackHead(MODULE_LIST ModuleType); ~CWafflePackHead(); void SetCamera(CCameraBase* camera) { m_pCamera = camera; } 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; virtual void DataChangNotice(string strDbName, string strTableName) override; //回调触发处理函数 void SetXAxis(CAxis* axis) { m_pXAxis = axis; } void SetYAxis(CAxis* axis) { m_pYAxis = axis; } void SetZAxis(CAxis* axis) { m_pZAxis = axis; } void SetNozzleTable(CNozzleTable* nozzleTable) { m_pNozzleTable = nozzleTable; } void SetCoord(CCoord* pCrd) { m_pCoord_XY = pCrd; } CXYCalib* GetCameraCalib() { return m_pXYCalib; } CCTDCalib* GetCTDCalib() { return m_pCTDCalib; } void SetVacDO(CIO* out) { m_pVacGpo = out; } //void SetFlowDo(CDigitOutput* out) { m_pFlowGpo = out; } void SetVacDi(CIO* input) { m_pVacGpi = input; } void SetFlowDi(CIO* input) { m_pFlowGpi = input; } //手动 LONG ChangeNozzle(int nozzleIndex); LONG UnLoadNozzle(); LONG LoadNozzle(int nozzleIndex); //标定 LONG CameraCTDCalib(); //自动: LONG CheckDieExistStatus(bool& bExist); LONG VacuumOn(); //真空开 LONG VacuumOff(); //真空关 LONG WaitZTrigXYToGrabPos(); //传入的index是在绑定矩阵中的芯片序号 LONG PickDie(int dieIndex, bool waitDone =true ); //到达预取晶位置需判断中转台是否到位 LONG MoveToPrePlacePos(bool waitDone); LONG SlowDownPlaceDie(int DieIndex, bool waitDone);//包括真空,等 //返回相对于编程矩阵原点的位置,不是绝对世界坐标位置 LONG GetCurPickPos(int dieIndex, XY_DOUBLE_STRUCT& point); LONG MoveToGrabPos(XY_DOUBLE_STRUCT relDiePos, bool waitDone); LONG PickGrab(int index, XY_DOUBLE_STRUCT posOffset); LONG MoveToPrePickPos(XY_DOUBLE_STRUCT relDiePos, bool waitDone); LONG ZSlowDownPick(int index, bool waitDone); LONG ZUpToInitPos(bool waitDone);//取放共用 LONG WaitZTrigXYToPlacePos(); LONG ZSlowDownPlace(int index, bool waitDone);//只有轴动 private: CAxis* m_pXAxis = nullptr; CAxis* m_pYAxis = nullptr; CAxis* m_pZAxis = nullptr; CCameraBase* m_pCamera = nullptr; CIO* m_pVacGpo = nullptr; CIO* m_pVacGpi = nullptr; CIO* m_pFlowGpi = nullptr; CCoord* m_pCoord_XY = nullptr; PICK_PARAM m_stPickParam; CPRStrategy* m_pPR = nullptr; CNozzleTable* m_pNozzleTable = nullptr; CWafflePackMatrix* m_pPointMatrix = nullptr; CBondMatrix* m_pBondMatrix = nullptr; //标定对象 CXYCalib* m_pXYCalib = nullptr; CCTDCalib* m_pCTDCalib = nullptr; TipMatrix* m_pTipMatrix = nullptr; //位置参数 double m_dSafePosX = 0;//安全位置 double m_dSafePosY = 0; double m_dSafePosZ = 0; double m_dInitPosR = 0; double m_dPickOriginPosX = 0; //华夫盒矩阵取晶位置,相机位置 double m_dPickOriginPosY = 0; double m_dPlacePosX = 0;//放下芯片的位置 double m_dPlacePosY = 0;//相机位置 double m_dYTrigZToBond = 0; double m_dYTrigZToPick = 0; double m_dZTrigYToPick = 0; double m_dZTrigYToBond = 0; double m_dPreChangeNozzleDisY = 0;//预更换吸嘴偏差位置 double m_dNozzlePosZ = 0; //吸嘴架位置Z double m_dNozzlePosY = 0;//吸嘴架位置Y int m_nCurNozzleIndex = 0; //当前吸嘴在吸嘴架上的编号 //统计参数 int m_nTipUsedNum = 0; int m_nTipUsedMaxNum = 0; double m_dPickSlowVel = 0;//软着陆拾取速度 double m_dPlaceSlowVel = 0;//软着陆放晶速度 //后续用全局坐标系转换 double m_dNozzleTableOriginPosX = 0; double m_dNozzleTableOriginPosY = 0; };