JonYang vor 3 Wochen
Ursprung
Commit
88dde1ce1a
49 geänderte Dateien mit 2929 neuen und 1335 gelöschten Zeilen
  1. BIN
      Output/bin/x64/Control.dll
  2. BIN
      Output/bin/x64/Control.pdb
  3. BIN
      Output/bin/x64/JSMotion.dll
  4. BIN
      Output/bin/x64/Module.dll
  5. BIN
      Output/bin/x64/Module.pdb
  6. BIN
      Output/bin/x64/configurations.db
  7. BIN
      Output/config/db/MachineCalibration.db
  8. BIN
      Output/config/db/ModuleConfig.db
  9. BIN
      Output/config/db/Product1/Product.db
  10. BIN
      Output/dll/x64/Control.dll
  11. BIN
      Output/dll/x64/JSMotion.dll
  12. BIN
      Output/dll/x64/Module.dll
  13. 3 0
      Output/inc/Control/CRunButton.h
  14. 7 0
      Output/inc/Module/CBondHead.h
  15. 18 4
      Output/inc/Module/CBondMatrix.h
  16. 25 7
      Output/inc/Module/CCalibrationConfig.h
  17. 16 14
      Output/inc/Module/CConfigBase.h
  18. 3 3
      Output/inc/Module/CConfigBaseManage.h
  19. 3 0
      Output/inc/Module/CEjector.h
  20. 6 6
      Output/inc/Module/CModuleConfig.h
  21. 4 3
      Output/inc/Module/CMultiTemplate.h
  22. 21 10
      Output/inc/Module/CPrStrategy.h
  23. 9 3
      Output/inc/Module/CProduct.h
  24. 1 1
      Output/inc/Module/CRCalib.h
  25. 1 1
      Output/inc/Module/CRS232.h
  26. 7 5
      Output/inc/Module/CSingleTemplate.h
  27. 2 0
      Output/inc/Module/TipMatrix.h
  28. 2 0
      Output/inc/Public/FHConvert.h
  29. BIN
      Output/lib/x64/Common.lib
  30. BIN
      Output/lib/x64/Control.lib
  31. BIN
      Output/lib/x64/Module.lib
  32. 0 2
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/MaterialBox.cpp
  33. 1 1
      View/die-bonder-ui/Login.h
  34. 94 41
      View/die-bonder-ui/OriginalWnd/DbTreeViewManager.cpp
  35. 5 0
      View/die-bonder-ui/OriginalWnd/DbTreeViewManager.h
  36. 2 2
      View/die-bonder-ui/OriginalWnd/MainAndSecondaryCamerasWnd.cpp
  37. 7 0
      View/die-bonder-ui/OriginalWnd/OriginalWnd.cpp
  38. 3 0
      View/die-bonder-ui/OriginalWnd/OriginalWnd.h
  39. 1 1
      View/die-bonder-ui/OriginalWnd/TreeViewManager/JCustomLabelControls.h
  40. 15 5
      View/die-bonder-ui/OriginalWnd/TreeViewManager/JIoMapPage.cpp
  41. 1 1
      View/die-bonder-ui/OriginalWnd/TreeViewManager/JIoMapPage.h
  42. 2 0
      View/die-bonder-ui/SBTdie-bonder-ui.vcxproj
  43. 9 3
      View/die-bonder-ui/SBTdie-bonder-ui.vcxproj.filters
  44. 992 92
      View/die-bonder-ui/Src/BondMatrixProgramPage.cpp
  45. 42 7
      View/die-bonder-ui/Src/BondMatrixProgramPage.h
  46. 1188 1088
      View/die-bonder-ui/Src/BondMatrixProgramPage.ui
  47. 27 35
      View/die-bonder-ui/Src/Sql/SqlOperation.cpp
  48. 335 0
      View/die-bonder-ui/Src/common/JUGWatch/CUGWatch.cpp
  49. 77 0
      View/die-bonder-ui/Src/common/JUGWatch/CUGWatch.h

BIN
Output/bin/x64/Control.dll


BIN
Output/bin/x64/Control.pdb


BIN
Output/bin/x64/JSMotion.dll


BIN
Output/bin/x64/Module.dll


BIN
Output/bin/x64/Module.pdb


BIN
Output/bin/x64/configurations.db


BIN
Output/config/db/MachineCalibration.db


BIN
Output/config/db/ModuleConfig.db


BIN
Output/config/db/Product1/Product.db


BIN
Output/dll/x64/Control.dll


BIN
Output/dll/x64/JSMotion.dll


BIN
Output/dll/x64/Module.dll


+ 3 - 0
Output/inc/Control/CRunButton.h

@@ -105,6 +105,8 @@ namespace ns_module
 			REGISTER_FUNCTION(BH_ToLookUpGrabPos),
 			REGISTER_FUNCTION(BH_ToBondGrabPos),
 			REGISTER_FUNCTION(BH_ViewTest),
+			REGISTER_FUNCTION(BH_PickHTest),
+			REGISTER_FUNCTION(BH_BondHTest),
 			REGISTER_FUNCTION(WaferTransfer_Home),
 			REGISTER_FUNCTION(WaferTransfer_ToGetDiePos),
 			REGISTER_FUNCTION(WaferTransfer_ToTransferPos),
@@ -205,6 +207,7 @@ namespace ns_module
 		long BH_PickHTest(ST_BUTTON_FUN stInfo);
 		long BH_BondHTest(ST_BUTTON_FUN stInfo);
 		long BH_ViewTest(ST_BUTTON_FUN stInfo);
+		long BH_BondOffsetCheck(ST_BUTTON_FUN stInfo);
 		long NozzleHTest(ST_BUTTON_FUN stInfo);
 		long WaferTransfer_Home(ST_BUTTON_FUN stInfo);
 		long WaferTransfer_ToGetDiePos(ST_BUTTON_FUN stInfo);

+ 7 - 0
Output/inc/Module/CBondHead.h

@@ -82,8 +82,12 @@ public:
 
 
 #pragma region  手动流程
+	int GetCurBondDieIndex() { return m_nCurBondDieIndex; }
+
 	virtual LONG PlaceDie(int index, X_Y_ANGLE_STRUCT lookUpOffsetPixel) = 0;
 	virtual LONG HeadMoveToBondPos(int index, bool bGrab = true, X_Y_ANGLE_STRUCT lookUpOffsetPixel = { 0,0,0 });//移动到拾取位,带补偿
+	virtual LONG CameraMoveToBondPos(int index, bool bGrab = true);
+	virtual LONG ToBondGrabPos_AddOffset(int index, X_Y_ANGLE_STRUCT bondOffset, bool waitDone = true);
 
 #pragma endregion
 
@@ -302,5 +306,8 @@ protected:
 	double m_dPickContactPosZ = 0;   //拾取测高高度
 	double m_dBondContactPosZ = 0;		//固晶测高高度
 
+	int m_nCurBondDieIndex = 0;
+
+
 };
 

+ 18 - 4
Output/inc/Module/CBondMatrix.h

@@ -17,6 +17,7 @@ namespace ns_mat
 	{
 		PICKBOND_PARAM_STRUCT stWaferParam;		//晶片台\华夫盒取晶参数
 		PICKBOND_PARAM_STRUCT stCalibBondParam;	//校准台放晶参数
+		bool bPickPREnable;					//是否拾取PR对点使能
 		UINT nTemplate_Pick;					//取晶模板号
 		UINT nPickHeadIdByTable;				//取晶吸嘴在吸嘴架上的Id号
 		UINT nMatrixId;						//使用的晶片台\华夫盒号(矩阵号)
@@ -28,8 +29,16 @@ namespace ns_mat
 		PICKBOND_PARAM_STRUCT stCalibPickParam;		//校准台取晶参数
 		PICKBOND_PARAM_STRUCT stBondParam;			//固晶台固晶参数
 
-		bool bIsAllBondAln = false;						//固晶点是否逐个对点
-		bool bIsPcbAln = false;							//是否Pcb对点
+		bool bAllBondAlnEnable = false;						//固晶点是否逐个对点
+		bool bPcbAlnEnable = false;							//是否Pcb对点
+
+		//bool bAllBondAlnEnable = false;				//是否逐个固晶对点使能
+		//bool bPcbAlnEnable = false;					//是否 PCB对点使能
+		bool bLookUpPREnable = false;				//是否上视对点使能
+		bool bPreBondPREnable = false;				//是否固前检测使能
+		bool bPostBondPREnable = false;				//是否固后检测使能
+		bool bTransferPREnable = false;				//是否中转放置PR
+
 
 		UINT nTemplate_BondFront = 0;					//固前检测模板ID号 0为不检测
 		UINT nTemplate_BondBack = 0;					//固后检测模板ID号 0为不检测
@@ -104,8 +113,9 @@ namespace ns_mat
 		//流程过程中的状态数据,不保存到数据库中
 		DIE_STATUS bDieStatus;				//固晶状态
 		PICK_STATUS bPickStatus;			//取晶状态
-		bool bAlnStatus;					//对点状态,是否已对点
-		bool bIsCheck;						//是否固后检测完成
+		bool bPcbAlnStatus = false;			//pcb 对点状态,是否已pcb对点
+		bool bAlnStatus = false;					//对点状态,是否已对点
+		bool bIsCheck = false;						//是否固后检测完成
 
 		XY_DOUBLE_STRUCT stPcbLeftTop;		//PCB矩阵左上角坐标(界面用)
 		XY_DOUBLE_STRUCT stPtLeftTop;		//PT矩阵左上角坐标(界面用)
@@ -246,6 +256,10 @@ namespace ns_mat
 
 		LONG SetDieStatus(UINT nPtIndex, DIE_STATUS eStatus);					//设置固晶状态
 		LONG SetPickStatus(UINT nPtIndex, PICK_STATUS eStatus);					//设置取晶状态
+		//LONG SetPcbAlnStatus(int nPtIndex, bool isPcbAln);
+		//LONG SetBondPointStatus(int nPtIndex, bool isBondPointAln);
+		LONG GetPcbAlnStatus(int nPtIndex, bool& isPcbAln);
+		LONG GetBondPointAlnStatus(int nPtIndex, bool& isBondPointAln);
 
 		LONG ClearWaferPickStatus();
 

+ 25 - 7
Output/inc/Module/CCalibrationConfig.h

@@ -15,19 +15,37 @@
 #define CALIB_R_TABLE_NAME		                        "Calib_R"
 #define CALIB_STEP_R_RESULT_TABLE_NAME		            "Calib_R_Result"
 #define FORCE_CONTROL_TABLE_NAME                        "Force_Control"
-#define HORIZONTAL_MEASURE_TABLE_NAME                   "Horizontal_Measure"
-#define VERTICAL_MEASURE_TABLE_NAME                     "Vertical_Measure"
-#define CALIB_TIP_RESULT                                "Tip_R_CTD_CalibResult"
+//#define HORIZONTAL_MEASURE_TABLE_NAME                   "Horizontal_Measure"
+//#define VERTICAL_MEASURE_TABLE_NAME                     "Vertical_Measure"
+//#define CALIB_TIP_RESULT                                "Tip_R_CTD_CalibResult"
+
+#define CALIB_CTD_BUTTON_TABLE_NAME		                    "Calib_CameraTipDis_Button"
+#define CALIB_XY_BUTTON_TABLE_NAME		                        "Calib_XY_Button"
+#define CALIB_R_BUTTON_TABLE_NAME		                        "Calib_R_Button"
+#define CALIB_STEP_R_RESULT_BUTTON_TABLE_NAME		            "Calib_R_Result_Button"
+#define FORCE_CONTROL_BUTTON_TABLE_NAME                        "Force_Control_Button"
+//#define HORIZONTAL_MEASURE_BUTTON_TABLE_NAME                   "Horizontal_Measure_Button"
+//#define VERTICAL_MEASURE_BUTTON_TABLE_NAME                     "Vertical_Measure_Button"
+//#define CALIB_TIP_RESULT_BUTTON                               "Tip_R_CTD_CalibResult_Button"
 
 const static std::vector<std::string> g_vetCalibrationConfigTableName = {
 		CALIB_CTD_TABLE_NAME,
 		CALIB_XY_TABLE_NAME,
 		CALIB_R_TABLE_NAME,
-		CALIB_STEP_R_RESULT_TABLE_NAME,
+		//CALIB_STEP_R_RESULT_TABLE_NAME,
 		FORCE_CONTROL_TABLE_NAME,
-		HORIZONTAL_MEASURE_TABLE_NAME,
-		VERTICAL_MEASURE_TABLE_NAME,   
-		CALIB_TIP_RESULT           
+		//HORIZONTAL_MEASURE_TABLE_NAME,
+		//VERTICAL_MEASURE_TABLE_NAME,   
+		//CALIB_TIP_RESULT,
+
+		CALIB_CTD_BUTTON_TABLE_NAME,
+		CALIB_XY_BUTTON_TABLE_NAME,
+		CALIB_R_BUTTON_TABLE_NAME,
+		//CALIB_STEP_R_RESULT_BUTTON_TABLE_NAME,
+		FORCE_CONTROL_BUTTON_TABLE_NAME/*,
+		HORIZONTAL_MEASURE_BUTTON_TABLE_NAME,
+		VERTICAL_MEASURE_BUTTON_TABLE_NAME,
+		CALIB_TIP_RESULT_BUTTON*/
 };
 
 namespace ns_db

+ 16 - 14
Output/inc/Module/CConfigBase.h

@@ -27,6 +27,8 @@ namespace ns_db
 #define DLL_CONFIG_BASE_API
 #endif
 
+	enum SAVE_PARAM_RETURN {SAVE_FAIL = -1,SAVE_OK = 0,NO_SAVE = 1};
+
 	typedef struct _CONFIG_BASE_STRUCT
 	{
 		INT iNo_;
@@ -131,10 +133,10 @@ namespace ns_db
 		CConfigBase(string sPathFile,string sTableName, CppSQLite3DB* pDB);
 
 		LONG LoadConfigDB(string strTableName);
-		LONG LoadConfigDB(string strTableName, vector<CONFIG_BASE_STRUCT>& vecConfig);
-		LONG SaveConfigDB(string strTableName, vector<CONFIG_BASE_STRUCT>* vecConfig);
+		//LONG LoadConfigDB(string strTableName, vector<CONFIG_BASE_STRUCT>& vecConfig);
+		//LONG SaveConfigDB(string strTableName, vector<CONFIG_BASE_STRUCT>* vecConfig);
 		LONG SaveConfigDB(string strTableName);
-	public:
+	private:
 		LONG Read(vector<CONFIG_BASE_STRUCT> stConfig, const CHAR* key, string& value);
 		LONG Read(vector<CONFIG_BASE_STRUCT> stConfig, const CHAR* key, CHAR* value, UINT len);
 		LONG Read(vector<CONFIG_BASE_STRUCT> stConfig, const CHAR* key, LONG* value);
@@ -143,24 +145,24 @@ namespace ns_db
 		LONG Read(vector<CONFIG_BASE_STRUCT> stConfig, const CHAR* key, DOUBLE* value);
 		LONG Read(vector<CONFIG_BASE_STRUCT> stConfig, const CHAR* key, bool* value);
 
-		LONG Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, const CHAR* value);
-		LONG Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, string value);
-		LONG Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, LONG value);
-		LONG Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, ULONG value);
-		LONG Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, INT value);
-		LONG Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, DOUBLE value);
-		LONG Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, bool value);
+		SAVE_PARAM_RETURN Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, const CHAR* value);
+		SAVE_PARAM_RETURN Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, string value);
+		SAVE_PARAM_RETURN Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, LONG value);
+		SAVE_PARAM_RETURN Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, ULONG value);
+		SAVE_PARAM_RETURN Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, INT value);
+		SAVE_PARAM_RETURN Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, DOUBLE value);
+		SAVE_PARAM_RETURN Write(vector<CONFIG_BASE_STRUCT>* stConfig, const CHAR* key, bool value);
 
 		LONG Append(vector<CONFIG_BASE_STRUCT>* stConfig, MODULE_CONFIG_STRUCT config);
 	public:
 		//在ConfigBase 中查找 ModuleConfig 中需要的数据
