CMachineCalibration.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #pragma once
  2. #include "CppSQLite3.h"
  3. #include "dt.h"
  4. #include "CMathCalc.h"
  5. #include <string>
  6. #include <windows.h>
  7. #include <mutex>
  8. #include "CDataBaseOperate.h"
  9. namespace ns_db
  10. {
  11. using namespace std;
  12. #ifdef MACHINE_CALIBRATION_DLL
  13. #define DLL_MACHINE_CALIBRATION_API __declspec(dllexport)
  14. #else
  15. #define DLL_MACHINE_CALIBRATION_API
  16. #endif
  17. #define MACHINE_CALIBRATION_DATABASE_NAME ROOT_PATH##"\\db\\MachineCalibration.db"
  18. #define CTD_CALIB_TABLE_NAME "Calib_CameraTipDis"
  19. #define XY_CALIB_TABLE_NAME "Calib_XY"
  20. #define R_CALIB_TABLE_NAME "Calib_R"
  21. #define STEP_R_CALIB_RESULT_TABLE_NAME "Calib_R_Result"
  22. #define FORCE_CONTROL_TABLE_NAME "Force_Control"
  23. #define HORIZONTAL_MEASURE_TABLE_NAME "Horizontal_Measure"
  24. #define VERTICAL_MEASURE_TABLE_NAME "Vertical_Measure"
  25. #define TIP_CALIB_RESULT "Tip_R_CTD_CalibResult"
  26. #pragma region 标定参数
  27. struct CALIB_XY {
  28. int m_nId = 0;
  29. string m_sName = "";
  30. double m_dCenterPosX = 0; //九点中间点的X坐标
  31. double m_dCenterPosY = 0; //九点中间点的Y坐标
  32. double m_dGrabPosZ = 0; //标定时Z轴位置
  33. double m_dCalibStepX = 0; //相机标定步进X
  34. double m_dCalibStepY = 0; //相机标定步进Y
  35. int m_nTempId = 0; //策略id
  36. string m_sResultMatrix = ""; //标定结果矩阵
  37. //结果矩阵,暂时屏蔽
  38. //double m_dA = 1.0; // 缩放因子x
  39. //double m_dB = 0.0; // 旋转因子
  40. //double m_dC = 0.0; // 旋转因子
  41. //double m_dD = 1.0; // 缩放因子y
  42. //double m_dTx = 5.0; // 平移x
  43. //double m_dTy = 10.0; // 平移y
  44. };
  45. typedef struct _R_Calib_Result
  46. {
  47. int m_nId;
  48. string m_sName;
  49. int nIndex;
  50. DOUBLE dAngle; //旋转角度
  51. DOUBLE dOffset_X; //旋转后X偏差
  52. DOUBLE dOffset_Y; //旋转后Y偏差
  53. }Step_RCalib_Result;
  54. struct CALIB_R {
  55. int m_nId;
  56. string m_sName;
  57. double m_dCalibPosX = 0;
  58. double m_dCalibPosY = 0;
  59. double m_dAngleStep = 1; //标定时旋转角度,角度单位
  60. double m_dAngleLower = -90; //标定时角度下限
  61. double m_dAngleUpper = 90; //标定时角度上限
  62. XY_DOUBLE_STRUCT m_stRotateCenter = { 0,0 }; //旋转中心
  63. double m_dRad = 0; //旋转半径
  64. double m_dStartAngle = 0;
  65. double m_dRotationAngle = 20; //旋转角度
  66. int m_nRotationNum = 3; //旋转次数
  67. double m_dGrabPosZ = 0; //拍照位
  68. int m_nTempId = 0;
  69. };
  70. struct CALIB_LOOKUP {
  71. int m_nId = 0;
  72. string m_sName = "";
  73. bool m_bHaveHeadPos = false;//已完成旋转中心标定
  74. double m_dCameraPosX = 0;; //下视标定时X位置
  75. double m_dCameraPosY = 0; //下视标定时Y位置
  76. double m_dCameraPosZ = 0; //下视标定时Z位置
  77. double m_dHeadPosX = 0; //头位置X
  78. double m_dHeadPosY = 0; //头位置Y
  79. double m_dHeadPosZ = 0; //头位置Z
  80. double m_dCameraToHeadPosX = 0; //相机移动到头的相对位置
  81. double m_dCameraToHeadPosY = 0; //
  82. double m_dHeadActualPosX = -1;
  83. double m_dHeadActualPosY = -1;
  84. double m_dCameraActualPosX = -1; //标定相机和上视相机对准时,绑头获取的位置
  85. double m_dCameraActualPosY = -1; //标定相机和上视相机对准时,绑头获取的位置
  86. int m_nBondTempID = 0; //绑头相机拍Mark点模板ID
  87. int m_nLookUpTempID = 0; //上视相机拍Mark点模板ID
  88. int m_nTipTempID = 0; //上视相机拍吸嘴模板
  89. };
  90. struct FORCE_CONTROL {
  91. //得到关系式: 力 = 电流 * A + B
  92. int nHeadId = 0;
  93. std::string sHeadName = "";
  94. double dA1 = 1; //电流系数
  95. double dA2 = 1; //弹簧系数
  96. double dB = 0;
  97. double dGivenForceZPos = 0;//压合距离,用于判断接触
  98. vector<POINTF> vetPts; //POINTF的x为力或电流
  99. double dGivenCurrent = 0;//压合距离,用于判断接触
  100. vector<POINTF> vetForcePos; //POINTF的x为力或电流
  101. double dFTestSearchPosZ = 0;//力控测试搜索位置
  102. double dTestPosX = 0;
  103. double dTestPosY = 0;
  104. double dFSearchDis = 0;//力控搜索距离
  105. double dSearchVel = 0;//力控搜索速度
  106. int nPressDelay = 0;//力控测试时延时
  107. double dInitPosZ = 0;//Z轴测完上升的初始位
  108. };
  109. struct HORIZ_MEASURE{
  110. int nTableID = 0;
  111. double dTestPosX1 = 0;
  112. double dTestPosY1 = 0;
  113. double dTestPosX2 = 0;
  114. double dTestPosY2 = 0;
  115. double dTestPosX3 = 0;
  116. double dTestPosY3 = 0;
  117. double dSearchPosZ = 0;
  118. double dAngleX = 0;//校准后的结果, X方向
  119. double dAngleY = 0;//校准后的结果, Y方向
  120. };
  121. struct VERTICAL_MEASURE
  122. {
  123. int nHeadId = 0;
  124. double dMeasurePosX = 0;
  125. double dMeasurePosY = 0;
  126. double dAngle1 = 0;//0
  127. double dAngle2 = 0;//90
  128. double dAngle3 = 0;//180
  129. double dFixtureAngle = 0;//治具角度
  130. double dFixtureLength = 0;//治具长度
  131. double dSearchPosZ = 0;
  132. double dZAxisAngleX = 0;//校准结果,Z轴X方向偏移角度
  133. double dZAxisAngleY = 0;//校准结果,Z轴Y方向偏移角度
  134. };
  135. struct NozzleCalibParam
  136. {
  137. int nNozzleId = 0;
  138. XY_DOUBLE_STRUCT stRotCenter = { 0,0 }; //吸嘴对应的旋转中心X
  139. XY_DOUBLE_STRUCT stBHHighCameraToNozzle = { 0,0 };
  140. XY_DOUBLE_STRUCT stBHLowCameraToNozzle = { 0,0 };
  141. XY_DOUBLE_STRUCT stWHCameraToNozzle = { 0,0 };
  142. bool bIsRotationCalib = false; //已校准标记
  143. bool bIsHighCTDCalib = false; //已校准标记
  144. bool bIsLowCTDCalib = false; //已校准标记
  145. int nRTempID = 0; //旋转中心标定吸嘴模板ID
  146. //int nCTDBHLookUpTempID = 0; //CTD标定上视模板ID
  147. //int nCTDHighBondTempID = 0; //CTD标定固晶相机模板ID
  148. //int nCTDLowBondTempID = 0; //CTD标定固晶相机模板ID
  149. int nCTDWHNozzleTempID = 0; //华夫盒取晶头上视相机
  150. };
  151. #pragma endregion
  152. class DLL_MACHINE_CALIBRATION_API CMachineCalibration : public CDataBaseOperate
  153. {
  154. public:
  155. CMachineCalibration();
  156. private:
  157. LONG SaveDB() override;
  158. LONG LoadDB() override;
  159. private:
  160. vector<CALIB_XY> m_vetCalibXY;
  161. vector<CALIB_R> m_vetCalibR;
  162. vector<CALIB_LOOKUP> m_vetCalibLookUp;
  163. vector<Step_RCalib_Result> m_vetStepRCalibResult;
  164. vector<FORCE_CONTROL> m_vetForceControl;
  165. vector<HORIZ_MEASURE> m_vetHorizMeasure;
  166. vector<VERTICAL_MEASURE> m_vetVerticalMeasure;
  167. vector<NozzleCalibParam> m_vetNozzleCalibParam;
  168. public:
  169. LONG GetCalibXYParam(int calibID, string name, CALIB_XY& calibXY);
  170. LONG GetCalibRParam(int calibID, string name, CALIB_R& calibR);
  171. LONG GetCalibLookUpParam(int calibID, string name, CALIB_LOOKUP& calibLookUp);
  172. LONG GetStepCalibResult(int calibID, string name, vector<Step_RCalib_Result>& m_stVecCalib_R);
  173. LONG GetNozzleCalibParam(int index, NozzleCalibParam& param);
  174. LONG SetNozzleCalibParam(int index, NozzleCalibParam param);
  175. LONG GetForceParam(int HeadID, FORCE_CONTROL& vetForceControl);
  176. LONG GetHorizMeasureParam(int HeadID, HORIZ_MEASURE& vetHorizMeasure);
  177. LONG GetVerticalMeasureParam(int HeadID, VERTICAL_MEASURE& vetVerticalMeasure);
  178. LONG SetCalibXYParam(int calibID, string name, CALIB_XY calibXY);
  179. LONG SetCalibRParam(int calibID, string name, CALIB_R calibXY);
  180. LONG SetCalibLookUpParam(int calibID, string name, CALIB_LOOKUP calibXY);
  181. LONG SetCalibRResult(int calibID, string name, vector<Step_RCalib_Result>& VecCalib_R);
  182. LONG SaveCalibXYParam();
  183. LONG SaveCalibRParam();
  184. LONG SaveCalibLookUpParam();
  185. LONG SaveCalibRResult();
  186. LONG SaveCalibForceParam();
  187. LONG SaveCalibTipParam();
  188. //bool SetCalibXYParam(int calibID, string name, CALIB_XY& calibXY);
  189. //bool SetCalibRParam(int calibID, string name, CALIB_R& calibR);
  190. //bool SetCalibLookUpParam(int calibID, string name, CALIB_LOOKUP& calibLookUp);
  191. //bool SetStepCalibResult(int calibID, string name, vector<Step_RCalib_Result>& m_stVecCalib_R);
  192. //读标定数据
  193. LONG LoadCalibXYParam(vector<CALIB_XY>& calibXY);
  194. LONG LoadCalibRParam(vector<CALIB_R>& calibR);
  195. LONG LoadCalibLookUpParam(vector<CALIB_LOOKUP>& calibLookUp);
  196. LONG LoadStepCalibResult(vector<Step_RCalib_Result>& m_stVecCalib_R);
  197. LONG LoadCalibForceParam(vector<FORCE_CONTROL>& vetForce);
  198. LONG LoadHorizMeasureParam(vector<HORIZ_MEASURE>& vetHorizMeasure);
  199. LONG LoadVerticalMeasureParam(vector<VERTICAL_MEASURE>& vetVerticalMeasure);
  200. LONG LoadNozzleCalibParam(vector<NozzleCalibParam>& nozzleParam);
  201. private:
  202. LONG SaveCalibXYParam(int calibID, string name, CALIB_XY calibXY);
  203. LONG SaveCalibRParam(int calibID, string name, CALIB_R calibXY);
  204. LONG SaveCalibLookUpParam(int calibID, string name, CALIB_LOOKUP calibXY);
  205. LONG SaveCalibRResult(int calibID, string name, vector<Step_RCalib_Result>& VecCalib_R);
  206. LONG SaveCalibForceParam(int headID, string name, FORCE_CONTROL VecCalib_R);
  207. LONG SaveCalibTipParam(int TipID, NozzleCalibParam NozzleCalibParam);
  208. };
  209. }