JonYang 1 dag sedan
förälder
incheckning
6b53d62918
36 ändrade filer med 318 tillägg och 99 borttagningar
  1. BIN
      Output/bin/x64/Control.dll
  2. BIN
      Output/bin/x64/Control.pdb
  3. BIN
      Output/bin/x64/Module.dll
  4. BIN
      Output/bin/x64/Module.pdb
  5. BIN
      Output/bin/x64/configurations.db
  6. BIN
      Output/config/db/MachineCalibration.db
  7. BIN
      Output/config/db/ModuleConfig.db
  8. BIN
      Output/dll/x64/Control.dll
  9. BIN
      Output/dll/x64/Module.dll
  10. 1 0
      Output/inc/Control/CViewInterface.h
  11. 2 0
      Output/inc/Module/CConfigBase.h
  12. 1 1
      Output/inc/Module/CEjector.h
  13. 9 3
      Output/inc/Module/CForceControl.h
  14. 2 0
      Output/inc/Module/CMachineCalibration.h
  15. 4 0
      Output/inc/Module/CWaferTable.h
  16. 3 2
      Output/inc/Module/CXYCalib.h
  17. 1 0
      Output/inc/Module/Machine.h
  18. BIN
      Output/lib/x64/Common.lib
  19. BIN
      Output/lib/x64/Control.lib
  20. BIN
      Output/lib/x64/Module.lib
  21. 0 1
      View/die-bonder-ui/Login.cpp
  22. 6 0
      View/die-bonder-ui/Login.ui
  23. 2 2
      View/die-bonder-ui/MainWnd.h
  24. 103 3
      View/die-bonder-ui/OriginalWnd/DbTreeViewManager.cpp
  25. 18 1
      View/die-bonder-ui/OriginalWnd/DbTreeViewManager.h
  26. 45 67
      View/die-bonder-ui/OriginalWnd/MainAndSecondaryCamerasWnd.cpp
  27. 0 3
      View/die-bonder-ui/SBTdie-bonder-ui.pro
  28. 2 1
      View/die-bonder-ui/Src/CameraBind.h
  29. 10 3
      View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.cpp
  30. 1 1
      View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.h
  31. 25 8
      View/die-bonder-ui/Src/RewriteControl/LightJoystickSwitchPage.cpp
  32. 0 1
      View/die-bonder-ui/Src/RewriteControl/LightJoystickSwitchPage.h
  33. 10 2
      View/die-bonder-ui/Src/Sql/SqlOperation.cpp
  34. 1 0
      View/die-bonder-ui/Src/Sql/SqlOperation.h
  35. 70 0
      View/die-bonder-ui/Src/common/GlobalUse/JMouseMonitorThread.cpp
  36. 2 0
      View/die-bonder-ui/Src/common/GlobalUse/JMouseMonitorThread.h

BIN
Output/bin/x64/Control.dll


BIN
Output/bin/x64/Control.pdb


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/dll/x64/Control.dll


BIN
Output/dll/x64/Module.dll


+ 1 - 0
Output/inc/Control/CViewInterface.h

@@ -36,6 +36,7 @@ namespace ns_module
 		Machine* m_pMachine = nullptr;
 		CCameraManage* m_pCameraManage = nullptr;
 		CBondHead* m_pBondHead = nullptr;
+		CWaferTable* m_pWaferTable = nullptr;
 		CResources* m_pResource = nullptr;
 		CDieBondFsm* m_pDieBondFsm = nullptr;
 		LONG Init();

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

@@ -41,8 +41,10 @@ namespace ns_db
 		string strLowerLimit = "-1000000";
 		string strUpperLimit = "1000000";
 		string strUnit = "um";
+		string strAxisType = "";
 		string sIcon = "";
 		bool bEnable = true;
+
 		string strCallFun = "";
 	}CONFIG_BASE_STRUCT;
 

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

@@ -2,7 +2,7 @@
 #include "CModule.h"
 
 
