#pragma once #include "CModule.h" #include "CNozzleTable.h" #include "CBondMatrix.h" #include "CForceControl.h" #include "CRCalib.h" #include "CLookUpCalib.h" #include "CTransferTable.h" #include "CXYCalib.h" #include "TipMatrix.h" class __declspec(dllexport) CBondHead : public CModule { public: CBondHead(MODULE_LIST eModuleType); ~CBondHead(); virtual LONG AllocateAxis(vector vecAxis); virtual LONG AllocateIo(vector vecIo); void SetXAxis(CAxis* axis) { m_pXAxis = axis; } CAxis* GetXAxis() { return m_pXAxis; } void SetYAxis(CAxis* axis) { m_pYAxis = axis; } CAxis* GetYAxis() { return m_pYAxis; } void SetZAxis(CAxis* axis) { m_pZAxis = axis; } CAxis* GetZAxis() { return m_pZAxis; } //void SetForceZAxis(CAxis* axis) { m_pForcerZ = axis; } //CAxis* GetForceZAxis() { return m_pForcerZ; } void SetRAxis(CAxis* axis) { m_pRAxis = axis; } CAxis* GetRAxis() { return m_pRAxis; } void SetCoord(CCoord* pCrd) { m_pCoord_XY = pCrd; } CCoord* GetCoord() { return m_pCoord_XY; } void SetVacDO(CIO* out) { m_pBDVacGpo = out; } void SetFlowDo(CIO* out) { m_pBDFlowGpo = out; } void SetVacDi(CIO* input) { m_pBDVacGpi = input; } void SetFlowDi(CIO* input) { m_pBDFlowGpi = input; } void SetNozzleTable(CNozzleTable* nozzleTable) { m_pNozzleTable = nozzleTable; } void SetLookUpCamera(CCameraBase* camera) { m_pLookUpCamera = camera; } void SetWaferTransferTable(CTransferTable* tt) { m_pWaferTransferTable = tt; } void SetWaffleTransferTable(CTransferTable* tt) { m_pWaffleTransferTable = tt; } //void SetForceControl(CForceControl* force) { m_pForceControl = force; } CForceControl* GetForceControl() { return m_pForceControl; } CXYCalib* GetLookUpCameraCalib() { return m_pLookUpXYCalib; } CRCalib* GetHeadRCalib() { return m_pRCalib; } bool GetIsLocationAll() { return m_bIsLocationAll; } virtual void SetHighCamera(CCameraBase* camera) {} virtual void SetLowCamera(CCameraBase* camera) { m_pLowCamera = camera; } virtual CXYCalib* GetLowCameraCalib() { return m_pLowXYCalib; } virtual CXYCalib* GetHighCameraCalib() { return nullptr; } virtual CCTDCalib* GetLowCTDCalib() { return m_pLowCTDCalib; } virtual LONG ToHome(); virtual LONG ToSafePosition(); LONG Move(double x, double y, bool bSync = true); LONG MoveTo(double x,double y, bool bSync = true); LONG MoveTo(double x, double y,double z); LONG MoveTo(double x, double y, double z,double r); virtual void SetPickHTestIndex(int index) = 0; virtual void SetBondHTestIndex(int index) = 0; virtual LONG PickHighTest() = 0;//调用之前先SetIndex virtual LONG AllBondHighTest() = 0; virtual LONG BongHighTest() = 0; virtual LONG VacuumOn(long lDelay); //真空开,真空延时,ms virtual LONG VacuumOff(long lDelay); //真空关,吹汽延时,ms virtual LONG StrongOn(); //强吹开 virtual LONG StrongOff(); //强吹关 virtual LONG UltraOn(int iUltraValue) { return OK; }; //超声开 virtual LONG UltraOff() { return OK; }; //超声关 virtual LONG ChangeNozzle(int nozzleIndex); virtual LONG UnLoadNozzle(); virtual LONG LoadNozzle(int nozzleIndex); virtual LONG CheckDieExistStatus(bool& bExist); virtual LONG MoveLowCameraToNozzle(); virtual LONG MoveNozzleToLowCamera(); //吸嘴取晶 virtual LONG MoveToGrabPos(bool waitDone = true); virtual LONG PickGrab(int index, X_Y_ANGLE_STRUCT& result);//中转台拍照,返回拍照结果,拍照结果仅用于拾取偏移,不存储 //virtual LONG MoveToPickPos();//移动到拾取位,未拍照 virtual LONG PickDie(int index);//拍照,取晶,并上行到上视拍照位,主要用于自动流程 virtual LONG PickDieDown(int index, X_Y_ANGLE_STRUCT result);//传入拍照结果进行拾取补偿偏移 virtual LONG PickUpToGrabPos(); virtual LONG PickDieUp(bool waitDone = true);//上行到安全位置 //上视拍照 virtual LONG XYZToLookUpGrabPos(); virtual LONG LookUpGrab(int index,X_Y_ANGLE_STRUCT& result);//移动到上视拍照位,拍照结果放到结构体中 //吸嘴固晶 virtual LONG PlaceDie(int index, X_Y_ANGLE_STRUCT lookUpOffsetPixel) = 0; virtual LONG MoveToBondPos(int index) = 0; virtual LONG BondGrab(int index, X_Y_ANGLE_STRUCT& result) = 0; //返回的拍照结果为物理单位 virtual LONG ToBondPos_AddOffset(int index, X_Y_ANGLE_STRUCT bondOffset, X_Y_ANGLE_STRUCT lookUpOffset, bool waitDone = true) = 0;//传入物理位置 virtual LONG BondDieDown(int index) = 0;//传入物理位置 virtual LONG BondDieUp(bool waitDone = true) = 0 ; virtual LONG FindForce(double force); //寻压,寻找力控轴反馈位置 virtual LONG UpdateForce(double dForce); //切换力的大小 virtual LONG GetCurForceCurrentPercent(short& current); virtual LONG GetCurForce(double& force); virtual LONG Sync(); //标定 virtual LONG HighCameraCTDCalib() { return OK; } virtual LONG LowCameraPosCalib(); virtual LONG LowCTDNozzlePosCalib(); virtual LONG CalLowCTDResult(); virtual LONG NozzleRotCenterCalib(); virtual LONG LowCameraXYCalib(); virtual LONG LookUpCameraXYCalib(); //力控标定 virtual LONG SpringForceCalib(); virtual LONG CurrentForceCalib(); //创建标定模板 virtual LONG CreateLowCameraCalibTemp(); virtual LONG CreateLookUpCameraCalibTemp(); virtual LONG CreateRCalibTemp(); virtual LONG CreateCTDLookUpCameraTemp(); virtual LONG CreateCTDHeadCameraTemp(); virtual LONG CreateCTDTipTemp(); //相机吸嘴位置切换 virtual LONG LowCameraToHead(); virtual LONG HeadToLowCamera(); virtual LONG HighCameraToHead(); virtual LONG HeadToHighCamera(); //创建流程模板 //virtual LONG CreatePickTemp(); //virtual LONG CreateLookUpTemp(); //virtual LONG CreateBondTemp(); protected: BOND_PARAM m_stBondParam; CBondMatrix* m_pBondMatrix = nullptr; CForceControl* m_pForceControl = nullptr; CTransferTable* m_pWaferTransferTable = nullptr; CTransferTable* m_pWaffleTransferTable = nullptr; CNozzleTable* m_pNozzleTable = nullptr; CCameraBase* m_pLowCamera = nullptr; CAxis* m_pXAxis = nullptr; CAxis* m_pYAxis = nullptr; CAxis* m_pZAxis = nullptr; CAxis* m_pRAxis = nullptr; //CAxis* m_pForcerZ = nullptr; CIO* m_pForcerDo = nullptr; CIO* m_pForcerAO = nullptr; CIO* m_pBDVacGpo = nullptr; CIO* m_pBDFlowGpo = nullptr; CIO* m_pBDVacGpi = nullptr; CIO* m_pBDFlowGpi = nullptr; CIO* m_pForceScale = nullptr; CCoord* m_pCoord_XY = nullptr; CCameraBase* m_pLookUpCamera = nullptr; CXYCalib* m_pLookUpXYCalib = nullptr;//上视相机XY标定 CXYCalib* m_pLowXYCalib = nullptr; CRCalib* m_pRCalib = nullptr; CCTDCalib* m_pLowCTDCalib = nullptr; CPRStrategy* m_pPR = nullptr; TipMatrix* m_pTipMatrix = nullptr; //位置参数 double m_dSafePosX = 0;//安全位置 double m_dSafePosY = 0; double m_dSafePosZ = 0; double m_dInitPosR = 0; double m_dPickGrabPosX = 0; //取晶位置 double m_dPickGrabPosY = 0; double m_dPickGrabPosZ = 0; //拾取拍照位 double m_dLookUpGrabPosX = 0; double m_dLookUpGrabPosY = 0; double m_dLookUpPosZ = 0; double m_dPreChangeNozzleDisY = 0;//预更换吸嘴偏差位置 double m_dNozzlePosZ = 0; //吸嘴架位置Z //统计参数 int m_nTipUsedNum = 0; int m_nTipUsedMaxNum = 0; int m_nCurNozzleIndex = 0; //当前吸嘴在吸嘴架上的编号 //int nCurrBondHeadIdByTable; //当前使用的吸嘴在吸嘴台上编号 //XY_DOUBLE_STRUCT stCalibTableBondPosition; //校准台固晶位置 //double m_dPressDistance = 0; //压合距离,修改为反馈位置 double m_dPickVel = 0; //慢速 double m_dSearchForce = 0; double m_dHoldForce = 0; //保持力 double m_dPickSearchPosZ = 0;//拾取高度测试搜索位置 double m_dBondSearchPosZ = 0;//固晶高度测试搜索位置 //double m_dNozzlePosY = 0;//吸嘴架位置Y double m_dNozzleTableOriginPosX = 0; double m_dNozzleTableOriginPosY = 0; int m_nPickHTestDieIndex = 0; int m_nBondHTestDieIndex = 0; bool m_bIsLocationAll = false; //用于固晶时补偿可选全部拍照补偿或者每个PCB只拍一次 double m_dGivenForceZPos = 0; //拾取放置芯片时力控轴的反馈位置 };