From 184152413308b76332a5dc3cf654ba2e503c2230 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期三, 14 一月 2026 13:28:44 +0800
Subject: [PATCH] 1.添加日志,以观察要重启软件才能下发任务到EFEM的问题;

---
 SourceCode/Bond/Servo/PortConfigurationDlg.cpp |   91 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 79 insertions(+), 12 deletions(-)

diff --git a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
index aa7179c..27bc7a8 100644
--- a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
+++ b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -11,8 +11,6 @@
 #include "RecipeManager.h"
 #include "ServoCommo.h"
 
-
-
 #define CHECKBOX_ALL_ID        0x1234
 
 // CPortConfigurationDlg 瀵硅瘽妗�
@@ -102,11 +100,26 @@
         // 鍥炲~ Job 淇℃伅锛堝彧鍙栫涓�涓湁鏁� Glass锛�
         if (!bJobInfoSet && pGlass) {
             SERVO::CJobDataS* pJS = pGlass->getJobDataS();
-            if (pJS) {
+            if (pJS) {        
+                int nRecipeID = pJobDataS->getMasterRecipe();
+                std::string strRecipeName = RecipeManager::getInstance().getPPIDById(nRecipeID);
                 SetDlgItemText(IDC_EDIT_LOTID, CString(pJS->getLotId().c_str()));
                 SetDlgItemText(IDC_EDIT_PRODUCTID, CString(pJS->getProductId().c_str()));
                 SetDlgItemText(IDC_EDIT_OPERATIONID, CString(pJS->getOperationId().c_str()));
                 m_comboMaterialsType.SetCurSel(pJS->getMaterialsType() - 1);
+
+                if (!strRecipeName.empty()) {
+                    CString csRecipeName(strRecipeName.c_str());
+                    int nIndex = m_comboRecipe.FindStringExact(-1, csRecipeName);
+                    if (nIndex != CB_ERR) {
+                        m_comboRecipe.SetCurSel(nIndex);
+                    }
+                    else {
+						AfxMessageBox(_T("褰撳墠閰嶆柟鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇烽噸鏂伴�夋嫨锛�"), MB_ICONWARNING);
+                        m_comboRecipe.SetCurSel(0);
+                    }
+				}
+
                 bJobInfoSet = true;
             }
         }
@@ -252,7 +265,6 @@
         SetWindowText(_T("Port Configuration"));
     }
 
-
     // Porcess Start / Process Cancel 鎸夐挳鐘舵��
     GetDlgItem(IDC_BUTTON_PROCESS_START)->EnableWindow(FALSE);
     GetDlgItem(IDC_BUTTON_PROCESS_CANCEL)->EnableWindow(FALSE);
@@ -299,6 +311,9 @@
         m_comboRecipe.GetLBText(selRecipe, str);
         config.strRecipe = CT2A(str.GetString());
     }
+    int nRecipeID = RecipeManager::getInstance().getIdByPPID(config.strRecipe);
+    RecipeInfo stRecipeInfo = RecipeManager::getInstance().getRecipeByPPID(config.strRecipe);
+    std::vector<DeviceRecipe> vecRecipeInfo = stRecipeInfo.vecDeviceList;
 
     // 鑾峰彇 Material Type 绱㈠紩锛堢储寮曚粠 0 寮�濮嬶紝瀵瑰簲鏋氫妇浠� 1 寮�濮嬶級
     //int selMaterial = m_comboMaterialsType.GetCurSel();
@@ -342,16 +357,14 @@
             CGridCellCombo* pCombo = dynamic_cast<CGridCellCombo*>(m_wndGrid.GetCell(i, 2));
             ASSERT(pCheck && pCombo);
             pGlass->setScheduledForProcessing(pCheck->GetCheck());
-            /*pGlass->setType(static_cast<SERVO::MaterialsType>(config.nMaterialType));*/
+            pGlass->setType(static_cast<SERVO::MaterialsType>(nMaterialType));
 
             SERVO::CJobDataS* pJobDataS = pGlass->getJobDataS();
             pJobDataS->setLotId(config.strLotID.c_str());
             pJobDataS->setProductId(config.strProductID.c_str());
             pJobDataS->setOperationId(config.strOperationID.c_str());
             pJobDataS->setMaterialsType(nMaterialType);
