From dd4d7532a85ae70e303117a80dd65b3bc803d457 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期五, 30 一月 2026 15:01:54 +0800
Subject: [PATCH] 1.关于ProcessStart下发数据的完善;
---
SourceCode/Bond/Servo/CCjPage2.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 54 insertions(+), 4 deletions(-)
diff --git a/SourceCode/Bond/Servo/CCjPage2.cpp b/SourceCode/Bond/Servo/CCjPage2.cpp
index 2f4d559..0a1bf21 100644
--- a/SourceCode/Bond/Servo/CCjPage2.cpp
+++ b/SourceCode/Bond/Servo/CCjPage2.cpp
@@ -13,6 +13,40 @@
IDC_BUTTON_PORT3_PROCESS_START,
IDC_BUTTON_PORT4_PROCESS_START };
+namespace {
+ void BuildCassetteCtrlMaps(SERVO::CLoadPort* pPort, short (&jobExistence)[12], short& slotProcess)
+ {
+ slotProcess = 0;
+ bool anyScheduled = false;
+
+ // Prefer hardware scan map for job existence (first 16 slots).
+ const short scanMap = pPort->getScanCassetteMap();
+ if (scanMap != 0) {
+ jobExistence[0] = scanMap;
+ }
+
+ const int maxSlots = 12 * 16;
+ const int totalSlots = (SLOT_MAX < maxSlots) ? SLOT_MAX : maxSlots;
+ for (int slot = 1; slot <= totalSlots; ++slot) {
+ SERVO::CGlass* pGlass = pPort->getGlassFromSlot(slot);
+ if (pGlass == nullptr) continue;
+
+ const int wordIndex = (slot - 1) / 16;
+ const int bitIndex = (slot - 1) % 16;
+ jobExistence[wordIndex] = (short)(jobExistence[wordIndex] | (1 << bitIndex));
+
+ if (slot <= 16 && pGlass->isScheduledForProcessing()) {
+ slotProcess = (short)(slotProcess | (1 << bitIndex));
+ anyScheduled = true;
+ }
+ }
+
+ if (!anyScheduled) {
+ slotProcess = jobExistence[0];
+ }
+ }
+}
+
// CPjPage1 瀵硅瘽妗�
IMPLEMENT_DYNAMIC(CCjPage2, CCjPageBase)
@@ -452,7 +486,11 @@
{
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);
+ if (port == nullptr) return;
+ short jobExistence[12] = { 0 };
+ short slotProcess = 0;
+ BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
+ port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
@@ -460,21 +498,33 @@
{
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);
+ if (port == nullptr) return;
+ short jobExistence[12] = { 0 };
+ short slotProcess = 0;
+ BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
+ port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 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);
+ if (port == nullptr) return;
+ short jobExistence[12] = { 0 };
+ short slotProcess = 0;
+ BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
+ port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 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);
+ if (port == nullptr) return;
+ short jobExistence[12] = { 0 };
+ short slotProcess = 0;
+ BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
+ port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
--
Gitblit v1.9.3