-		LONG GetConfigParam(vector<CONFIG_BASE_STRUCT> stBaseConfig, vector<MODULE_CONFIG_STRUCT>* vecconfig);
+		//LONG GetConfigParam(vector<CONFIG_BASE_STRUCT> stBaseConfig, vector<MODULE_CONFIG_STRUCT>* vecconfig);
 		LONG GetConfigParam(vector<MODULE_CONFIG_STRUCT>* vecconfig);
 		LONG GetConfigParam(vector<CONFIG_BASE_STRUCT>& vecconfig);
 		//将ModuleConfig的数据设置到ConfigBase中
-		LONG SetConfigParam(vector<CONFIG_BASE_STRUCT>* stBaseConfig, vector<MODULE_CONFIG_STRUCT> vecconfig);
-		LONG SetConfigParam(vector<MODULE_CONFIG_STRUCT> vecconfig);
-		LONG SetConfigParam(vector<CONFIG_BASE_STRUCT> vecconfig);
+		//LONG SetConfigParam(vector<CONFIG_BASE_STRUCT>* stBaseConfig, vector<MODULE_CONFIG_STRUCT> vecconfig);
+		SAVE_PARAM_RETURN SetConfigParam(vector<MODULE_CONFIG_STRUCT> vecconfig);
+		SAVE_PARAM_RETURN SetConfigParam(vector<CONFIG_BASE_STRUCT> vecconfig);
 
 	private:
 		CppSQLite3DB*	m_pDB;

+ 3 - 3
Output/inc/Module/CConfigBaseManage.h

@@ -35,9 +35,9 @@ namespace ns_db
         LONG GetConfigParam(string sTableName, vector<CONFIG_BASE_STRUCT>& vecconfig);
         LONG GetConfigParam(string sTableName, vector<MODULE_CONFIG_STRUCT>* vecModuleConfig);
 
-        LONG SetConfigParam(string sTableName, vector<CONFIG_BASE_STRUCT>* vecBaseConfig, vector<MODULE_CONFIG_STRUCT> vecModuleConfig);
-        LONG SetConfigParam(string sTableName, vector<MODULE_CONFIG_STRUCT> vecconfig);
-        LONG SetConfigParam(string sTableName, vector<CONFIG_BASE_STRUCT> vecconfig);
+        //LONG SetConfigParam(string sTableName, vector<CONFIG_BASE_STRUCT>* vecBaseConfig, vector<MODULE_CONFIG_STRUCT> vecModuleConfig);
+        SAVE_PARAM_RETURN SetConfigParam(string sTableName, vector<MODULE_CONFIG_STRUCT> vecconfig);
+        SAVE_PARAM_RETURN SetConfigParam(string sTableName, vector<CONFIG_BASE_STRUCT> vecconfig);
     };
 
 

+ 3 - 0
Output/inc/Module/CEjector.h

@@ -73,6 +73,9 @@ private:
 	CModuleConfig* m_pModuleConfigDB = nullptr;
 	EJECTOR_CONFIG_STRUCT m_stEjectorConfig;  //顶针参数配置
 
+	// 配置发生
+
+
 	void DataChangNotice(string strDbName, string strTableName);
 	virtual void SetDataChangFunction() override;
 	virtual LONG SetParam() override;//保存配置参数

+ 6 - 6
Output/inc/Module/CModuleConfig.h