-class CEjector : public CModule
+class __declspec(dllexport) CEjector : public CModule
 {
 	typedef struct
 	{

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

@@ -32,7 +32,7 @@ public:
      * @param zAxis Z 轴对象指针,用于控制 Z 方向的运动
      * @param forceAxis 力轴对象指针,用于控制与力相关的操作
      */
-    CForceControl(int HeadID, /*std::string headName,*/ CAxis* xAxis, CAxis* yAxis, CAxis* zAxis, CIO* forceAxis, CIO* forceScale = nullptr);
+    CForceControl(int HeadID, std::string headName, CAxis* xAxis, CAxis* yAxis, CAxis* zAxis, CIO* forceAxis, CIO* forceScale = nullptr);
 
     /**
      * @brief 析构函数
@@ -114,6 +114,8 @@ public:
      */
     LONG GetParam();
 
+    LONG SetParam();
+
     /**
      * @brief 力值转换为电流值的函数
      * @param force 输入的力值
@@ -140,9 +142,13 @@ public:
 
     //void SetAI(CIO* AI) {
     //    m_pForceScale = AI;
-    //}
+    //}、
+
+private:
+    void DataChangNotice(string strDbName, string strTableName);
 
 private:
+    vector<MODULE_CONFIG_STRUCT> m_vecConfigStruct;
     CAxis* m_pAxisX = nullptr;  // X 轴对象指针,用于控制 X 方向的运动
     CAxis* m_pAxisY = nullptr;  // Y 轴对象指针,用于控制 Y 方向的运动
     CAxis* m_pAxisZ = nullptr;  // Z 轴对象指针,用于控制 Z 方向的运动
@@ -150,7 +156,7 @@ private:
 //CAxis* m_pAxisForce = nullptr;  // 力轴对象指针,用于控制与力相关的操作
     CIO* m_pForcerAO = nullptr;
     CIO* m_pForceScale = nullptr;
-    CMachineCalibration* m_pMcCalibDB = nullptr;  // 机器标定数据库对象指针,用于存储和获取标定数据
+    CCalibrationConfig* m_pMcCalibDB = nullptr;  // 机器标定数据库对象指针,用于存储和获取标定数据
 
     FORCE_CONTROL m_stParam;  // 力控参数结构体,存储力控系统的相关参数
 

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

@@ -119,6 +119,8 @@ namespace ns_db
         double dA2 = 1;     //弹簧系数
         double dB = 0;
         double dGivenForceZPos = 0;//压合距离,用于判断接触
+        std::string sCurrentPts = "";
+        std::string sForceResults = "";
         vector<POINTF> vetPts;   //POINTF的x为力或电流
         double dGivenCurrent = 0;//压合距离,用于判断接触
         vector<POINTF> vetForcePos;   //POINTF的x为力或电流

+ 4 - 0
Output/inc/Module/CWaferTable.h

@@ -93,6 +93,10 @@ public:
     //设置3点画圆软限位的半径及圆心(圆心就是旋转中心)
     LONG SetSoftLimitRadius(SOFTLIMITTYPE nSoftLimitType, XY_LONG_STRUCT stPosn1, XY_LONG_STRUCT stPosn2, XY_LONG_STRUCT stPosn3);
 
+    LONG CreateCameraCalibTemplate();
+    LONG CameraCalib();
+
+    LONG CreateDieTemplate();//创建搜索晶片模板
     LONG CreateTemplate(SEARCH_OUT eResultSelect, UINT& iTemplateId);
     LONG CreatePrStrategy(vector<UINT> vecTemplateId);
 private:

+ 3 - 2
Output/inc/Module/CXYCalib.h

@@ -11,6 +11,7 @@
 
 
 struct CALIB_XY_PARAM {
+    double dZSafePos = 0;
     double dCenterPosX = 0;               //九点中间点的X坐标
     double dCenterPosY = 0;               //九点中间点的Y坐标
     double dGrabPosZ = 0;                 //标定时Z轴位置
@@ -64,7 +65,7 @@ public:
      * @param id PR的唯一标识符
      */
     void SetPRID(int id) { 
-        m_stCalibParam_XY.nTempId = id;
+        m_stCalibParam.nTempId = id;
         SetParam();
     }
 
@@ -121,7 +122,7 @@ private:
     vector<MODULE_CONFIG_STRUCT> m_vecConfigStruct;
     // 存储XY标定的参数
     //CALIB_XY m_stCalibXYParam;
-    CALIB_XY_PARAM  m_stCalibParam_XY;
+    CALIB_XY_PARAM  m_stCalibParam;
     // 存储9个标定位置的物理坐标
     std::vector<JVision::Point2D> m_positions;
 

+ 1 - 0
Output/inc/Module/Machine.h

@@ -72,6 +72,7 @@ public:
 	CWafflePackHead* GetWafflePackHead() { return m_pWaffleHead; }
 	CWaferHead* GetWaferHead() { return m_pWaferHead; };
 	CWaferTable* GetWaferTable() { return m_pWaferTable; }
+	CEjector* GetEjector() { return m_pEjector; }
 	CResources* GetResources() { return m_pResource; };
 	//AxesMapPage* GetMotionAxesMapPage(){
 	//	return m_pMotion->getMapPage();

BIN
Output/lib/x64/Common.lib


BIN
Output/lib/x64/Control.lib


BIN
Output/lib/x64/Module.lib


+ 0 - 1
View/die-bonder-ui/Login.cpp

@@ -57,7 +57,6 @@ void Login::onUserNameChanged(const QString &userName)
 
 void Login::on_SinginButton_clicked()
 {
-
     emit SendSwitchOriginalWndSignals();
     return;
 

+ 6 - 0
View/die-bonder-ui/Login.ui

@@ -37,6 +37,9 @@
        <pointsize>14</pointsize>
       </font>
      </property>
+     <property name="text">
+      <string>1</string>
+     </property>
     </widget>
     <widget class="QLineEdit" name="passLineEdit">
      <property name="geometry">
@@ -52,6 +55,9 @@
        <pointsize>14</pointsize>
       </font>
      </property>
+     <property name="text">
+      <string>1</string>
+     </property>
      <property name="echoMode">
       <enum>QLineEdit::Password</enum>
      </property>

+ 2 - 2
View/die-bonder-ui/MainWnd.h

@@ -51,10 +51,10 @@ private:
     void LoadLoginPage();
 protected:
     void applyTheme(int themeValue);
-    void isListening();
+
     bool eventFilter(QObject* obj, QEvent* event);
-    void setTabIcon(QToolButton* tabBtn, const QString& deepIconPath, const QString& lightIconPath);
 
+    int m_aaaaaa = 0;
     /**切换侧边栏
      */
     void SwitchToConfig(void (OriginalWnd::* switchMethod)());

+ 103 - 3
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.cpp

@@ -115,6 +115,7 @@ void DbTreeViewManager::Init()
     m_pCModel       = new QStandardItemModel(this);
 
     m_sqlOper       = &SqlOperation::GetInstance();
+    m_pTreeCViewInterface.reset(ns_module::CViewInterface::GetInstance());
 }
 
 // 创建横线样式
@@ -1037,11 +1038,14 @@ void DbTreeViewManager::onTreeViewClicked(const QModelIndex &index)
     // 是否第三层,提取第三层的目录ID及目录表格名字
     bool isThird = false;
     int dirId = -1;
+    QString strModuleType; // 模组
+
     //QString dirTableName = "";
     QString mutliTableName = "";
     QVariant dataVar = item->data(Qt::UserRole + 2);
     if (dataVar.canConvert<QJsonObject>()) {
         QJsonObject obj = dataVar.toJsonObject();
+        qDebug() << " AAkey :" << obj;
         if (obj.contains("IsThirdLevel") && obj["IsThirdLevel"].toBool()) {
             isThird = true;
             if (obj.contains("Id")) {
@@ -1052,6 +1056,12 @@ void DbTreeViewManager::onTreeViewClicked(const QModelIndex &index)
                 mutliTableName = obj["TableName"].toString();
             }
 
+            if (obj.contains("ModuleType"))
+            {
+                strModuleType = obj["ModuleType"].toString();
+                m_strModuleTypeAAA = strModuleType;
+            }
+
         }
     }
 
@@ -1872,6 +1882,16 @@ QModelIndex DbTreeViewManager::findLastVisibleChild(const QModelIndex &parentInd
 //    m_thirdLevelFieldWnd->show();
 //}
 
+
+QString extractBeforeComma(const QString& input)
+{
+    int commaPos = input.indexOf(',');
+    if (commaPos != -1) {
+        return input.left(commaPos);
+    }
+    return input;
+}
+
 void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>& data, bool allChangeFlag, bool isHome)
 {
     if (data.isEmpty())
@@ -1965,9 +1985,11 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
                 QString fieldUpLimit = QString::fromStdString(control.strUpperLimit);
                 QString fieldDownLimit = QString::fromStdString(control.strLowerLimit);
                 QString fieldUnits = QString::fromStdString(control.strUnit);
+                QString strAxisType = QString::fromStdString(control.strAxisType);
+                QString strstrModuleType = m_strModuleTypeAAA;
                 int groupId = control.iGroupId;
 
-                QString fieldTableName = tableData.tableName;
+                QString fieldTableName = extractBeforeComma(tableData.tableName);
 
                 // 如果组变化,插入分隔线
                 if (previousGroupId != -1 && groupId != previousGroupId)
@@ -1999,7 +2021,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
 
                 QWidget* createdWidget = nullptr;
 
-                if (fieldType == "input" || fieldType == "POSITION" || fieldType == "LONG" || fieldType == "STRING")
+                if (fieldType == "input" || fieldType == "LONG" || fieldType == "STRING")
                 {
                     // 检查 Value 中是否包含逗号分隔(比如 "请输入内容1,分钟")
                     if (fieldUnits != "")
@@ -2342,8 +2364,10 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
                     switchLayout->addWidget(switchLabel);
                     rightLayout->addWidget(switchContainer);
                     createdWidget = switchBox;
-                } else if (fieldType == "combined")
+                } 
+                else if (fieldType == "combined" || fieldType == "POSITION")
                 {
+
                     // 用逗号分隔
                     QStringList parts = fieldValue.split(QRegExp("[,,]"), Qt::SkipEmptyParts);
                     QString inputText = (parts.size() >= 1 ? parts.at(0).trimmed() : QString());
@@ -2351,6 +2375,16 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
                     QString button2Text = (parts.size() >= 3 ? parts.at(2).trimmed() : QStringLiteral("设置"));
 
                     QLineEdit* comboInput = new QLineEdit(inputText);
+                    QRegularExpression regExp("^-?\\d*\\.?\\d*");  // 匹配整数/浮点数(含负数)
+                    QRegularExpressionValidator* validator = new QRegularExpressionValidator(regExp, this);
+                    comboInput->setValidator(validator);
+                    QString strID = fieldTableName;
+                    strID += "_";
+                    strID += fieldName;
+                    strID += +"_";
+                    strID += fieldDescribe;
+
+                    comboInput->setProperty("Input", strID);
                     comboInput->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
                     comboInput->setFixedHeight(28);
                     comboInput->setStyleSheet(R"(
@@ -2369,6 +2403,13 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
                     combinedLayout->setContentsMargins(0, 0, 0, 0);
 
                     QPushButton* btnGet = new QPushButton(button1Text, combinedWidget);
+                    QString strIDGet = fieldTableName;
+                    strIDGet += "_";
+                    strIDGet += fieldName;
+                    strIDGet += +"_";
+                    strIDGet += fieldDescribe;
+
+                    btnGet->setProperty("Get", strIDGet);
                     btnGet->setFixedSize(80, 28);
                     btnGet->setStyleSheet(R"(
                     QPushButton {
@@ -2380,9 +2421,38 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
                         background-color: #F0F0F0;
                     }
                 )");
+               connect(btnGet, &QPushButton::clicked, this, [this, comboInput, strstrModuleType, btnGet, strAxisType,fieldTableName, fieldName]()
+                   {
+                       double strNum = comboInput->text().toDouble();
+                       //qDebug() << "AAA:" << strstrModuleType << strAxisType <<"   " << fieldTableName << fieldName;
+                       //
+                       if (m_pTreeCViewInterface)
+                       {
+                           m_pTreeCViewInterface->GetAxisPosition(strstrModuleType.toStdString(),
+                               strAxisType.toStdString(), strNum);
+                       }
+                       
+                       comboInput->text() = strNum;
+                       //QPushButton* senderBtn = qobject_cast<QPushButton*>(sender());
+                       //if (senderBtn) {
+                       //    QString strOnclick = senderBtn->property("Get").toString();
+                       //    qDebug() << "Clicked ID:" << strOnclick;
+                       //}
+                       // JMessageTip::Message_question(m_veCombinedCont[0].pLineC->text());
+                   });
+
+
                     m_fieldWidgets.append(btnGet);
 
                     QPushButton* btnSet = new QPushButton(button2Text, combinedWidget);
+                    QString strIDSet = fieldTableName;
+                    strIDSet += "_";
+                    strIDSet += fieldName;
+                    strIDSet += +"_";
+                    strIDSet += fieldDescribe;
+
+                    btnSet->setProperty("set", strIDSet);
+
                     btnSet->setFixedSize(80, 28);
                     btnSet->setStyleSheet(R"(
                     QPushButton {
@@ -2394,6 +2464,22 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
                         background-color: #F0F0F0;
                     }
                 )");
+
+                    connect(btnSet, &QPushButton::clicked, this, [this, comboInput, strstrModuleType, btnGet, strAxisType, fieldTableName, fieldName]()
+                        {
+                            QPushButton* senderBtn = qobject_cast<QPushButton*>(sender());
+                            if (senderBtn) {
+                                QString strOnclick = senderBtn->property("set").toString();
+                                qDebug() << "btnSet ID:" << strOnclick;
+                            }
+                            double strNum = comboInput->text().toDouble();
+                            if (m_pTreeCViewInterface)
+                            {
+                                m_pTreeCViewInterface->ModuleMoveTo(strstrModuleType.toStdString(),
+                                    strAxisType.toStdString(), strNum);
+                            }
+                            //JMessageTip::Message_question(m_veCombinedCont[0].pLineC->text());
+                        });
                     m_fieldWidgets.append(btnSet);
 
                     combinedLayout->addWidget(comboInput);
@@ -2401,6 +2487,20 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<Table_Control_Data>&
                     combinedLayout->addWidget(btnSet);
                     combinedLayout->addStretch();
                     rightLayout->addWidget(combinedWidget);
+
+                    // 压入内存
+                    ST_COMBINED_CONT _a;
+                    _a.pGetBut = btnGet;
+                    _a.pSetBut = btnSet;
+                    _a.pLineC = comboInput;
+                    _a.strConfigurationsName = fieldTableName;
+                    _a.strfieldName = fieldName;
+                    _a.strfieldDescribe = fieldDescribe;
+
+                    m_veCombinedCont.push_back(_a);
+
+
+
                 } else if (fieldType == "Text")
                 {
                     QLabel* label = new QLabel();

+ 18 - 1
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.h

@@ -44,6 +44,18 @@
 #include "CViewInterface.h"
 #include "Src/Sql/SqlOperation.h"
 
+// 组合控件
+struct ST_COMBINED_CONT
+{
+    QString strConfigurationsName;//configurations.db 里面的名称
+    QString strfieldName;
+    QString strfieldDescribe;
+
+    QLineEdit* pLineC;
+    QPushButton* pGetBut;
+    QPushButton* pSetBut;
+};
+
 class OriginalWnd;
 
 /**
@@ -270,7 +282,12 @@ private:
     /**数据库存储
      */
     SqlOperation* m_sqlOper = nullptr;
-
+    
+    /**组合控件
+     */
+    std::vector<ST_COMBINED_CONT> m_veCombinedCont;
+    std::unique_ptr<ns_module::CViewInterface> m_pTreeCViewInterface;
+    QString m_strModuleTypeAAA;
 private:
 
     //  每次切换控制屏幕时,清空历史

+ 45 - 67
View/die-bonder-ui/OriginalWnd/MainAndSecondaryCamerasWnd.cpp

@@ -58,6 +58,8 @@ void MainAndSecondaryCamerasWnd::initFrom()
         //strFun.pView = ui->scrollArea;
         //strFun.veSignalFun.emplace_back(std::bind(&MainAndSecondaryCamerasWnd::UpdateCameraDisplay0, this, std::placeholders::_1, std::placeholders::_2));
         //strFun.veSignalFun.emplace_back(std::bind(&MainAndSecondaryCamerasWnd::UpdateCameraDisplay1, this, std::placeholders::_1, std::placeholders::_2));
+        ////strFun.veSlotFun.emplace_back([this]() { CheckIs(); });
+        //strFun.veSlotFun.emplace_back(std::bind(&MainAndSecondaryCamerasWnd::CheckIs, this));
 
         //InitAllCamerPage(strFun, this);
 
@@ -80,8 +82,6 @@ void MainAndSecondaryCamerasWnd::initFrom()
     int groupId = settings.value("GroupId", 0).toInt();
     int index = settings.value("Index", 0).toInt();
 
-    
-
     if (m_allGroup.size() == 1) {
         if (lastGroupId == lastLastGroupId) {
             GetCurrentSelectSlots(lastLastGroupId, lastLastIndex);
@@ -92,6 +92,7 @@ void MainAndSecondaryCamerasWnd::initFrom()
         }
     }
     else {
+        lastLastGroupId = lastLastIndex = 1; //TODO: 需要修改
         GetCurrentSelectSlots(lastLastGroupId, lastLastIndex);
         GetCurrentSelectSlots(lastGroupId, lastIndex);
     }
@@ -201,6 +202,7 @@ void MainAndSecondaryCamerasWnd::CameraConnectUpdateImageFun(int nIndex, Group*
         else
         {
             //共用函数
+            //connect(widget, &Group::send_button_Signal, this, &MainAndSecondaryCamerasWnd::CheckIs);
             connect(widget, &Group::SetCurrentSelectSig, this, &MainAndSecondaryCamerasWnd::GetCurrentSelectSlots);
             connect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots);
         }
@@ -416,8 +418,6 @@ void MainAndSecondaryCamerasWnd::HideLayout(QHBoxLayout* layout, bool isHide)
 
 void MainAndSecondaryCamerasWnd::UpdataLightJoystickSwitchPage(int groupId, int index, bool isShow)
 {
-    groupId -= 1; //TODO: 因为这里是0 开始的
-
     auto Fun = [&](Group* pGroup,LightJoystickSwitchPage* p, ControlOperationPage* pContPage, bool bShow)
     {
         p->UpdatemPageGroup(pGroup);
@@ -432,49 +432,27 @@ void MainAndSecondaryCamerasWnd::UpdataLightJoystickSwitchPage(int groupId, int
             pContPage->setSwitchJoystickButEnable(bShow);
         }
 
-        disconnect(pContPage, &ControlOperationPage::SendModuleTypeSignals,
-            p, &LightJoystickSwitchPage::GetModuleTypeSlots);
-
-        connect(pContPage, &ControlOperationPage::SendModuleTypeSignals,
-            p, &LightJoystickSwitchPage::GetModuleTypeSlots);
     };
     
-    Group* currGroup = m_allGroup.at(groupId);
     if (index == 1)
-    {   
+    {
+        disconnect(ui->viewwidgetgroup_L, &ControlOperationPage::SendModuleTypeSignals,
+            ui->control_L, &LightJoystickSwitchPage::GetModuleTypeSlots);
+        Group* currGroup = m_allGroup.at(groupId -1);
         Fun(currGroup, ui->control_L, ui->viewwidgetgroup_L, isShow);
+        connect(ui->viewwidgetgroup_L, &ControlOperationPage::SendModuleTypeSignals, 
+            ui->control_L,&LightJoystickSwitchPage::GetModuleTypeSlots);
     }
     else if(index == 2)
     {
+        disconnect(ui->viewwidgetgroup_R, &ControlOperationPage::SendModuleTypeSignals,
+            ui->control_r, &LightJoystickSwitchPage::GetModuleTypeSlots);
+        Group* currGroup = m_allGroup.at(groupId -1);
         Fun(currGroup, ui->control_r, ui->viewwidgetgroup_R, isShow);
+        connect(ui->viewwidgetgroup_R, &ControlOperationPage::SendModuleTypeSignals,
+            ui->control_r, &LightJoystickSwitchPage::GetModuleTypeSlots);
     }
 
- /*   for (int i = 0; i < m_veCurrentSelectGroup.size(); i++)
-    {
-        if (i == 0)
-        {
-            bool bShow = false;
-            
-            if (m_veCurrentSelectGroup[0].nSelectLeft1 == 1)
-            {
-                bShow = true;
-            }
-            Fun(m_veCurrentSelectGroup[0].pSelectGroup,ui->control_L,ui->viewwidgetgroup_L, bShow);
-
-        }
-        else if (i == 1)
-        {
-            bool bShow = false;
-            if (m_veCurrentSelectGroup[1].nSelectLeft1 == 1)
-            {
-                bShow = true;
-            }
-            Fun(m_veCurrentSelectGroup[1].pSelectGroup,ui->control_r, ui->viewwidgetgroup_R, bShow);
-
-        }
-    }*/
-
-
 }
 
 void MainAndSecondaryCamerasWnd::timerEvent(QTimerEvent* event)
@@ -482,7 +460,7 @@ void MainAndSecondaryCamerasWnd::timerEvent(QTimerEvent* event)
     int nID = event->timerId();
 }
 
-void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex) 
+void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
 {
     int nOnClickGroupId = groupId - 1; // 这里new 有些是0,有些是1 暂时选择
     if (m_pMainCameraBind == nullptr || m_allGroup.size() < nOnClickGroupId)
@@ -490,7 +468,7 @@ void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
         return;
     }
 
-    if (nIndex == 2) 
+    if (nIndex == 2)
     {
         if (m_veCurrentSelectGroup_R.isBond == true)
         {
@@ -501,13 +479,13 @@ void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
             //解绑
             disconnect(m_veCurrentSelectGroup_R.pSelectGroup, &Group::SetUpDataImageShowSig,
                 this, &MainAndSecondaryCamerasWnd::GetGroupImageShowSignalsTo_R);
-            
+
             //换绑
             connect(m_veCurrentSelectGroup_L.pSelectGroup, &Group::SetUpDataImageShowSig,
                 this, &MainAndSecondaryCamerasWnd::GetGroupImageShowSignalsTo_L);
             UpdataLightJoystickSwitchPage(m_veCurrentSelectGroup_L.pSelectGroup->m_nGroupId, 1, true);
         }
-        else 
+        else
         {
             if (m_veCurrentSelectGroup_R.isInitialed == true)
             {
@@ -521,7 +499,7 @@ void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
             UpdataLightJoystickSwitchPage(m_veCurrentSelectGroup_R.pSelectGroup->m_nGroupId, 2, false);
         }
     }
-    else 
+    else
     {
         if (m_veCurrentSelectGroup_R.isBond == true)
         {
@@ -542,9 +520,9 @@ void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
             UpdataLightJoystickSwitchPage(m_veCurrentSelectGroup_R.pSelectGroup->m_nGroupId, 2, true);
 
         }
-        else 
+        else
         {
-            if (m_veCurrentSelectGroup_R.isInitialed == true) 
+            if (m_veCurrentSelectGroup_R.isInitialed == true)
             {
                 if (m_veCurrentSelectGroup_L.isBond == true) {
                     disconnect(m_veCurrentSelectGroup_L.pSelectGroup, &Group::SetUpDataImageShowSig,
@@ -564,6 +542,29 @@ void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
         }
     }
 }
+
+void MainAndSecondaryCamerasWnd::GetGroupImageShowSignalsTo_L(const QPixmap& imageData)
+{
+    //lastIndex = 1;
+    QSize size_left = ui->viewwidgetgroup_L->getOperatewidget()->size();
+    QPixmap scaledPixmap_left = m_lastRightPixmap.scaled(size_left, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+    //ui->viewwidgetgroup_L->getOperatewidget()->setPixmap(scaledPixmap_left);
+    ui->viewwidgetgroup_L->setScaleFactorSize(scaledPixmap_left);
+
+
+    m_lastRightPixmap = imageData;
+    //UpdataGroupSettings(imageData);
+}
+
+void MainAndSecondaryCamerasWnd::GetGroupImageShowSignalsTo_R(const QPixmap& imageData)
+{
+    QSize size_left = ui->viewwidgetgroup_R->getOperatewidget()->size();
+    QPixmap scaledPixmap_right = imageData.scaled(size_left, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+    //ui->viewwidgetgroup_R->getOperatewidget()->setPixmap(scaledPixmap_left);
+    ui->viewwidgetgroup_R->setScaleFactorSize(scaledPixmap_right);
+    m_lastRightPixmap = imageData;
+}
+
 #if 0
 void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
 {
@@ -690,29 +691,6 @@ void MainAndSecondaryCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex)
     }
 }
 #endif
-void MainAndSecondaryCamerasWnd::GetGroupImageShowSignalsTo_L(const QPixmap& imageData)
-{
-    //lastIndex = 1;
-    QSize size_left = ui->viewwidgetgroup_L->getOperatewidget()->size();
-    QPixmap scaledPixmap_left = m_lastRightPixmap.scaled(size_left, Qt::KeepAspectRatio, Qt::SmoothTransformation);
-    //ui->viewwidgetgroup_L->getOperatewidget()->setPixmap(scaledPixmap_left);
-    ui->viewwidgetgroup_L->setScaleFactorSize(scaledPixmap_left);
-
-
-    m_lastRightPixmap = imageData;
-    //UpdataGroupSettings(imageData);
-}
-
-void MainAndSecondaryCamerasWnd::GetGroupImageShowSignalsTo_R(const QPixmap& imageData)
-{
-    QSize size_left = ui->viewwidgetgroup_R->getOperatewidget()->size();
-    QPixmap scaledPixmap_right = imageData.scaled(size_left, Qt::KeepAspectRatio, Qt::SmoothTransformation);
-    //ui->viewwidgetgroup_R->getOperatewidget()->setPixmap(scaledPixmap_left);
-    ui->viewwidgetgroup_R->setScaleFactorSize(scaledPixmap_right);
-    m_lastRightPixmap = imageData;
-}
-
-
 
 void MainAndSecondaryCamerasWnd::wheelEvent(QWheelEvent *event)
 {

+ 0 - 3
View/die-bonder-ui/SBTdie-bonder-ui.pro

@@ -20,13 +20,10 @@ CONFIG += c++17
 
 SOURCES += $$files(*.cpp, $$PWD) \
     Src/RewriteControl/MsgDlg/CustomMessageDlg.cpp
-    Src/RewriteControl/ControlOperationPage.h.cpp
 HEADERS += $$files(*.h, $$PWD) \
     Src/RewriteControl/MsgDlg/CustomMessageDlg.h
-    Src/RewriteControl/ControlOperationPage.h
 FORMS   += $$files(*.ui, $$PWD) \
     Src/RewriteControl/MsgDlg/CustomMessageDlg.ui
-    Src/RewriteControl/ControlOperationPage.ui
 
 # Default rules for deployment.
 qnx: target.path = /tmp/$${TARGET}/bin

+ 2 - 1
View/die-bonder-ui/Src/CameraBind.h

@@ -36,13 +36,14 @@ struct ST_LIGHT_VAL
 //移动轴
 struct ST_MOVE_AXIS
 {
+    bool isSwitch;
     std::string ModuleType;
     std::string AxisType;
     double pos;
 };
 
 // 悬浮等待时间
-const unsigned int g_unnSuspensionWaitingTime = 1000 * 60; //60秒
+const unsigned int g_unnSuspensionWaitingTime = 1000 * 60 * 10; //60秒
 
 class CameraBind: public QObject
 {

+ 10 - 3
View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.cpp

@@ -258,6 +258,7 @@ void ControlOperationPage::resizeSingleUI(bool bMax /*= false*/)
 void ControlOperationPage::resizeChartsAndCamerasUI() {
 
 }
+
 qreal ControlOperationPage::getScaleFactorValue() {
     return m_scaleFactor;
 }
@@ -269,6 +270,8 @@ void ControlOperationPage::setScaleFactorSize(QPixmap scaledImage) {
     ui->Operatewidget->setPixmapAndPoint(curr_scaledImage, m_previousScaleFactor, m_scaleFactor, m_mousePos);
     ui->Operatewidget->setPixmap(curr_scaledImage);
 }
+
+
 void ControlOperationPage::UpDateCameraBind(CameraBind* pCameraBind)
 {
     m_pCameraBindCopy = pCameraBind;
@@ -286,7 +289,6 @@ void ControlOperationPage::UpDateCameraBind(CameraBind* pCameraBind)
 
 void ControlOperationPage::setSwitchJoystickButEnable(bool isEnable)
 {
-    ui->switchJoystickBut->setEnabled(isEnable);
     if (isEnable == false)
     {
         ResetIdleTimer(false);
@@ -298,12 +300,14 @@ void ControlOperationPage::on_switchJoystickBut_clicked()
 {
     m_isUserOnclick = true;
     ResetIdleTimer(true);
+
     UpdataModuleType("aaa", 3);
+    ui->switchJoystickBut->setEnabled(false);
 }
 
 void ControlOperationPage::MouseMovedSlots(const QPoint& delta)
 {
-    qDebug() << "MouseMovedSlots:" << delta;
+    //qDebug() << "MouseMovedSlots:" << delta;
     if (m_pCameraBindCopy)
     {
         m_pCameraBindCopy->JCameraMove(0, delta.x(), delta.y());
@@ -348,6 +352,7 @@ void ControlOperationPage::timerEvent(QTimerEvent* event)
     {
         ResetIdleTimer(false);
         m_isUserOnclick = false;
+        ui->switchJoystickBut->setEnabled(true);
     }
 }
 
@@ -394,7 +399,6 @@ bool ControlOperationPage::eventFilter(QObject* obj, QEvent* event)
 
 void ControlOperationPage::wheelEvent(QWheelEvent* event) {
     if (ui->Operatewidget->rect().contains(ui->Operatewidget->mapFromGlobal(event->globalPos()))) {
-        
         m_mousePos = ui->Operatewidget->mapFromGlobal(event->globalPos());
         if (event->angleDelta().y() > 0) {
             updateScale(m_scaleFactor * 1.1); // 放大
@@ -520,10 +524,13 @@ void ControlOperationPage::UpdataModuleType(const QString& strMode, int nIndex)
     {
         m_currentSelectRunAxis.AxisType = strMode.toStdString();
     }
+    
 
     if (m_isAdd == false)
     {
+        m_currentSelectRunAxis.isSwitch = true;
         emit SendModuleTypeSignals(m_currentSelectRunAxis);
+        m_currentSelectRunAxis.isSwitch = false;
     }
 }
 

+ 1 - 1
View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.h

@@ -48,7 +48,7 @@ public:
     void resizeChartsAndCamerasUI();
     qreal getScaleFactorValue();
     void setScaleFactorSize(QPixmap scaledImage);
-        
+
     /**更新硬件指针
      */
     void UpDateCameraBind(CameraBind* pCameraBind);

+ 25 - 8
View/die-bonder-ui/Src/RewriteControl/LightJoystickSwitchPage.cpp

@@ -128,15 +128,20 @@ void LightJoystickSwitchPage::setLightWidget(int value, QWidget *lightWidget, QL
 
 void LightJoystickSwitchPage::on_move_Button_clicked()
 {
-
+    double doNum = ui->valLineEdit->text().toDouble();
+    if (doNum > 0)
+    {
+        m_pCameraBind->SetModuleMove(m_moveAxisInfo.ModuleType, m_moveAxisInfo.AxisType, doNum, false);
+    }
 }
 
 
 void LightJoystickSwitchPage::on_moveTo_Button_clicked()
 {
-    if (m_pCameraBind)
+    double doNum = ui->valLineEdit->text().toDouble();
+    if (doNum > 0)
     {
-       // m_pCameraBind->YGetAxisPosition();
+        m_pCameraBind->SetModuleMove(m_moveAxisInfo.ModuleType, m_moveAxisInfo.AxisType, doNum, true);
     }
 }
 
@@ -201,12 +206,17 @@ void LightJoystickSwitchPage::HideOrShowPage(bool isHide)
 
 void LightJoystickSwitchPage::SetMoveJoystickInfo(const ST_MOVE_AXIS& movInfo)
 {
-    m_moveAxisInfo.ModuleType   = movInfo.ModuleType;
-    m_moveAxisInfo.AxisType     = movInfo.AxisType;
-    m_moveAxisInfo.pos          = movInfo.pos; // 这个距离可能会变动// 根据摇杆区分等级
+    //m_moveAxisInfo.ModuleType   = movInfo.ModuleType;
+    //m_moveAxisInfo.AxisType     = movInfo.AxisType;
+    //m_moveAxisInfo.pos          = movInfo.pos; // 这个距离可能会变动// 根据摇杆区分等级
+    m_moveAxisInfo = movInfo;
 
-    // 点击摇杆的时候开启定时器,然后3秒关闭
-    SwitchJoystickPage(true);
+    if (m_moveAxisInfo.isSwitch)
+    {
+        // 点击摇杆的时候开启定时器,然后3秒关闭
+        SwitchJoystickPage(true);
+    }
+ 
 
     ui->JTabShowLable->setText(CombiningStr());
 }
@@ -258,6 +268,13 @@ void LightJoystickSwitchPage::ResetIdleTimer(bool bStart /*= false*/)
 {
     if (bStart)
     {
+        if (m_idleTimer != -1)
+        {
+            // 计时器没关,关闭重新打开
+            ResetIdleTimer(false);
+            ResetIdleTimer(true);
+        }
+
         if (isActiveWindow())
         {
             m_idleTimer = startTimer(g_unnSuspensionWaitingTime);

+ 0 - 1
View/die-bonder-ui/Src/RewriteControl/LightJoystickSwitchPage.h

@@ -113,7 +113,6 @@ private:
     */
     int                         m_idleTimer     = -1;
     int                         m_nTimeShowPos  = -1;
-
 };
 
 #endif // SWITCHTABBASEWIDGET_H

+ 10 - 2
View/die-bonder-ui/Src/Sql/SqlOperation.cpp

@@ -226,7 +226,7 @@ int SqlOperation::loadDirectories(QString tableName, QList<QJsonObject>& directo
     }
 
     QSqlQuery query(db);
-    QString sql = QString("SELECT Id, Name_Chs, ParentId, IsThirdLevel, Separator, UserGrade, TableName, Circle FROM %1").arg(tableName);
+    QString sql = QString("SELECT Id, Name_Chs, ParentId, IsThirdLevel, Separator, UserGrade, TableName, Circle, ModuleType FROM %1").arg(tableName);
     //query.prepare(R"( SELECT Id, Name_Chs, ParentId, IsThirdLevel, Separator, UserGrade, Circle FROM :tableName )");
     //query.bindValue(":tableName", tableName);
 
@@ -252,6 +252,7 @@ int SqlOperation::loadDirectories(QString tableName, QList<QJsonObject>& directo
         obj["TableName"] = query.value("TableName").toString();
         obj["Icon"]  = query.value("Icon").toString();
         obj["Enabled"] = query.value("Enabled").toBool();
+        obj["ModuleType"] = query.value("ModuleType").toString();
         qDebug() << "loadDirectories£º" << obj["Name"].toString() << " ParentId:" << obj["ParentId"].toInt() << "UserGrade:" << obj["UserGrade"] << " Separator:" << obj["Separator"].toInt();
         qDebug() << " Circle:" << obj["Circle"].toInt();
 
@@ -309,8 +310,16 @@ int SqlOperation::loadAllControlData()
                     str = codec->toUnicode(element.strUnit.data(), element.strUnit.size());
                     element.strUnit = str.toStdString();
                 }
+
+                // ¸øÖáÀàÐͼÓÈë½øÈ¥
+                if (element.strAxisType.size() > 0)
+                {
+                    str = codec->toUnicode(element.strAxisType.data(), element.strAxisType.size());
+                    element.strAxisType = str.toStdString();
+                }
                 controlDatas_module.controlDataList.append(element);
             }
+
             m_allControlData.append(controlDatas_module);
         }
 
@@ -562,7 +571,6 @@ int SqlOperation::GetThirdDirControlData(QString multiTableName, const int& user
     return 0;
 }
 
-
 int SqlOperation::updateControlData(QString tableName, QString name, const QString& currentValue)
 {
     if (m_pCViewInterface == nullptr)

+ 1 - 0
View/die-bonder-ui/Src/Sql/SqlOperation.h

@@ -155,6 +155,7 @@ private:
 
 
     //所有控件数据
+    //ModuleConfig.db
     QList<Table_Control_Data>       m_allControlData;
 
     //每个ID对应菜单名

+ 70 - 0
View/die-bonder-ui/Src/common/GlobalUse/JMouseMonitorThread.cpp

@@ -8,6 +8,7 @@
 //             鼠标监控-全局的,可能后面还有其他地方使用,所以..
 // *****************************************************************************
 #include "JMouseMonitorThread.h"
+#include <qDebug>
 
 JMouseMonitorThread::JMouseMonitorThread(QObject* parent /*= nullptr*/)
     : QThread(parent),
@@ -36,6 +37,69 @@ void JMouseMonitorThread::stop()
     wait();
 }
 
+void JMouseMonitorThread::ConvertUIClickToImagePixel(int uiX, int uiY, int& imageX, int& imageY)
+{
+    int uiwidth = 493;//imageLabel->width(); 480 493
+    int uiheight = 493;// imageLabel->height();360
+
+    int imagewidth = 640;
+    int imageheight = 480;
+
+    // 步骤1:转换为左上原点坐标系
+    float uiX_topLeft = uiX + uiwidth / 2.0f;
+    float uiY_topLeft = uiY + uiheight / 2.0f;  // UI的Y轴向下为正
+
+    // 步骤2:计算缩放比例
+    float scaleX = (float)imagewidth / uiwidth;    // 640/480 ≈ 1.333
+    float scaleY = (float)imageheight / uiheight;  // 480/360 ≈ 1.333
+
+    // 步骤3:映射到原始图像
+    int imageXA = (int)(uiX_topLeft * scaleX);
+    int imageYA = (int)(uiY_topLeft * scaleY);
+
+    // 确保坐标在图像范围内
+    imageX = std::max(0, std::min(imagewidth - 1, imageXA));
+    imageY = std::max(0, std::min(imageheight - 1, imageYA));
+}
+
+void JMouseMonitorThread::ConvertUIClickToImagePixel2(int uiX, int uiY, int& imageX, int& imageY)
+{
+    const int uiWidth = 493;   // UI控件实际宽度
+    const int uiHeight = 493;  // UI控件实际高度
+    const int imgWidth = 640;  // 原始图像宽度
+    const int imgHeight = 480; // 原始图像高度
+
+    // 1. 计算保持宽高比的缩放比例
+    const float scale = std::min(
+        static_cast<float>(uiWidth) / imgWidth,
+        static_cast<float>(uiHeight) / imgHeight
+    );
+
+    // 2. 计算实际显示区域尺寸
+    const int displayWidth = static_cast<int>(imgWidth * scale);
+    const int displayHeight = static_cast<int>(imgHeight * scale);
+
+    // 3. 计算显示区域在控件中的偏移(居中)
+    const int offsetX = (uiWidth - displayWidth) / 2;
+    const int offsetY = (uiHeight - displayHeight) / 2;
+
+    // 4. 将UI坐标转换为显示区域坐标
+    const int uiClickX = uiX + uiWidth / 2;  // 转换到控件坐标系
+    const int uiClickY = uiY + uiHeight / 2;
+
+    // 5. 有效性检查(点击是否在显示区域内)
+    const int displayX = std::max(0, std::min(displayWidth - 1, uiClickX - offsetX));
+    const int displayY = std::max(0, std::min(displayHeight - 1, uiClickY - offsetY));
+
+    // 6. 映射到原始图像坐标
+    imageX = static_cast<int>(displayX / scale);
+    imageY = static_cast<int>(displayY / scale);
+
+    // 最终有效性检查
+    imageX = std::max(0, std::min(imgWidth - 1, imageX));
+    imageY = std::max(0, std::min(imgHeight - 1, imageY));
+}
+
 void JMouseMonitorThread::run()
 {
     QPoint lastPos = QCursor::pos();
@@ -55,6 +119,12 @@ void JMouseMonitorThread::run()
 
             if (delta != QPoint(0, 0)) 
             {
+                int  imageX, imageY;
+
+                ConvertUIClickToImagePixel2(delta.x(), delta.y(),imageX, imageY);
+                //qDebug() << "image POS" << imageX << " " << imageY;
+                delta.setX(imageX);
+                delta.setY(imageY);
                 emit MouseMovedSlg(delta);
                 emit RequestCursorMoveSlg(center);
             }

+ 2 - 0
View/die-bonder-ui/Src/common/GlobalUse/JMouseMonitorThread.h

@@ -24,6 +24,8 @@ public:
 
     void stop();
 
+    void ConvertUIClickToImagePixel(int uiX, int uiY, int& imageX, int& imageY);
+    void ConvertUIClickToImagePixel2(int uiX, int uiY, int& imageX, int& imageY);
 signals:
     void MouseMovedSlg(const QPoint& delta);
     void RequestCursorMoveSlg(const QPoint& pos);