CBondHead.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #pragma once
  2. #include "CModule.h"
  3. #include "CNozzleTable.h"
  4. #include "CBondMatrix.h"
  5. #include "CForceControl.h"
  6. #include "CRCalib.h"
  7. #include "CLookUpCalib.h"
  8. #include "CTransferTable.h"
  9. #include "CXYCalib.h"
  10. #include "TipMatrix.h"
  11. class __declspec(dllexport) CBondHead :
  12. public CModule
  13. {
  14. public:
  15. CBondHead(MODULE_LIST eModuleType);
  16. ~CBondHead();
  17. virtual LONG AllocateAxis(vector<CAxis*> vecAxis);
  18. virtual LONG AllocateIo(vector<CIO*> vecIo);
  19. void SetXAxis(CAxis* axis) { m_pXAxis = axis; }
  20. CAxis* GetXAxis() { return m_pXAxis; }
  21. void SetYAxis(CAxis* axis) { m_pYAxis = axis; }
  22. CAxis* GetYAxis() { return m_pYAxis; }
  23. void SetZAxis(CAxis* axis) { m_pZAxis = axis; }
  24. CAxis* GetZAxis() { return m_pZAxis; }
  25. //void SetForceZAxis(CAxis* axis) { m_pForcerZ = axis; }
  26. //CAxis* GetForceZAxis() { return m_pForcerZ; }
  27. void SetRAxis(CAxis* axis) { m_pRAxis = axis; }
  28. CAxis* GetRAxis() { return m_pRAxis; }
  29. void SetCoord(CCoord* pCrd) { m_pCoord_XY = pCrd; }
  30. CCoord* GetCoord() { return m_pCoord_XY; }
  31. void SetVacDO(CIO* out) { m_pBDVacGpo = out; }
  32. void SetFlowDo(CIO* out) { m_pBDFlowGpo = out; }
  33. void SetVacDi(CIO* input) { m_pBDVacGpi = input; }
  34. void SetFlowDi(CIO* input) { m_pBDFlowGpi = input; }
  35. void SetNozzleTable(CNozzleTable* nozzleTable) { m_pNozzleTable = nozzleTable; }
  36. void SetLookUpCamera(CCameraBase* camera) { m_pLookUpCamera = camera; }
  37. void SetWaferTransferTable(CTransferTable* tt) { m_pWaferTransferTable = tt; }
  38. void SetWaffleTransferTable(CTransferTable* tt) { m_pWaffleTransferTable = tt; }
  39. //void SetForceControl(CForceControl* force) { m_pForceControl = force; }
  40. CForceControl* GetForceControl() { return m_pForceControl; }
  41. CXYCalib* GetLookUpCameraCalib() { return m_pLookUpXYCalib; }
  42. CRCalib* GetHeadRCalib() { return m_pRCalib; }
  43. bool GetIsLocationAll() { return m_bIsLocationAll; }
  44. virtual void SetHighCamera(CCameraBase* camera) {}
  45. virtual void SetLowCamera(CCameraBase* camera) { m_pLowCamera = camera; }
  46. virtual CXYCalib* GetLowCameraCalib() { return m_pLowXYCalib; }
  47. virtual CXYCalib* GetHighCameraCalib() { return nullptr; }
  48. virtual CCTDCalib* GetLowCTDCalib() { return m_pLowCTDCalib; }
  49. virtual LONG ToHome();
  50. virtual LONG ToSafePosition();
  51. LONG Move(double x, double y, bool bSync = true);
  52. LONG MoveTo(double x,double y, bool bSync = true);
  53. LONG MoveTo(double x, double y,double z);
  54. LONG MoveTo(double x, double y, double z,double r);
  55. virtual void SetPickHTestIndex(int index) = 0;
  56. virtual void SetBondHTestIndex(int index) = 0;
  57. virtual LONG PickHighTest() = 0;//调用之前先SetIndex
  58. virtual LONG AllBondHighTest() = 0;
  59. virtual LONG BongHighTest() = 0;
  60. virtual LONG VacuumOn(long lDelay); //真空开,真空延时,ms
  61. virtual LONG VacuumOff(long lDelay); //真空关,吹汽延时,ms
  62. virtual LONG StrongOn(); //强吹开
  63. virtual LONG StrongOff(); //强吹关
  64. virtual LONG UltraOn(int iUltraValue) { return OK; }; //超声开
  65. virtual LONG UltraOff() { return OK; }; //超声关
  66. virtual LONG ChangeNozzle(int nozzleIndex);
  67. virtual LONG UnLoadNozzle();
  68. virtual LONG LoadNozzle(int nozzleIndex);
  69. virtual LONG CheckDieExistStatus(bool& bExist);
  70. virtual LONG MoveLowCameraToNozzle();
  71. virtual LONG MoveNozzleToLowCamera();
  72. //吸嘴取晶
  73. virtual LONG MoveToGrabPos(bool waitDone = true);
  74. virtual LONG PickGrab(int index, X_Y_ANGLE_STRUCT& result);//中转台拍照,返回拍照结果,拍照结果仅用于拾取偏移,不存储
  75. //virtual LONG MoveToPickPos();//移动到拾取位,未拍照
  76. virtual LONG PickDie(int index);//拍照,取晶,并上行到上视拍照位,主要用于自动流程
  77. virtual LONG PickDieDown(int index, X_Y_ANGLE_STRUCT result);//传入拍照结果进行拾取补偿偏移
  78. virtual LONG PickUpToGrabPos();
  79. virtual LONG PickDieUp(bool waitDone = true);//上行到安全位置
  80. //上视拍照
  81. virtual LONG XYZToLookUpGrabPos();
  82. virtual LONG LookUpGrab(int index,X_Y_ANGLE_STRUCT& result);//移动到上视拍照位,拍照结果放到结构体中
  83. //吸嘴固晶
  84. virtual LONG PlaceDie(int index, X_Y_ANGLE_STRUCT lookUpOffsetPixel) = 0;
  85. virtual LONG MoveToBondPos(int index) = 0;
  86. virtual LONG BondGrab(int index, X_Y_ANGLE_STRUCT& result) = 0; //返回的拍照结果为物理单位
  87. virtual LONG ToBondPos_AddOffset(int index, X_Y_ANGLE_STRUCT bondOffset, X_Y_ANGLE_STRUCT lookUpOffset, bool waitDone = true) = 0;//传入物理位置
  88. virtual LONG BondDieDown(int index) = 0;//传入物理位置
  89. virtual LONG BondDieUp(bool waitDone = true) = 0 ;
  90. virtual LONG FindForce(double force); //寻压,寻找力控轴反馈位置
  91. virtual LONG UpdateForce(double dForce); //切换力的大小
  92. virtual LONG GetCurForceCurrentPercent(short& current);
  93. virtual LONG GetCurForce(double& force);
  94. virtual LONG Sync();
  95. //标定
  96. virtual LONG HighCameraCTDCalib() { return OK; }
  97. virtual LONG LowCameraPosCalib();
  98. virtual LONG LowCTDNozzlePosCalib();
  99. virtual LONG CalLowCTDResult();
  100. virtual LONG NozzleRotCenterCalib();
  101. virtual LONG LowCameraXYCalib();
  102. virtual LONG LookUpCameraXYCalib();
  103. //力控标定
  104. virtual LONG SpringForceCalib();
  105. virtual LONG CurrentForceCalib();
  106. //创建标定模板
  107. virtual LONG CreateLowCameraCalibTemp();
  108. virtual LONG CreateLookUpCameraCalibTemp();
  109. virtual LONG CreateRCalibTemp();
  110. virtual LONG CreateCTDLookUpCameraTemp();
  111. virtual LONG CreateCTDHeadCameraTemp();
  112. virtual LONG CreateCTDTipTemp();
  113. //相机吸嘴位置切换
  114. virtual LONG LowCameraToHead();
  115. virtual LONG HeadToLowCamera();
  116. virtual LONG HighCameraToHead();
  117. virtual LONG HeadToHighCamera();
  118. //创建流程模板
  119. //virtual LONG CreatePickTemp();
  120. //virtual LONG CreateLookUpTemp();
  121. //virtual LONG CreateBondTemp();
  122. protected:
  123. BOND_PARAM m_stBondParam;
  124. CBondMatrix* m_pBondMatrix = nullptr;
  125. CForceControl* m_pForceControl = nullptr;
  126. CTransferTable* m_pWaferTransferTable = nullptr;
  127. CTransferTable* m_pWaffleTransferTable = nullptr;
  128. CNozzleTable* m_pNozzleTable = nullptr;
  129. CCameraBase* m_pLowCamera = nullptr;
  130. CAxis* m_pXAxis = nullptr;
  131. CAxis* m_pYAxis = nullptr;
  132. CAxis* m_pZAxis = nullptr;
  133. CAxis* m_pRAxis = nullptr;
  134. //CAxis* m_pForcerZ = nullptr;
  135. CIO* m_pForcerDo = nullptr;
  136. CIO* m_pForcerAO = nullptr;
  137. CIO* m_pBDVacGpo = nullptr;
  138. CIO* m_pBDFlowGpo = nullptr;
  139. CIO* m_pBDVacGpi = nullptr;
  140. CIO* m_pBDFlowGpi = nullptr;
  141. CIO* m_pForceScale = nullptr;
  142. CCoord* m_pCoord_XY = nullptr;
  143. CCameraBase* m_pLookUpCamera = nullptr;
  144. CXYCalib* m_pLookUpXYCalib = nullptr;//上视相机XY标定
  145. CXYCalib* m_pLowXYCalib = nullptr;
  146. CRCalib* m_pRCalib = nullptr;
  147. CCTDCalib* m_pLowCTDCalib = nullptr;
  148. CPRStrategy* m_pPR = nullptr;
  149. TipMatrix* m_pTipMatrix = nullptr;
  150. //位置参数
  151. double m_dSafePosX = 0;//安全位置
  152. double m_dSafePosY = 0;
  153. double m_dSafePosZ = 0;
  154. double m_dInitPosR = 0;
  155. double m_dPickGrabPosX = 0; //取晶位置
  156. double m_dPickGrabPosY = 0;
  157. double m_dPickGrabPosZ = 0; //拾取拍照位
  158. double m_dLookUpGrabPosX = 0;
  159. double m_dLookUpGrabPosY = 0;
  160. double m_dLookUpPosZ = 0;
  161. double m_dPreChangeNozzleDisY = 0;//预更换吸嘴偏差位置
  162. double m_dNozzlePosZ = 0; //吸嘴架位置Z
  163. //统计参数
  164. int m_nTipUsedNum = 0;
  165. int m_nTipUsedMaxNum = 0;
  166. int m_nCurNozzleIndex = 0; //当前吸嘴在吸嘴架上的编号
  167. //int nCurrBondHeadIdByTable; //当前使用的吸嘴在吸嘴台上编号
  168. //XY_DOUBLE_STRUCT stCalibTableBondPosition; //校准台固晶位置
  169. //double m_dPressDistance = 0; //压合距离,修改为反馈位置
  170. double m_dPickVel = 0; //慢速
  171. double m_dSearchForce = 0;
  172. double m_dHoldForce = 0; //保持力
  173. double m_dPickSearchPosZ = 0;//拾取高度测试搜索位置
  174. double m_dBondSearchPosZ = 0;//固晶高度测试搜索位置
  175. //double m_dNozzlePosY = 0;//吸嘴架位置Y
  176. double m_dNozzleTableOriginPosX = 0;
  177. double m_dNozzleTableOriginPosY = 0;
  178. int m_nPickHTestDieIndex = 0;
  179. int m_nBondHTestDieIndex = 0;
  180. bool m_bIsLocationAll = false; //用于固晶时补偿可选全部拍照补偿或者每个PCB只拍一次
  181. double m_dGivenForceZPos = 0; //拾取放置芯片时力控轴的反馈位置
  182. };