@@ -49,14 +49,14 @@ namespace ns_db
 	const static std::vector<std::string> g_vetModuleConfigTableName = {
 		BONDHEAD_CONFIG_TABLE_NAME,
 		WAFERHEAD_CONFIG_TABLE_NAME,
-		WAFFLEHEAD_CONFIG_TABLE_NAME,
+		//WAFFLEHEAD_CONFIG_TABLE_NAME,
 		EJECTOR_CONFIG_TABLE_NAME,
 		WAFERTABLE_CONFIG_TABLE_NAME,
-		MATERIAL_BOX_CONFIG_TABLE_NAME,
-		WAFER_CALIB_TABLE_CONFIG_TABLE_NAME,
-		WAFFLE_CALIB_TABLE_CONFIG_TABLE_NAME,
-		BOND_TABLE_CONFIG_TABLE_NAME,
-		NOZZLE_TABLE_CONFIG_TABLE_NAME,
+		//MATERIAL_BOX_CONFIG_TABLE_NAME,
+		//WAFER_CALIB_TABLE_CONFIG_TABLE_NAME,
+		//WAFFLE_CALIB_TABLE_CONFIG_TABLE_NAME,
+		//BOND_TABLE_CONFIG_TABLE_NAME,
+		//NOZZLE_TABLE_CONFIG_TABLE_NAME,
 		HARDWARE_SWICH_TABLE_NAME,
 		ULTRAHEAD_TABLE_NAME,
 		

+ 4 - 3
Output/inc/Module/CMultiTemplate.h

@@ -50,7 +50,7 @@ namespace ns_pr
         // 控制坐标轴移动到指定位置,并进行同步操作
         // 参数:dX - X轴目标位置;dY - Y轴目标位置;dZ - Z轴目标位置;dR - R轴目标位置
         // 返回值:操作成功返回OK,否则返回错误码
-        LONG ModuleMove(double dX, double dY, double dZ, double dR);
+        LONG ModuleMoveTo(double dX, double dY, double dZ, double dR,double dZ_Safe);
 
         // 通过相机Id获取相机指针
         // 参数:nCameraID - 相机ID
@@ -96,16 +96,17 @@ namespace ns_pr
         // 参数:bUseCurrPos - 第一个模板使用当前位置;
         // 参数:stOutAln - 输出的搜索结果结构体
         // 返回值:操作成功返回OK,否则返回错误码
-        LONG SearchMultipleTemplate(vector<PR_TEMPLATE> stVecTemplate, UINT nDelayTakePicture,bool bUseCurrPos, X_Y_ANGLE_STRUCT& stOutAln);
+        LONG SearchMultipleTemplate(vector<PR_TEMPLATE> stVecTemplate, UINT nDelayTakePicture, XY_DOUBLE_STRUCT stStartOffset, X_Y_ANGLE_STRUCT& stOutAln);
 
         /// <summary>
         /// 根据PR策略Id,进行模板匹配,输出计算后的结果
         /// </summary>
         /// <param name="iStrategyId">策略id</param>
         /// <param name="nDelayTakePicture">拍照延时</param>
+        /// <param name="bUseTemplatePos">固定使用模板位置,不加偏移</param>
         /// <param name="stOutAln">输出值 对点结果</param>
         /// <returns>成功返加OK,否则返回错误码</returns>
-        LONG SearchAlnModels(UINT iStrategyId, UINT nDelayTakePicture, bool bUseCurrPos, FIND_MULTI_TEMP_STRUCT& stOutAln);
+        LONG SearchAlnModels(UINT iStrategyId, UINT nDelayTakePicture, bool bUseTemplatePos, FIND_MULTI_TEMP_STRUCT& stOutAln);
 
         // 创建对齐模型
         // 参数:vecTemplateId - 模板ID向量

+ 21 - 10
Output/inc/Module/CPrStrategy.h

@@ -32,6 +32,18 @@ namespace ns_pr
         vector<CAMERA_CALIB_STRUCT> m_VecCamera; // 相机校准结构体向量
 
         int m_imageNum = 0;
+
+        LONG ModuleMoveTo(double dX, double dY, double dZ, double dR, double dZ_Safe);
+        /**
+         * @brief 根据 PR 策略 ID 进行模板匹配,输出计算后的结果。
+         *
+         * @param iId 识图 ID(模板 ID 或策略 ID),用于指定要匹配的模板或策略。
+         * @param nDelayTakePicture 拍照延时,单位可能根据具体系统而定,用于控制拍照的时机。
+         * @param stOffset 输出值,包含与当前位置的偏差值,单位为 um(微米),用于表示匹配结果的位置和角度偏差。
+         * @return LONG 操作结果,成功返回 OK,否则返回相应的错误码。
+         */
+        LONG SearchModels(UINT iId, UINT nDelayTakePicture, FIND_MULTI_TEMP_STRUCT& stOffset);
+
     public:
         CPRStrategy();
         /**
@@ -59,15 +71,7 @@ namespace ns_pr
          * @brief 析构函数,释放动态分配的资源。
          */
         ~CPRStrategy();
-        /**
-         * @brief 根据 PR 策略 ID 进行模板匹配,输出计算后的结果。
-         *
-         * @param iId 识图 ID(模板 ID 或策略 ID),用于指定要匹配的模板或策略。
-         * @param nDelayTakePicture 拍照延时,单位可能根据具体系统而定,用于控制拍照的时机。
-         * @param stOffset 输出值,包含与当前位置的偏差值,单位为 um(微米),用于表示匹配结果的位置和角度偏差。
-         * @return LONG 操作结果,成功返回 OK,否则返回相应的错误码。
-         */
-        LONG SearchModels(UINT iId, UINT nDelayTakePicture, bool bUseCurrPos, FIND_MULTI_TEMP_STRUCT& stOffset);
+        
         /**
          * @brief 重载的 SearchModels 函数,使用不同的输出结构体。
          *
@@ -76,7 +80,14 @@ namespace ns_pr
          * @param stOffset 输出值,包含与当前位置的偏差值,用 X_Y_ANGLE_STRUCT 结构体表示,单位为 um(微米)和角度。
          * @return LONG 操作结果,成功返回 OK,否则返回相应的错误码。
          */
-        LONG SearchModels(UINT iId, UINT nDelayTakePicture, bool bUseCurrPos, X_Y_ANGLE_STRUCT& stOffset);
+        //LONG SearchModels(UINT iId, UINT nDelayTakePicture, bool bUseCurrPos, X_Y_ANGLE_STRUCT& stOffset);
+
+        //搜索模板,当前位置已经在拍照位
+        LONG SearchModels(UINT iId, UINT nDelayTakePicture, X_Y_ANGLE_STRUCT& stOffset);
+        //搜索模板,当前位置不是拍照位,需先移动
+        LONG SearchModels(UINT iId, UINT nDelayTakePicture, XY_DOUBLE_STRUCT stRefPos, X_Y_ANGLE_STRUCT& stOffset);
+        //搜索模板,完全使用做模板时位置
+        LONG SearchModelsByTempPos(UINT iId, UINT nDelayTakePicture, X_Y_ANGLE_STRUCT& stOutAln);
         /**
          * @brief 创建模板。
          *

+ 9 - 3
Output/inc/Module/CProduct.h

@@ -139,8 +139,13 @@ namespace ns_db
 		double dDieHeight;						//芯片高度
 		UINT iDieMatrixId;						//使用的晶片台号或华夫盒矩阵号
 		CALIB_DIE_TYPE eCalibType;				//校准方式
-		bool m_bIsAllBondAln = false;           //是否逐个固晶对点
-		bool m_bIsPcbAln = false;				//是否 PCB对点
+		bool bAllBondAlnEnable = false;           //是否逐个固晶对点使能
+		bool bPcbAlnEnable = false;				//是否 PCB对点使能
+		bool bLookUpPREnable = false;				//是否上视对点使能
+		bool bPreBondPREnable = false;			//是否固前检测使能
+		bool bPostBondPREnable = false;		//是否固后检测使能
+		bool bTransferPREnable = false;			//是否中转放置PR
+		bool bPickPREnable = false;				//是否拾取PR对点使能
 
 		UINT iPickParamId;						//取晶参数Id
 		UINT iCalibBondParamId;					//校准台固晶参数Id
@@ -495,8 +500,9 @@ namespace ns_db
 		LONG GetNozzleParam(int index, NozzleParam& param);
 		LONG GetAllNozzleParam(std::vector <NozzleParam>& vecNozzleParam);
 
-		LONG SetNozzleParam(int index, NozzleParam param, bool isCallBack = true);
+		LONG SetNozzleParam(int index, NozzleParam param, bool append = false, bool isCallBack = true);
 		LONG SetAllNozzleParam(std::vector <NozzleParam>, bool isCallBack = true);
+		LONG AddNozzleParam(NozzleParam param, bool isCallBack = true);
 
 
 #pragma endregion

+ 1 - 1
Output/inc/Module/CRCalib.h

@@ -162,5 +162,5 @@ private:
     CXYCalib* m_pXYCalib = nullptr;
 
     int  m_nTestTempId = 0;
-    X_Y_ANGLE_STRUCT m_stCalibTestOffset{ 0,0,0 };
+    X_Y_ANGLE_STRUCT m_stCheckOffset{ 0,0,0 };
 };

+ 1 - 1
Output/inc/Module/CRS232.h

@@ -70,7 +70,7 @@ public:
 	
 	void ClearBuffer();
 
-	long SerialPortRead(unsigned long dwBufferLength, char *buff, unsigned long dwWaitTime);
+	long SerialPortRead(unsigned long dwBufferLength, char* buff, unsigned long dwWaitTime = 20);
 	long SerialPortWrite(unsigned long dwBufferLength, char *buff);
 
 	static string GetErrText(long errid);

+ 7 - 5
Output/inc/Module/CSingleTemplate.h

@@ -64,11 +64,7 @@ namespace ns_pr
         // 参数 nCameraID:目标相机的ID
         // 返回值:指向相机XY标定对象的指针,如果未找到则返回 nullptr
         CXYCalib* GetXYCalibPoint(UINT nCameraID);
-        // 通过模板ID获取模板信息
-        // 参数 iTemplateId:要获取的模板ID
-        // 参数 stTemplate:用于存储获取到的模板信息的结构体引用
-        // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等
-        LONG GetTemplateById(UINT iTemplateId, PR_TEMPLATE& stTemplate);
+        
         // 搜索图片,outPoint为相对于图片左上角的点,暂时注释掉,可能在后续功能整合中使用
         // 参数 iPrMethod:搜索使用的方法ID
         // 参数 image:要搜索的图像信息
@@ -84,6 +80,12 @@ namespace ns_pr
         // 返回值:初始化成功返回 true,失败返回 false
         bool IsInitSuccess() { return m_bIsInitSuccess; };
 
+        // 通过模板ID获取模板信息
+        // 参数 iTemplateId:要获取的模板ID
+        // 参数 stTemplate:用于存储获取到的模板信息的结构体引用
+        // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等
+        LONG GetTemplateById(UINT iTemplateId, PR_TEMPLATE& stTemplate);
+
         // 根据给定的模板信息、拍照延迟时间,搜索单模板,返回相对于十字光标中心的X、Y(微米值)以及角度(度)偏差
         // 参数 stTemplate:包含模板相关信息的结构体,如相机ID、方法等
         // 参数 nDelayTakePicture:拍照前的延迟时间(单位为毫秒)

+ 2 - 0
Output/inc/Module/TipMatrix.h

@@ -56,6 +56,8 @@ namespace ns_mat
 		LONG SetNozzleUsedNum(int nozzleIndex, int num);
 		LONG GetNozzleUsedNum(int nozzleIndex, int& num);
 
+		LONG GetAllNozzleIndex(vector<int>& nozzles);
+
 
 	private:
 		TipMatrix();

+ 2 - 0
Output/inc/Public/FHConvert.h

@@ -56,5 +56,7 @@ public:
 	static LONG ParseNumber(string strInput, CHAR chKey, std::vector<INT>& vecNum);
 	static LONG ParseNumber(string strInput, CHAR chKey, std::vector<UINT>& vecNum);
 
+	//Æ¥Åä×Ö·û´®ºó¼¸Î»
+	static bool EndsWith(const std::string& str, const std::string& suffix);
 };
 

BIN
Output/lib/x64/Common.lib


BIN
Output/lib/x64/Control.lib


BIN
Output/lib/x64/Module.lib


+ 0 - 2
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/MaterialBox.cpp

@@ -134,8 +134,6 @@ void MaterialBox::initFrom(QWidget *parent)
 
 void MaterialBox::UpdataVal(std::vector<ns_module::MATERIAL_BOX_STRUCT>& veMaterial)
 {
-    //m_boxes = {};
-
     for (auto& a : veMaterial)
     {
         m_boxes = a;

+ 1 - 1
View/die-bonder-ui/Login.h

@@ -41,7 +41,7 @@ private:
     GetMainUiConfigFormDB gen_if;
 
     static Login* m_instance;
-    int m_privilege;
+    int m_privilege = 0;
 };
 
 #endif // LOGIN_H

+ 94 - 41
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.cpp

@@ -9,6 +9,7 @@
 #include "CViewInterface.h"
 #include "Login.h"
 #include "TreeViewManager/JIoMapPage.h"
+#include <algorithm>
 
 // 构造函数
 DbTreeViewManager::DbTreeViewManager(QWidget* pOriginalWndMenuPage, QWidget* parent)
@@ -132,8 +133,8 @@ QFrame* DbTreeViewManager::createUnifiedSeparator(QWidget *parent, int height)
     QFrame *separator = new QFrame(parent);
     separator->setFrameShape(QFrame::NoFrame); // 移除默认框架
     separator->setFixedHeight(height);         // 设置固定高度
-    //separator->setStyleSheet("background-color: #C7CAEB;");
-    separator->hide();      // 初始化为隐藏
+    separator->setStyleSheet("background-color: #C7CAEB;");
+    //separator->hide();      // 初始化为隐藏
     return separator;
 }
 
@@ -2078,7 +2079,9 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
     for (auto separator : m_mapFirstLevelSeparators)
     {
         if (separator)
+        {
             separator->hide();
+        }
     }
 
     // 清理之前的控件列表
@@ -2125,31 +2128,38 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
 
     Level3MenuAllSaveBut(scrollLayout);
 
-    QFrame* separator = createUnifiedSeparator(scrollWidget, 2);
-    QHBoxLayout* separatorLayout = new QHBoxLayout;
-    separatorLayout->setContentsMargins(0, 5, 0, 5);
-    separatorLayout->addWidget(separator);
-    scrollLayout->addLayout(separatorLayout);
-    separator->show();
+    //QFrame* separator = createUnifiedSeparator(scrollWidget, 2);
+    //QHBoxLayout* separatorLayout = new QHBoxLayout;
+    //separatorLayout->setContentsMargins(0, 5, 0, 5);
+    //separatorLayout->addWidget(separator);
+    //scrollLayout->addLayout(separatorLayout);
+    //separator->show();
 
     m_nLanguageSwitch = gen_if.getLanguageValue();
 
     //不同表格的全部插进来
-    int previousGroupId = -1;
+    int nPreviousGroupId = -1, nFirstLoop = -1; //用来区分,横线
+
     int privilege = Login::instance()->getPrivilege();
+
     QList<CONFIG_BASE_STRUCT> buttonControls;
     for (const ST_TABLE_CONTROL_DATA& tableData : data)
     {
-        //遍历控件list
-        for (const CONFIG_BASE_STRUCT& control : tableData.controlDataList)
+        //1. 重新排序
+        QList<CONFIG_BASE_STRUCT> controlDataList = tableData.controlDataList;
+        SortControlDataByGroupId(controlDataList);
+
+        //2. 遍历控件list
+        for (const CONFIG_BASE_STRUCT& control : controlDataList)
         {
-            //判断特殊的按钮控件
+            //3. 判断特殊的按钮控件
             if (control.strType == "Button")
             {
                 buttonControls.append(control);
             } 
             else
             {
+                //4. 开始创建
                 //先创建label
                 //int fieldId = control.iId;
                 QString fieldName           = QString::fromStdString(control.strName);
@@ -2167,19 +2177,32 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                 QString strstrModuleType    = m_str2DirModuleType;
                 int groupId                 = control.iGroupId;
 
+                if (!control.bEnable)
+                {
+                    break; // 不显示了
+                }
+
                 QString fieldTableName = extractBeforeComma(tableData.tableName);
 
-                // 如果组变化,插入分隔线
-                if (previousGroupId != -1 && groupId != previousGroupId)
+                if (nFirstLoop < 0)
                 {
-                    QFrame* separator = createUnifiedSeparator(scrollWidget, 2);
-                    QHBoxLayout* separatorLayout = new QHBoxLayout;
-                    separatorLayout->setContentsMargins(0, 5, 0, 5);
-                    separatorLayout->addWidget(separator);
-                    scrollLayout->addLayout(separatorLayout);
-                    separator->show();
+                    nFirstLoop++;
+                }
+                else
+                {   
+                    //5. 如果组变化,插入分隔线
+                    //if (previousGroupId != -1 && groupId != previousGroupId)
+                    if (groupId != nPreviousGroupId)
+                    {
+                        QFrame* separator = createUnifiedSeparator(scrollWidget, 2);
+                        QHBoxLayout* separatorLayout = new QHBoxLayout;
+                        separatorLayout->setContentsMargins(0, 5, 0, 5);
+                        separatorLayout->addWidget(separator);
+                        scrollLayout->addLayout(separatorLayout);
+                        separator->show();
+                        nPreviousGroupId = groupId;
+                    }
                 }
-                previousGroupId = groupId;
 
                 // 每个控件的行
                 QHBoxLayout* fieldLayout = new QHBoxLayout;
@@ -2218,7 +2241,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         {
                             lineEdit->setText(fieldValue);
                         }
-                        lineEdit->setFixedSize(105, 28);
+                        lineEdit->setFixedSize(133, 28);
                         lineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
 
 
@@ -2256,12 +2279,12 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                     
 
                         // 创建 QLabel 显示右边文本(比如 "分钟")
-                        QLabel* unitLabel = JIoMapPage::JCreateJText(fieldUnits);
+                        QLabel* unitLabel = JIoMapPage::JCreateJText(fieldUnits,true);
                         //unitLabel->setStyleSheet("QLabel { font-size: 14px; }");
 
                         // 把 QLineEdit 和 QLabel 水平排列,确保 Qlabel 显示在 QLineEdit 右侧
                         QHBoxLayout* inputLayout = new QHBoxLayout;
-                        inputLayout->setSpacing(10);
+                        inputLayout->setSpacing(6);
                         inputLayout->setContentsMargins(0, 0, 0, 0);
                         inputLayout->addWidget(lineEdit);
                         inputLayout->addWidget(unitLabel);
@@ -2408,7 +2431,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
 							});
                         JIoMapPage::JCreateMenu(rightWidget, { fieldDefult ,lineEdit ,privilege ,fieldUserGrade });
 
-                        if ((privilege &fieldUserGrade) == 1) 
+                        if ((privilege &fieldUserGrade) == privilege)
                         {
                             lineEdit->setEnabled(false);
                         }
@@ -2426,10 +2449,13 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         // 如果不包含逗号,按原有逻辑只创建 QLineEdit
                         QLineEdit* lineEdit1 = new QLineEdit(fieldValue);
                         lineEdit1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-                        lineEdit1->setFixedSize(140, 28);
+                        lineEdit1->setFixedSize(133, 28);
                         lineEdit1->setAlignment(Qt::AlignLeft);
 
                         rightLayout->addWidget(lineEdit1);
+                        rightLayout->addWidget(JIoMapPage::JCreateJText(fieldUnits, true));
+
+
                         createdWidget = lineEdit1;
                         // 连接 textChanged 信号到 lambda 函数
 
@@ -2461,7 +2487,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                             }
                             });
 
-                        if ((privilege &fieldUserGrade) == 1) 
+                        if ((privilege &fieldUserGrade) == privilege)
                         {
                             lineEdit1->setEnabled(false);
                         }
@@ -2542,7 +2568,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         }
                         });
 
-                    if ((privilege &fieldUserGrade) == 1)
+                    if ((privilege &fieldUserGrade) == privilege)
                     {
                         for (QAbstractButton* btn : radioGroup->buttons()) 
                         {
@@ -2583,7 +2609,8 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                             pFieldDescribeLabel->setProperty("value", "1");
                             pFieldDescribeLabel->setDisabled(true);
                             modifiedLabels.insert(pFieldDescribeLabel);
-                            if (fieldValue == "1") {
+                            if (fieldValue == "1")
+                            {
                                 pFieldDescribeLabel->setDisabled(false);
                                 modifiedLabels.remove(pFieldDescribeLabel);
                             }
@@ -2597,7 +2624,8 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                             pFieldDescribeLabel->setDisabled(true);
                             //label->setStyleSheet("color: #5c63be;");
                             modifiedLabels.insert(pFieldDescribeLabel);
-                            if (fieldValue != "1") {
+                            if (fieldValue != "1") 
+                            {
                                 pFieldDescribeLabel->setDisabled(false);
                                 modifiedLabels.remove(pFieldDescribeLabel);
                             }
@@ -2635,7 +2663,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         });
 
 
-                    if ((privilege & fieldUserGrade) == 1)
+                    if ((privilege & fieldUserGrade) == privilege)
                     {
                         checkBox->setEnabled(false);
                     }
@@ -2664,12 +2692,13 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                     QJsonArray jsonArray;
                     QJsonParseError parseError;
                     QJsonDocument jsonDoc = QJsonDocument::fromJson(fieldUnits.toUtf8(), &parseError);
-                    if (!jsonDoc.isNull() && jsonDoc.isArray()) {
+                    if (!jsonDoc.isNull() && jsonDoc.isArray()) 
+                    {
                         jsonArray = jsonDoc.array();
                     }
                     QComboBox* comboBox = new QComboBox;
                     comboBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-                    comboBox->setFixedSize(140, 28);
+                    comboBox->setFixedSize(133, 28);
                     int matchedIndex = -1;
                     int currentIndex = 0;
 
@@ -2689,6 +2718,12 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                     }
                     comboBox->setCurrentIndex(matchedIndex != -1 ? matchedIndex : 0);
                     rightLayout->addWidget(comboBox);
+                    if (parseError.error == QJsonParseError::NoError && !jsonDoc.isNull())
+                    {
+                        rightLayout->addWidget(JIoMapPage::JCreateJText(""));
+                    }
+
+
                     createdWidget = comboBox;
                     // 使用Lambda函数连接 currentIndexChanged 信号
                     connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
@@ -2752,7 +2787,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         }
                         });
 
-                    if ((privilege &fieldUserGrade) == 1) 
+                    if ((privilege &fieldUserGrade) == privilege)
                     {
                         comboBox->setEnabled(false);
                     }
@@ -2799,7 +2834,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         }
                         });
 
-                    if ((privilege &fieldUserGrade) == 1)
+                    if ((privilege &fieldUserGrade) == privilege)
                     {
                         timeEdit->setEnabled(false);
                     }
@@ -2899,7 +2934,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         }
                         });
 
-                    if ((privilege &fieldUserGrade) == 1) 
+                    if ((privilege &fieldUserGrade) == privilege)
                     {
                         switchBox->setEnabled(false);
                     }
@@ -2936,9 +2971,13 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                     QHBoxLayout* combinedLayout = new QHBoxLayout(combinedWidget);
                     combinedLayout->setSpacing(5);
                     combinedLayout->setContentsMargins(0, 0, 0, 0);
-
                     combinedLayout->addWidget(comboInput);
+                    QLabel* unitLabel = JIoMapPage::JCreateJText(fieldUnits,true);
+                    combinedLayout->addWidget(unitLabel);
                     combinedLayout->addStretch();
+
+
+
                     rightLayout->addWidget(combinedWidget);
 
                     // 压入内存
@@ -3008,7 +3047,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         });
 
 
-                    if ((privilege &fieldUserGrade) == 1)
+                    if ((privilege & fieldUserGrade) == privilege)
                     {
                         comboInput->setEnabled(false);
                     }
@@ -3016,13 +3055,13 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                 } 
                 else if (fieldType == "Text")
                 {
-                    ST_TREEM_CUSTOM_TEXT textCus;
+                    ST_TREEM_CUSTOM_TEXT textCus = {};
                     textCus.strConfigurationsName = fieldTableName;
                     textCus.strfieldName = fieldName;
                     textCus.strfieldDescribe = fieldDescribe;
 
                     textCus.pfieldValue = JIoMapPage::JCreateJText(fieldValue);
-                    textCus.pfieldUnits = JIoMapPage::JCreateJText(fieldUnits);
+                    textCus.pfieldUnits = JIoMapPage::JCreateJText(fieldUnits,true);
                     rightLayout->addWidget(textCus.pfieldValue);
                     rightLayout->addWidget(textCus.pfieldUnits);
 
@@ -3068,6 +3107,20 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
 }
 
 
+bool DbTreeViewManager::CompareByGroupId(const CONFIG_BASE_STRUCT& a, const CONFIG_BASE_STRUCT& b)
+{
+    return a.iGroupId < b.iGroupId; // 升序排列
+}
+
+void DbTreeViewManager::SortControlDataByGroupId(QList<CONFIG_BASE_STRUCT>& list)
+{
+    QVector<CONFIG_BASE_STRUCT> vec = QVector<CONFIG_BASE_STRUCT>::fromList(list);
+    std::sort(vec.begin(), vec.end(), [](const CONFIG_BASE_STRUCT& a, const CONFIG_BASE_STRUCT& b) {
+        return a.iGroupId < b.iGroupId;
+        });
+    list = vec.toList();
+}
+
 void DbTreeViewManager::UpdateShowAll3MenuControl(QList<ST_TABLE_CONTROL_DATA>& data)
 {
     if (data.isEmpty())
@@ -4351,7 +4404,7 @@ void DbTreeViewManager::loadExpandedPaths()
 void DbTreeViewManager::Level3MenuAllSaveBut(QVBoxLayout* pVBox)
 {
     QHBoxLayout* fieldLayout = new QHBoxLayout;
-    fieldLayout->setSpacing(15);
+    fieldLayout->setSpacing(25);
 
     QPushButton* pSaveBut = new QPushButton(tr("Save", "保存"));
     pSaveBut->setFixedSize(80, 28);

+ 5 - 0
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.h

@@ -433,6 +433,11 @@ private:
      */
     void displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DATA>& data, bool allChangeFalg, bool isHome);
 