-
-            RecipeInfo stRecipeInfo = RecipeManager::getInstance().getRecipeByPPID(config.strRecipe);
-            std::vector<DeviceRecipe> vecRecipeInfo = stRecipeInfo.vecDeviceList;
+            pJobDataS->setMasterRecipe(nRecipeID);
 
             for (const auto& info : vecRecipeInfo) {
                 const std::string& name = info.strDeviceName;
@@ -425,14 +438,68 @@
 {
     int selPort = (0 <= m_nCurSelPort && m_nCurSelPort <= 3) ? m_nCurSelPort
         : m_comboPort.GetCurSel();
-    if (selPort < 0 || selPort >= 4) return;
-    m_pPort[selPort]->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+    if (selPort < 0 || selPort >= 4) {
+        LOGE("ProcessStart invalid port index: %d", selPort);
+        return;
+    }
+
+    SERVO::CLoadPort* pPort = m_pPort[selPort];
+    if (pPort == nullptr) {
+        LOGE("ProcessStart port pointer is null, index: %d", selPort);
+        return;
+    }
+
+    constexpr short cmd = CCC_PROCESS_START;
+    LOGI("ProcessStart request: port=%d, cmd=%d", selPort + 1, cmd);
+    int ret = pPort->sendCassetteCtrlCmd(cmd, nullptr, 0, 0, 0, nullptr,
+        [selPort](int code) -> int {
+            if (code == WOK) {
+                LOGI("ProcessStart write complete: port=%d, code=WOK", selPort + 1);
+            }
+            else {
+                LOGE("ProcessStart write failed: port=%d, code=%d", selPort + 1, code);
+            }
+            return 0;
+        });
+    if (ret != 0) {
+        LOGE("ProcessStart sendCassetteCtrlCmd immediate failure: port=%d, ret=%d", selPort + 1, ret);
+    }
+    else {
+        LOGI("ProcessStart sendCassetteCtrlCmd dispatched: port=%d", selPort + 1);
+    }
 }
 
 void CPortConfigurationDlg::OnBnClickedButtonProcessCancel()
 {
     int selPort = (0 <= m_nCurSelPort && m_nCurSelPort <= 3) ? m_nCurSelPort
         : m_comboPort.GetCurSel();
-    if (selPort < 0 || selPort >= 4) return;
-    m_pPort[selPort]->sendCassetteCtrlCmd(CCC_PROCESS_CANCEL, nullptr, 0, 0, 0, nullptr, nullptr);
+    if (selPort < 0 || selPort >= 4) {
+        LOGE("ProcessCancel invalid port index: %d", selPort);
+        return;
+    }
+
+    SERVO::CLoadPort* pPort = m_pPort[selPort];
+    if (pPort == nullptr) {
+        LOGE("ProcessCancel port pointer is null, index: %d", selPort);
+        return;
+    }
+
+    constexpr short cmd = CCC_PROCESS_CANCEL;
+    LOGI("ProcessCancel request: port=%d, cmd=%d", selPort + 1, cmd);
+    int ret = pPort->sendCassetteCtrlCmd(cmd, nullptr, 0, 0, 0, nullptr,
+        [selPort](int code) -> int {
+            if (code == WOK) {
+                LOGI("ProcessCancel write complete: port=%d, code=WOK", selPort + 1);
+            }
+            else {
+                LOGE("ProcessCancel write failed: port=%d, code=%d", selPort + 1, code);
+            }
+            return 0;
+        });
+    if (ret != 0) {
+        LOGE("ProcessCancel sendCassetteCtrlCmd immediate failure: port=%d, ret=%d", selPort + 1, ret);
+    }
+    else {
+        LOGI("ProcessCancel sendCassetteCtrlCmd dispatched: port=%d", selPort + 1);
+    }
 }

--
Gitblit v1.9.3