CProduct.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. #pragma once
  2. #include "CppSQLite3.h"
  3. #include "dt.h"
  4. #include <string>
  5. #include <windows.h>
  6. #include <mutex>
  7. #include <vector>
  8. #include <map>
  9. #include "CDataBaseOperate.h"
  10. #ifdef PRODUCT_DLL
  11. #define DLL_PRODUCT_API __declspec(dllexport)
  12. #else
  13. #define DLL_PRODUCT_API
  14. #endif
  15. #define PRODUCT_DATABASE_NAME "\\Product.db"
  16. #define PROGRAM_BOND_MATRIX_TABLE_NAME "Program_BondMatrix"
  17. #define PROGRAM_PONIT_MATRIX_TABLE_NAME "Program_PointMatrix"
  18. #define PROGRAM_DIE_MATRIX_TABLE_NAME "Program_DieMatrix"
  19. #define PROGRAM_WAFER_MATRIX_TABLE_NAME "Program_WaferMatrix"
  20. #define PROGRAM_WAFFLE_MATRIX_TABLE_NAME "Program_WaffleMatrix"
  21. #define PROGRAM_PARAM_TABLE_NAME "Program_Param"
  22. #define PROGRAM_BOND_INFO_TABLE_NAME "Program_BondInfo"
  23. #define PROGRAM_HEAD_TABLE_TABLE_NAME "Program_HeadTableMatrix"
  24. #define ONE_DIM_MATRIX_TABLE_NAME "OneDimMatrix"
  25. #define STEP_LIST_DETAIL_TABLE_NAME "StepListDetail"
  26. #define STEP_PUBLIC_DATA_TABLE_NAME "StepPublicData"
  27. #define ALN_STRATEGY_TABLE_NAME "PR_Strategy"
  28. #define PR_TEMPLATE_TABLE_NAME "PR_Template"
  29. namespace ns_db
  30. {
  31. using namespace std;
  32. //一维矩阵ID
  33. enum OneDimMatrixID
  34. {
  35. NozzleMatrix = 0,
  36. };
  37. //模板类型枚举
  38. enum MCM_TEMPLATE_TYPE {
  39. COMMON_MIN = 0, COMMON_MAX = 50000,
  40. BONDINSP_MIN = 50001, BONDINSP_MAX = 60000,
  41. EXPOXY_MIN = 60001, EXPOXY_MAX = 70000,
  42. ALN_MIN = 70001, ALN_MAX = 80000
  43. };
  44. enum PICKBOND_PARAM_TYPE {
  45. WAFFLE_PICK = 1, //华夫盒取晶
  46. WAFFLE_BOND, //华夫盒固晶
  47. WAFFER_PICK, //晶片台取晶
  48. WAFFER_BOND, //晶片台固晶
  49. BONDHEAD_PICK, //贴片头取晶
  50. BONDHEAD_BOND //贴片头固晶
  51. };
  52. struct OneDimMatrixInfo
  53. {
  54. int nMatrixId = 0; //矩阵ID
  55. std::string sMatrixName = ""; //名字
  56. int nMatrixRow = 0; //矩阵行数
  57. int nMatrixCol = 0; //矩阵列数
  58. XY_DOUBLE_STRUCT LeftTopPoint{ 0,0 }; //矩阵左上角点位置(相对位置)
  59. XY_DOUBLE_STRUCT RightTopPoint{ 0,0 }; //矩阵右上角点位置(相对位置)
  60. XY_DOUBLE_STRUCT RightBottomPoint{ 0,0 }; //矩阵右下角点位置(相对位置)
  61. vector<XY_LONG_STRUCT> vetNoUsedPt; //不使用的点
  62. };
  63. //取(固)晶参数
  64. typedef struct _PICKBOND_PARAM_STRUCT : TABLE_INFO_BASE
  65. {
  66. UINT iId; //参数ID
  67. PICKBOND_PARAM_TYPE eParamType; //参数类型
  68. bool bCheckBlock; //阻塞检测
  69. bool bCheckLose; //漏晶检测
  70. bool bFindForce; //是否寻压
  71. double dPreLev; //预备高度
  72. double dForce; //取(固)压力
  73. double dPickOrBondLev; //取(固)高度(寻压则无高度)
  74. UINT iGrabDelay; //拍图延时
  75. UINT iPickOrBondDelay; //取(固)延时
  76. UINT iBlockOrLoseDelay; //阻塞(漏晶)检测延时
  77. UINT iVacuumDelay; //真空延时
  78. UINT iBlowDelay; //吹气延时(0为不吹气)
  79. }PICKBOND_PARAM_STRUCT;
  80. //校准台校准类型枚举 NO_CALIB:不校准 UPLOOK_CALIB:下视校准 TABLE_CALIB:校准台校准
  81. enum CALIB_DIE_TYPE {
  82. NO_CALIB = 0x0, //不校准
  83. UPLOOK_CALIB = 0x1, //LookUp校准
  84. TABLE_CALIB = 0x2, //中转台校准
  85. UPLOOK_TABLE_CALIB = UPLOOK_CALIB | TABLE_CALIB //中转台和LookUp均校准
  86. };
  87. enum DIE_SOURCE { BY_NUL = 0 /*未指定*/, BY_WAFFLE = 1 /*华夫盒*/, BY_WAFER = 2/*晶片台*/ };
  88. //固晶信息
  89. typedef struct BOND_INFO_STRUCT : TABLE_INFO_BASE
  90. {
  91. UINT iInfoId; //固晶信息Id
  92. //UINT iModuleId; //模组Id
  93. DIE_SOURCE eDieSource; //晶片来源
  94. UINT iDieMatrixId; //使用的晶片台号或华夫盒矩阵号
  95. UINT iPickParamId; //取晶参数Id
  96. UINT iPickPRStrategyId; //取晶PR策略Id
  97. UINT iCalibBondParamId; //校准台固晶参数Id
  98. UINT iPickHeadId; //取晶吸嘴Id号
  99. UINT iBondHeadId; //固晶吸嘴Id号
  100. UINT iCalibPickParamId; //校准台取晶参数Id
  101. UINT iBondPRStrategyId; //固晶PR策略Id
  102. UINT iBondParamId; //固晶参数Id
  103. CALIB_DIE_TYPE eCalibType; //校准方式
  104. UINT iCalibPRStrategyId; //校准台PR策略Id
  105. UINT iLookUpPRStrategyId; //下视PR策略Id
  106. UINT iBondFrontPRStrategyId; //固前检测模板ID号 0为不检测
  107. UINT iBondBackPRStrategyId; //固后检测模板ID号 0为不检测
  108. X_Y_ANGLE_STRUCT stOffset; //固晶点补偿(从编程的固晶点位置偏移)
  109. }BOND_INFO_STRUCT;
  110. typedef struct _PROGRAM_DIE_MATRIX_STRUCT : TABLE_INFO_BASE
  111. {
  112. UINT iModuleId; //模组Id
  113. string strModuleName; //模组名称
  114. UINT MatrixId; //矩阵ID
  115. INT MatrixRow; //矩阵行数
  116. INT MatrixCol; //矩阵列数
  117. XY_DOUBLE_STRUCT LeftTopPoint; //矩阵左上角点位置(相对位置)
  118. XY_DOUBLE_STRUCT RightTopPoint; //矩阵右上角点位置(相对位置)
  119. XY_DOUBLE_STRUCT RightBottomPoint; //矩阵右下角点位置(相对位置)
  120. vector<XY_LONG_STRUCT> VecNoBondPt; //矩阵上不固晶的Pt列表 (1,2)表示第一行第二列不固晶
  121. }PROGRAM_DIE_MATRIX_STRUCT; //晶片矩阵包括华夫盒和晶圆台
  122. typedef struct _PROGRAM_WAFER_MATRIX_STRUCT : TABLE_INFO_BASE
  123. {
  124. UINT MatrixId; //矩阵ID
  125. UINT iDieMatrixId; //包含的Pt矩阵Id
  126. INT MatrixRow; //矩阵行数
  127. INT MatrixCol; //矩阵列数
  128. XY_DOUBLE_STRUCT LeftTopPoint; //矩阵左上角点位置(相对位置)
  129. XY_DOUBLE_STRUCT RightTopPoint; //矩阵右上角点位置(相对位置)
  130. XY_DOUBLE_STRUCT RightBottomPoint; //矩阵右下角点位置(相对位置)
  131. vector<XY_LONG_STRUCT> VecNoBondPt; //矩阵上不固晶的Pt列表 (1,2)表示第一行第二列不固晶
  132. }PROGRAM_WAFER_MATRIX_STRUCT; //晶圆台矩阵
  133. typedef struct _PROGRAM_WAFFLE_MATRIX_STRUCT : TABLE_INFO_BASE
  134. {
  135. UINT MatrixId; //矩阵ID
  136. INT PackRow; //华夫盒行数
  137. INT PackCol; //华夫盒列数
  138. XY_DOUBLE_STRUCT LeftTopPoint; //矩阵左上角点位置(绝对位置)
  139. XY_DOUBLE_STRUCT RightTopPoint; //矩阵右上角点位置(绝对位置)
  140. XY_DOUBLE_STRUCT RightBottomPoint; //矩阵右下角点位置(绝对位置)
  141. vector<INT> VecDieMatrixId; //包含的Pt矩阵Id
  142. vector<XY_LONG_STRUCT> VecNoBondDie; //矩阵上不固晶的Pcb列表 (1,2)表示第一行第二列不固晶
  143. }PROGRAM_WAFFLE_MATRIX_STRUCT; //华夫盒矩阵
  144. typedef struct _PROGRAM_POINT_MATRIX_STRUCT : TABLE_INFO_BASE
  145. {
  146. UINT MatrixId; //矩阵ID
  147. UINT iModuleId; //模组Id
  148. string strModuleName; //模组名称
  149. INT MatrixRow; //矩阵行数
  150. INT MatrixCol; //矩阵列数
  151. XY_DOUBLE_STRUCT LeftTopPoint; //矩阵左上角点位置
  152. XY_DOUBLE_STRUCT RightTopPoint; //矩阵右上角点位置
  153. XY_DOUBLE_STRUCT RightBottomPoint; //矩阵右下角点位置
  154. vector<XY_LONG_STRUCT> VecNoBondPt; //矩阵上不固晶的Pt列表 (1,2)表示第一行第二列不固晶
  155. }PROGRAM_POINT_MATRIX_STRUCT; //程序PT参数
  156. typedef struct _PROGRAM_BOND_MATRIX_STRUCT : TABLE_INFO_BASE
  157. {
  158. UINT BondMatrixId; //矩阵ID
  159. UINT iModuleId; //模组Id
  160. string strModuleName; //模组名称
  161. INT BondMatrixRow; //Pcb行数
  162. INT BondMatrixCol; //Pcb列数
  163. XY_DOUBLE_STRUCT LeftTopPoint; //矩阵左上角点位置
  164. XY_DOUBLE_STRUCT RightTopPoint; //矩阵右上角点位置
  165. XY_DOUBLE_STRUCT RightBottomPoint; //矩阵右下角点位置
  166. vector<INT> VecPointMatrixId; //包含的Pt矩阵Id
  167. vector<XY_LONG_STRUCT> VecNoBondPt; //矩阵上不固晶的列表 (1,2)表示第一行第二列不固晶
  168. INT BondInfoId; //固晶参数Id
  169. }PROGRAM_BOND_MATRIX_STRUCT; //固晶
  170. typedef struct _PROGRAM_HEAD_TABLE_MATRIX_STRUCT : TABLE_INFO_BASE
  171. {
  172. UINT MatrixId; //矩阵ID
  173. INT MatrixRow; //矩阵行数
  174. INT MatrixCol; //矩阵列数
  175. XY_DOUBLE_STRUCT LeftTopPoint; //矩阵左上角点位置
  176. XY_DOUBLE_STRUCT RightTopPoint; //矩阵右上角点位置
  177. XY_DOUBLE_STRUCT RightBottomPoint; //矩阵右下角点位置
  178. vector<XY_LONG_STRUCT> VecNoBondPt; //矩阵上不固晶的Pt列表 (1,2)表示第一行第二列不固晶
  179. }PROGRAM_HEAD_TABLE_MATRIX_STRUCT; //程序PT参数
  180. typedef struct _STEP_DETAIL : TABLE_INFO_BASE
  181. {
  182. UINT iIndex; //在组中的执行顺序
  183. UINT iFunctionId; //功能Id
  184. UINT iGroupId; //组Id
  185. UINT iStepId; //执行的StepId
  186. string strParam; //执行Step时的参数(经过序列化后的参数)
  187. } STEP_DETAIL;
  188. typedef struct _STEP_PUBLIC_DATA : TABLE_INFO_BASE
  189. {
  190. UINT Id; //参数Id
  191. string Key; //参数Key
  192. string Value; //值
  193. } STEP_PUBLIC_DATA;
  194. //enum TEMPLATE_TYPE {
  195. // ALN_MIN = 0, ALN_MAX = 50000, //对点策略
  196. // BONDINSP_MIN = 50001, BONDINSP_MAX = 60000, //固后检测模板
  197. // EXPOXY_MIN = 60001, EXPOXY_MAX = 70000, //胶量检测模板
  198. //};
  199. //模板图像类型枚举
  200. //enum TEMP_TYPE { FIND_PM = 0, FIND_GM = 1, FIND_LINE = 2, FIND_CIRCLE = 3, FIND_EPOXYINSP = 4 };
  201. //对点输出枚举
  202. enum SEARCH_OUT {
  203. OUT_NULL = 0X0, //定位
  204. OUT_X = 0X1,
  205. OUT_Y = 0X2,
  206. OUT_Ax = 0X4/*相对于X轴角度*/,
  207. OUT_Ay = 0x8/*相对于Y轴角度*/,
  208. OUT_All = OUT_X | OUT_Y | OUT_Ax
  209. };
  210. typedef struct _PR_TEMPLATE : TABLE_INFO_BASE
  211. {
  212. UINT iTemplateId; //模板Id
  213. UINT iModuleType; //模组类型
  214. UINT iPrMethod; //Pr模板方法
  215. UINT iCameraId; //相机ID
  216. SEARCH_OUT eResultSelect; //选取结果
  217. X_Y_Z_R_STRUCT stGrabPos; //拍照位置
  218. UINT iRedLight; //灯光参数1
  219. UINT iGreenLight; //灯光参数2
  220. UINT iBlueLight; //灯光参数3
  221. UINT iPointLight; //灯光参数4
  222. double dExposureTime; //相机曝光时间
  223. double dGain; //相机对比度
  224. string Date; //模板创建时间
  225. } PR_TEMPLATE;
  226. typedef struct _PR_STRATEGY : TABLE_INFO_BASE
  227. {
  228. UINT iStrategyId; //PR策略ID
  229. vector<UINT> vecTemplateId; //模板ID
  230. X_Y_ANGLE_STRUCT stRef; //基准位置
  231. string Date; //模板创建时间
  232. }PR_STRATEGY;
  233. typedef struct _TEMPERATURE_LIST_STRUCT
  234. {
  235. double dTemperature; //共晶温度
  236. double dForce; //共晶压力(为0时抬起吸嘴)
  237. LONG lDelay; //共晶延时
  238. double dLimitUp; //允许温度误差上限
  239. double dLimitDown; //允许温度误差下限
  240. double dMoveRangeX; //共晶台在共晶时移动范围X
  241. double dMoveRangeY; //共晶台在共晶时移动范围Y
  242. BOOL bVacuumOff; //关真空
  243. }TEMPERATURE_LIST_STRUCT;
  244. class DLL_PRODUCT_API CProduct : public CDataBaseOperate
  245. {
  246. public:
  247. CProduct(string strDbPath);
  248. private:
  249. LONG SaveDB() override;
  250. LONG LoadDB() override;
  251. #pragma region Program_DieMatrix 用于wafer
  252. private:
  253. std::vector<PROGRAM_DIE_MATRIX_STRUCT> m_VecDieMatrix;
  254. //加载用户编程数据表
  255. LONG LoadDieMatrix();
  256. public:
  257. LONG GetDieMatrix(UINT nModuleId, std::vector<PROGRAM_DIE_MATRIX_STRUCT>& vecDieMatrix);
  258. LONG GetDieMatrix(UINT iMatrixId, PROGRAM_DIE_MATRIX_STRUCT& stDieMatrix);
  259. LONG SetDieMatrix(std::vector<PROGRAM_DIE_MATRIX_STRUCT> stDieMatrix, bool bAppend = false);
  260. #pragma endregion
  261. #pragma region Program_WaferMatrix 表
  262. private:
  263. std::vector<PROGRAM_WAFER_MATRIX_STRUCT> m_VecWaferMatrix;
  264. //加载用户编程数据表
  265. LONG LoadWaferMatrix();
  266. LONG SaveWaferMatrix();
  267. public:
  268. std::vector<PROGRAM_WAFER_MATRIX_STRUCT> GetWaferMatrix() { return m_VecWaferMatrix; };
  269. LONG SetWaferMatrix(UINT id, PROGRAM_WAFER_MATRIX_STRUCT matrix);
  270. LONG AddWaferMatrix(PROGRAM_WAFER_MATRIX_STRUCT newMatrix, int& newId);
  271. LONG DeleteWaferMatrix(int matrixID);
  272. #pragma endregion
  273. #pragma region Program_WaffleMatrix 表
  274. private:
  275. std::vector<PROGRAM_WAFFLE_MATRIX_STRUCT> m_VecWaffleMatrix;
  276. //加载用户编程数据表
  277. LONG LoadWaffleMatrix();
  278. public:
  279. std::vector<PROGRAM_WAFFLE_MATRIX_STRUCT> GetWaffleMatrix() { return m_VecWaffleMatrix; };
  280. #pragma endregion
  281. #pragma region Program_BondMatrix 表
  282. private:
  283. std::vector<PROGRAM_BOND_MATRIX_STRUCT> m_VecBondMatrix;
  284. //加载用户编程数据表
  285. LONG LoadBondMatrix();
  286. LONG SaveBondMatrix();
  287. public:
  288. std::vector<PROGRAM_BOND_MATRIX_STRUCT> GetBondMatrix() { return m_VecBondMatrix; };
  289. void SetBondMatrix(int matrixID, PROGRAM_BOND_MATRIX_STRUCT matrix);
  290. LONG AddBondMatrix(PROGRAM_BOND_MATRIX_STRUCT matrix, int& newId);
  291. void DeleteBondMatrix(int matrixID);
  292. #pragma endregion
  293. #pragma region Program_PointMatrix 表
  294. private:
  295. std::vector<PROGRAM_POINT_MATRIX_STRUCT> m_VecPointMatrix;
  296. //加载用户编程数据表
  297. LONG LoadPointMatrix();
  298. LONG SavePointMatrix();
  299. public:
  300. LONG GetPointMatrix(UINT iMatrixId, PROGRAM_POINT_MATRIX_STRUCT& stPointMatrix);
  301. LONG AddPointMatrix(int bondMatrixID, PROGRAM_POINT_MATRIX_STRUCT subMatrix,int& newId);
  302. LONG SetPointMatrix(int matrixID, PROGRAM_POINT_MATRIX_STRUCT dieMatrix);
  303. LONG DeletePointMatrix(int bondMatrixId, int subMatrixID);
  304. #pragma endregion
  305. #pragma region Program_BondInfo 表
  306. private:
  307. std::vector<BOND_INFO_STRUCT> m_VecBondInfoData;
  308. //加载用户编程数据表
  309. LONG LoadBondInfoData();
  310. LONG SaveBondInfoData();
  311. public:
  312. LONG GetBondInfoData(UINT iInfoId, BOND_INFO_STRUCT& stBondInfoData);
  313. LONG SetBondInfoData(int infoId, BOND_INFO_STRUCT stBondInfoData);
  314. LONG AddBondInfoData(BOND_INFO_STRUCT stBondInfoData,int& newInfoId);//需要指定矩阵ID
  315. LONG DeleteBondInfoData(int infoId);
  316. #pragma endregion
  317. #pragma region Program_Param 表
  318. private:
  319. std::vector<PICKBOND_PARAM_STRUCT> m_VecBondParam;
  320. //加载用户编程数据表
  321. LONG LoadBondParam();
  322. LONG SaveBondParam();
  323. public:
  324. LONG GetBondParam(UINT iParamId, PICKBOND_PARAM_STRUCT& stBondParam);
  325. LONG SetBondParam(int paramId, PICKBOND_PARAM_STRUCT stBondParam);
  326. LONG AddBondParam(PICKBOND_PARAM_STRUCT stBondParam,int& newId);//需要指定bondInfo 的id,将数据进行
  327. LONG DeleteBondParam(int paramId);
  328. #pragma endregion
  329. #pragma region Program_HeadTableMatrix 表
  330. private:
  331. PROGRAM_HEAD_TABLE_MATRIX_STRUCT m_VecHeadTableMatrix;
  332. //加载用户编程数据表
  333. LONG LoadHeadTable();
  334. public:
  335. PROGRAM_HEAD_TABLE_MATRIX_STRUCT GetHeadTableMatrix() { return m_VecHeadTableMatrix; };
  336. #pragma endregion
  337. #pragma region
  338. private:
  339. std::vector<OneDimMatrixInfo> m_vetOneDimMatrix;
  340. LONG LoadOneMatrixInfo();
  341. public:
  342. LONG GetOneDimMatrixInfo(int matrixID, OneDimMatrixInfo& matrix);
  343. #pragma endregion
  344. #pragma region StepListDetail 表
  345. private:
  346. std::vector<STEP_DETAIL> m_vecStepDetail;
  347. //获取Step动作及参数表
  348. LONG LoadStepListDetail();
  349. public:
  350. std::vector<STEP_DETAIL> GetStepListDetail(UINT iFunctionId);
  351. std::vector<STEP_DETAIL> GetStepListDetail() { return m_vecStepDetail; };
  352. #pragma endregion
  353. #pragma region StepPublicData 表
  354. private:
  355. vector<STEP_PUBLIC_DATA> m_mapStepPublicData;
  356. LONG LoadStepPublicData();
  357. LONG SaveStepPublicData();
  358. public:
  359. vector<STEP_PUBLIC_DATA> GetStepPublicData() { return m_mapStepPublicData; };
  360. LONG SetStepPublicData(vector<STEP_PUBLIC_DATA> vecStepPublicData, bool bAppend = false);
  361. #pragma endregion
  362. #pragma region PR_Strategy 表
  363. private:
  364. std::vector<PR_STRATEGY> m_vecPrStrategy;
  365. LONG LoadPrStrategy();
  366. LONG SavePrStrategy();
  367. public:
  368. std::vector<PR_STRATEGY> GetPrStrategy() { return m_vecPrStrategy; };
  369. LONG AddPrStrategy(vector<UINT> vecTemplateId);
  370. #pragma endregion
  371. #pragma region PR_Template 表
  372. private:
  373. std::vector<PR_TEMPLATE> m_vecPrTemplate;
  374. LONG LoadPrTemplate();
  375. LONG SavePrTemplate();
  376. public:
  377. std::vector<PR_TEMPLATE> GetPrTemplate() { return m_vecPrTemplate; };
  378. LONG AddPrTemplate(PR_TEMPLATE stTemplate);
  379. #pragma endregion
  380. };
  381. }