CModule.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. #pragma once
  2. /*
  3. 1、模组基类
  4. 方向:X轴向右为正,Y轴向里为正,Z轴向下为正
  5. */
  6. #include "CAxis.h"
  7. #include "CAxis.h"
  8. #include "CIO.h"
  9. #include <string>
  10. #include <vector>
  11. #include <map>
  12. #include "dt.h"
  13. #include "CBondMatrix.h"
  14. #include "CResources.h"
  15. #include "CCoord.h"
  16. #include "CError.h"
  17. #include "FHConvert.h"
  18. #include "CLog.h"
  19. #include "SystemResources.h"
  20. #include "CHardwareList.h"
  21. using namespace std;
  22. using namespace ns_db;
  23. #pragma region 轴定义
  24. //超声头
  25. #define CUltraHead_X "UltraHead_X"
  26. #define CUltraHead_Y "UltraHead_Y"
  27. #define CUltraHead_Z "UltraHead_Z"
  28. #define CUltraHead_R "UltraHead_R"
  29. #define CUltraHead_Force "UltraHead_Force"
  30. #define BDX "BDX"
  31. #define BDY "BDY"
  32. #define BDZ "BDZ"
  33. #define BDR "BDR"
  34. #define BDForceZ "BDForceZ"
  35. #define WaferHeadX "WaferHeadX"
  36. #define WaferHeadY "WaferHeadY"
  37. #define WaferHeadZ "WaferHeadZ"
  38. #define WaferHeadForceZ "WaferHeadForceZ"
  39. #define WaffleHeadX "WaffleHeadX"
  40. #define WaffleHeadY "WaffleHeadY"
  41. #define WaffleHeadZ "WaffleHeadZ"
  42. ///吸嘴架///吸嘴架
  43. #define NuzzleAxisY "NuzzleAxisY"
  44. //中转台//中转台
  45. #define WaferCalibTableX "WaferCalibTableX"
  46. #define WaffleCalibTableX "WaffleCalibTableX"
  47. //WaferTalbe//WaferTalbe
  48. #define WaferTable_X "WaferTable_X"
  49. #define WaferTable_Y "WaferTable_Y"
  50. #define WaferTable_Z "WaferTable_Z"
  51. #define WaferTable_R "WaferTable_R"
  52. //BondTable//BondTable
  53. #define BondTableZ "BondTableZ"
  54. //顶针//顶针
  55. #define EjectorX "EjectorX"
  56. #define EjectorY "EjectorY"
  57. #define EjectorZ "EjectorZ"
  58. #define EjectorPinZ "EjectorPinZ"
  59. #pragma endregion
  60. enum USE_TYPE {
  61. NOUSE = 0,
  62. DIAGNOSIS = 1,
  63. USE = 2
  64. };
  65. //typedef struct _AXIS_STRUCT
  66. //{
  67. // string AxisName; //轴名称
  68. // USE_TYPE Use; //0:禁用,1:启用
  69. // CAxis::AXIS_TYPE AxisType; //Io类型
  70. // UINT HomeTime; //回零等待时间(秒)
  71. // UINT FastTime; //快速等待时间(秒)
  72. // UINT MediumTime; //中速等待时间(秒)
  73. // UINT SlowTime; //慢速等待时间(秒)
  74. // _AXIS_STRUCT(string name, USE_TYPE use, CAxis::AXIS_TYPE type, UINT homeTime, UINT slowTime, UINT mediumTime, UINT fastTime)
  75. // {
  76. // AxisName = name;
  77. // Use = use;
  78. // AxisType = type;
  79. // HomeTime = homeTime;
  80. // FastTime = fastTime;
  81. // MediumTime = mediumTime;
  82. // SlowTime = slowTime;
  83. // }
  84. //}AXIS_STRUCT;
  85. //const static map<AXIS_LIST, AXIS_STRUCT> g_mapAxisList = {
  86. // {BDX,AXIS_STRUCT("BondHead_X",USE_TYPE::USE,CAxis::AXIS_TYPE::X,100000,80000,50000,30000)},
  87. // {BDY ,AXIS_STRUCT("BondHead_Y",USE_TYPE::USE,CAxis::AXIS_TYPE::Y,100000,80000,50000,30000)},
  88. // {BDZ,AXIS_STRUCT("BondHead_Z",USE_TYPE::USE,CAxis::AXIS_TYPE::Z,100000,80000,50000,30000)},
  89. // {BDR,AXIS_STRUCT("BondHead_R",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,100000,80000,50000,30000)},
  90. // {BDForceZ,AXIS_STRUCT("BondHead_ForceZ",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::FORCE,10000,8000,5000,3000)},
  91. // {WaferHeadX,AXIS_STRUCT("WaferHead_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)},
  92. // {WaferHeadY ,AXIS_STRUCT("WaferHead_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)},
  93. // {WaferHeadZ,AXIS_STRUCT("WaferHead_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)},
  94. // {WaferHeadForceZ,AXIS_STRUCT("WaferHead_ForceZ",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)},
  95. // {WaffleHeadX,AXIS_STRUCT("WaffleHead_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)},
  96. // {WaffleHeadY ,AXIS_STRUCT("WaffleHead_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)},
  97. // {WaffleHeadZ,AXIS_STRUCT("WaffleHead_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)},
  98. // //吸嘴架
  99. // {NuzzleAxisY,AXIS_STRUCT("NuzzleAxis_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)},
  100. // //中转台
  101. // {WaferCalibTableX,AXIS_STRUCT("WaferCalibTable_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)},
  102. // {WaffleCalibTableX,AXIS_STRUCT("WaffleCalibTable_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)},
  103. //
  104. // //WaferTalbe
  105. // {WaferTable_X,AXIS_STRUCT("WaferTable_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)},
  106. // {WaferTable_Y,AXIS_STRUCT("WaferTable_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)},
  107. // {WaferTable_Z,AXIS_STRUCT("WaferTable_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)},
  108. // {WaferTable_R,AXIS_STRUCT("WaferTable_R",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)},
  109. // //BondTable
  110. // {BondTableZ,AXIS_STRUCT("BondTable_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)},
  111. // //顶针
  112. // {EjectorX,AXIS_STRUCT("Ejector_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)},
  113. // {EjectorY,AXIS_STRUCT("Ejector_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)},
  114. // {EjectorZ,AXIS_STRUCT("Ejector_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)},
  115. // {EjectorPinZ,AXIS_STRUCT("EjectorPin_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)},
  116. //
  117. //};
  118. enum IO_LIST {
  119. BDVacDi,
  120. BDFlowDi,
  121. WaferHeadVacDi,
  122. WaferHeadFlowDi,
  123. WaferHeadFlowDo,
  124. WaffleHeadVacDi,
  125. WaffleHeadFlowDi,
  126. //BondTable
  127. PcbArriveDi,
  128. PcbLeaveDi,
  129. BondTableDo,
  130. //吸嘴架
  131. NozzleCylNDi,
  132. NozzleCylPDi,
  133. NozzleExistDi1,
  134. NozzleExistDi2,
  135. NozzleExistDi3,
  136. NozzleExistDi4,
  137. NozzleExistDi5,
  138. NozzleExistDi6,
  139. NozzleExistDi7,
  140. NozzleExistDi8,
  141. NozzleExistDi9,
  142. NozzleExistDi10,
  143. NozzleExistDi11,
  144. NozzleExistDi12,
  145. BDVacDo,
  146. BDFlowDo,
  147. WaferHeadVacDo,
  148. WaffleHeadVacDo,
  149. WaffleHeadFlowDo,
  150. //中转台
  151. WaferCalibVacDo,
  152. WaffleCalibVacDo,
  153. BDTableVacGpo,
  154. NozzleCylDo,
  155. WaferTable_Ring,
  156. EjectorVacDo,
  157. //超声
  158. UltraHeadDo,
  159. };
  160. //typedef struct _IO_STRUCT
  161. //{
  162. // string IoName; //Io名称
  163. // USE_TYPE Use; //0:禁用,1:启用
  164. // IO_TYPE IoType; //Io类型
  165. // DIGIT_IO_LEVEL FirstStatus; //数字Io的初始状态
  166. // _IO_STRUCT(string name, USE_TYPE use, IO_TYPE type, DIGIT_IO_LEVEL status)
  167. // {
  168. // IoName = name;
  169. // Use = use;
  170. // IoType = type;
  171. // FirstStatus = status;
  172. // }
  173. // _IO_STRUCT(string name, USE_TYPE use, IO_TYPE type)
  174. // {
  175. // IoName = name;
  176. // Use = use;
  177. // IoType = type;
  178. // FirstStatus = DIGIT_IO_LEVEL::NUL;
  179. // }
  180. //}IO_STRUCT;
  181. //
  182. //const static map<IO_LIST, IO_STRUCT> g_mapIoList = {
  183. // {BDVacDi,IO_STRUCT("BDVacDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  184. // {BDFlowDi,IO_STRUCT("BDFlowDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  185. // {BDVacDo,IO_STRUCT("BDVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  186. // {BDFlowDo,IO_STRUCT("BDFlowDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  187. // {UltraHeadDo,IO_STRUCT("UltraHeadDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  188. //
  189. // {WaferHeadVacDi,IO_STRUCT("WaferHeadVacDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  190. // {WaferHeadFlowDi,IO_STRUCT("WaferHeadFlowDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  191. // {WaferHeadFlowDo,IO_STRUCT("WaferHeadFlowDo",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  192. // {WaffleHeadVacDi,IO_STRUCT("WaffleHeadVacDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  193. // {WaffleHeadFlowDi,IO_STRUCT("WaffleHeadFlowDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  194. // //BondTable
  195. // {PcbArriveDi,IO_STRUCT("PcbArriveDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  196. // {PcbLeaveDi,IO_STRUCT("PcbLeaveDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  197. // {BondTableDo,IO_STRUCT("BondTableDo",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  198. // //吸嘴架
  199. // {NozzleCylNDi,IO_STRUCT("NozzleCylNDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  200. // {NozzleCylPDi,IO_STRUCT("NozzleCylPDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  201. //
  202. // {WaferHeadVacDo,IO_STRUCT("WaferHeadVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  203. // {WaffleHeadVacDo,IO_STRUCT("WaffleHeadVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  204. // {WaffleHeadFlowDo,IO_STRUCT("WaffleHeadFlowDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  205. // //中转台
  206. // {WaferCalibVacDo,IO_STRUCT("WaferCalibVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  207. // {WaffleCalibVacDo,IO_STRUCT("WaffleCalibVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  208. // {BDTableVacGpo,IO_STRUCT("BDTableVacGpo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  209. // {NozzleCylDo,IO_STRUCT("NozzleCylDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  210. //
  211. // {WaferTable_Ring,IO_STRUCT("WaferTable_Ring",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)},
  212. //
  213. // {EjectorVacDo,IO_STRUCT("EjectorVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)},
  214. //
  215. //
  216. //};
  217. class __declspec(dllexport) CModule
  218. {
  219. public:
  220. CModule(MODULE_LIST eModuleType);
  221. LONG Init();
  222. bool IsInitSuccess() {return m_bIsInitSuccess;}
  223. LONG GetModuleType() const { return m_nModuleType; }
  224. string GetModuleName() const { return m_strModuleName; }
  225. virtual LONG AllocateIo(vector<CIO*> vecIo) { return OK; };
  226. virtual LONG AllocateAxis(vector<CAxis*> vecAxis) { return OK; };
  227. virtual LONG GetParam() = 0; //获取配置参数
  228. virtual LONG SetParam() = 0; //设置配置参数
  229. virtual LONG ToHome() = 0; //模组回零
  230. virtual LONG Sync() = 0; //等待到位
  231. virtual LONG ToSafePosition() = 0; //模组去安全位置
  232. virtual LONG InitResource() = 0; //分配轴、IO、标定等资源
  233. virtual void SetDataChangFunction() = 0; //设置收到数据更改通知后处理函数,绑定回调函数
  234. virtual void DataChangNotice(string strDbName, string strTableName) = 0; //回调触发处理函数
  235. LONG SaveDataToDB();
  236. protected:
  237. vector<MODULE_CONFIG_STRUCT>* GetConfigVector() { return &m_vecConfig; }
  238. protected:
  239. CManageDB* m_pCManageDB = nullptr;
  240. CModuleConfig* m_pModuleConfigDB = nullptr;
  241. CHardware* m_pCHardware = nullptr;
  242. vector<MODULE_CONFIG_STRUCT> m_vecConfig;
  243. bool m_bIsInitSuccess = false;
  244. INT m_nModuleType = 0;
  245. string m_strModuleName = "";
  246. //模组是否启用
  247. bool m_bEnable = false;
  248. };