+    // 自定义比较函数
+    bool CompareByGroupId(const CONFIG_BASE_STRUCT& a, const CONFIG_BASE_STRUCT& b);
+
+    void SortControlDataByGroupId(QList<CONFIG_BASE_STRUCT>& list);
+
     /**更新显示三级菜单所有控件
      */
     void UpdateShowAll3MenuControl(QList<ST_TABLE_CONTROL_DATA>& data);

+ 2 - 2
View/die-bonder-ui/OriginalWnd/MainAndSecondaryCamerasWnd.cpp

@@ -30,7 +30,7 @@ MainAndSecondaryCamerasWnd::MainAndSecondaryCamerasWnd(QWidget* parent)
     m_veCurrentSelectGroup_R.isBond = false;
     m_veCurrentSelectGroup_L.isBond = false;
     m_timerMaterial = new QTimer(this);
-    connect(m_timerMaterial, &QTimer::timeout, this, &MainAndSecondaryCamerasWnd::UpdateMaterialByTimer);
+    //connect(m_timerMaterial, &QTimer::timeout, this, &MainAndSecondaryCamerasWnd::UpdateMaterialByTimer);
     m_pCViewInterface = ns_module::CViewInterface::GetInstance();
 }
 
@@ -113,7 +113,7 @@ void MainAndSecondaryCamerasWnd::InitPage()
             }
             else
             {
-                m_pMainCameraBind->m_vecCamera[i].eType = MATERIAL_BOND;
+                m_pMainCameraBind->m_vecCamera[i].eType = MATERIAL_WAFER;
                 manager = new CameraImageHandler(num, m_pMainCameraBind->m_vecCamera[i]);
             }
 

+ 7 - 0
View/die-bonder-ui/OriginalWnd/OriginalWnd.cpp

@@ -38,6 +38,7 @@ OriginalWnd::OriginalWnd(QWidget* parent, CameraBind* pCameraBind)
     }
 
     InitForm();
+    //DisableControls(true);
 }
 
 OriginalWnd::~OriginalWnd()
@@ -120,6 +121,12 @@ void OriginalWnd::switchToSystemConfig()
 }
 
 
