CWaferHead.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #pragma once
  2. #include "CModule.h"
  3. #include "CRCalib.h"
  4. #include "CNozzleTable.h"
  5. #include "CEjector.h"
  6. #include "CTransferTable.h"
  7. #include "CForceControl.h"
  8. #include "CMatrixCommon.h"
  9. /*
  10. 1、Wafer取晶头没有相机,有顶针
  11. 2、不带视觉,只到特定位置取晶和放晶
  12. */
  13. class __declspec(dllexport) CWaferHead :
  14. public CModule
  15. {
  16. public:
  17. CWaferHead(MODULE_LIST eModuleType);
  18. ~CWaferHead();
  19. virtual void SetDataChangFunction() override;
  20. virtual LONG SetParam() override;//保存配置参数
  21. virtual LONG GetParam() override;//加载配置参数
  22. virtual LONG ToHome() override;
  23. virtual LONG Sync() override;
  24. virtual LONG ToSafePosition() override;
  25. virtual LONG InitResource() override; //分配轴、IO、标定等资源
  26. virtual void DataChangNotice(string strDbName, string strTableName) override; //回调触发处理函数
  27. virtual LONG AllocateAxis(vector<CAxis*> vecAxis) override;
  28. virtual LONG AllocateIo(vector<CIO*> vecIo) override;
  29. ULONG GetCurrentBondIndex() {return m_iCurrentBondIndex;}
  30. void SetCurrentBondIndex(ULONG index) { m_iCurrentBondIndex = index; }
  31. void SetZEPZCoord(CCoord* crd) { m_pZEPZCoord = crd; }
  32. void SetXYCoord(CCoord* crd) { m_pXYCrd = crd; }
  33. void SetNozzleTable(CNozzleTable* nozzleTable) { m_pNozzleTable = nozzleTable; }
  34. void SetEjector(CEjector* ej) { m_pEjector = ej; }
  35. void SetTransferTable(CTransferTable* tt) { m_pTransferTable = tt; }
  36. void SetForceControl(CForceControl* force) { m_pForceControl = force; }
  37. //手动:
  38. //更换吸嘴
  39. LONG ChangeNozzle(int nozzleIndex);
  40. LONG UnLoadNozzle();
  41. LONG LoadNozzle(int nozzleIndex);
  42. //自动:
  43. LONG CheckDieExistStatus(bool& bExist);
  44. LONG VacuumOn(LONG lDelay); //真空开
  45. LONG VacuumOff(LONG lDelay); //真空关
  46. LONG UpdateForce(double dForce); //切换力的大小
  47. LONG FindForce(double dForce);
  48. //LONG UpdatePickParam(int dieIndex);
  49. //LONG WaitZTrigYToPick(int index);
  50. //手动流程调用
  51. LONG PickDie(int dieIndex, bool bSync);
  52. LONG XYZToPrePickPos(int dieIndex, bool bSync);
  53. LONG ZSlowToPickPos(int dieIndex, bool bSync);
  54. LONG PlaceDie(int dieIndex, bool bSync);
  55. LONG XYZToPrePlacePos(int dieIndex, bool bSync); //自动流程调用
  56. LONG ZSlowToPlacePos(int dieIndex, bool bSync);
  57. //自动流程调用
  58. LONG PickDie(bool bSync) { return PickDie(m_iCurrentBondIndex, bSync); };
  59. LONG XYZToPrePickPos(bool bSync) { return XYZToPrePickPos(m_iCurrentBondIndex, bSync); };
  60. LONG ZSlowToPickPos(bool bSync) { return ZSlowToPickPos(m_iCurrentBondIndex, bSync); };
  61. LONG PlaceDie(bool bSync) { return PlaceDie(m_iCurrentBondIndex, bSync); };
  62. LONG XYZToPrePlacePos(bool bSync) { return XYZToPrePlacePos(m_iCurrentBondIndex, bSync); };
  63. LONG ZSlowToPlacePos(bool bSync) { return ZSlowToPlacePos(m_iCurrentBondIndex, bSync); };
  64. //LONG ZEPZSyncUp(bool waitDone);//Z和顶针Z同步插补上升,不等待完成待完善
  65. LONG ZUpToInitPos(bool waitDone);
  66. /*LONG WaitYDone();
  67. LONG WaitZDone();*/
  68. //LONG WaitZTrigYToPlace(int index);
  69. //LONG SlowDownPlaceDie(bool waitDone); //自动流程调用
  70. private:
  71. //当前固晶点Id
  72. UINT m_iCurrentBondIndex = NONE_POINT_INDEX;
  73. //晶片当前位置状态
  74. PICK_STATUS m_ePickDieStatus = PICK_STATUS::NO_PICK;
  75. //CAxis* m_pXAxis = nullptr;
  76. CAxis* m_pYAxis = nullptr;
  77. CAxis* m_pZAxis = nullptr;
  78. CIO* m_pForcerDO = nullptr;
  79. CIO* m_pForcerAO = nullptr;
  80. //CAxis* m_pForceAxis = nullptr;
  81. CCoord* m_pZEPZCoord = nullptr;
  82. CCoord* m_pXYCrd = nullptr;
  83. CIO* m_pVacGpo = nullptr;
  84. CIO* m_pFlowGpo = nullptr;
  85. CIO* m_pVacGpi = nullptr;
  86. CIO* m_pFlowGpi = nullptr;
  87. CPRStrategy* m_pPR = nullptr;
  88. CNozzleTable* m_pNozzleTable = nullptr;
  89. CEjector* m_pEjector = nullptr;
  90. CTransferTable* m_pTransferTable = nullptr;
  91. CForceControl* m_pForceControl = nullptr;
  92. CBondMatrix* m_pBondMatrix = nullptr;
  93. //PICK_PARAM m_stPickParam;
  94. //位置参数
  95. double m_dSafePosX = 0;//安全位置
  96. double m_dSafePosY = 0;
  97. double m_dSafePosZ = 0;
  98. double m_dInitPosR = 0;
  99. double m_dPickPosX = 0; //取晶位置
  100. double m_dPickPosY = 0;
  101. double m_dPlacePosX = 0;//放下芯片的位置
  102. double m_dPlacePosY = 0;//
  103. double m_dEjHightPos = 0;
  104. double m_dEjContactPos = 0;//顶针接触位
  105. double m_dYTrigZToBond = 0;
  106. double m_dYTrigZToPick = 0;
  107. double m_dZTrigYToPick = 0;
  108. double m_dZTrigYToBond = 0;
  109. double m_dPreChangeNozzleDisY = 0;//预更换吸嘴偏差位置
  110. double m_dNozzlePosX = 0;
  111. double m_dNozzlePosY = 0;
  112. double m_dNozzlePosZ = 0; //吸嘴架位置Z
  113. //统计参数
  114. int m_nTipUsedNum = 0;
  115. int m_nTipUsedMaxNum = 0;
  116. int m_nCurNozzleIndex; //当前吸嘴在吸嘴架上的编号
  117. //速度、延时、力控
  118. double m_dPickSlowVel = 0;//软着陆拾取速度
  119. double m_dPlaceSlowVel = 0;//软着陆放晶速度
  120. double m_dSearchForce = 0;
  121. double m_dHoldForce = 0;//保持力
  122. int m_nEjUpDelay = 0;//顶针高位延时 ms
  123. double m_dGivenForceZPos = 0;
  124. double m_dNozzleTableOriginPosX = 0;
  125. double m_dNozzleTableOriginPosY = 0;
  126. };