From 6e0341c6356cdb6e527fbd89d1dc876f4e47ce46 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期五, 09 一月 2026 20:37:50 +0800
Subject: [PATCH] 1.Trace Data,ProcessData, SVData等上报

---
 SourceCode/Bond/x64/Debug/CollectionEventList.txt |    6 ++
 SourceCode/Bond/Servo/CMaster.cpp                 |    4 +
 SourceCode/Bond/Servo/CMaster.h                   |    2 
 SourceCode/Bond/Servo/Model.cpp                   |   99 ++++++++++++++++++++++++++------
 SourceCode/Bond/x64/Debug/ReportList.txt          |    6 ++
 SourceCode/Bond/x64/Debug/VariableList.txt        |   53 +++++++++++++++++
 6 files changed, 150 insertions(+), 20 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index f179421..6df6ca1 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -1786,6 +1786,10 @@
 				strOut.append(szBuffer);
 			}
 			LOGD("<CMaster-%s>SVDataReport:%s", ((CEquipment*)pEquipment)->getName().c_str(), strOut.c_str());
+
+			if (m_listener.onSVDataReport != nullptr) {
+				m_listener.onSVDataReport(this, (CEquipment*)pEquipment, params);
+			}
 		};
 		listener.onPanelDataReport = [&](void* pEquipment, void* pContext) {
 			LOGD("<CMaster-%s>onPanelDataReport", ((CEquipment*)pEquipment)->getName().c_str());
diff --git a/SourceCode/Bond/Servo/CMaster.h b/SourceCode/Bond/Servo/CMaster.h
index d143a26..02720ee 100644
--- a/SourceCode/Bond/Servo/CMaster.h
+++ b/SourceCode/Bond/Servo/CMaster.h
@@ -60,6 +60,7 @@
     typedef std::function<void(void* pMaster, CEquipment* pEquipment, short status, __int64 data)> ONLOADPORTSTATUSCHANGED;
     typedef std::function<void(void* pMaster, CEquipment* pEquipment, int slotNo, PROCESS_STATE prevState, PROCESS_STATE state)> ONPROCESSSTATECHANGED;
     typedef std::function<void(void* pMaster, CEquipment* pEquipment, const std::vector<CParam>& params)> ONPROCESSDATAREPORTEX;
+    typedef std::function<void(void* pMaster, CEquipment* pEquipment, const std::vector<CParam>& params)> ONSVDATAREPORT;
     typedef std::function<void(void* pMaster, int round)> ONCTROUNDEND;
     typedef std::function<void(void* pMaster, void* pj)> ONPJSTART;
     typedef std::function<void(void* pMaster)> ONCONTROLJOBCHANGED;
@@ -74,6 +75,7 @@
         ONROBOTTASKEVENT        onRobotTaskEvent;
         ONLOADPORTSTATUSCHANGED	onLoadPortStatusChanged;
         ONPROCESSSTATECHANGED   onProcessStateChanged;
+        ONSVDATAREPORT          onSVDataReport;
         ONPROCESSDATAREPORTEX   onProcessDataReport;
         ONCTROUNDEND            onCTRoundEnd;
         ONPJSTART               onCjStart;
diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index e86862d..31788e7 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -12,6 +12,8 @@
 #include "CParam.h"
 #include <algorithm>
 #include <iomanip>
+#include <sstream>
+#include <array>
 #include <map>
 
 
@@ -305,6 +307,12 @@
 
 
 	SERVO::MasterListener masterListener;
+	auto formatParamValue = [](const CParam& p) {
+		std::ostringstream oss;
+		oss.setf(std::ios::fixed);
+		oss << std::setprecision(4) << p.getDoubleValue();
+		return oss.str();
+	};
 	masterListener.onMasterStateChanged = [&](void* pMaster, SERVO::MASTERSTATE state) -> void {
 		LOGI("<CModel>Master state changed(%d)", (int)state);
 		notify(RX_CODE_MASTER_STATE_CHANGED);
@@ -611,32 +619,83 @@
 			}
 		});
 	};