+void OriginalWnd::DisableControls(bool isDisable)
+{
+    ui->menuFunctionsSwitchWidget->setDisabled(isDisable);
+    ui->widget->setDisabled(isDisable);
+}
+
 void OriginalWnd::InitForm()
 {
     InitTreeViewManager();

+ 3 - 0
View/die-bonder-ui/OriginalWnd/OriginalWnd.h

@@ -68,6 +68,9 @@ public:
     void switchToSystemConfig();
 
 
+    /**禁用控件
+     */
+    void DisableControls(bool isDisable);
 
     enum DEVICE_STATUS
     {

+ 1 - 1
View/die-bonder-ui/OriginalWnd/TreeViewManager/JCustomLabelControls.h

@@ -101,7 +101,7 @@ class AutoResizeLabel : public QLabel
 public:
     explicit AutoResizeLabel(QWidget* parent = nullptr) : QLabel(parent)
     {
-        setWordWrap(true);
+        setWordWrap(false);
     }
 
 protected:

+ 15 - 5
View/die-bonder-ui/OriginalWnd/TreeViewManager/JIoMapPage.cpp

@@ -170,16 +170,26 @@ QLabel* JIoMapPage::JCreateName0(const QString& fieldDescribe, const QString& fi
     return pNameLable;
 }
 
-AutoResizeLabel* JIoMapPage::JCreateJText(const QString& name)
+AutoResizeLabel* JIoMapPage::JCreateJText(const QString& name, bool nUnit /*= false*/)
 {
     AutoResizeLabel* pLabel = new AutoResizeLabel();
     pLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
     pLabel->setFixedHeight(24);
     //pLabel->setFixedWidth(300);
-
-    QFontMetrics metrics(pLabel->font());
-    QString elidedText = metrics.elidedText(name, Qt::ElideRight, pLabel->width()-330);
-    pLabel->setText(elidedText);
+    if (name.isEmpty())
+    {
+        pLabel->setFixedWidth(40);
+    }
+    else
+    {
+        QFontMetrics metrics(pLabel->font());
+        QString elidedText = metrics.elidedText(name, Qt::ElideRight, pLabel->width() - 330);
+        pLabel->setText(elidedText);
+        if (nUnit)
+        {
+            pLabel->setFixedWidth(40);
+        }
+    }
 
     return pLabel;
 }

+ 1 - 1
View/die-bonder-ui/OriginalWnd/TreeViewManager/JIoMapPage.h

@@ -72,7 +72,7 @@ public:
      */
     static QLabel* JCreateName0(const QString& fieldDescribe, const QString& fieldDescribe_Eng, int nlanguage);
 
-    static AutoResizeLabel* JCreateJText(const QString& name);
+    static AutoResizeLabel* JCreateJText(const QString& name, bool nUnit = false);
 
     /**解析json
      */

+ 2 - 0
View/die-bonder-ui/SBTdie-bonder-ui.vcxproj

@@ -244,6 +244,7 @@
     <ClCompile Include="Src\common\JLogAllOutput.cpp" />
     <ClCompile Include="Src\common\JMessageTip.cpp" />
     <ClCompile Include="Src\common\JQCommon.cpp" />
+    <ClCompile Include="Src\common\JUGWatch\CUGWatch.cpp" />
     <ClCompile Include="Src\common\JUserAccountsData.cpp" />
     <ClCompile Include="Src\DiagnosisPage\DiagnosisPage.cpp" />
     <ClCompile Include="Src\MatrixDialogs\NoBondPtEditDialog.cpp" />
@@ -295,6 +296,7 @@
     <ClInclude Include="Src\common\JLogAllOutput.h" />
     <QtMoc Include="Src\common\JMessageTip.h" />
     <QtMoc Include="Src\common\JQCommon.h" />
+    <ClInclude Include="Src\common\JUGWatch\CUGWatch.h" />
     <ClInclude Include="Src\common\JUserAccountsData.h" />
     <ClInclude Include="Src\common\UserManagementShared.h" />
     <QtMoc Include="Src\RewriteControl\LightJoystickSwitchPage.h" />

+ 9 - 3
View/die-bonder-ui/SBTdie-bonder-ui.vcxproj.filters

@@ -151,6 +151,9 @@
     <Filter Include="Source Files\Src\DiagnosisPage">
       <UniqueIdentifier>{06eb9ba5-1d27-4a6a-970f-bfdf95384ffe}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Source Files\Src\common\CUGWatch">
+      <UniqueIdentifier>{d10d777b-e2ee-488e-b240-b98c8849cb76}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="ImageWidget.cpp">
@@ -321,6 +324,9 @@
     <ClCompile Include="Src\DiagnosisPage\DiagnosisPage.cpp">
       <Filter>Source Files\Src\DiagnosisPage</Filter>
     </ClCompile>
+    <ClCompile Include="Src\common\JUGWatch\CUGWatch.cpp">
+      <Filter>Source Files\Src\common\CUGWatch</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <QtMoc Include="ImageWidget.h">
@@ -842,9 +848,6 @@
     <None Include="images\light\zoom up.png">
       <Filter>Resource Files</Filter>
     </None>
-    <None Include="dark.qss">
-      <Filter>Resource Files</Filter>
-    </None>
     <None Include="Src\Res\qss\dark.qss">
       <Filter>Source Files\Src\Res\qss</Filter>
     </None>
@@ -891,6 +894,9 @@
     <ClInclude Include="Src\Sql\GetUiConfigFormDB.h">
       <Filter>Header Files\Src\Sql</Filter>
     </ClInclude>
+    <ClInclude Include="Src\common\JUGWatch\CUGWatch.h">
+      <Filter>Source Files\Src\common\CUGWatch</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <QtMoc Include="CameraMaterialGroupWnd\CameraImage\CameraImageHandler.h">

Datei-Diff unterdrückt, da er zu groß ist
+ 992 - 92
View/die-bonder-ui/Src/BondMatrixProgramPage.cpp


+ 42 - 7
View/die-bonder-ui/Src/BondMatrixProgramPage.h

@@ -51,14 +51,18 @@ private:
 	void MatrixChangeEvent();
 
 	//更新取晶参数
-	void UpdatePagePickParam();
+	void UpdatePagePick1Param();
+	void UpdatePagePick2Param();
 
 	//更新固晶参数
-	void UpdatePageBondParam();
+	void UpdatePageBond1Param();
+	void UpdatePageBond2Param();
 
 	void initPage();
 
 
+	// 同步相同 iId 的参数
+	void syncParamWithSameId(ns_db::PICKBOND_PARAM_STRUCT& currentParam, ns_db::PICKBOND_PARAM_STRUCT& targetParam, QWidget* targetWidget);
 	// 初始化取晶控件连接
 	void connectWaferPickControls();   // 华夫盒取晶
 	void connectCalibPickControls();   // 中转台取晶
@@ -69,6 +73,20 @@ private:
 
 	void ShowCurrentMatrix(int bondMatrixId);
 
+	bool canDeleteBondInfo(int selectedBondInfoId);
+
+	void updateDeleteButtonStatus(bool canDelete, QPushButton* deleteButton);
+
+	void updateFourParamDeleteButtonStatus();
+	int canDeleteParameter(int selectedId);
+	bool deleteParameter(QPushButton* deleteButton, int selectedId);
+
+	void restoreBondInfoDefaultStyles();
+	void restorePick1DefaultStyles();
+	void restorePick2DefaultStyles();
+	void restorePlace1DefaultStyles();
+	void restorePlccle2DefaultStyles();
+
 protected:
 	bool eventFilter(QObject* watched, QEvent* event) override;
 
@@ -80,7 +98,17 @@ private slots:
 	void onComboBoxCurrentMatrixChanged(int index);  // 切换矩阵
 	void onComboBoxIndexChangedForMatrixParam(int index);
 	void onComboBoxIndexChangedForParam(int index);
-	void onComboBoxPopup(QComboBox* comboBox);
+	void onComboBoxPopupBondInfo(QComboBox* comboBox);
+
+	//DeleteBondInfo
+	void onPushButtonDeleteParamClicked();
+	//DeleteParam
+	void onPushButtonDeleteClicked(QPushButton* deleteButton, QComboBox* comboBox);//通用
+
+	/*void on_pushButtonDeletePick1_clicked(QPushButton* deleteButton, QComboBox* comboBox);
+	void on_pushButtonDeletePick2_clicked(QPushButton* deleteButton, QComboBox* comboBox);
+	void on_pushButtonDeletePlace1_clicked(QPushButton* deleteButton, QComboBox* comboBox);
+	void on_pushButtonDeletePlace2_clicked(QPushButton* deleteButton, QComboBox* comboBox);*/
 
 	//ModifyParam
 	void onSetParamPickTempClicked();
@@ -89,6 +117,7 @@ private slots:
 	void onSetParamBondClicked();
 	void onSetParamLookUpClicked();
 	void onSetParamCalibPickClicked();
+	void onSetParamPcbAlnPRStrategyClicked();
 	//CreateParam
 	void onCreateParamPickTempClicked();
 	void onCreateParamPreBondClicked();
@@ -96,6 +125,7 @@ private slots:
 	void onCreateParamBondClicked();
 	void onCreateParamLookUpClicked();
 	void onCreateParamCalibPickClicked();
+	void onCreatParamPcbAlnPRStrategyClicked();
 
 	// ——— 取晶槽函数 ———
 	// 取晶头取晶
@@ -157,22 +187,27 @@ private:
 
 	CProduct* m_pProduct = nullptr;
 
+	ns_mat::TipMatrix* m_TipMatrix = nullptr;
 
 	std::vector<ns_db::PR_STRATEGY>  m_vecPrStrategy;
 	std::vector<ns_db::PR_TEMPLATE>  m_vecPrTemplate;
 	std::vector<ns_db::PR_BONDINSP>  m_vecPrBondInsp;
+	vector<int> m_vecNozzles;
 
 	//当前界面显示的参数
 	ns_db::BOND_INFO_STRUCT m_curBondInfo;
+	ns_db::BOND_INFO_STRUCT m_tempBondInfo;
 
 	ns_db::PICKBOND_PARAM_STRUCT m_curWaferPickParam;//取晶头取晶
-
 	ns_db::PICKBOND_PARAM_STRUCT m_curCalibPlaceParam;//中转台固晶
-
 	ns_db::PICKBOND_PARAM_STRUCT m_curCalibPickParam;//中转台取晶
-
 	ns_db::PICKBOND_PARAM_STRUCT m_curBondParam;//固晶台固晶
 
+	ns_db::PICKBOND_PARAM_STRUCT m_tempWaferPickParam;//取晶头取晶
+	ns_db::PICKBOND_PARAM_STRUCT m_tempCalibPlaceParam;//中转台固晶
+	ns_db::PICKBOND_PARAM_STRUCT m_tempCalibPickParam;//中转台取晶
+	ns_db::PICKBOND_PARAM_STRUCT m_tempBondParam;//固晶台固晶
+
 	ns_mat::POINT_INFO_STRUCT m_curPointInfo;
 
 	ns_module::CViewInterface* m_pProgramCViewInterface = nullptr;
@@ -205,5 +240,5 @@ private:
 
 	QVBoxLayout* verticalLayout_tem = new QVBoxLayout();
 
-	bool   m_assss = false;
+	bool   m_isComBoxUpdating = false;
 };

+ 1188 - 1088
View/die-bonder-ui/Src/BondMatrixProgramPage.ui

@@ -6,47 +6,13 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>484</width>
-    <height>943</height>
+    <width>439</width>
+    <height>940</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>BondMatrixProgramPage</string>
   </property>
-  <widget class="QScrollArea" name="scrollArea_2">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>40</y>
-     <width>431</width>
-     <height>231</height>
-    </rect>
-   </property>
-   <property name="sizePolicy">
-    <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-     <horstretch>0</horstretch>
-     <verstretch>0</verstretch>
-    </sizepolicy>
-   </property>
-   <property name="widgetResizable">
-    <bool>true</bool>
-   </property>
-   <widget class="QWidget" name="scrollAreaWidgetMatrix">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>0</y>
-      <width>429</width>
-      <height>229</height>
-     </rect>
-    </property>
-    <layout class="QVBoxLayout" name="verticalLayout_2">
-     <item>
-      <layout class="QVBoxLayout" name="verticalLayout_3"/>
-     </item>
-    </layout>
-   </widget>
-  </widget>
   <widget class="QFrame" name="frame">
    <property name="geometry">
     <rect>
@@ -79,1150 +45,1284 @@
     <enum>QFrame::Raised</enum>
    </property>
   </widget>
-  <widget class="QScrollArea" name="scrollArea_3">
+  <widget class="QGroupBox" name="groupBox">
    <property name="geometry">
     <rect>
      <x>0</x>
-     <y>310</y>
-     <width>431</width>
-     <height>631</height>
+     <y>33</y>
+     <width>438</width>
+     <height>239</height>
     </rect>
    </property>
-   <property name="sizePolicy">
-    <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-     <horstretch>0</horstretch>
-     <verstretch>0</verstretch>
-    </sizepolicy>
+   <property name="title">
+    <string/>
+   </property>
+   <widget class="QScrollArea" name="scrollArea_2">
+    <property name="geometry">
+     <rect>
+      <x>1</x>
+      <y>3</y>
+      <width>434</width>
+      <height>231</height>
+     </rect>
+    </property>
+    <property name="sizePolicy">
+     <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+      <horstretch>0</horstretch>
+      <verstretch>0</verstretch>
+     </sizepolicy>
+    </property>
+    <property name="widgetResizable">
+     <bool>true</bool>
+    </property>
+    <widget class="QWidget" name="scrollAreaWidgetMatrix">
+     <property name="geometry">
+      <rect>
+       <x>0</x>
+       <y>0</y>
+       <width>432</width>
+       <height>229</height>
+      </rect>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout_3"/>
+      </item>
+     </layout>
+    </widget>
+   </widget>
+  </widget>
+  <widget class="QGroupBox" name="groupBox_2">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>313</y>
+     <width>438</width>
+     <height>631</height>
+    </rect>
    </property>
-   <property name="widgetResizable">
-    <bool>true</bool>
+   <property name="title">
+    <string/>
    </property>
-   <widget class="QWidget" name="scrollAreaWidgetParam">
+   <widget class="QScrollArea" name="scrollArea_3">
     <property name="geometry">
      <rect>
-      <x>-113</x>
-      <y>-801</y>
-      <width>521</width>
-      <height>1409</height>
+      <x>1</x>
+      <y>3</y>
+      <width>434</width>
+      <height>621</height>
      </rect>
     </property>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <layout class="QGridLayout" name="gridLayout_2">
-       <property name="horizontalSpacing">
-        <number>3</number>
-       </property>
-       <property name="verticalSpacing">
-        <number>10</number>
-       </property>
-       <item row="43" column="0">
-        <widget class="QLabel" name="label_37">
-         <property name="text">
-          <string>吹气延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxPickTempID"/>
-       </item>
-       <item row="38" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxBondPosZ">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="41" column="0">
-        <widget class="QLabel" name="label_35">
-         <property name="text">
-          <string>阻塞/漏晶检测延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="4">
-        <widget class="QPushButton" name="CreatParamPickTemp">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Create</string>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="3">
-        <widget class="QPushButton" name="SetParamPreBond">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Modify</string>
-         </property>
-        </widget>
-       </item>
-       <item row="16" column="1">
-        <widget class="QLabel" name="label_11">
-         <property name="text">
-          <string>取晶头取晶</string>
-         </property>
-        </widget>
-       </item>
-       <item row="16" column="3">
-        <widget class="QLabel" name="label">
-         <property name="text">
-          <string>中转台取晶</string>
-         </property>
-        </widget>
-       </item>
-       <item row="28" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickVacDelay_2"/>
-       </item>
-       <item row="1" column="1">
-        <widget class="QCheckBox" name="checkBoxIsCalib">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="31" column="2">
-        <widget class="QComboBox" name="comboBoxCurrentPara_Place1">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>30</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="16" column="0">
-        <widget class="QLabel" name="label_13">
-         <property name="text">
-          <string>取晶参数:</string>
-         </property>
-        </widget>
-       </item>
-       <item row="9" column="0">
-        <widget class="QLabel" name="label_8">
-         <property name="text">
-          <string>中转台取晶模板ID</string>
-         </property>
-        </widget>
-       </item>
-       <item row="29" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickBlowDelay_2"/>
-       </item>
-       <item row="41" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondBlockCheckDelay_2"/>
-       </item>
-       <item row="42" column="0">
-        <widget class="QLabel" name="label_36">
-         <property name="text">
-          <string>真空延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="22" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPrePickZ">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="10" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondNozzleID"/>
-       </item>
-       <item row="11" column="0">
-        <widget class="QLabel" name="label_10">
-         <property name="text">
-          <string>固晶点补偿X&amp;Y</string>
-         </property>
-        </widget>
-       </item>
-       <item row="34" column="3" colspan="2">
-        <widget class="QCheckBox" name="checkBoxBondLoseCheck_2">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="19" column="3" colspan="2">
-        <widget class="QCheckBox" name="checkBoxPickBlockCheck_2">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="24" column="0">
-        <widget class="QLabel" name="label_75">
-         <property name="text">
-          <string>取晶高度(um)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="25" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickGrabDelay_2"/>
-       </item>
-       <item row="35" column="0">
-        <widget class="QLabel" name="label_28">
-         <property name="text">
-          <string>是否寻压</string>
-         </property>
-        </widget>
-       </item>
-       <item row="23" column="0">
-        <widget class="QLabel" name="label_19">
-         <property name="text">
-          <string>取晶压力(g)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="44" column="0" colspan="5">
-        <widget class="QLabel" name="label_40">
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item row="29" column="0">
-        <widget class="QLabel" name="label_24">
-         <property name="text">
-          <string>吹气延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="11" column="3" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetY">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="0">
-        <widget class="QLabel" name="label_5">
-         <property name="text">
-          <string>固后检测模板ID</string>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="4">
-        <widget class="QPushButton" name="CreatParamPreBond">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Create</string>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxPostBondTemp"/>
-       </item>
-       <item row="26" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBox_PickDelay"/>
-       </item>
-       <item row="35" column="1" colspan="2">
-        <widget class="QCheckBox" name="checkBoxBondFindForce">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="36" column="3" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPreBondPosZ_2">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="31" column="1">
-        <widget class="QLabel" name="label_18">
-         <property name="text">
-          <string>中转台固晶</string>
-         </property>
-        </widget>
-       </item>
-       <item row="23" column="3" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPickForce_2">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="35" column="3" colspan="2">
-        <widget class="QCheckBox" name="checkBoxBondFindForce_2">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="27" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickBlockCheckDelay_2"/>
-       </item>
-       <item row="43" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondBlowDelay_2"/>
-       </item>
-       <item row="7" column="0">
-        <widget class="QLabel" name="label_6">
-         <property name="text">
-          <string>固晶对点模板ID</string>
-         </property>
-        </widget>
-       </item>
-       <item row="33" column="0">
-        <widget class="QLabel" name="label_26">
-         <property name="text">
-          <string>阻塞检测</string>
-         </property>
-        </widget>
-       </item>
-       <item row="8" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxLookUpTemp"/>
-       </item>
-       <item row="33" column="1" colspan="2">
-        <widget class="QCheckBox" name="checkBoxBondBlockCheck">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxDieSource">
-         <item>
-          <property name="text">
-           <string>华夫盒</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>晶圆台</string>
-          </property>
-         </item>
-        </widget>
-       </item>
-       <item row="13" column="0" colspan="5">
-        <widget class="QLabel" name="label_30">
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item row="40" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondDelay"/>
-       </item>
-       <item row="40" column="0">
-        <widget class="QLabel" name="label_34">
-         <property name="text">
-          <string>固晶延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="10" column="0">
-        <widget class="QLabel" name="label_9">
-         <property name="text">
-          <string>固晶吸嘴号</string>
-         </property>
-        </widget>
-       </item>
-       <item row="7" column="4">
-        <widget class="QPushButton" name="CreatParamBond">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Create</string>
-         </property>
-        </widget>
-       </item>
-       <item row="21" column="3" colspan="2">
-        <widget class="QCheckBox" name="checkBoxPickFindForceCheck_2">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="36" column="0">
-        <widget class="QLabel" name="label_31">
-         <property name="text">
-          <string>预固晶高度(um)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="4">
-        <widget class="QPushButton" name="CreatParamPostBond">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Create</string>
-         </property>
-        </widget>
-       </item>
-       <item row="20" column="3" colspan="2">
-        <widget class="QCheckBox" name="checkBoxPickLoseCheck_2">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="7" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxBondTemp"/>
-       </item>
-       <item row="24" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPickPosZ">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="37" column="0">
-        <widget class="QLabel" name="label_32">
-         <property name="text">
-          <string>固晶压力(g)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="7" column="3">
-        <widget class="QPushButton" name="SetParamBond">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Modify</string>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="0">
-        <widget class="QLabel" name="label_4">
-         <property name="text">
-          <string>固前检测模板ID</string>
-         </property>
-        </widget>
-       </item>
-       <item row="34" column="0">
-        <widget class="QLabel" name="label_27">
-         <property name="text">
-          <string>漏晶检测</string>
-         </property>
-        </widget>
-       </item>
-       <item row="39" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondGrabDelay_2"/>
-       </item>
-       <item row="26" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBox_PickDelay_2"/>
-       </item>
-       <item row="38" column="3" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxBondPosZ_2">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="20" column="1" colspan="2">
-        <widget class="QCheckBox" name="checkBoxPickLoseCheck">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="26" column="0">
-        <widget class="QLabel" name="label_21">
-         <property name="text">
-          <string>取晶延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="8" column="3">
-        <widget class="QPushButton" name="SetParamLookUp">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Modify</string>
-         </property>
-        </widget>
-       </item>
-       <item row="11" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetX">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickNozzleID"/>
-       </item>
-       <item row="6" column="3">
-        <widget class="QPushButton" name="SetParamPostBond">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Modify</string>
-         </property>
-        </widget>
-       </item>
-       <item row="23" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPickForce">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="28" column="0">
-        <widget class="QLabel" name="label_23">
-         <property name="text">
-          <string>真空延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="spinBoxDieHeight">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="21" column="1" colspan="2">
-        <widget class="QCheckBox" name="checkBoxPickFindForceCheck">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="39" column="0">
-        <widget class="QLabel" name="label_33">
-         <property name="text">
-          <string>拍照延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="42" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondVacDelay_2"/>
-       </item>
-       <item row="22" column="3" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPrePickZ_2">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="37" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxBondForce">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="16" column="4">
-        <widget class="QComboBox" name="comboBoxCurrentPara_Pick2">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>30</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="0">
-        <widget class="QLabel" name="label_3">
-         <property name="text">
-          <string>晶粒来源</string>
-         </property>
-        </widget>
-       </item>
-       <item row="29" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickBlowDelay"/>
-       </item>
-       <item row="41" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondBlockCheckDelay"/>
-       </item>
-       <item row="8" column="0">
-        <widget class="QLabel" name="label_7">
-         <property name="text">
-          <string>上视对点模板ID</string>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="0">
-        <widget class="QLabel" name="label_77">
-         <property name="text">
-          <string>取晶模板ID</string>
-         </property>
-        </widget>
-       </item>
-       <item row="28" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickVacDelay"/>
-       </item>
-       <item row="37" column="3" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxBondForce_2">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="40" column="3" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondDelay_2"/>
-       </item>
-       <item row="4" column="0">
-        <widget class="QLabel" name="label_78">
-         <property name="text">
-          <string>取晶吸嘴号</string>
-         </property>
-        </widget>
-       </item>
-       <item row="33" column="3" colspan="2">
-        <widget class="QCheckBox" name="checkBoxBondBlockCheck_2">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="24" column="3" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPickPosZ_2">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="27" column="0">
-        <widget class="QLabel" name="label_22">
-         <property name="text">
-          <string>阻塞/漏晶检测延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="0">
-        <widget class="QLabel" name="label_79">
-         <property name="text">
-          <string>芯片高度</string>
-         </property>
-        </widget>
-       </item>
-       <item row="39" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondGrabDelay"/>
-       </item>
-       <item row="31" column="0">
-        <widget class="QLabel" name="label_25">
-         <property name="text">
-          <string>固晶参数:</string>
-         </property>
-        </widget>
-       </item>
-       <item row="9" column="4">
-        <widget class="QPushButton" name="CreatParamCalibPick">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Create</string>
-         </property>
-        </widget>
-       </item>
-       <item row="30" column="0" colspan="5">
-        <widget class="QLabel" name="label_29">
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item row="25" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickGrabDelay"/>
-       </item>
-       <item row="5" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxPreBondTemp"/>
-       </item>
-       <item row="16" column="2">
-        <widget class="QComboBox" name="comboBoxCurrentPara_Pick1">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>30</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="22" column="0">
-        <widget class="QLabel" name="label_17">
-         <property name="text">
-          <string>预拾取高度(um)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="12" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetAngle">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="3">
-        <widget class="QPushButton" name="SetParamPickTemp">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Modify</string>
-         </property>
-        </widget>
-       </item>
-       <item row="19" column="1" colspan="2">
-        <widget class="QCheckBox" name="checkBoxPickBlockCheck">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="31" column="3">
-        <widget class="QLabel" name="label_2">
-         <property name="text">
-          <string>固晶台固晶</string>
-         </property>
-        </widget>
-       </item>
-       <item row="12" column="0">
-        <widget class="QLabel" name="label_12">
-         <property name="text">
-          <string>固晶点补偿角度</string>
-         </property>
-        </widget>
-       </item>
-       <item row="21" column="0">
-        <widget class="QLabel" name="label_16">
-         <property name="text">
-          <string>是否寻压</string>
-         </property>
-        </widget>
-       </item>
-       <item row="43" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondBlowDelay"/>
-       </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="label_76">
-         <property name="text">
-          <string>是否中转</string>
-         </property>
-        </widget>
-       </item>
-       <item row="36" column="1" colspan="2">
-        <widget class="DoubleSpinBox" name="doubleSpinBoxPreBondPosZ">
-         <property name="minimum">
-          <double>-1000000000.000000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1000000000.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="34" column="1" colspan="2">
-        <widget class="QCheckBox" name="checkBoxBondLoseCheck">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="9" column="3">
-        <widget class="QPushButton" name="SetParamCalibPick">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Modify</string>
-         </property>
-        </widget>
-       </item>
-       <item row="19" column="0">
-        <widget class="QLabel" name="label_14">
-         <property name="text">
-          <string>阻塞检测</string>
-         </property>
-        </widget>
-       </item>
-       <item row="8" column="4">
-        <widget class="QPushButton" name="CreatParamLookUp">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Create</string>
-         </property>
-        </widget>
-       </item>
-       <item row="25" column="0">
-        <widget class="QLabel" name="label_20">
-         <property name="text">
-          <string>拍照延时(ms)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="9" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxCalibPickTemp"/>
-       </item>
-       <item row="31" column="4">
-        <widget class="QComboBox" name="comboBoxCurrentPara_Place2">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>30</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="20" column="0">
-        <widget class="QLabel" name="label_15">
-         <property name="text">
-          <string>漏晶检测</string>
-         </property>
-        </widget>
-       </item>
-       <item row="38" column="0">
-        <widget class="QLabel" name="label_38">
-         <property name="text">
-          <string>固晶高度(um)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="42" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxBondVacDelay"/>
-       </item>
-       <item row="27" column="1" colspan="2">
-        <widget class="SpinBox" name="spinBoxPickBlockCheckDelay"/>
-       </item>
-       <item row="17" column="2">
-        <widget class="QPushButton" name="pushButtonDeletePick1">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="删除参数">Delete</string>
-         </property>
-        </widget>
-       </item>
-       <item row="17" column="1">
-        <widget class="QPushButton" name="pushButtonSaveAsPick1">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="参数另存为">SaveAs</string>
-         </property>
-        </widget>
-       </item>
-       <item row="17" column="4">
-        <widget class="QPushButton" name="pushButtonDeletePick2">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="删除参数">Delete</string>
-         </property>
-        </widget>
-       </item>
-       <item row="17" column="3">
-        <widget class="QPushButton" name="pushButtonSaveAsPick2">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="参数另存为">SaveAs</string>
-         </property>
-        </widget>
-       </item>
-       <item row="32" column="4">
-        <widget class="QPushButton" name="pushButtonDeleteplace2">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="删除参数">Delete</string>
-         </property>
-        </widget>
-       </item>
-       <item row="32" column="3">
-        <widget class="QPushButton" name="pushButtonSaveAsPlace2">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="参数另存为">SaveAs</string>
-         </property>
-        </widget>
-       </item>
-       <item row="32" column="2">
-        <widget class="QPushButton" name="pushButtonDeleteplace1">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="删除参数">Delete</string>
-         </property>
-        </widget>
-       </item>
-       <item row="32" column="1">
-        <widget class="QPushButton" name="pushButtonSaveAsPlace1">
-         <property name="minimumSize">
-          <size>
-           <width>50</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string extracomment="参数另存为">SaveAs</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-    </layout>
+    <property name="sizePolicy">
+     <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+      <horstretch>0</horstretch>
+      <verstretch>0</verstretch>
+     </sizepolicy>
+    </property>
+    <property name="widgetResizable">
+     <bool>true</bool>
+    </property>
+    <widget class="QWidget" name="scrollAreaWidgetParam">
+     <property name="geometry">
+      <rect>
+       <x>0</x>
+       <y>-481</y>
+       <width>529</width>
+       <height>1499</height>
+      </rect>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <layout class="QGridLayout" name="gridLayout_2">
+        <property name="horizontalSpacing">
+         <number>3</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>10</number>
+        </property>
+        <item row="10" column="3">
+         <widget class="QPushButton" name="SetParamPcbAlnPRStrategy">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="修改">Modify</string>
+          </property>
+         </widget>
+        </item>
+        <item row="7" column="0">
+         <widget class="QLabel" name="label_4">
+          <property name="text">
+           <string extracomment="固前检测模板ID">BondFrontPRStrategyId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="43" column="0">
+         <widget class="QLabel" name="label_34">
+          <property name="text">
+           <string extracomment="固晶延时(ms)">PlaceDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="19" column="0">
+         <widget class="QLabel" name="label_13">
+          <property name="text">
+           <string extracomment="取晶参数:">PicParam:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="35" column="3">
+         <widget class="QPushButton" name="pushButtonSaveAsPlace2">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="参数另存为">SaveAs</string>
+          </property>
+         </widget>
+        </item>
+        <item row="5" column="4">
+         <widget class="QPushButton" name="CreatParamPickTemp">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="创建">Create</string>
+          </property>
+         </widget>
+        </item>
+        <item row="34" column="4">
+         <widget class="QComboBox" name="comboBoxCurrentPara_Place2">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>30</width>
+            <height>0</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="35" column="1">
+         <widget class="QPushButton" name="pushButtonSaveAsPlace1">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="参数另存为">SaveAs</string>
+          </property>
+         </widget>
+        </item>
+        <item row="36" column="1" colspan="2">
+         <widget class="QCheckBox" name="checkBoxBondBlockCheck">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QCheckBox" name="checkBoxIsCalib">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_79">
+          <property name="text">
+           <string extracomment="芯片高度">DieHeight</string>
+          </property>
+         </widget>
+        </item>
+        <item row="12" column="0">
+         <widget class="QLabel" name="label_8">
+          <property name="text">
+           <string extracomment="中转台取晶模板ID">CalibPRStrategyId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="9" column="0">
+         <widget class="QLabel" name="label_6">
+          <property name="text">
+           <string extracomment="固晶对点模板ID">BondAlnPRStrategyId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="19" column="1">
+         <widget class="QLabel" name="label_11">
+          <property name="text">
+           <string extracomment="取晶头取晶">WaferPick</string>
+          </property>
+         </widget>
+        </item>
+        <item row="23" column="0">
+         <widget class="QLabel" name="label_15">
+          <property name="text">
+           <string extracomment="漏晶检测">CheckLose</string>
+          </property>
+         </widget>
+        </item>
+        <item row="5" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxPickTempID"/>
+        </item>
+        <item row="25" column="0">
+         <widget class="QLabel" name="label_17">
+          <property name="text">
+           <string extracomment="预拾取偏差(um)">PreLevOffset(um)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="24" column="1" colspan="2">
+         <widget class="QCheckBox" name="checkBoxPickFindForceCheck">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="9" column="4">
+         <widget class="QPushButton" name="CreatParamBond">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="创建">Create</string>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="0">
+         <widget class="QLabel" name="label_81">
+          <property name="text">
+           <string extracomment="是否 PCB对点">IsPcbAln</string>
+          </property>
+         </widget>
+        </item>
+        <item row="34" column="0">
+         <widget class="QLabel" name="label_25">
+          <property name="text">
+           <string extracomment="固晶参数:">BondParam:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="5" column="3">
+         <widget class="QPushButton" name="SetParamPickTemp">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="修改">Modify</string>
+          </property>
+         </widget>
+        </item>
+        <item row="19" column="2">
+         <widget class="QComboBox" name="comboBoxCurrentPara_Pick1">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>30</width>
+            <height>0</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="34" column="2">
+         <widget class="QComboBox" name="comboBoxCurrentPara_Place1">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>30</width>
+            <height>0</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="5" column="0">
+         <widget class="QLabel" name="label_77">
+          <property name="text">
+           <string extracomment="取晶模板ID">PickPRStrategyId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="8" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxPostBondTemp"/>
+        </item>
+        <item row="10" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxPcbAlnPRStrategyId">
+          <property name="currentText">
+           <string extracomment="PCB 对点策略ID"/>
+          </property>
+         </widget>
+        </item>
+        <item row="43" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondDelay_2"/>
+        </item>
+        <item row="0" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxDieSource">
+          <property name="currentText">
+           <string extracomment="华夫盒">WAFFLE</string>
+          </property>
+          <property name="currentIndex">
+           <number>0</number>
+          </property>
+          <item>
+           <property name="text">
+            <string extracomment="华夫盒">WAFFLE</string>
+           </property>
+          </item>
+          <item>
+           <property name="text">
+            <string extracomment="晶圆台">WAFER</string>
+           </property>
+          </item>
+         </widget>
+        </item>
+        <item row="12" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxCalibPickTemp"/>
+        </item>
+        <item row="31" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickVacDelay_2"/>
+        </item>
+        <item row="11" column="3">
+         <widget class="QPushButton" name="SetParamLookUp">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="修改">Modify</string>
+          </property>
+         </widget>
+        </item>
+        <item row="42" column="0">
+         <widget class="QLabel" name="label_33">
+          <property name="text">
+           <string extracomment="拍照延时(ms)">GrabDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="44" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondBlockCheckDelay"/>
+        </item>
+        <item row="33" column="0" colspan="5">
+         <widget class="QLabel" name="label_29">
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+        <item row="20" column="1">
+         <widget class="QPushButton" name="pushButtonSaveAsPick1">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="参数另存为">SaveAs</string>
+          </property>
+         </widget>
+        </item>
+        <item row="19" column="3">
+         <widget class="QLabel" name="label">
+          <property name="text">
+           <string extracomment="中转台取晶">CalibPick</string>
+          </property>
+         </widget>
+        </item>
+        <item row="24" column="0">
+         <widget class="QLabel" name="label_16">
+          <property name="text">
+           <string extracomment="是否寻压">FindForce</string>
+          </property>
+         </widget>
+        </item>
+        <item row="23" column="3" colspan="2">
+         <widget class="QCheckBox" name="checkBoxPickLoseCheck_2">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="11" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxLookUpTemp"/>
+        </item>
+        <item row="38" column="0">
+         <widget class="QLabel" name="label_28">
+          <property name="text">
+           <string extracomment="是否寻压">FindForce</string>
+          </property>
+         </widget>
+        </item>
+        <item row="22" column="3" colspan="2">
+         <widget class="QCheckBox" name="checkBoxPickBlockCheck_2">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="7" column="4">
+         <widget class="QPushButton" name="CreatParamPreBond">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="创建">Create</string>
+          </property>
+         </widget>
+        </item>
+        <item row="39" column="3" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPreBondPosZ_2">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="34" column="1">
+         <widget class="QLabel" name="label_18">
+          <property name="text">
+           <string extracomment="中转台固晶">CalibBond</string>
+          </property>
+         </widget>
+        </item>
+        <item row="9" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxBondTemp"/>
+        </item>
+        <item row="27" column="3" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPickPosZ_2">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="24" column="3" colspan="2">
+         <widget class="QCheckBox" name="checkBoxPickFindForceCheck_2">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="30" column="0">
+         <widget class="QLabel" name="label_22">
+          <property name="text">
+           <string extracomment="阻塞/漏晶检测延时(ms)">BlockOrLoseDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="16" column="0" colspan="5">
+         <widget class="QLabel" name="label_30">
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="1">
+         <widget class="QCheckBox" name="checkBoxIsAllBondAln">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="35" column="4">
+         <widget class="QPushButton" name="pushButtonDeletePlace2">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="删除参数">Delete</string>
+          </property>
+         </widget>
+        </item>
+        <item row="7" column="3">
+         <widget class="QPushButton" name="SetParamPreBond">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="修改">Modify</string>
+          </property>
+         </widget>
+        </item>
+        <item row="44" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondBlockCheckDelay_2"/>
+        </item>
+        <item row="15" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetAngle">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="28" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickGrabDelay"/>
+        </item>
+        <item row="14" column="3" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetY">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="15" column="0">
+         <widget class="QLabel" name="label_12">
+          <property name="text">
+           <string extracomment="固晶点补偿角度">BondOffset Angle</string>
+          </property>
+         </widget>
+        </item>
+        <item row="31" column="0">
+         <widget class="QLabel" name="label_23">
+          <property name="text">
+           <string extracomment="真空延时(ms)">VacuumDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="46" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondBlowDelay_2"/>
+        </item>
+        <item row="45" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondVacDelay_2"/>
+        </item>
+        <item row="28" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickGrabDelay_2"/>
+        </item>
+        <item row="6" column="0">
+         <widget class="QLabel" name="label_78">
+          <property name="text">
+           <string extracomment="取晶吸嘴号">PickHeadId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="27" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPickPosZ">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="11" column="4">
+         <widget class="QPushButton" name="CreatParamLookUp">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="创建">Create</string>
+          </property>
+         </widget>
+        </item>
+        <item row="38" column="3" colspan="2">
+         <widget class="QCheckBox" name="checkBoxBondFindForce_2">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="37" column="0">
+         <widget class="QLabel" name="label_27">
+          <property name="text">
+           <string extracomment="漏晶检测">CheckLose</string>
+          </property>
+         </widget>
+        </item>
+        <item row="19" column="4">
+         <widget class="QComboBox" name="comboBoxCurrentPara_Pick2">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>30</width>
+            <height>0</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="35" column="2">
+         <widget class="QPushButton" name="pushButtonDeletePlace1">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="删除参数">Delete</string>
+          </property>
+         </widget>
+        </item>
+        <item row="8" column="4">
+         <widget class="QPushButton" name="CreatParamPostBond">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="创建">Create</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0">
+         <widget class="QLabel" name="label_80">
+          <property name="text">
+           <string extracomment="是否逐个固晶对点">IsAllBondAln</string>
+          </property>
+         </widget>
+        </item>
+        <item row="46" column="0">
+         <widget class="QLabel" name="label_37">
+          <property name="text">
+           <string extracomment="吹气延时(ms)">BlowDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="32" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickBlowDelay_2"/>
+        </item>
+        <item row="14" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetX">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_76">
+          <property name="text">
+           <string extracomment="是否中转">IsCalib</string>
+          </property>
+         </widget>
+        </item>
+        <item row="27" column="0">
+         <widget class="QLabel" name="label_75">
+          <property name="text">
+           <string extracomment="取晶偏差(um)">WorkLevOffset(um)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="22" column="0">
+         <widget class="QLabel" name="label_14">
+          <property name="text">
+           <string extracomment="阻塞检测">CheckBlock</string>
+          </property>
+         </widget>
+        </item>
+        <item row="22" column="1" colspan="2">
+         <widget class="QCheckBox" name="checkBoxPickBlockCheck">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="42" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondGrabDelay"/>
+        </item>
+        <item row="30" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickBlockCheckDelay"/>
+        </item>
+        <item row="45" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondVacDelay"/>
+        </item>
+        <item row="41" column="3" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxBondPosZ_2">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="12" column="3">
+         <widget class="QPushButton" name="SetParamCalibPick">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="修改">Modify</string>
+          </property>
+         </widget>
+        </item>
+        <item row="23" column="1" colspan="2">
+         <widget class="QCheckBox" name="checkBoxPickLoseCheck">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="25" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPrePickZ">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="13" column="0">
+         <widget class="QLabel" name="label_9">
+          <property name="text">
+           <string extracomment="固晶吸嘴号">BondHeadId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="8" column="0">
+         <widget class="QLabel" name="label_5">
+          <property name="text">
+           <string extracomment="固后检测模板ID">BondBackPRStrategyId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="20" column="4">
+         <widget class="QPushButton" name="pushButtonDeletePick2">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="删除参数">Delete</string>
+          </property>
+         </widget>
+        </item>
+        <item row="46" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondBlowDelay"/>
+        </item>
+        <item row="36" column="0">
+         <widget class="QLabel" name="label_26">
+          <property name="text">
+           <string extracomment="阻塞检测">CheckBlock</string>
+          </property>
+         </widget>
+        </item>
+        <item row="26" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPickForce">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="30" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickBlockCheckDelay_2"/>
+        </item>
+        <item row="39" column="0">
+         <widget class="QLabel" name="label_31">
+          <property name="text">
+           <string extracomment="预固晶偏差(um)">PreLevOffset(um)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="29" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickDelay"/>
+        </item>
+        <item row="42" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondGrabDelay_2"/>
+        </item>
+        <item row="37" column="3" colspan="2">
+         <widget class="QCheckBox" name="checkBoxBondLoseCheck_2">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="45" column="0">
+         <widget class="QLabel" name="label_36">
+          <property name="text">
+           <string extracomment="真空延时(ms)">VacuumDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="44" column="0">
+         <widget class="QLabel" name="label_35">
+          <property name="text">
+           <string extracomment="阻塞/漏晶检测延时(ms)">BlockOrLoseDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="32" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickBlowDelay"/>
+        </item>
+        <item row="29" column="0">
+         <widget class="QLabel" name="label_21">
+          <property name="text">
+           <string extracomment="取晶延时(ms)">PickDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="41" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxBondPosZ">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="40" column="0">
+         <widget class="QLabel" name="label_32">
+          <property name="text">
+           <string extracomment="固晶压力(g)">PlaceForce(g)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="47" column="0" colspan="5">
+         <widget class="QLabel" name="label_40">
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+        <item row="20" column="3">
+         <widget class="QPushButton" name="pushButtonSaveAsPick2">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="参数另存为">SaveAs</string>
+          </property>
+         </widget>
+        </item>
+        <item row="26" column="0">
+         <widget class="QLabel" name="label_19">
+          <property name="text">
+           <string extracomment="取晶压力(g)">PickForce(g)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="14" column="0">
+         <widget class="QLabel" name="label_10">
+          <property name="text">
+           <string extracomment="固晶点补偿X&amp;Y">BondOffset X&amp;Y</string>
+          </property>
+         </widget>
+        </item>
+        <item row="43" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxBondDelay"/>
+        </item>
+        <item row="9" column="3">
+         <widget class="QPushButton" name="SetParamBond">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="修改">Modify</string>
+          </property>
+         </widget>
+        </item>
+        <item row="26" column="3" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPickForce_2">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="34" column="3">
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string extracomment="固晶台固晶">Bond</string>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="1">
+         <widget class="QCheckBox" name="checkBoxIsPcbAln">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="31" column="1" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickVacDelay"/>
+        </item>
+        <item row="41" column="0">
+         <widget class="QLabel" name="label_38">
+          <property name="text">
+           <string extracomment="固晶偏差(um)">WorkLevOffset(um)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="29" column="3" colspan="2">
+         <widget class="SpinBox" name="spinBoxPickDelay_2"/>
+        </item>
+        <item row="20" column="2">
+         <widget class="QPushButton" name="pushButtonDeletePick1">
+          <property name="minimumSize">
+           <size>
+            <width>50</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string extracomment="删除参数">Delete</string>
+          </property>
+         </widget>
+        </item>
+        <item row="28" column="0">
+         <widget class="QLabel" name="label_20">
+          <property name="text">
+           <string extracomment="拍照延时(ms)">GrabDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="32" column="0">
+         <widget class="QLabel" name="label_24">
+          <property name="text">
+           <string extracomment="吹气延时(ms)">BlowDelay(ms)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="10" column="4">
+         <widget class="QPushButton" name="CreatParamPcbAlnPRStrategy">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="创建">Create</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="spinBoxDieHeight">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="12" column="4">
+         <widget class="QPushButton" name="CreatParamCalibPick">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="创建">Create</string>
+          </property>
+         </widget>
+        </item>
+        <item row="10" column="0">
+         <widget class="QLabel" name="label_39">
+          <property name="text">
+           <string extracomment="固晶对点模板ID">PcbAlnPRStrategyId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="25" column="3" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPrePickZ_2">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="40" column="3" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxBondForce_2">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="38" column="1" colspan="2">
+         <widget class="QCheckBox" name="checkBoxBondFindForce">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="8" column="3">
+         <widget class="QPushButton" name="SetParamPostBond">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string extracomment="修改">Modify</string>
+          </property>
+         </widget>
+        </item>
+        <item row="37" column="1" colspan="2">
+         <widget class="QCheckBox" name="checkBoxBondLoseCheck">
+          <property name="text">
+           <string>Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="11" column="0">
+         <widget class="QLabel" name="label_7">
+          <property name="text">
+           <string extracomment="上视对点模板ID">LookUpPRStrategyId</string>
+          </property>
+         </widget>
+        </item>
+        <item row="40" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxBondForce">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="39" column="1" colspan="2">
+         <widget class="DoubleSpinBox" name="doubleSpinBoxPreBondPosZ">
+          <property name="minimum">
+           <double>-1000000000.000000000000000</double>
+          </property>
+          <property name="maximum">
+           <double>1000000000.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="36" column="3" colspan="2">
+         <widget class="QCheckBox" name="checkBoxBondBlockCheck_2">
+          <property name="text">
+           <string extracomment="开启">Open</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_3">
+          <property name="text">
+           <string extracomment="晶粒来源">DieSource</string>
+          </property>
+         </widget>
+        </item>
+        <item row="7" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxPreBondTemp"/>
+        </item>
+        <item row="6" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxPickNozzleID"/>
+        </item>
+        <item row="13" column="1" colspan="2">
+         <widget class="QComboBox" name="comboBoxBondNozzleID"/>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
    </widget>
   </widget>
-  <widget class="QWidget" name="layoutWidget">
+  <widget class="QWidget" name="layoutWidget_2">
    <property name="geometry">
     <rect>
      <x>0</x>
-     <y>0</y>
+     <y>280</y>
      <width>431</width>
      <height>30</height>
     </rect>
    </property>
-   <layout class="QHBoxLayout" name="horizontalLayout">
+   <layout class="QHBoxLayout" name="horizontalLayout_2">
     <item>
-     <widget class="QComboBox" name="comboBoxCurrentMatrix"/>
+     <widget class="QComboBox" name="comboBoxCurrentPara"/>
     </item>
     <item>
-     <spacer name="horizontalSpacer">
+     <spacer name="horizontalSpacer_2">
       <property name="orientation">
        <enum>Qt::Horizontal</enum>
       </property>
       <property name="sizeHint" stdset="0">
        <size>
-        <width>40</width>
+        <width>43</width>
         <height>20</height>
        </size>
       </property>
      </spacer>
     </item>
     <item>
-     <widget class="QPushButton" name="pushButtonAddOutMatrix">
+     <widget class="QPushButton" name="pushButtonDeleteParam">
       <property name="minimumSize">
        <size>
-        <width>150</width>
+        <width>100</width>
         <height>0</height>
        </size>
       </property>
       <property name="text">
-       <string extracomment="增加矩阵">AddMatrix</string>
+       <string extracomment="删除参数">DeleteParam</string>
       </property>
      </widget>
     </item>
     <item>
-     <widget class="QPushButton" name="pushButtonSave">
+     <widget class="QPushButton" name="pushButtonSaveParaAs">
       <property name="minimumSize">
        <size>
-        <width>150</width>
+        <width>100</width>
         <height>0</height>
        </size>
       </property>
       <property name="text">
-       <string extracomment="保存矩阵">SaveMatrix</string>
+       <string extracomment="参数另存为">SaveParamAs</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QPushButton" name="pushButtonSavePara">
+      <property name="minimumSize">
+       <size>
+        <width>100</width>
+        <height>0</height>
+       </size>
+      </property>
+      <property name="text">
+       <string extracomment="保存参数">SaveParam</string>
       </property>
      </widget>
     </item>
    </layout>
   </widget>
-  <widget class="QWidget" name="layoutWidget_2">
+  <widget class="QWidget" name="layoutWidget">
    <property name="geometry">
     <rect>
      <x>0</x>
-     <y>280</y>
+     <y>0</y>
      <width>431</width>
      <height>30</height>
     </rect>
    </property>
-   <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <layout class="QHBoxLayout" name="horizontalLayout">
     <item>
-     <widget class="QComboBox" name="comboBoxCurrentPara"/>
+     <widget class="QComboBox" name="comboBoxCurrentMatrix"/>
     </item>
     <item>
-     <spacer name="horizontalSpacer_2">
+     <spacer name="horizontalSpacer">
       <property name="orientation">
        <enum>Qt::Horizontal</enum>
       </property>
       <property name="sizeHint" stdset="0">
        <size>
-        <width>40</width>
+        <width>43</width>
         <height>20</height>
        </size>
       </property>
      </spacer>
     </item>
     <item>
-     <widget class="QPushButton" name="pushButtonDeleteParam">
-      <property name="minimumSize">
-       <size>
-        <width>100</width>
-        <height>0</height>
-       </size>
-      </property>
-      <property name="text">
-       <string extracomment="删除参数">DeleteParam</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QPushButton" name="pushButtonSaveParaAs">
+     <widget class="QPushButton" name="pushButtonAddOutMatrix">
       <property name="minimumSize">
        <size>
-        <width>100</width>
+        <width>150</width>
         <height>0</height>
        </size>
       </property>
       <property name="text">
-       <string extracomment="参数另存为">SaveParamAs</string>
+       <string extracomment="增加矩阵">AddMatrix</string>
       </property>
      </widget>
     </item>
     <item>
-     <widget class="QPushButton" name="pushButtonSavePara">
+     <widget class="QPushButton" name="pushButtonSave">
       <property name="minimumSize">
        <size>
-        <width>100</width>
+        <width>150</width>
         <height>0</height>
        </size>
       </property>
       <property name="text">
-       <string extracomment="保存参数">SaveParam</string>
+       <string extracomment="保存矩阵">SaveMatrix</string>
       </property>
      </widget>
     </item>

+ 27 - 35
View/die-bonder-ui/Src/Sql/SqlOperation.cpp

@@ -291,16 +291,15 @@ int SqlOperation::loadAllControlData()
     m_allControlData.clear();
     QList<QString> moduleTableNameList;
     //moduleTableNameList.append(BONDHEAD_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(WAFERHEAD_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(WAFFLEHEAD_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(EJECTOR_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(WAFERTABLE_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(WAFER_CALIB_TABLE_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(WAFFLE_CALIB_TABLE_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(BOND_TABLE_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(NOZZLE_TABLE_CONFIG_TABLE_NAME);
-    moduleTableNameList.append(ULTRAHEAD_TABLE_NAME);
-    moduleTableNameList.append(ULTRAHEAD_DIAGNOSIS_TABLE_NAME);
+    for (size_t i = 0; i < g_vetModuleConfigTableName.size(); i++)
+    {
+        moduleTableNameList.append(QString::fromStdString(g_vetModuleConfigTableName[i]));
+    }
+
+    for (size_t i = 0; i < g_vetCalibrationConfigTableName.size(); i++)
+    {
+        moduleTableNameList.append(QString::fromStdString(g_vetCalibrationConfigTableName[i]));
+    }
 
     for (QString& dbName : moduleTableNameList)
     {
@@ -350,19 +349,21 @@ int SqlOperation::loadAllControlData()
     }
 
 
-    ST_TABLE_CONTROL_DATA controlData;
-    int rtn = LoadControlDataFromModule(CALIB_XY_TABLE_NAME, controlData);  
-    if (rtn == 0) { m_allControlData.append(controlData); }
+    //ST_TABLE_CONTROL_DATA controlData;
+    //int rtn = LoadControlDataFromModule(CALIB_XY_TABLE_NAME, controlData);  
+    //if (rtn == 0) { m_allControlData.append(controlData); }
 
 
-    rtn = LoadControlDataFromModule(CALIB_CTD_TABLE_NAME, controlData);
-    if (rtn == 0) { m_allControlData.append(controlData); }
+    //rtn = LoadControlDataFromModule(CALIB_CTD_TABLE_NAME, controlData);
+    //if (rtn == 0) { m_allControlData.append(controlData); }
 
-    rtn = LoadControlDataFromModule(CALIB_R_TABLE_NAME, controlData);
-    if (rtn == 0) { m_allControlData.append(controlData); }
+    //rtn = LoadControlDataFromModule(CALIB_R_TABLE_NAME, controlData);
+    //if (rtn == 0) { m_allControlData.append(controlData); }
 
-    rtn = LoadControlDataFromModule(FORCE_CONTROL_TABLE_NAME, controlData);
-    if (rtn == 0) { m_allControlData.append(controlData); }
+    //rtn = LoadControlDataFromModule(FORCE_CONTROL_TABLE_NAME, controlData);
+    //if (rtn == 0) { m_allControlData.append(controlData); }
+
+    int rtn = 0;
 
     for (auto it = m_mapAllDirectories.begin(); it != m_mapAllDirectories.end(); ++it)
     {
@@ -388,6 +389,7 @@ int SqlOperation::loadAllControlData()
                     }
                     m_allControlData.append(controlDatas);
                 }
