From 238f41fd4edac2febc03d2e428bce7206f609e99 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期四, 29 一月 2026 15:38:58 +0800
Subject: [PATCH] 1.完善CJ/PJ事件上报;
---
SourceCode/Bond/x64/Debug/DataVariableList.txt | 196 ++++++++++----------
SourceCode/Bond/x64/Debug/CollectionEventList.txt | 34 +-
SourceCode/Bond/Servo/Model.h | 4
SourceCode/Bond/Servo/CMaster.cpp | 5
SourceCode/Bond/Servo/Model.cpp | 150 ++++++++++++++++
SourceCode/Bond/x64/Debug/ReportList.txt | 12
SourceCode/Bond/x64/Debug/VariableList.txt | 82 ++++----
7 files changed, 311 insertions(+), 172 deletions(-)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 13146b8..d603e0d 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -3495,6 +3495,11 @@
}
m_pControlJob->abort(description);
+ // 鍏堜笂鎶ヤ竴娆$姸鎬佸彉鍖栵紙渚夸簬 PrJobAbort 瑙﹀彂锛�
+ if (m_listener.onControlJobChanged) {
+ notifyControlJobChanged();
+ }
+
// 閲婃斁Job鐩稿叧
for (auto item : m_processJobs) {
diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index 22b263c..129d51d 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -41,8 +41,118 @@
{
// 1) 鍒锋柊娲剧敓 SV
refreshDerivedSVs();
+ // 2) 涓婃姤 CJ 鐘舵�佷簨浠讹紙鍚屼竴 CJID锛孯PTID=31000锛�
+ static SERVO::CJState s_prevState = SERVO::CJState::NoState;
+ static std::string s_prevCjId;
+ SERVO::CControlJob* pCj = m_master.getControlJob();
+ if (pCj == nullptr) {
+ if (!s_prevCjId.empty()) {
+ m_hsmsPassive.withVariableLock([&] {
+ m_hsmsPassive.setVariableValue("CJID", s_prevCjId.c_str());
+ m_hsmsPassive.requestEventReportSend("CJobDeleted");
+ });
+ s_prevCjId.clear();
+ s_prevState = SERVO::CJState::NoState;
+ }
+ }
+ else {
+ const std::string& cjId = pCj->id();
+ const SERVO::CJState state = pCj->state();
+ if (s_prevCjId != cjId) {
+ s_prevCjId = cjId;
+ s_prevState = SERVO::CJState::NoState;
+ }
+ if (state != s_prevState) {
+ m_hsmsPassive.withVariableLock([&] {
+ m_hsmsPassive.setVariableValue("CJID", cjId.c_str());
+ if (state == SERVO::CJState::Queued) {
+ m_hsmsPassive.requestEventReportSend("CJobQueued");
+ }
+ else if (state == SERVO::CJState::Executing) {
+ if (s_prevState == SERVO::CJState::Paused) {
+ m_hsmsPassive.requestEventReportSend("CJobResume");
+ }
+ else {
+ m_hsmsPassive.requestEventReportSend("CJobExecuting");
+ }
+ }
+ else if (state == SERVO::CJState::Paused) {
+ m_hsmsPassive.requestEventReportSend("CJobPaused");
+ }
+ else if (state == SERVO::CJState::Completed) {
+ m_hsmsPassive.requestEventReportSend("CJobCompleted");
+ }
+ else if (state == SERVO::CJState::Aborted || state == SERVO::CJState::Failed) {
+ m_hsmsPassive.requestEventReportSend("CJobAbort");
+ }
+ });
+ s_prevState = state;
+ }
+ }
+ // 3) 涓婃姤 PJ 鐘舵�佷簨浠讹紙PrJob*锛�
+ emitPjStateEvents();
// 2) 閫氱煡涓婂眰 UI锛圧X_CODE_CONTROLJOB_CHANGED锛�
notify(RX_CODE_CONTROLJOB_CHANGED);
+}
+
+void CModel::emitPjStateEvents()
+{
+ // 褰撳墠 PJ 鍒楄〃
+ std::map<std::string, SERVO::PJState> current;
+ for (auto pj : m_master.getProcessJobs()) {
+ if (pj == nullptr) continue;
+ current[pj->id()] = pj->state();
+ }
+
+ // 宸插垹闄ょ殑 PJ
+ for (auto it = m_prevPjStates.begin(); it != m_prevPjStates.end(); ) {
+ if (current.find(it->first) == current.end()) {
+ const std::string pjId = it->first;
+ m_hsmsPassive.withVariableLock([&] {
+ m_hsmsPassive.setVariableValue("PJID", pjId.c_str());
+ m_hsmsPassive.requestEventReportSend("PrJobDeleted");
+ });
+ it = m_prevPjStates.erase(it);
+ continue;
+ }
+ ++it;
+ }
+
+ // 鐘舵�佸彉鏇翠簨浠�
+ for (const auto& kv : current) {
+ const std::string& pjId = kv.first;
+ const SERVO::PJState state = kv.second;
+ auto prevIt = m_prevPjStates.find(pjId);
+ if (prevIt == m_prevPjStates.end()) {
+ // 鏂� PJ锛氱敱 onPRJobMultiCreate 璐熻矗涓婃姤 PrJobPooled锛岃繖閲屽彧缂撳瓨
+ m_prevPjStates[pjId] = state;
+ continue;
+ }
+ const SERVO::PJState prevState = prevIt->second;
+ if (state == prevState) continue;
+
+ m_hsmsPassive.withVariableLock([&] {
+ m_hsmsPassive.setVariableValue("PJID", pjId.c_str());
+ if (state == SERVO::PJState::InProcess) {
+ if (prevState == SERVO::PJState::Paused) {
+ m_hsmsPassive.requestEventReportSend("PrJobResume");
+ }
+ else {
+ m_hsmsPassive.requestEventReportSend("PrJobProcessing");
+ }
+ }
+ else if (state == SERVO::PJState::Paused) {
+ m_hsmsPassive.requestEventReportSend("PrJobPaused");
+ }
+ else if (state == SERVO::PJState::Completed) {
+ m_hsmsPassive.requestEventReportSend("PrJobCompleted");
+ }
+ else if (state == SERVO::PJState::Aborted || state == SERVO::PJState::Failed || state == SERVO::PJState::Aborting) {
+ m_hsmsPassive.requestEventReportSend("PrJobAbort");
+ }
+ });
+ m_prevPjStates[pjId] = state;
+ }
}
bool CModel::raiseSoftAlarm(int alarmId,
@@ -398,6 +508,12 @@
m_hsmsPassive.withVariableLock([&] {
m_hsmsPassive.setVariableValue("PJQueued", vars);
m_hsmsPassive.requestEventReportSend_PJ_Queued();
+ for (auto pj : processJobs) {
+ if (pj == nullptr) continue;
+ m_hsmsPassive.setVariableValue("PJID", pj->id().c_str());
+ m_hsmsPassive.requestEventReportSend("PrJobPooled");
+ m_prevPjStates[pj->id()] = pj->state();
+ }
});
return nRet;
};
@@ -645,10 +761,20 @@
glassId = g2;
}
const int slotNo = pJobDataS->getTargetSlotNo();
+ const int sourceSlotNo = pJobDataS->getSourceSlotNo();
+ const int sourcePortNo = pJobDataS->getSourcePortNo();
+ std::string sourceCarrier;
+ if (sourcePortNo > 0) {
+ if (auto* pLoadPort = (SERVO::CLoadPort*)m_master.getEquipment(EQ_ID_LOADPORT1 + sourcePortNo - 1)) {
+ sourceCarrier = pLoadPort->getCassetteId();
+ }
+ }
m_hsmsPassive.withVariableLock([&] {
m_hsmsPassive.setVariableValue("SubEqpName", pEquipment->getName().c_str());
m_hsmsPassive.setVariableValue("SubEqpSlot", slotNo);
- m_hsmsPassive.setVariableValue("MaterialId", glassId.c_str());
+ m_hsmsPassive.setVariableValue("SourceCarrier", sourceCarrier.c_str());
+ m_hsmsPassive.setVariableValue("SourceSlot", (__int64)sourceSlotNo);
+ m_hsmsPassive.setVariableValue("SourcePanelID", glassId.c_str());
m_hsmsPassive.requestEventReportSend("GlassReceivedJob");
});
}
@@ -701,10 +827,20 @@
glassId = g2;
}
const int slotNo = pJobDataS->getSourceSlotNo();
+ const int targetSlotNo = pJobDataS->getTargetSlotNo();
+ const int targetPortNo = pJobDataS->getTargetPortNo();
+ std::string targetCarrier;
+ if (targetPortNo > 0) {
+ if (auto* pLoadPort = (SERVO::CLoadPort*)m_master.getEquipment(EQ_ID_LOADPORT1 + targetPortNo - 1)) {
+ targetCarrier = pLoadPort->getCassetteId();
+ }
+ }
m_hsmsPassive.withVariableLock([&] {
m_hsmsPassive.setVariableValue("SubEqpName", pEquipment->getName().c_str());
m_hsmsPassive.setVariableValue("SubEqpSlot", slotNo);
- m_hsmsPassive.setVariableValue("MaterialId", glassId.c_str());
+ m_hsmsPassive.setVariableValue("TargetCarrier", targetCarrier.c_str());
+ m_hsmsPassive.setVariableValue("TargetSlot", (__int64)targetSlotNo);
+ m_hsmsPassive.setVariableValue("TargetPanelID", glassId.c_str());
m_hsmsPassive.requestEventReportSend("GlassSentOutJob");
});
};
@@ -935,13 +1071,13 @@
};
masterListener.onCjStart = [&](void* pMaster, void* pj) {
m_hsmsPassive.withVariableLock([&] {
- m_hsmsPassive.setVariableValue("CJStartID", ((SERVO::CControlJob*)pj)->id().c_str());
+ m_hsmsPassive.setVariableValue("CJID", ((SERVO::CControlJob*)pj)->id().c_str());
m_hsmsPassive.requestEventReportSend_CJ_Start();
});
};
masterListener.onCjEnd = [&](void* pMaster, void* pj) {
m_hsmsPassive.withVariableLock([&] {
- m_hsmsPassive.setVariableValue("CJEndID", ((SERVO::CControlJob*)pj)->id().c_str());
+ m_hsmsPassive.setVariableValue("CJID", ((SERVO::CControlJob*)pj)->id().c_str());
m_hsmsPassive.requestEventReportSend_CJ_End();
});
@@ -950,15 +1086,17 @@
};
masterListener.onPjStart = [&](void* pMaster, void* pj) {
m_hsmsPassive.withVariableLock([&] {
- m_hsmsPassive.setVariableValue("PJStartID", ((SERVO::CProcessJob*)pj)->id().c_str());
+ m_hsmsPassive.setVariableValue("PJID", ((SERVO::CProcessJob*)pj)->id().c_str());
m_hsmsPassive.requestEventReportSend_PJ_Start();
});
+ emitPjStateEvents();
};
masterListener.onPjEnd = [&](void* pMaster, void* pj) {
m_hsmsPassive.withVariableLock([&] {
- m_hsmsPassive.setVariableValue("PJEndID", ((SERVO::CProcessJob*)pj)->id().c_str());
+ m_hsmsPassive.setVariableValue("PJID", ((SERVO::CProcessJob*)pj)->id().c_str());
m_hsmsPassive.requestEventReportSend_PJ_End();
});
+ emitPjStateEvents();
};
masterListener.onPanelStart = [&](void* pMaster, void* pPanel) {
m_hsmsPassive.withVariableLock([&] {
diff --git a/SourceCode/Bond/Servo/Model.h b/SourceCode/Bond/Servo/Model.h
index 51a5427..78d7af5 100644
--- a/SourceCode/Bond/Servo/Model.h
+++ b/SourceCode/Bond/Servo/Model.h
@@ -3,7 +3,9 @@
#include "HsmsPassive.h"
#include "CMaster.h"
#include "CGlassPool.h"
+#include "ProcessJob.h"
#include <cstdint>
+#include <map>
#include <string>
enum class ControlState : uint8_t {
@@ -46,6 +48,7 @@
private:
void refreshDerivedSVs();
void notifyControlJobChanged();
+ void emitPjStateEvents();
public:
int notify(int code);
@@ -75,4 +78,5 @@
private:
ControlState m_currentControlState{ ControlState::OfflineEquipment };
+ std::map<std::string, SERVO::PJState> m_prevPjStates;
};
diff --git a/SourceCode/Bond/x64/Debug/CollectionEventList.txt b/SourceCode/Bond/x64/Debug/CollectionEventList.txt
index 0e9bd39..e7c55ef 100644
--- a/SourceCode/Bond/x64/Debug/CollectionEventList.txt
+++ b/SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -27,29 +27,29 @@
20000,GlassSlotStart,,(20000)
20001,GlassSlotCompleted,,(20000)
30000,PrJobPooled,,(30000)
-30001,PrJobAbort,,(30000)
-30010,PrJobProcessing,,(30000)
-30011,PrJobCompleted,,(30000)
-30013,PrJobPaused,,(30000)
-30014,PrJobResume,,(30000)
-30020,PrJobDeleted,,(30000)
+30001,PJ_Queued,,(50001)
+30002,PJ_Start,,(50002)
+30003,PrJobProcessing,,(30000)
+30004,PrJobPaused,,(30000)
+30005,PrJobResume,,(30000)
+30006,PrJobCompleted,,(30000)
+30007,PJ_End,,(50003)
+30008,PrJobAbort,,(30000)
+30009,PrJobDeleted,,(30000)
31000,CJobQueued,,(31000)
-31001,CJobAbort,,(31000)
-31010,CJobExecuting,,(31000)
-31020,CJobCompleted,,(31000)
-31021,CJobDeleted,,(31000)
-31031,CJobPaused,,(31000)
-31032,CJobResume,,(31000)
+31001,CJ_Start,,(31000)
+31002,CJobExecuting,,(31000)
+31003,CJobPaused,,(31000)
+31004,CJobResume,,(31000)
+31005,CJobCompleted,,(31000)
+31006,CJ_End,,(31000)
+31007,CJobAbort,,(31000)
+31008,CJobDeleted,,(31000)
40000,E90_SPSM_NoState_To_NeedsProcessing,,(40000)
40001,E90_SPSM_InProcess_To_ProcessCompleted,,(40000)
50000,CarrierID_Readed,,(50000)
-50001,PJ_Queued,,(50001)
-50002,PJ_Start,,(50002)
-50003,PJ_End,,(50003)
50004,Panel_Start,,(50004)
50005,Panel_End,,(50005)
-50006,CJ_Start,,(50006)
-50007,CJ_End,,(50007)
50008,Port_Unload_Ready,,(50008)
50009,Port_Load_Ready,,(50009)
50010,Port_Blocked,,(50010)
diff --git a/SourceCode/Bond/x64/Debug/DataVariableList.txt b/SourceCode/Bond/x64/Debug/DataVariableList.txt
index db4f8a2..88f1a8b 100644
--- a/SourceCode/Bond/x64/Debug/DataVariableList.txt
+++ b/SourceCode/Bond/x64/Debug/DataVariableList.txt
@@ -1,98 +1,98 @@
-DVID,DV Name,DV Format,DV Remark
-6000,Bonder_SV_ProcessStep,A20,Bonder SV: 宸ヨ壓杩愯姝ラ
-6001,Bonder_SV_BladderPressure,A20,Bonder SV: 姘斿泭鍘嬪姏褰撳墠
-6002,Bonder_SV_UpperChamberPressure,A20,Bonder SV: 涓婅厰鍘嬪姏鍚堣
-6003,Bonder_SV_PipeVacuumGauge,A20,Bonder SV: 绠¢亾鐪熺┖琛�
-6004,Bonder_SV_ChamberVacuumGauge,A20,Bonder SV: 鑵斾綋鐪熺┖琛�
-6005,Bonder_SV_UpperTemp1,A20,Bonder SV: 涓婅厰娓╁害1
-6006,Bonder_SV_UpperTemp2,A20,Bonder SV: 涓婅厰娓╁害2
-6007,Bonder_SV_UpperTemp3,A20,Bonder SV: 涓婅厰娓╁害3
-6008,Bonder_SV_UpperTemp4,A20,Bonder SV: 涓婅厰娓╁害4
-6009,Bonder_SV_UpperTemp5,A20,Bonder SV: 涓婅厰娓╁害5
-6010,Bonder_SV_UpperTemp6,A20,Bonder SV: 涓婅厰娓╁害6
-6011,Bonder_SV_LowerTemp1,A20,Bonder SV: 涓嬭厰娓╁害1
-6012,Bonder_SV_LowerTemp2,A20,Bonder SV: 涓嬭厰娓╁害2
-6013,Bonder_SV_LowerTemp3,A20,Bonder SV: 涓嬭厰娓╁害3
-6014,Bonder_SV_LowerTemp4,A20,Bonder SV: 涓嬭厰娓╁害4
-6015,Bonder_SV_LowerTemp5,A20,Bonder SV: 涓嬭厰娓╁害5
-6016,Bonder_SV_LowerTemp6,A20,Bonder SV: 涓嬭厰娓╁害6
-6017,Bonder_SV_HeatingRemaining,A20,Bonder SV: 鍔犵儹鍓╀綑鏃堕棿
-6018,Bonder_SV_PressingRemaining,A20,Bonder SV: 鍘嬪悎鍓╀綑鏃堕棿
-6100,Bonder_PD_AlignDelay,A20,Bonder PD: 瀵逛綅寤舵椂
-6101,Bonder_PD_DwellTime,A20,Bonder PD: 淇濆帇鏃堕棿
-6102,Bonder_PD_BreakVacuumDelay,A20,Bonder PD: 鐮寸湡绌哄欢鏃�
-6103,Bonder_PD_TurboPumpStartDelay,A20,Bonder PD: 鍒嗗瓙娉靛惎鍔ㄥ欢鏃�
-6104,Bonder_PD_AttachVacuumDelay,A20,Bonder PD: 鎶界湡绌哄欢鏃�
-6105,Bonder_PD_HeatingWaitDelay,A20,Bonder PD: 绛夊緟鍔犵儹寤舵椂
-6106,Bonder_PD_BladderPressureSet,A20,Bonder PD: 姘斿泭鍘嬪姏璁惧畾
-6107,Bonder_PD_BladderPressurizeRate,A20,Bonder PD: 姘斿泭鍔犲帇閫熺巼
-6108,Bonder_PD_BladderDepressurizeRate,A20,Bonder PD: 姘斿泭娉勫帇閫熺巼
-6109,Bonder_PD_AttachPressureLimit,A20,Bonder PD: 璐村悎鍘嬪姏涓婇檺
-6110,Bonder_PD_UpperZTorqueSpeed,A20,Bonder PD: 涓婅厰Z棰勮创鍚堥�熷害
-6111,Bonder_PD_UpperTempSet,A20,Bonder PD: 涓婅厰娓╁害璁惧畾
-6112,Bonder_PD_LowerTempSet,A20,Bonder PD: 涓嬭厰娓╁害璁惧畾
-6113,Bonder_PD_PreAttachSpeed,A20,Bonder PD: 棰勮创鍚堥�熷害
-6114,Bonder_PD_AttachSpeed,A20,Bonder PD: 璐村悎閫熷害
-6115,Bonder_PD_UpperHeatDistance,A20,Bonder PD: 涓婅厰鍔犵儹璺濈
-6116,Bonder_PD_AttachPressIn,A20,Bonder PD: 璐村悎鍘嬪叆鍔�
-6117,Bonder_PD_UpperBreakVacuumDist,A20,Bonder PD: 涓婅厰鐮寸湡绌鸿窛绂�
-6118,Bonder_PD_LowerPinBreakVacuumDist,A20,Bonder PD: 涓嬮《閽堢牬鐪熺┖璺濈
-6119,Bonder_PD_LowerPinHeatDistance,A20,Bonder PD: 涓嬮《閽堝姞鐑窛绂�
-6120,Bonder_PD_PumpGaugeSet,A20,Bonder PD: 鐪熺┖娉电湡绌鸿瀹�
-6121,Bonder_PD_TurboReachSet,A20,Bonder PD: 鍒嗗瓙娉靛埌杈捐瀹�
-6200,VacuumBake_SV_A_ProcessStep,A20,VacuumBake SV A: 宸ヨ壓杩愯姝ラ
-6201,VacuumBake_SV_A_ChamberVacuum,A20,VacuumBake SV A: 鑵斾綋鐪熺┖
-6202,VacuumBake_SV_A_Temp1,A20,VacuumBake SV A: 娓╁害1
-6203,VacuumBake_SV_A_Temp2,A20,VacuumBake SV A: 娓╁害2
-6204,VacuumBake_SV_A_Temp4,A20,VacuumBake SV A: 娓╁害4
-6205,VacuumBake_SV_A_Temp5,A20,VacuumBake SV A: 娓╁害5
-6206,VacuumBake_SV_A_Temp6,A20,VacuumBake SV A: 娓╁害6
-6207,VacuumBake_SV_A_Temp7,A20,VacuumBake SV A: 娓╁害7
-6208,VacuumBake_SV_A_BakeRemaining,A20,VacuumBake SV A: 鐑樼儰鍓╀綑鏃堕棿
-6209,VacuumBake_SV_B_ProcessStep,A20,VacuumBake SV B: 宸ヨ壓杩愯姝ラ
-6210,VacuumBake_SV_B_ChamberVacuum,A20,VacuumBake SV B: 鑵斾綋鐪熺┖
-6211,VacuumBake_SV_B_Temp1,A20,VacuumBake SV B: 娓╁害1
-6212,VacuumBake_SV_B_Temp2,A20,VacuumBake SV B: 娓╁害2
-6213,VacuumBake_SV_B_Temp4,A20,VacuumBake SV B: 娓╁害4
-6214,VacuumBake_SV_B_Temp5,A20,VacuumBake SV B: 娓╁害5
-6215,VacuumBake_SV_B_Temp6,A20,VacuumBake SV B: 娓╁害6
-6216,VacuumBake_SV_B_Temp7,A20,VacuumBake SV B: 娓╁害7
-6217,VacuumBake_SV_B_BakeRemaining,A20,VacuumBake SV B: 鐑樼儰鍓╀綑鏃堕棿
-6300,VacuumBake_PD_ParamIndex,A20,VacuumBake PD: 鍙傛暟搴忓彿
-6301,VacuumBake_PD_HeatTime,A20,VacuumBake PD: 鍔犵儹鏃堕棿
-6302,VacuumBake_PD_BreakVacuumTime,A20,VacuumBake PD: 鐮寸湡绌烘椂闂�
-6303,VacuumBake_PD_VacuumReach,A20,VacuumBake PD: 鐪熺┖杈惧埌鍊�
-6304,VacuumBake_PD_TempSet,A20,VacuumBake PD: 涓绘帶娓╁害璁惧畾
-6400,BakeCooling_SV_A_BakeStep,A20,BakeCooling SV A: 鐑樼儰姝ラ
-6401,BakeCooling_SV_A_Temp1,A20,BakeCooling SV A: 娓╁害1
-6402,BakeCooling_SV_A_Temp2,A20,BakeCooling SV A: 娓╁害2
-6403,BakeCooling_SV_A_Temp4,A20,BakeCooling SV A: 娓╁害4
-6404,BakeCooling_SV_A_Temp5,A20,BakeCooling SV A: 娓╁害5
-6405,BakeCooling_SV_A_Temp6,A20,BakeCooling SV A: 娓╁害6
-6406,BakeCooling_SV_A_Temp7,A20,BakeCooling SV A: 娓╁害7
-6407,BakeCooling_SV_A_BakeRemaining,A20,BakeCooling SV A: 鐑樼儰鍓╀綑鏃堕棿
-6408,BakeCooling_SV_A_CoolStep,A20,BakeCooling SV A: 鍐峰嵈姝ラ
-6409,BakeCooling_SV_A_CoolRemaining,A20,BakeCooling SV A: 鍐峰嵈鍓╀綑鏃堕棿
-6410,BakeCooling_SV_B_BakeStep,A20,BakeCooling SV B: 鐑樼儰姝ラ
-6411,BakeCooling_SV_B_Temp1,A20,BakeCooling SV B: 娓╁害1
-6412,BakeCooling_SV_B_Temp2,A20,BakeCooling SV B: 娓╁害2
-6413,BakeCooling_SV_B_Temp4,A20,BakeCooling SV B: 娓╁害4
-6414,BakeCooling_SV_B_Temp5,A20,BakeCooling SV B: 娓╁害5
-6415,BakeCooling_SV_B_Temp6,A20,BakeCooling SV B: 娓╁害6
-6416,BakeCooling_SV_B_Temp7,A20,BakeCooling SV B: 娓╁害7
-6417,BakeCooling_SV_B_BakeRemaining,A20,BakeCooling SV B: 鐑樼儰鍓╀綑鏃堕棿
-6418,BakeCooling_SV_B_CoolStep,A20,BakeCooling SV B: 鍐峰嵈姝ラ
-6419,BakeCooling_SV_B_CoolRemaining,A20,BakeCooling SV B: 鍐峰嵈鍓╀綑鏃堕棿
-6500,BakeCooling_PD_ParamIndex,A20,BakeCooling PD: 鍙傛暟搴忓彿
-6501,BakeCooling_PD_TimeOrTemp1,A20,BakeCooling PD: 鏃堕棿/娓╁害1
-6502,BakeCooling_PD_TimeOrTemp2,A20,BakeCooling PD: 鏃堕棿/娓╁害2
-6503,BakeCooling_PD_Reserved,A20,BakeCooling PD: 棰勭暀
-6600,Measurement_SV_ProcessStep,A20,Measurement SV: 宸ヨ壓杩愯姝ラ
-6601,Measurement_SV_AOIScore,A20,Measurement SV: AOI鍒嗘暟
-6700,Measurement_PD_ParamIndex,A20,Measurement PD: 鍙傛暟搴忓彿
-6701,Measurement_PD_Time,A20,Measurement PD: 鏃堕棿
-6702,Measurement_PD_Value1,A20,Measurement PD: 娴嬮噺鍊�1
-6703,Measurement_PD_Value2,A20,Measurement PD: 娴嬮噺鍊�2
-10200,SlotMap,U1,SlotMap(Scan)
-10201,SlotMapScan,U1,SlotMap(Scan)
-10202,SlotMapDownload,U1,SlotMap(Download)
+DVID,DV Name,DV Format,DV Remark
+6000,Bonder_SV_ProcessStep,A20,Bonder SV: 宸ヨ壓杩愯姝ラ
+6001,Bonder_SV_BladderPressure,A20,Bonder SV: 姘斿泭鍘嬪姏褰撳墠
+6002,Bonder_SV_UpperChamberPressure,A20,Bonder SV: 涓婅厰鍘嬪姏鍚堣
+6003,Bonder_SV_PipeVacuumGauge,A20,Bonder SV: 绠¢亾鐪熺┖琛�
+6004,Bonder_SV_ChamberVacuumGauge,A20,Bonder SV: 鑵斾綋鐪熺┖琛�
+6005,Bonder_SV_UpperTemp1,A20,Bonder SV: 涓婅厰娓╁害1
+6006,Bonder_SV_UpperTemp2,A20,Bonder SV: 涓婅厰娓╁害2
+6007,Bonder_SV_UpperTemp3,A20,Bonder SV: 涓婅厰娓╁害3
+6008,Bonder_SV_UpperTemp4,A20,Bonder SV: 涓婅厰娓╁害4
+6009,Bonder_SV_UpperTemp5,A20,Bonder SV: 涓婅厰娓╁害5
+6010,Bonder_SV_UpperTemp6,A20,Bonder SV: 涓婅厰娓╁害6
+6011,Bonder_SV_LowerTemp1,A20,Bonder SV: 涓嬭厰娓╁害1
+6012,Bonder_SV_LowerTemp2,A20,Bonder SV: 涓嬭厰娓╁害2
+6013,Bonder_SV_LowerTemp3,A20,Bonder SV: 涓嬭厰娓╁害3
+6014,Bonder_SV_LowerTemp4,A20,Bonder SV: 涓嬭厰娓╁害4
+6015,Bonder_SV_LowerTemp5,A20,Bonder SV: 涓嬭厰娓╁害5
+6016,Bonder_SV_LowerTemp6,A20,Bonder SV: 涓嬭厰娓╁害6
+6017,Bonder_SV_HeatingRemaining,A20,Bonder SV: 鍔犵儹鍓╀綑鏃堕棿
+6018,Bonder_SV_PressingRemaining,A20,Bonder SV: 鍘嬪悎鍓╀綑鏃堕棿
+6100,Bonder_PD_AlignDelay,A20,Bonder PD: 瀵逛綅寤舵椂
+6101,Bonder_PD_DwellTime,A20,Bonder PD: 淇濆帇鏃堕棿
+6102,Bonder_PD_BreakVacuumDelay,A20,Bonder PD: 鐮寸湡绌哄欢鏃�
+6103,Bonder_PD_TurboPumpStartDelay,A20,Bonder PD: 鍒嗗瓙娉靛惎鍔ㄥ欢鏃�
+6104,Bonder_PD_AttachVacuumDelay,A20,Bonder PD: 鎶界湡绌哄欢鏃�
+6105,Bonder_PD_HeatingWaitDelay,A20,Bonder PD: 绛夊緟鍔犵儹寤舵椂
+6106,Bonder_PD_BladderPressureSet,A20,Bonder PD: 姘斿泭鍘嬪姏璁惧畾
+6107,Bonder_PD_BladderPressurizeRate,A20,Bonder PD: 姘斿泭鍔犲帇閫熺巼
+6108,Bonder_PD_BladderDepressurizeRate,A20,Bonder PD: 姘斿泭娉勫帇閫熺巼
+6109,Bonder_PD_AttachPressureLimit,A20,Bonder PD: 璐村悎鍘嬪姏涓婇檺
+6110,Bonder_PD_UpperZTorqueSpeed,A20,Bonder PD: 涓婅厰Z棰勮创鍚堥�熷害
+6111,Bonder_PD_UpperTempSet,A20,Bonder PD: 涓婅厰娓╁害璁惧畾
+6112,Bonder_PD_LowerTempSet,A20,Bonder PD: 涓嬭厰娓╁害璁惧畾
+6113,Bonder_PD_PreAttachSpeed,A20,Bonder PD: 棰勮创鍚堥�熷害
+6114,Bonder_PD_AttachSpeed,A20,Bonder PD: 璐村悎閫熷害
+6115,Bonder_PD_UpperHeatDistance,A20,Bonder PD: 涓婅厰鍔犵儹璺濈
+6116,Bonder_PD_AttachPressIn,A20,Bonder PD: 璐村悎鍘嬪叆鍔�
+6117,Bonder_PD_UpperBreakVacuumDist,A20,Bonder PD: 涓婅厰鐮寸湡绌鸿窛绂�
+6118,Bonder_PD_LowerPinBreakVacuumDist,A20,Bonder PD: 涓嬮《閽堢牬鐪熺┖璺濈
+6119,Bonder_PD_LowerPinHeatDistance,A20,Bonder PD: 涓嬮《閽堝姞鐑窛绂�
+6120,Bonder_PD_PumpGaugeSet,A20,Bonder PD: 鐪熺┖娉电湡绌鸿瀹�
+6121,Bonder_PD_TurboReachSet,A20,Bonder PD: 鍒嗗瓙娉靛埌杈捐瀹�
+6200,VacuumBake_SV_A_ProcessStep,A20,VacuumBake SV A: 宸ヨ壓杩愯姝ラ
+6201,VacuumBake_SV_A_ChamberVacuum,A20,VacuumBake SV A: 鑵斾綋鐪熺┖
+6202,VacuumBake_SV_A_Temp1,A20,VacuumBake SV A: 娓╁害1
+6203,VacuumBake_SV_A_Temp2,A20,VacuumBake SV A: 娓╁害2
+6204,VacuumBake_SV_A_Temp4,A20,VacuumBake SV A: 娓╁害4
+6205,VacuumBake_SV_A_Temp5,A20,VacuumBake SV A: 娓╁害5
+6206,VacuumBake_SV_A_Temp6,A20,VacuumBake SV A: 娓╁害6
+6207,VacuumBake_SV_A_Temp7,A20,VacuumBake SV A: 娓╁害7
+6208,VacuumBake_SV_A_BakeRemaining,A20,VacuumBake SV A: 鐑樼儰鍓╀綑鏃堕棿
+6209,VacuumBake_SV_B_ProcessStep,A20,VacuumBake SV B: 宸ヨ壓杩愯姝ラ
+6210,VacuumBake_SV_B_ChamberVacuum,A20,VacuumBake SV B: 鑵斾綋鐪熺┖
+6211,VacuumBake_SV_B_Temp1,A20,VacuumBake SV B: 娓╁害1
+6212,VacuumBake_SV_B_Temp2,A20,VacuumBake SV B: 娓╁害2
+6213,VacuumBake_SV_B_Temp4,A20,VacuumBake SV B: 娓╁害4
+6214,VacuumBake_SV_B_Temp5,A20,VacuumBake SV B: 娓╁害5
+6215,VacuumBake_SV_B_Temp6,A20,VacuumBake SV B: 娓╁害6
+6216,VacuumBake_SV_B_Temp7,A20,VacuumBake SV B: 娓╁害7
+6217,VacuumBake_SV_B_BakeRemaining,A20,VacuumBake SV B: 鐑樼儰鍓╀綑鏃堕棿
+6300,VacuumBake_PD_ParamIndex,A20,VacuumBake PD: 鍙傛暟搴忓彿
+6301,VacuumBake_PD_HeatTime,A20,VacuumBake PD: 鍔犵儹鏃堕棿
+6302,VacuumBake_PD_BreakVacuumTime,A20,VacuumBake PD: 鐮寸湡绌烘椂闂�
+6303,VacuumBake_PD_VacuumReach,A20,VacuumBake PD: 鐪熺┖杈惧埌鍊�
+6304,VacuumBake_PD_TempSet,A20,VacuumBake PD: 涓绘帶娓╁害璁惧畾
+6400,BakeCooling_SV_A_BakeStep,A20,BakeCooling SV A: 鐑樼儰姝ラ
+6401,BakeCooling_SV_A_Temp1,A20,BakeCooling SV A: 娓╁害1
+6402,BakeCooling_SV_A_Temp2,A20,BakeCooling SV A: 娓╁害2
+6403,BakeCooling_SV_A_Temp4,A20,BakeCooling SV A: 娓╁害4
+6404,BakeCooling_SV_A_Temp5,A20,BakeCooling SV A: 娓╁害5
+6405,BakeCooling_SV_A_Temp6,A20,BakeCooling SV A: 娓╁害6
+6406,BakeCooling_SV_A_Temp7,A20,BakeCooling SV A: 娓╁害7
+6407,BakeCooling_SV_A_BakeRemaining,A20,BakeCooling SV A: 鐑樼儰鍓╀綑鏃堕棿
+6408,BakeCooling_SV_A_CoolStep,A20,BakeCooling SV A: 鍐峰嵈姝ラ
+6409,BakeCooling_SV_A_CoolRemaining,A20,BakeCooling SV A: 鍐峰嵈鍓╀綑鏃堕棿
+6410,BakeCooling_SV_B_BakeStep,A20,BakeCooling SV B: 鐑樼儰姝ラ
+6411,BakeCooling_SV_B_Temp1,A20,BakeCooling SV B: 娓╁害1
+6412,BakeCooling_SV_B_Temp2,A20,BakeCooling SV B: 娓╁害2
+6413,BakeCooling_SV_B_Temp4,A20,BakeCooling SV B: 娓╁害4
+6414,BakeCooling_SV_B_Temp5,A20,BakeCooling SV B: 娓╁害5
+6415,BakeCooling_SV_B_Temp6,A20,BakeCooling SV B: 娓╁害6
+6416,BakeCooling_SV_B_Temp7,A20,BakeCooling SV B: 娓╁害7
+6417,BakeCooling_SV_B_BakeRemaining,A20,BakeCooling SV B: 鐑樼儰鍓╀綑鏃堕棿
+6418,BakeCooling_SV_B_CoolStep,A20,BakeCooling SV B: 鍐峰嵈姝ラ
+6419,BakeCooling_SV_B_CoolRemaining,A20,BakeCooling SV B: 鍐峰嵈鍓╀綑鏃堕棿
+6500,BakeCooling_PD_ParamIndex,A20,BakeCooling PD: 鍙傛暟搴忓彿
+6501,BakeCooling_PD_TimeOrTemp1,A20,BakeCooling PD: 鏃堕棿/娓╁害1
+6502,BakeCooling_PD_TimeOrTemp2,A20,BakeCooling PD: 鏃堕棿/娓╁害2
+6503,BakeCooling_PD_Reserved,A20,BakeCooling PD: 棰勭暀
+6600,Measurement_SV_ProcessStep,A20,Measurement SV: 宸ヨ壓杩愯姝ラ
+6601,Measurement_SV_AOIScore,A20,Measurement SV: AOI鍒嗘暟
+6700,Measurement_PD_ParamIndex,A20,Measurement PD: 鍙傛暟搴忓彿
+6701,Measurement_PD_Time,A20,Measurement PD: 鏃堕棿
+6702,Measurement_PD_Value1,A20,Measurement PD: 娴嬮噺鍊�1
+6703,Measurement_PD_Value2,A20,Measurement PD: 娴嬮噺鍊�2
+10200,SlotMap,U1,SlotMap(Scan)
+10201,SlotMapScan,U1,SlotMap(Scan)
+10202,SlotMapDownload,U1,SlotMap(Download)
diff --git a/SourceCode/Bond/x64/Debug/ReportList.txt b/SourceCode/Bond/x64/Debug/ReportList.txt
index ea79b80..dd03f61 100644
--- a/SourceCode/Bond/x64/Debug/ReportList.txt
+++ b/SourceCode/Bond/x64/Debug/ReportList.txt
@@ -18,17 +18,15 @@
10072,(1,10000,10001,10002,10003,10100,10203,20000,20001)
10080,(1,10000,10001,10002,10003,10100)
20000,(1,5018,5019,10000,10001,10002,10003,10203)
-30000,(1,30000,30001)
-31000,(1,31000,31001)
+30000,(5004)
+31000,(5008)
40000,(1,10203,20000)
50000,(5000)
50001,(5003)
50002,(5004)
-50003,(5005)
+50003,(5004)
50004,(5006)
50005,(5007)
-50006,(5008)
-50007,(5009)
50008,(5022)
50009,(5022)
50010,(5022)
@@ -37,8 +35,8 @@
50013,(5022)
50014,(5022)
50020,(500,5022,5021)
-50021,(5018,5019,5023)
-50022,(5018,5019,5023)
+50021,(5018,5019,5028,5029,5030)
+50022,(5018,5019,5025,5026,5027)
60000,(500,5018,5019,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018)
61000,(500,5018,5019,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121)
62000,(500,5018,5019,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217)
diff --git a/SourceCode/Bond/x64/Debug/VariableList.txt b/SourceCode/Bond/x64/Debug/VariableList.txt
index cf7d8fe..ac6ea36 100644
--- a/SourceCode/Bond/x64/Debug/VariableList.txt
+++ b/SourceCode/Bond/x64/Debug/VariableList.txt
@@ -1,44 +1,38 @@
-SVID,SV Name,SV Format,SV Remark
-10000,CarrierID_P1,A50,Carrier ID for Port 1
-10001,CarrierID_P2,A50,Carrier ID for Port 2
-10002,CarrierID_P3,A50,Carrier ID for Port 3
-10003,CarrierID_P4,A50,Carrier ID for Port 4
-100,PortTransferState_P1,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
-101,PortTransferState_P2,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
-102,PortTransferState_P3,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
-103,PortTransferState_P4,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
-300,AccessMode_P1,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
-301,AccessMode_P2,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
-302,AccessMode_P3,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
-303,AccessMode_P4,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
-500,Clock,A50,Current timestamp string
-600,CurrentControlState,U1,0=OfflineEquipment;1=OfflineAttempt;2=Online;3=OfflineHost;4=OnlineLocal;5=OnlineRemote
-601,PreviousControlState,U1,Previous control state (same code set as CurrentControlState)
-700,CurrentProcessState,U1,0=Ready;1=Processing;2=Complete;3=Error
-701,PreviousProcessState,U1,Previous process state (0=Ready;1=Processing;2=Complete;3=Error)
-800,EFEMPPExecName,A20,Current PPExec name from EFEM
-801,EQPPExecName,A20,Current PPExec name from equipment
-8100,Bonder1CurrentRecipe,A50,Current recipe for Bonder1
-8101,Bonder2CurrentRecipe,A50,Current recipe for Bonder2
-8102,VacuumBakeCurrentRecipe,A50,Current recipe for VacuumBake
-8103,BakeCoolingCurrentRecipe,A50,Current recipe for BakeCooling
-8104,MeasurementCurrentRecipe,A50,Current recipe for Measurement
-8105,EFEMCurrentRecipe,A50,Current recipe for EFEM
-5001,CJobSpace,U1,CJ Space
-5002,PJobSpace,U1,PJ Space
-5003,PJQueued,L,PJ queued list (IDs)
-5004,PJStartID,A20,PJ start ID
-5005,PJEndID,A20,PJ end ID
-5006,PanelStartID,A20,Panel start ID
-5007,PanelEndID,A20,Panel end ID
-5008,CJStartID,A20,CJ start ID
-5009,CJEndID,A20,CJ end ID
-5014,VCRPanelID,A20,Panel ID from reader
-5017,ProcessDataReportText,A50,EV_PROCESS_DATA_REPORT payload (placeholder)
-5018,SubEqpName,A20,Sub equipment name (SubEqp/Unit/Process/SV/ProcessData events)
-5019,SubEqpSlot,U1,Slot number for SubEqp/Unit; 0 when not applicable
-5021,PortState,U1,Port transfer/state code for PortStateChange
-5022,PortId,U1,Unified port ID for all Port events
-5023,MaterialId,A50,Material/Glass ID for Received/SentOut events
-5024,EquipmentStatus,U1,Equipment status (SubEqpStateChange): 1=PM;2=Down(BM);3=Pause;4=Idle;5=Run;6=Job Change;7=ETC
-
+SVID,SV Name,SV Format,SV Remark
+300,AccessMode_P1,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
+500,Clock,A50,Current timestamp string
+600,CurrentControlState,U1,0=OfflineEquipment;1=OfflineAttempt;2=Online;3=OfflineHost;4=OnlineLocal;5=OnlineRemote
+601,PreviousControlState,U1,Previous control state (same code set as CurrentControlState)
+700,CurrentProcessState,U1,0=Ready;1=Processing;2=Complete;3=Error
+701,PreviousProcessState,U1,Previous process state (0=Ready;1=Processing;2=Complete;3=Error)
+801,EQPPExecName,A20,Current PPExec name from equipment
+5001,CJobSpace,U1,CJ Space
+5002,PJobSpace,U1,PJ Space
+5003,PJQueued,L,PJ queued list (IDs)
+5004,PJID,A20,Process job ID (PJ)
+5006,PanelStartID,A20,Panel start ID
+5007,PanelEndID,A20,Panel end ID
+5008,CJID,A20,Control job ID (CJ)
+5014,VCRPanelID,A20,Panel ID from reader
+5017,ProcessDataReportText,A50,EV_PROCESS_DATA_REPORT payload (placeholder)
+5018,SubEqpName,A20,Sub equipment name (SubEqp/Unit/Process/SV/ProcessData events)
+5019,SubEqpSlot,U1,Slot number for SubEqp/Unit; 0 when not applicable
+5021,PortState,U1,Port transfer/state code for PortStateChange
+5022,PortId,U1,Unified port ID for all Port events
+5024,EquipmentStatus,U1,Equipment status (SubEqpStateChange): 1=PM;2=Down(BM);3=Pause;4=Idle;5=Run;6=Job Change;7=ETC
+5025,TargetCarrier,A50,Target carrier ID for SentOutJob
+5026,TargetSlot,U1,Target slot number for SentOutJob
+5027,TargetPanelID,A50,Target panel/glass ID for SentOutJob
+5028,SourceCarrier,A50,Source carrier ID for ReceivedJob
+5029,SourceSlot,U1,Source slot number for ReceivedJob
+5030,SourcePanelID,A50,Source panel/glass ID for ReceivedJob
+8100,Bonder1CurrentRecipe,A50,Current recipe for Bonder1
+8101,Bonder2CurrentRecipe,A50,Current recipe for Bonder2
+8102,VacuumBakeCurrentRecipe,A50,Current recipe for VacuumBake
+8103,BakeCoolingCurrentRecipe,A50,Current recipe for BakeCooling
+8104,MeasurementCurrentRecipe,A50,Current recipe for Measurement
+8105,EFEMCurrentRecipe,A50,Current recipe for EFEM
+10000,CarrierID_P1,A50,Carrier ID for Port 1
+10001,CarrierID_P2,A50,Carrier ID for Port 2
+10002,CarrierID_P3,A50,Carrier ID for Port 3
+10003,CarrierID_P4,A50,Carrier ID for Port 4
--
Gitblit v1.9.3