+	masterListener.onSVDataReport = [&](void* pMaster, SERVO::CEquipment* pEquipment, const std::vector<CParam>& params) {
+		(void)pMaster;
+		const int eqId = pEquipment ? pEquipment->getID() : 0;
+
+		auto sendSv = [&](const auto& vidMap, const char* evName) {
+			const size_t count = (std::min)(params.size(), vidMap.size());
+			m_hsmsPassive.withVariableLock([&] {
+				m_hsmsPassive.setVariableValue("Clock", CToolUnits::getCurrentTimeString().c_str());
+				for (size_t idx = 0; idx < count; ++idx) {
+					const std::string val = formatParamValue(params[idx]);
+					m_hsmsPassive.setVariableValue(std::to_string(vidMap[idx]).c_str(), val.c_str());
+				}
+				m_hsmsPassive.requestEventReportSend(evName);
+			});
+		};
+
+		if (eqId == EQ_ID_Bonder1 || eqId == EQ_ID_Bonder2) {
+			static constexpr std::array<int, 19> vids = {
+				6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,
+				6010,6011,6012,6013,6014,6015,6016,6017,6018
+			};
+			sendSv(vids, "BonderSVData");
+		}
+		else if (eqId == EQ_ID_VACUUMBAKE) {
+			static constexpr std::array<int, 18> vids = {
+				6200,6201,6202,6203,6204,6205,6206,6207,6208,
+				6209,6210,6211,6212,6213,6214,6215,6216,6217
+			};
+			sendSv(vids, "VacuumBakeSVData");
+		}
+		else if (eqId == EQ_ID_BAKE_COOLING) {
+			static constexpr std::array<int, 20> vids = {
+				6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,
+				6410,6411,6412,6413,6414,6415,6416,6417,6418,6419
+			};
+			sendSv(vids, "BakeCoolingSVData");
+		}
+		else if (eqId == EQ_ID_MEASUREMENT) {
+			static constexpr std::array<int, 2> vids = { 6600, 6601 };
+			sendSv(vids, "MeasurementSVData");
+		}
+	};
 	masterListener.onProcessDataReport = [&](void* pMaster, SERVO::CEquipment* pEquipment, const std::vector<CParam>& params) {
 		(void)pMaster;
 		const int eqId = pEquipment ? pEquipment->getID() : 0;
-		if (eqId != EQ_ID_Bonder1 && eqId != EQ_ID_Bonder2) return;
 
-		auto formatVal = [](const CParam& p) {
-			std::ostringstream oss;
-			oss.setf(std::ios::fixed);
-			oss << std::setprecision(4) << p.getDoubleValue();
-			return oss.str();
+		auto sendProcess = [&](const auto& vidMap, const char* evName) {
+			const size_t count = (std::min)(params.size(), vidMap.size());
+			m_hsmsPassive.withVariableLock([&] {
+				m_hsmsPassive.setVariableValue("Clock", CToolUnits::getCurrentTimeString().c_str());
+				for (size_t idx = 0; idx < count; ++idx) {
+					const std::string val = formatParamValue(params[idx]);
+					m_hsmsPassive.setVariableValue(std::to_string(vidMap[idx]).c_str(), val.c_str());
+				}
+				m_hsmsPassive.requestEventReportSend(evName);
+			});
 		};
 
-		static const int vidMap[] = {
-			6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,
-			6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121
-		};
-		const size_t count = (std::min)(params.size(), sizeof(vidMap) / sizeof(vidMap[0]));
-		m_hsmsPassive.withVariableLock([&] {
-			m_hsmsPassive.setVariableValue("Clock", CToolUnits::getCurrentTimeString().c_str());
-			for (size_t idx = 0; idx < count; ++idx) {
-				auto& p = params[idx];
-				std::string val = formatVal(p);
-				m_hsmsPassive.setVariableValue(std::to_string(vidMap[idx]).c_str(), val.c_str());
-			}
-			m_hsmsPassive.requestEventReportSend("BonderProcessData");
-		});
+		if (eqId == EQ_ID_Bonder1 || eqId == EQ_ID_Bonder2) {
+			static constexpr std::array<int, 22> vids = {
+				6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,
+				6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121
+			};
+			sendProcess(vids, "BonderProcessData");
+		}
+		else if (eqId == EQ_ID_VACUUMBAKE) {
+			static constexpr std::array<int, 5> vids = { 6300,6301,6302,6303,6304 };
+			sendProcess(vids, "VacuumBakeProcessData");
+		}
+		else if (eqId == EQ_ID_BAKE_COOLING) {
+			static constexpr std::array<int, 4> vids = { 6500,6501,6502,6503 };
+			sendProcess(vids, "BakeCoolingProcessData");
+		}
+		else if (eqId == EQ_ID_MEASUREMENT) {
+			static constexpr std::array<int, 4> vids = { 6700,6701,6702,6703 };
+			sendProcess(vids, "MeasurementProcessData");
+		}
 	};
 	masterListener.onCTRoundEnd = [&](void* pMaster, int round) {
 		m_configuration.setContinuousTransferCount(round);
diff --git a/SourceCode/Bond/x64/Debug/CollectionEventList.txt b/SourceCode/Bond/x64/Debug/CollectionEventList.txt
index 81db963..a5f32aa 100644
--- a/SourceCode/Bond/x64/Debug/CollectionEventList.txt
+++ b/SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -59,6 +59,12 @@
 50020,PortStateChange,,(50020)
 60000,BonderSVData,,(60000)
 61000,BonderProcessData,,(61000)
+62000,VacuumBakeSVData,,(62000)
+63000,VacuumBakeProcessData,,(63000)
+64000,BakeCoolingSVData,,(64000)
+65000,BakeCoolingProcessData,,(65000)
+66000,MeasurementSVData,,(66000)
+67000,MeasurementProcessData,,(67000)
 12000,UnitStart,,(12000)
 12001,UnitStateChange,,(12001)
 12002,UnitEnd,,(12002)
diff --git a/SourceCode/Bond/x64/Debug/ReportList.txt b/SourceCode/Bond/x64/Debug/ReportList.txt
index c8f5089..8412387 100644
--- a/SourceCode/Bond/x64/Debug/ReportList.txt
+++ b/SourceCode/Bond/x64/Debug/ReportList.txt
@@ -34,6 +34,12 @@
 50020,(500,5020,5021)
 60000,(500,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018)
 61000,(500,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121)
+62000,(500,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217)
+63000,(500,6300,6301,6302,6303,6304)
+64000,(500,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419)
+65000,(500,6500,6501,6502,6503)
+66000,(500,6600,6601)
+67000,(500,6700,6701,6702,6703)
 10015,(5018,5019)
 10016,(5018,5019)
 10017,(500,5018)
diff --git a/SourceCode/Bond/x64/Debug/VariableList.txt b/SourceCode/Bond/x64/Debug/VariableList.txt
index 932b7dd..c146e6a 100644
--- a/SourceCode/Bond/x64/Debug/VariableList.txt
+++ b/SourceCode/Bond/x64/Debug/VariableList.txt
@@ -97,6 +97,59 @@
 6119,Bonder_PD_LowerPinHeatDistance,A20,Bonder ProcessData
 6120,Bonder_PD_PumpGaugeSet,A20,Bonder ProcessData
 6121,Bonder_PD_TurboReachSet,A20,Bonder ProcessData
+6200,VacuumBake_SV_A_ProcessStep,A20,VacuumBake SV
+6201,VacuumBake_SV_A_ChamberVacuum,A20,VacuumBake SV
+6202,VacuumBake_SV_A_Temp1,A20,VacuumBake SV
+6203,VacuumBake_SV_A_Temp2,A20,VacuumBake SV
+6204,VacuumBake_SV_A_Temp4,A20,VacuumBake SV
+6205,VacuumBake_SV_A_Temp5,A20,VacuumBake SV
+6206,VacuumBake_SV_A_Temp6,A20,VacuumBake SV
+6207,VacuumBake_SV_A_Temp7,A20,VacuumBake SV
+6208,VacuumBake_SV_A_BakeRemaining,A20,VacuumBake SV
+6209,VacuumBake_SV_B_ProcessStep,A20,VacuumBake SV
+6210,VacuumBake_SV_B_ChamberVacuum,A20,VacuumBake SV
+6211,VacuumBake_SV_B_Temp1,A20,VacuumBake SV
+6212,VacuumBake_SV_B_Temp2,A20,VacuumBake SV
+6213,VacuumBake_SV_B_Temp4,A20,VacuumBake SV
+6214,VacuumBake_SV_B_Temp5,A20,VacuumBake SV
+6215,VacuumBake_SV_B_Temp6,A20,VacuumBake SV
+6216,VacuumBake_SV_B_Temp7,A20,VacuumBake SV
+6217,VacuumBake_SV_B_BakeRemaining,A20,VacuumBake SV
+6300,VacuumBake_PD_ParamIndex,A20,VacuumBake ProcessData
+6301,VacuumBake_PD_HeatTime,A20,VacuumBake ProcessData
+6302,VacuumBake_PD_BreakVacuumTime,A20,VacuumBake ProcessData
+6303,VacuumBake_PD_VacuumReach,A20,VacuumBake ProcessData
+6304,VacuumBake_PD_TempSet,A20,VacuumBake ProcessData
+6400,BakeCooling_SV_A_BakeStep,A20,BakeCooling SV
+6401,BakeCooling_SV_A_Temp1,A20,BakeCooling SV
+6402,BakeCooling_SV_A_Temp2,A20,BakeCooling SV
+6403,BakeCooling_SV_A_Temp4,A20,BakeCooling SV
+6404,BakeCooling_SV_A_Temp5,A20,BakeCooling SV
+6405,BakeCooling_SV_A_Temp6,A20,BakeCooling SV
+6406,BakeCooling_SV_A_Temp7,A20,BakeCooling SV
+6407,BakeCooling_SV_A_BakeRemaining,A20,BakeCooling SV
+6408,BakeCooling_SV_A_CoolStep,A20,BakeCooling SV
+6409,BakeCooling_SV_A_CoolRemaining,A20,BakeCooling SV
+6410,BakeCooling_SV_B_BakeStep,A20,BakeCooling SV
+6411,BakeCooling_SV_B_Temp1,A20,BakeCooling SV
+6412,BakeCooling_SV_B_Temp2,A20,BakeCooling SV
+6413,BakeCooling_SV_B_Temp4,A20,BakeCooling SV
+6414,BakeCooling_SV_B_Temp5,A20,BakeCooling SV
+6415,BakeCooling_SV_B_Temp6,A20,BakeCooling SV
+6416,BakeCooling_SV_B_Temp7,A20,BakeCooling SV
+6417,BakeCooling_SV_B_BakeRemaining,A20,BakeCooling SV
+6418,BakeCooling_SV_B_CoolStep,A20,BakeCooling SV
+6419,BakeCooling_SV_B_CoolRemaining,A20,BakeCooling SV
+6500,BakeCooling_PD_ParamIndex,A20,BakeCooling ProcessData
+6501,BakeCooling_PD_TimeOrTemp1,A20,BakeCooling ProcessData
+6502,BakeCooling_PD_TimeOrTemp2,A20,BakeCooling ProcessData
+6503,BakeCooling_PD_Reserved,A20,BakeCooling ProcessData
+6600,Measurement_SV_ProcessStep,A20,Measurement SV
+6601,Measurement_SV_AOIScore,A20,Measurement SV
+6700,Measurement_PD_ParamIndex,A20,Measurement ProcessData
+6701,Measurement_PD_Time,A20,Measurement ProcessData
+6702,Measurement_PD_Value1,A20,Measurement ProcessData
+6703,Measurement_PD_Value2,A20,Measurement ProcessData
 10200,SlotMap,U2,SlotMap(Scan)
 10201,SlotMapScan,U2,SlotMap(Scan)
 10202,SlotMapDownload,U2,SlotMap(Download)

--
Gitblit v1.9.3