From 0026ea3b1a6588f3e40b8276162f54b2a22bc7ae Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 19 一月 2026 14:32:27 +0800
Subject: [PATCH] 1.修复 : 多 PJ 支持仍是单槽实现:isProcessJobsEmpty/validate 仍只允许 1 个 PJ/CJ;Host 一次下多 PJ 或运行中追加 PJ 会被拒绝/无明确反馈。需要:协议上明示只支持 1,或补齐 ACK/NAK 与队列管理、PJobSpace 动态更新。

---
 SourceCode/Bond/Servo/CCjPage2.cpp |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/Servo/CCjPage2.cpp b/SourceCode/Bond/Servo/CCjPage2.cpp
index c156c44..2f4d559 100644
--- a/SourceCode/Bond/Servo/CCjPage2.cpp
+++ b/SourceCode/Bond/Servo/CCjPage2.cpp
@@ -8,6 +8,11 @@
 #include "RecipeManager.h"
 
 
+UINT btnID[] = { IDC_BUTTON_PORT1_PROCESS_START,
+    IDC_BUTTON_PORT2_PROCESS_START,
+    IDC_BUTTON_PORT3_PROCESS_START,
+    IDC_BUTTON_PORT4_PROCESS_START };
+
 // CPjPage1 瀵硅瘽妗�
 
 IMPLEMENT_DYNAMIC(CCjPage2, CCjPageBase)
@@ -38,6 +43,10 @@
     ON_BN_CLICKED(IDC_RADIO4, &CCjPage2::OnBnClickedRadio4)
     ON_NOTIFY(CSGN_SEL_CHANGED, IDC_GRID1, &CCjPage2::OnGridSelChanged)
     ON_NOTIFY(CSGN_MAT_CHANGED, IDC_GRID1, &CCjPage2::OnGridMatChanged)
+    ON_BN_CLICKED(IDC_BUTTON_PORT1_PROCESS_START, &CCjPage2::OnBnClickedButtonPort1ProcessStart)
+    ON_BN_CLICKED(IDC_BUTTON_PORT2_PROCESS_START, &CCjPage2::OnBnClickedButtonPort2ProcessStart)
+    ON_BN_CLICKED(IDC_BUTTON_PORT3_PROCESS_START, &CCjPage2::OnBnClickedButtonPort3ProcessStart)
+    ON_BN_CLICKED(IDC_BUTTON_PORT4_PROCESS_START, &CCjPage2::OnBnClickedButtonPort4ProcessStart)
 END_MESSAGE_MAP()
 
 
@@ -103,12 +112,41 @@
     pItem->GetWindowRect(&rcItem);
     ScreenToClient(rcItem);
 
+
+    int x = rcItem.left + 100 + 18;
+    int y = 100;
+
+
     // 璁╂帶浠剁獥鍙e昂瀵歌嚜鍔ㄥ尮閰嶅綋鍓嶅垪瀹�/琛屾暟锛堜笉鍑虹幇婊氬姩鏉★級
     if (::IsWindow(m_grid.m_hWnd)) {
         CSize best = m_grid.CalcBestWindowSize(TRUE, -1, 2, 2);
         pItem->MoveWindow(rcItem.left, rcItem.top, best.cx, best.cy);
         pItem->Invalidate();
+        pItem->GetWindowRect(&rcItem);
+        ScreenToClient(rcItem);
+        y = rcItem.bottom;
+        y += 18;
     }
+
+    pItem = GetDlgItem(IDC_BUTTON_PORT1_PROCESS_START);
+    pItem->GetWindowRect(&rcItem);
+    pItem->MoveWindow(x, y, rcItem.Width(), rcItem.Height());
+    x += 220;
+
+    pItem = GetDlgItem(IDC_BUTTON_PORT2_PROCESS_START);
+    pItem->GetWindowRect(&rcItem);
+    pItem->MoveWindow(x, y, rcItem.Width(), rcItem.Height());
+    x += 220;
+
+    pItem = GetDlgItem(IDC_BUTTON_PORT3_PROCESS_START);
+    pItem->GetWindowRect(&rcItem);
+    pItem->MoveWindow(x, y, rcItem.Width(), rcItem.Height());
+    x += 220;
+
+    pItem = GetDlgItem(IDC_BUTTON_PORT4_PROCESS_START);
+    pItem->GetWindowRect(&rcItem);
+    pItem->MoveWindow(x, y, rcItem.Width(), rcItem.Height());
+    x += 220;
 }
 
 int CCjPage2::OnApply() 
@@ -225,6 +263,7 @@
         pButton->EnableWindow(enable[i]);
 
         m_grid.SetPortAllocated(i, !checked[i], _T(""));
+        GetDlgItem(btnID[i])->EnableWindow(checked[i]);
     }
 
 
@@ -262,7 +301,6 @@
     if (portIndex != -1) {
         for (int i = 0; i < 8; i++) {
             m_grid.SetSlotChecked(portIndex, i, ((PJWarp*)m_pContext)->checkSlot[i]);
-            // m_grid.SetSlotMaterialType(portIndex, i, ((PJWarp*)m_pContext)->material[i]);
         }
     }
 
@@ -294,6 +332,7 @@
 
     for (int i = 0; i < 4; i++) {
         m_grid.SetPortAllocated(i, lock[i], _T(""));
+        GetDlgItem(btnID[i])->EnableWindow(!lock[i]);
     }
 
     ContentChanged(0);
@@ -314,6 +353,7 @@
 
     for (int i = 0; i < 4; i++) {
         m_grid.SetPortAllocated(i, lock[i], _T(""));
+        GetDlgItem(btnID[i])->EnableWindow(!lock[i]);
     }
 
     ContentChanged(0);
@@ -334,6 +374,7 @@
 
     for (int i = 0; i < 4; i++) {
         m_grid.SetPortAllocated(i, lock[i], _T(""));
+        GetDlgItem(btnID[i])->EnableWindow(!lock[i]);
     }
 
     ContentChanged(0);
@@ -354,6 +395,7 @@
 
     for (int i = 0; i < 4; i++) {
         m_grid.SetPortAllocated(i, lock[i], _T(""));
+        GetDlgItem(btnID[i])->EnableWindow(!lock[i]);
     }
 
     ContentChanged(0);
@@ -405,3 +447,34 @@
 
     *pResult = 0;
 }
+
+void CCjPage2::OnBnClickedButtonPort1ProcessStart()
+{
+    auto& master = theApp.m_model.getMaster();
+    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT1);
+    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+
+}
+
+void CCjPage2::OnBnClickedButtonPort2ProcessStart()
+{
+    auto& master = theApp.m_model.getMaster();
+    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT2);
+    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+}
+
+void CCjPage2::OnBnClickedButtonPort3ProcessStart()
+{
+    auto& master = theApp.m_model.getMaster();
+    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT3);
+    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+}
+
+void CCjPage2::OnBnClickedButtonPort4ProcessStart()
+{
+    auto& master = theApp.m_model.getMaster();
+    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT4);
+    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+}
+
+

--
Gitblit v1.9.3