From 829fe6c6bc33d53fda9c31fd45a37e1df87befff Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 30 一月 2026 11:16:24 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/Servo/CMaster.cpp | 45 ++++++++++++++++++++++++++++++---------------
1 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index df5bff5..bd2e9ab 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -119,13 +119,6 @@
m_hEventDispatchThreadExit[1] = nullptr;
}
- // 閲婃斁浜哄伐鎼嚭缂撳啿鍖洪噷鐨勭幓鐠�
- for (auto* pGlass : m_bufGlass) {
- if (pGlass != nullptr) {
- pGlass->release();
- }
- }
- m_bufGlass.clear();
DeleteCriticalSection(&m_criticalSection);
}
@@ -344,6 +337,13 @@
}
m_listEquipment.clear();
+ // release manual-remove buffer before glass pool is torn down
+ for (auto* pGlass : m_bufGlass) {
+ if (pGlass != nullptr) {
+ pGlass->release();
+ }
+ }
+ m_bufGlass.clear();
if (m_pCollector != nullptr) {
m_pCollector->stopLoop();
@@ -1793,18 +1793,23 @@
int paramIndex = mapping.first;
int channel = mapping.second;
- if (paramIndex < params.size() && channel - 1 < vacuumbakeTypes.size()) {
+ if (paramIndex < params.size()) {
auto& param = params.at(paramIndex);
double value = param.getDoubleValue();
- const std::string& dataType = vacuumbakeTypes[channel - 1];
const std::string& paramName = param.getName();
const char slotTag = !paramName.empty() ? paramName[0] : '\0';
+ const int typeIndex = (slotTag == 'B') ? (channel - 8) : (channel - 1);
+ if (typeIndex < 0 || typeIndex >= (int)vacuumbakeTypes.size()) {
+ continue;
+ }
+ const int pushChannel = typeIndex + 1;
+ const std::string& dataType = vacuumbakeTypes[typeIndex];
if (m_pCollector != nullptr) {
if (slotTag == 'A')
- m_pCollector->buffersPush(SlotToMid(eqid, 1), channel, ts, value);
+ m_pCollector->buffersPush(SlotToMid(eqid, 1), pushChannel, ts, value);
else if (slotTag == 'B')
- m_pCollector->buffersPush(SlotToMid(eqid, 2), channel, ts, value);
+ m_pCollector->buffersPush(SlotToMid(eqid, 2), pushChannel, ts, value);
}
// 鏍规嵁鑵斾綋鍓嶇紑鍐欏叆瀵瑰簲 Slot 鐨勭幓鐠�
@@ -1838,20 +1843,25 @@
int paramIndex = mapping.first;
int channel = mapping.second;
- if (paramIndex < params.size() && channel - 1 < coolingTypes.size()) {
+ if (paramIndex < params.size()) {
auto& param = params.at(paramIndex);
double value = param.getDoubleValue();
- const std::string& dataType = coolingTypes[channel - 1];
const std::string& paramName = param.getName();
const char slotTag = !paramName.empty() ? paramName[0] : '\0';
const bool paramIsBake = paramName.find("鐑樼儰") != std::string::npos;
const bool paramIsCooling = paramName.find("鍐峰嵈") != std::string::npos;
+ const int typeIndex = (slotTag == 'B') ? (channel - 7) : (channel - 1);
+ if (typeIndex < 0 || typeIndex >= (int)coolingTypes.size()) {
+ continue;
+ }
+ const int pushChannel = typeIndex + 1;
+ const std::string& dataType = coolingTypes[typeIndex];
if (m_pCollector != nullptr && paramIsBake) {
if (slotTag == 'A')
- m_pCollector->buffersPush(SlotToMid(eqid, 1), channel, ts, value);
+ m_pCollector->buffersPush(SlotToMid(eqid, 1), pushChannel, ts, value);
else if (slotTag == 'B')
- m_pCollector->buffersPush(SlotToMid(eqid, 3), channel, ts, value);
+ m_pCollector->buffersPush(SlotToMid(eqid, 3), pushChannel, ts, value);
}
if (!dataType.empty()) {
@@ -1920,6 +1930,11 @@
m_listener.onJobReceived(this, (CEquipment*)pEquipment, port, pJobDataS);
}
};
+ listener.onSentOutJob = [&](void* pEquipment, int port, CJobDataS* pJobDataS) {
+ if (m_listener.onJobSentOut != nullptr) {
+ m_listener.onJobSentOut(this, (CEquipment*)pEquipment, port, pJobDataS);
+ }
+ };
pEquipment->setListener(listener);
pEquipment->setCcLink(&m_cclink);
m_listEquipment.push_back(pEquipment);
--
Gitblit v1.9.3