CBondHead.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. #pragma once
  2. #include "CModule.h"
  3. #include "CNozzleTable.h"
  4. #include "CBondTable.h"
  5. #include "CBondMatrix.h"
  6. #include "CForceControl.h"
  7. #include "CRCalib.h"
  8. #include "CLookUpCalib.h"
  9. #include "CTransferTable.h"
  10. #include "CXYCalib.h"
  11. #include "TipMatrix.h"
  12. #include "CUGWatch.h"
  13. class __declspec(dllexport) CBondHead :
  14. public CModule
  15. {
  16. public:
  17. CBondHead(MODULE_LIST eModuleType);
  18. ~CBondHead();
  19. virtual LONG AllocateAxis(vector<CAxis*> vecAxis);
  20. virtual LONG AllocateIo(vector<CIO*> vecIo);
  21. //void SetXAxis(CAxis* axis) { m_pXAxis = axis; }
  22. CAxis* GetXAxis() { return m_pXAxis; }
  23. //void SetYAxis(CAxis* axis) { m_pYAxis = axis; }
  24. CAxis* GetYAxis() { return m_pYAxis; }
  25. //void SetZAxis(CAxis* axis) { m_pZAxis = axis; }
  26. CAxis* GetZAxis() { return m_pZAxis; }
  27. //void SetForceZAxis(CAxis* axis) { m_pForcerZ = axis; }
  28. //CAxis* GetForceZAxis() { return m_pForcerZ; }
  29. //void SetRAxis(CAxis* axis) { m_pRAxis = axis; }
  30. CAxis* GetRAxis() { return m_pRAxis; }
  31. void SetCoord(CCoord* pCrd) { m_pCoord_XY = pCrd; }
  32. CCoord* GetCoord() { return m_pCoord_XY; }
  33. //void SetVacDO(CIO* out) { m_pBDVacGpo = out; }
  34. //void SetFlowDo(CIO* out) { m_pBDFlowGpo = out; }
  35. //void SetVacDi(CIO* input) { m_pBDVacGpi = input; }
  36. //void SetFlowDi(CIO* input) { m_pBDFlowGpi = input; }
  37. void SetNozzleTable(CNozzleTable* nozzleTable) { m_pNozzleTable = nozzleTable; }
  38. void SetLookUpCamera(CCameraBase* camera) { m_pLookUpCamera = camera; }
  39. void SetWaferTransferTable(CTransferTable* tt) { m_pWaferTransferTable = tt; }
  40. void SetWaffleTransferTable(CTransferTable* tt) { m_pWaffleTransferTable = tt; }
  41. void SetBondTable(CBondTable* pBondTable) { m_pBondTable = pBondTable; }
  42. virtual void SetHighCamera(CCameraBase* camera) {}
  43. virtual void SetLowCamera(CCameraBase* camera) { m_pLowCamera = camera; }
  44. virtual CXYCalib* GetLowCameraCalib() { return m_pLowXYCalib; }
  45. virtual CXYCalib* GetHighCameraCalib() { return nullptr; }
  46. virtual CCTDCalib* GetLowCTDCalib() { return m_pLowCTDCalib; }
  47. //void SetForceControl(CForceControl* force) { m_pForceControl = force; }
  48. CForceControl* GetForceControl() { return m_pForceControl; }
  49. CXYCalib* GetLookUpCameraCalib() { return m_pLookUpXYCalib; }
  50. CRCalib* GetHeadRCalib() { return m_pRCalib; }
  51. bool GetIsLocationAll() { return m_bIsLocationAll; }
  52. CPRStrategy* GetPRStrategy() { return m_pPR; }
  53. virtual double GetBondTempelature() { return 0; };
  54. virtual LONG RunUltra(ST_PROTOCOL_WRITE_PARA sProtocolWritePara) { return OK; };
  55. virtual LONG ToHome();
  56. virtual LONG ToSafePosition();
  57. virtual LONG GetParam();
  58. LONG XYMove(double x, double y, bool bSync = true);
  59. LONG XYMoveTo(double x,double y, bool bSync = true);
  60. LONG XYZMoveTo(double x, double y,double z);
  61. LONG XYZRMoveTo(double x, double y, double z,double r);
  62. virtual LONG MoveToPickGrabPos(bool waitDone = true);
  63. #pragma region 自动取晶流程
  64. LONG CalcPickHigh(int index, double &dPreHigh,double &dPickHigh);
  65. LONG CalcBondHigh(int index, double& dPreHigh, double& dBondHigh);
  66. LONG MoveTransferTableToCalibPos(int index);
  67. LONG MoveTransferTableToGetDiePos(int index);
  68. LONG SetTransferTableVacuum(int index,bool bOn);
  69. virtual LONG ToTransporterTablePickGrab(int index, X_Y_ANGLE_STRUCT& result);//中转台拍照,返回拍照结果,拍照结果仅用于拾取偏移,不存储
  70. virtual LONG PickDieDown(int index, X_Y_ANGLE_STRUCT result);//传入拍照结果进行拾取补偿偏移
  71. LONG PickDieUp(int index,bool waitDone = true);//上行到安全位置
  72. LONG PcbAln(int index); //Pcb对点
  73. LONG BondPointGrab(int index, X_Y_ANGLE_STRUCT& stBondOffset);//固晶点拍照
  74. LONG IdentifyBondPointPos(int index);
  75. LONG HeadMoveToBondPos(int index, bool bGrab = true, X_Y_ANGLE_STRUCT lookUpOffsetPixel = { 0,0,0 });//移动到拾取位,带补偿
  76. LONG RunTemperatureList(UINT iBondIndex);
  77. LONG RunTemperatureList(UINT iBondIndex, std::vector <TEMPERATURE_LIST_STRUCT> vecTemperatureList);
  78. LONG BondDieUp(int index, bool waitDone = true);
  79. virtual LONG PickDie(int index);//拍照,取晶,并上行到上视拍照位,主要用于自动流程
  80. virtual LONG BondDie(int index, X_Y_ANGLE_STRUCT lookUpOffsetPixel = { 0,0,0 }) = 0;
  81. LONG LookUpGrab(int index, X_Y_ANGLE_STRUCT& result);//移动到上视拍照位,拍照结果放到结构体中
  82. LONG LookUpGrabAndAdjust(int index, X_Y_ANGLE_STRUCT& result);
  83. LONG MoveToLookUpAndGrab(int index, X_Y_ANGLE_STRUCT& result);
  84. #pragma endregion
  85. virtual LONG MoveToBondGrabPos(int index, XY_DOUBLE_STRUCT grabPosOffset = { 0,0 });
  86. virtual LONG XYZToLookUpGrabPos(); //注意Z轴 去安全位置
  87. virtual LONG BondGrab(int index, X_Y_ANGLE_STRUCT& result); //返回的拍照结果为物理单位
  88. virtual LONG PcbAln(); //Pcb对点
  89. virtual LONG ToBondPos_AddOffset(int index, X_Y_ANGLE_STRUCT bondOffset, X_Y_ANGLE_STRUCT lookUpOffset, bool waitDone = true);//传入物理位置
  90. virtual LONG BondDieDown(int index) = 0;//传入物理位置
  91. #pragma endregion
  92. #pragma region 手动流程
  93. int GetCurBondDieIndex() { return m_nCurBondDieIndex; }
  94. virtual LONG CameraMoveToBondPos(int index, bool bGrab = true);
  95. virtual LONG ToBondGrabPos_AddOffset(int index, bool waitDone = true);
  96. virtual LONG ToPickGrabPos_AddOffset(int index, bool waitDone = true);
  97. LONG CalcHeadAngleOffset(XY_DOUBLE_STRUCT stCameraPos,double stSearchAngle, X_Y_ANGLE_STRUCT& result);
  98. LONG MoveToPreBondGrabPoint();
  99. LONG MoveToNextBondGrabPoint();
  100. virtual LONG VacuumOn(long lDelay); //真空开,真空延时,ms
  101. virtual LONG VacuumOff(long lDelay); //真空关,吹汽延时,ms
  102. virtual LONG StrongOn(); //强吹开
  103. virtual LONG StrongOff(); //强吹关
  104. virtual LONG UltraOn() { return OK; }; //超声开
  105. virtual LONG UltraOff() { return OK; }; //超声关
  106. virtual LONG ChangeNozzle(int nozzleIndex);
  107. virtual LONG UnLoadNozzle();
  108. virtual LONG LoadNozzle(int nozzleIndex);
  109. virtual LONG CheckDieExistStatus(bool& bExist);
  110. virtual LONG MoveLowCameraToNozzle();
  111. virtual LONG MoveNozzleToLowCamera();
  112. //吸嘴取晶
  113. virtual LONG PickUpToGrabPos();
  114. //吸嘴固晶
  115. //virtual LONG CameraMoveToBondPos(int index, bool bGrab = true, X_Y_ANGLE_STRUCT lookUpOffsetPixel = { 0,0,0 });//移动到拾取位,带补偿,可用于观察补偿值是否正确
  116. //virtual LONG ToBondGrabPos_AddOffset(int index, X_Y_ANGLE_STRUCT bondOffset, X_Y_ANGLE_STRUCT lookUpOffset, bool waitDone = true);//传入物理位置
  117. virtual LONG BondCheck(int index) { return OK; };
  118. virtual LONG FindForce(double force); //寻压,寻找力控轴反馈位置
  119. virtual LONG UpdateForce(double dForce); //切换力的大小
  120. virtual LONG GetCurForceCurrentPercent(short& current);
  121. virtual LONG GetCurForce(double& force);
  122. virtual LONG Sync();
  123. //virtual LONG PickHightTest();
  124. //virtual LONG BondHighTest();
  125. virtual LONG WaitTemprature(double dMinTempelature, double dMaxTempelature, long lTimeOut) { return OK; };
  126. virtual LONG SetTemprature(double dTemprature, long lTimeOut = 0) { return OK; };
  127. //标定
  128. //virtual LONG HighCameraCTDCalib() { return OK; }
  129. virtual LONG LowCameraPosCalib();
  130. virtual LONG LowCTDNozzlePosCalib();
  131. virtual LONG CalLowCTDResult();
  132. virtual LONG HighCTD_ToCameraCalibPos() { return OK; };
  133. virtual LONG HighCTD_ToHeadCalibPos() { return OK; };
  134. virtual LONG HighCTD_CameraPosCalib() { return OK; };
  135. virtual LONG HighCTD_NozzlePosCalib() { return OK; };
  136. virtual LONG HighCTD_CalResult() { return OK; };
  137. virtual LONG NozzleRotCenterCalib();
  138. virtual LONG RAxisZeroOffsetCalib();
  139. virtual LONG LowCameraXYCalib();
  140. virtual LONG HighCameraXYCalib() { return OK; };
  141. virtual LONG LookUpCameraXYCalib();
  142. //创建模板
  143. virtual LONG CreateLowCameraTemp(UINT &iTemplateId);
  144. virtual LONG CreateHighCameraTemp(UINT& iTemplateId) { return OK; };
  145. virtual LONG CreateLookUpCameraTemp(UINT& iTemplateId);
  146. //创建流程模板
  147. virtual LONG CreateBondMatrixTemplate(BOND_MATRIX_TEMPLATE_TYPE eType, UINT iBondInfoId);
  148. virtual LONG CreatePrStrategy(vector<MULTI_TEMP_STRUCT> vecTemplateId);
  149. //力控标定
  150. virtual LONG SpringForceCalib();
  151. virtual LONG CurrentForceCalib();
  152. //创建标定模板
  153. virtual LONG CreateLowCameraCalibTemp();
  154. virtual LONG CreateHighCameraCalibTemp();
  155. virtual LONG CreateLookUpCameraCalibTemp();
  156. virtual LONG CreateRCalibTemp();
  157. virtual LONG CreateCTDLookUpCameraTemp();
  158. virtual LONG CreateCTDLowCameraTemp();
  159. virtual LONG CreateCTDTipTemp();
  160. virtual LONG CreateHighCTDLookUpTemp() { return OK; };
  161. virtual LONG CreateHighCTDHeadCameraTemp() { return OK; };
  162. virtual LONG CreateHighCTDNozzleTemp() { return OK; };
  163. //相机吸嘴位置切换
  164. virtual LONG LowCameraToHead();
  165. virtual LONG HeadToLowCamera();
  166. virtual LONG HighCameraToHead();
  167. virtual LONG HeadToHighCamera();
  168. //力控测试
  169. virtual LONG ForceTest();
  170. //高度测试
  171. virtual void SetPickHTestIndex(int index);
  172. virtual void SetBondHTestIndex(int index);
  173. virtual LONG PickHightTest();//调用之前先SetIndex
  174. virtual LONG AllBondHighTest() = 0;
  175. virtual LONG BondHighTest();
  176. virtual LONG NozzleHighTest(int nozzleIndex);//index 比较难传?
  177. //创建流程模板
  178. //virtual LONG CreatePickTemp();
  179. //virtual LONG CreateLookUpTemp();
  180. //virtual LONG CreateBondTemp();
  181. //界面测试
  182. void ViewTest()
  183. {
  184. PopWarn(AlarmID::AxisHomeError,"view message box test");
  185. //m_dSafePosZ++;
  186. //m_pModuleConfigDB->SetConfigParam(ULTRAHEAD_TABLE_NAME ,*GetConfigVector());
  187. }
  188. protected:
  189. BOND_PARAM m_stBondParam;
  190. CBondMatrix* m_pBondMatrix = nullptr;
  191. CForceControl* m_pForceControl = nullptr;
  192. CTransferTable* m_pWaferTransferTable = nullptr;
  193. CTransferTable* m_pWaffleTransferTable = nullptr;
  194. CNozzleTable* m_pNozzleTable = nullptr;
  195. CBondTable* m_pBondTable = nullptr;
  196. CCameraBase* m_pLowCamera = nullptr;
  197. double m_dLowCameraLookupAngleOffset; //与上视相机角度差
  198. CAxis* m_pXAxis = nullptr;
  199. CAxis* m_pYAxis = nullptr;
  200. CAxis* m_pZAxis = nullptr;
  201. CAxis* m_pRAxis = nullptr;
  202. //CAxis* m_pForcerZ = nullptr;
  203. CIO* m_pForcerDo = nullptr;
  204. CIO* m_pForcerAO = nullptr;
  205. CIO* m_pBDVacGpo = nullptr;
  206. CIO* m_pBDFlowGpo = nullptr;
  207. CIO* m_pBDVacGpi = nullptr;
  208. CIO* m_pBDFlowGpi = nullptr;
  209. CIO* m_pForceScale = nullptr;
  210. CCoord* m_pCoord_XY = nullptr;
  211. CCameraBase* m_pLookUpCamera = nullptr;
  212. CXYCalib* m_pLookUpXYCalib = nullptr;//上视相机XY标定
  213. CXYCalib* m_pLowXYCalib = nullptr;
  214. CRCalib* m_pRCalib = nullptr;
  215. CCTDCalib* m_pLowCTDCalib = nullptr;
  216. CPRStrategy* m_pPR = nullptr;
  217. TipMatrix* m_pTipMatrix = nullptr;
  218. //位置参数
  219. double m_dSafePosX = 0;//安全位置
  220. double m_dSafePosY = 0;
  221. double m_dSafePosZ = 0;
  222. double m_dInitPosR = 0;
  223. double m_dPickGrabPosX = 0; //取晶位置
  224. double m_dPickGrabPosY = 0;
  225. double m_dPickGrabPosZ = 0; //拾取拍照位
  226. double m_dLookUpGrabPosX = 0;
  227. double m_dLookUpGrabPosY = 0;
  228. double m_dLookUpGrabPosZ = 0;
  229. //double m_dBond
  230. double m_dBondGrabPosZ = 0; //bondGrabPosZ
  231. double m_dPreChangeNozzleDisY = 0;//预更换吸嘴偏差位置
  232. double m_dNozzlePosZ = 0; //吸嘴架位置Z
  233. //统计参数
  234. int m_nTipUsedNum = 0;
  235. int m_nTipUsedMaxNum = 0;
  236. int m_nCurNozzleIndex = 0; //当前吸嘴在吸嘴架上的编号
  237. //int nCurrBondHeadIdByTable; //当前使用的吸嘴在吸嘴台上编号
  238. //XY_DOUBLE_STRUCT stCalibTableBondPosition; //校准台固晶位置
  239. //double m_dPressDistance = 0; //压合距离,修改为反馈位置
  240. double m_dPickVel = 0; //慢速
  241. double m_dSearchForce = 0;
  242. double m_dHoldForce = 0; //保持力
  243. double m_dPickSearchPosZ = 0;//拾取高度测试搜索位置
  244. double m_dBondSearchPosZ = 0;//固晶高度测试搜索位置
  245. //double m_dNozzlePosY = 0;//吸嘴架位置Y
  246. double m_dNozzleTableOriginPosX = 0;
  247. double m_dNozzleTableOriginPosY = 0;
  248. int m_nPickHTestDieIndex = 1;
  249. int m_nBondHTestDieIndex = 1;
  250. bool m_bIsLocationAll = false; //用于固晶时补偿可选全部拍照补偿或者每个PCB只拍一次
  251. double m_dGivenForceZPos = 0; //拾取放置芯片时力控轴的反馈位置
  252. bool m_bAngleOffsetEnabled = false;
  253. double m_dNozzleHTestX = 0;
  254. double m_dNozzleHTestY = 0;
  255. double m_dNozzleHTestSearchPosZ = 0;
  256. //测高
  257. int m_nPickHNozzleIndex = 0;
  258. int m_nBondHNozzleIndex = 0;
  259. double m_dPickContactPosZ = 0; //拾取测高高度
  260. double m_dBondContactPosZ = 0; //固晶测高高度
  261. int m_nCurBondDieIndex = 0;
  262. };