+
                 
             }
         }
@@ -730,22 +732,12 @@ void SqlOperation::ErrorInfo(const QString& strError)
 
 bool SqlOperation::isModuleTable(QString tableName)
 {
-    if (tableName == BONDHEAD_CONFIG_TABLE_NAME ||
-        tableName == WAFERHEAD_CONFIG_TABLE_NAME ||
-        tableName == WAFFLEHEAD_CONFIG_TABLE_NAME ||
-        tableName == EJECTOR_CONFIG_TABLE_NAME ||
-        tableName == WAFERTABLE_CONFIG_TABLE_NAME ||
-        tableName == WAFER_CALIB_TABLE_CONFIG_TABLE_NAME ||
-        tableName == WAFFLE_CALIB_TABLE_CONFIG_TABLE_NAME ||
-        tableName == BOND_TABLE_CONFIG_TABLE_NAME ||
-        tableName == NOZZLE_TABLE_CONFIG_TABLE_NAME ||
-        tableName == ULTRAHEAD_TABLE_NAME ||
-        tableName == ULTRAHEAD_DIAGNOSIS_TABLE_NAME ||
-        tableName == CALIB_CTD_TABLE_NAME ||
-        tableName == CALIB_XY_TABLE_NAME ||
-        tableName == CALIB_R_TABLE_NAME)
-    {
-        return true;
+    for (size_t i = 0; i < g_vetModuleConfigTableName.size(); i++)
+    {
+        if (g_vetModuleConfigTableName[i] == tableName.toStdString())
+        {
+            return true;
+        }
     }
     return false;
 }

+ 335 - 0
View/die-bonder-ui/Src/common/JUGWatch/CUGWatch.cpp

@@ -0,0 +1,335 @@
+// *****************************************************************************
+// 版权所有(C)2023~2099 上海骄成超声波技术有限公司
+// 保留所有权利
+// *****************************************************************************
+// 作者 : 杨坚
+// 版本 : 1.0
+// 功能说明:
+// 
+// *****************************************************************************
+#include "CUGWatch.h"
+#include "../JLogAllOutput.h"
+
+
+CUGWatch::CUGWatch()
+{
+    ReadConfig();
+}
+
+CUGWatch::~CUGWatch()
+{
+
+}
+
+void CUGWatch::ReadConfig()
+{
+    ComParameter com = {};
+    com.nSerialPortNumber = 1;
+    com.nBaudRate = 65535;
+
+
+
+    m_comPar.push_back(com);
+
+    m_cUGSerial.reset(new CRS232());
+}
+
+bool CUGWatch::GetUserParaUT100(int& iMode, int& iVolFullScale, int& iCurFullScale, int& iPowFullScale, int& iSignSns, int& iTestLev, int iOverTime/* = 2000*/)
+{
+    bool bRtn = false;
+    iMode = 0;
+    iVolFullScale = 0;
+    iCurFullScale = 0;
+    iPowFullScale = 0;
+    iSignSns = 0;
+    iTestLev = 0;
+
+    if (COM_OK == JOpenPort())
+    {
+        m_cUGSerial->ClearBuffer();
+        Sleep(10);
+
+        // 读取当前编码器
+        unsigned char uiDataBuf[100] = { 0 };
+        int iDataLen = 0;
+        uiDataBuf[iDataLen++] = 0xFF;					//起始标志
+        uiDataBuf[iDataLen++] = 0x90;					//命令
+
+        //发送
+        if (iDataLen != m_cUGSerial->SerialPortWrite(iDataLen, (char*)uiDataBuf))
+        {
+            JLogAllOutput::cmd_debug("Write Error");
+        }
+        else
+        {
+            Sleep(200);
+            //读串口
+            unsigned char bufRev[100] = { 0 };
+            int len = sizeof(bufRev);
+            int bytes = m_cUGSerial->SerialPortRead(len, (char*)bufRev, 1000);
+            if (bytes >= 1)
+            {
+                if (9 == bytes)
+                {
+                    iSignSns = (bufRev[2] & 0xF0) >> 4;
+                    iVolFullScale = (bufRev[3] & 0xF0) >> 4;
+                    iCurFullScale = (bufRev[4] & 0xF0) >> 4;
+                    iPowFullScale = (bufRev[5] & 0xF0) >> 4;
+                    iMode = (bufRev[6] & 0xF0) >> 4;
+                    iMode += 1;					//为了和UT60统一
+                    iTestLev = (bufRev[8] & 0xF0) >> 4;
+                    bRtn = TRUE;
+                }
+            }
+        }
+    }
+
+    JClosePort();
+
+    return bRtn;
+}
+
+bool CUGWatch::SetUserParaUT100(int iMode, int iVolFullScale, int iCurFullScale, int iPowFullScale, int iSignSns, int iTestLev, int iOverTime/* = 2000*/)
+{
+    bool bRtn = false;
+
+    if (COM_OK == JOpenPort())
+    {
+        // 写入
+
+        unsigned char uiDataBuf[100] = { 0 };
+        int iDataLen = 0;
+        uiDataBuf[iDataLen++] = 0xFF;					//起始标志
+        uiDataBuf[iDataLen++] = 0x50;					//命令
+        uiDataBuf[iDataLen++] = iSignSns << 4;			//信号极性
+        uiDataBuf[iDataLen++] = iVolFullScale << 4;		//电压量程
+        uiDataBuf[iDataLen++] = iCurFullScale << 4;		//电流量程
+        uiDataBuf[iDataLen++] = iPowFullScale << 4;		//功率量程
+        uiDataBuf[iDataLen++] = (iMode - 1) << 4;			//工作模式,为了和UT60统一
+        uiDataBuf[iDataLen++] = 0x00;					//00
+        uiDataBuf[iDataLen++] = iTestLev << 4;			//测试输出等级
+        //发送
+        if (iDataLen != m_cUGSerial->SerialPortWrite(iDataLen, (char*)uiDataBuf))
+        {
+            JLogAllOutput::cmd_debug("Write Error");
+        }
+        else
+        {
+            Sleep(200);
+            while (1)
+            {
+                //读串口
+                unsigned char bufRev[100] = { 0 };
+                int len = sizeof(bufRev);
+                int bytes = m_cUGSerial->SerialPortRead(len, (char*)bufRev, 1000);
+                if (bytes >= 1)
+                {
+                    if (2 == bytes && 0xFF == bufRev[0] && 0x50 == bufRev[1])
+                    {
+                        bRtn = TRUE;
+                    }
+                    goto _label_exit;
+                }
+
+                Sleep(5);
+            }
+        }
+    }
+
+   
+_label_exit:
+    JClosePort();
+    return bRtn;
+}
+
+bool CUGWatch::SetCaliCenterFrqUT100(int iCenterFrq, int iOverTime /*= 2000*/)
+{
+    bool bRtn = false;
+
+    if (COM_OK == JOpenPort())
+    {
+        unsigned char uiDataBuf[100] = { 0 };
+        int iDataLen = 0;
+        uiDataBuf[iDataLen++] = 0xFF;					//起始标志
+        uiDataBuf[iDataLen++] = 0x60;					//命令
+        uiDataBuf[iDataLen++] = (iCenterFrq & 0XFF000000) >> 24;			//A通道中心频率:2位最高位,5为最低位
+        uiDataBuf[iDataLen++] = (iCenterFrq & 0XFF0000) >> 16;		//
+        uiDataBuf[iDataLen++] = (iCenterFrq & 0XFF00) >> 8;		//
+        uiDataBuf[iDataLen++] = iCenterFrq & 0XFF;		//
+        uiDataBuf[iDataLen++] = (iCenterFrq & 0XFF000000) >> 24;			//B通道中心频率:6位最高位,9为最低位
+        uiDataBuf[iDataLen++] = (iCenterFrq & 0XFF0000) >> 16;		//
+        uiDataBuf[iDataLen++] = (iCenterFrq & 0XFF00) >> 8;		//
+        uiDataBuf[iDataLen++] = iCenterFrq & 0XFF;		//
+
+        //发送
+        if (iDataLen != m_cUGSerial->SerialPortWrite(iDataLen, (char*)uiDataBuf))
+        {
+            JLogAllOutput::cmd_debug("Write Error");
+        }
+        else
+        {
+            Sleep(200);
+
+            while (1)
+            {
+                //读串口
+                unsigned char bufRev[100] = { 0 };
+                int len = sizeof(bufRev);
+                int bytes = m_cUGSerial->SerialPortRead(len, (char*)bufRev, 1000);
+                if (bytes >= 1)
+                {
+                    if (2 == bytes && 0xFF == bufRev[0] && 0x60 == bufRev[1])
+                    {
+                        bRtn = TRUE;
+                    }
+                    goto _label_exit;
+                }
+
+                Sleep(5);
+            }
+        }
+    }
+    
+_label_exit:
+    JClosePort();
+
+    return bRtn;
+}
+
+bool CUGWatch::CalibrationUG_UT100()
+{
+    bool bRtn = false;
+    if (COM_OK == JOpenPort())
+    {
+        //Write 发送校准
+        unsigned char uiDataBuf[10] = { 0 };
+        int iDataLen = 0;
+        uiDataBuf[iDataLen++] = 0xFF;					//起始标志
+        uiDataBuf[iDataLen++] = 0x61;					//命令
+        uiDataBuf[iDataLen++] = 0x01;
+        //发送
+        if (iDataLen != m_cUGSerial->SerialPortWrite(iDataLen, (char*)uiDataBuf))
+        {
+            JLogAllOutput::cmd_debug("Write Error");
+        }
+        else
+        {
+            //Read
+            unsigned char ucDataBuf[256] = { 0 };
+            long lCount = 0;
+
+            bool bReading = FALSE;
+            while (1)
+            {
+                //读串口
+                unsigned char bufRev;
+                int len = sizeof(bufRev);
+                int bytes = m_cUGSerial->SerialPortRead(1, (char*)bufRev, 1000);
+                if (bytes >= 1)
+                {
+                    bReading = TRUE;
+                    ucDataBuf[lCount] = bufRev;
+                    lCount++;
+                }
+                else if (bReading)
+                {
+                    break;
+                }
+            }
+
+            //校验下
+            {
+                if (ucDataBuf[0] != 0xFF || ucDataBuf[1] != 0x61)
+                {
+                    goto _label_exit;
+                }
+                else
+                {
+                    bRtn = TRUE;
+                }
+            }
+        } 
+    }
+_label_exit:
+
+    JClosePort();
+
+    return bRtn;
+}
+
+bool CUGWatch::CheckCaliFinish()
+{
+    bool bRtn = false;
+    if (COM_OK == JOpenPort())
+    {
+        unsigned char uiDataBuf[10] = { 0 };
+        int iDataLen = 0;
+        uiDataBuf[iDataLen++] = 0xFF;					//起始标志
+        uiDataBuf[iDataLen++] = 0x62;					//命令
+
+        //Write 发送校准
+        if (iDataLen != m_cUGSerial->SerialPortWrite(iDataLen, (char*)uiDataBuf))
+        {
+            JLogAllOutput::cmd_debug("Write Error");
+            goto _label_exit;
+        }
+        //Read
+        unsigned char ucDataBuf[256] = { 0 };
+        long lCount = 0;
+
+        bool bReading = FALSE;
+        while (1)
+        {
+            //读串口
+            unsigned char bufRev;
+            int len = sizeof(bufRev);
+            int bytes = m_cUGSerial->SerialPortRead(1, (char*)bufRev, 1000);
+            if (bytes >= 1)
+            {
+                bReading = TRUE;
+                ucDataBuf[lCount] = bufRev;
+                lCount++;
+            }
+            else if (bReading)
+            {
+                break;
+            }
+        }
+
+        //校验下
+        {
+            if (ucDataBuf[0] != 0xFF || ucDataBuf[1] != 0x62)
+            {
+                goto _label_exit;
+            }
+            else
+            {
+                bRtn = true;
+            }
+        }
+    }
+_label_exit:
+
+    JClosePort();
+
+    return bRtn;
+}
+
+int CUGWatch::JOpenPort()
+{
+    JClosePort();
+    ComParameter comOne = m_comPar[EN_COM_NUMBER::ONE];
+    return m_cUGSerial->OpenPort(comOne.nSerialPortNumber,
+        comOne.nBaudRate,
+        comOne.nDataBits,//xDataSize?
+        comOne.nParity,
+        comOne.nStopBits,
+        MAX_COM_BUFFER_LEN, MAX_COM_BUFFER_LEN, 1000
+    );
+}
+
+void CUGWatch::JClosePort()
+{
+    m_cUGSerial->ClearBuffer();
+    m_cUGSerial->ClosePort();
+}

+ 77 - 0
View/die-bonder-ui/Src/common/JUGWatch/CUGWatch.h

@@ -0,0 +1,77 @@
+// *****************************************************************************
+// 版权所有(C)2023~2099 上海骄成超声波技术有限公司
+// 保留所有权利
+// *****************************************************************************
+// 作者 : 杨坚
+// 版本 : 1.0
+// 功能说明:
+//          发生器,协议
+// *****************************************************************************
+#ifndef __CUGWATCH_H__
+#define __CUGWATCH_H__ 1
+
+#include <CRS232.h>
+#include <vector>
+#define MAX_COM_BUFFER_LEN 256
+
+// 端口配置参数,//TODO:目前只有一个,多个的话在封装,目前先实现功能
+struct ComParameter
+{
+    int  nSerialPortNumber;       // 串口号
+    int  nBaudRate;               // 波特率 0~ 65535
+    int  nDataBits;               //数据位为8位
+    int  nFlowControl;            //无流控制
+    int  nParity;                 //无校验位
+    int  nStopBits;               //一位停止位
+};
+
+// 串口数量
+enum EN_COM_NUMBER
+{
+    ONE,
+    TWO
+};
+
+
+class CUGWatch
+{
+public:
+    CUGWatch();
+    ~CUGWatch();
+
+    void ReadConfig();
+
+    //void aaa();
+    bool GetUserParaUT100(int& iMode, int& iVolFullScale, int& iCurFullScale, int& iPowFullScale, int& iSignSns, int& iTestLev, int iOverTime = 2000);
+
+    bool SetUserParaUT100(int iMode, int iVolFullScale, int iCurFullScale, int iPowFullScale, int iSignSns, int iTestLev, int iOverTime = 2000);
+
+    //设置标定中心频率
+    bool SetCaliCenterFrqUT100(int iCenterFrq, int iOverTime = 2000);
+
+    /**校准数据
+     */
+    bool CalibrationUG_UT100();
+
+    /**检查完成
+     */
+    bool CheckCaliFinish();
+
+    /**打开端口
+     */
+    int JOpenPort();
+
+    void JClosePort();
+private:
+    std::unique_ptr<CRS232> m_cUGSerial;
+
+    /**自定义可以多个
+     */
+    std::vector<ComParameter> m_comPar;
+
+    int iUGUserPara[6] = { 0 };
+};
+
+#endif  //__CUGWATCH_H__
+
+

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.