From 2c354dbe68b4f15f2e74562c0a1719bf7e560459 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 05 九月 2025 13:59:12 +0800
Subject: [PATCH] 1.玻璃Glass增加工艺参数列表; 2.处理ProcessDataReport事件,接收工艺参数;

---
 SourceCode/Bond/Servo/CProcessData.cpp |   60 ++++++++++++++++-------------
 SourceCode/Bond/Servo/CGlass.cpp       |   10 +++++
 SourceCode/Bond/Servo/CEquipment.cpp   |   18 +++++++++
 SourceCode/Bond/Servo/CGlass.h         |    6 +++
 SourceCode/Bond/Servo/CProcessData.h   |   10 +++-
 5 files changed, 74 insertions(+), 30 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index c4c19a8..ab62475 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -1528,6 +1528,24 @@
 		processData.getAttributeVector(attrubutes, weight);
 		onProcessData(&processData);
 
+
+
+		// 找到玻璃,关联数据
+		CGlass* pGlass = this->getGlassWithCassette(processData.getCassetteSequenceNo(),
+			processData.getJobSequenceNo());
+		if (pGlass == nullptr) {
+			LOGE("<CEquipment-%s>找不到对应Glass, 关联工艺参数失败。", this->getName().c_str(),
+				processData.getCassetteSequenceNo(),
+				processData.getJobSequenceNo());
+			return -1;
+		}
+
+		auto rawData = processData.getParamsRawData();
+		std::vector<CParam> params;
+		this->parsingParams((const char*)rawData.data(), rawData.size(), params);
+		pGlass->addParams(params);
+
+
 		return nRet;
 	}
 
diff --git a/SourceCode/Bond/Servo/CGlass.cpp b/SourceCode/Bond/Servo/CGlass.cpp
index 974859c..be75a41 100644
--- a/SourceCode/Bond/Servo/CGlass.cpp
+++ b/SourceCode/Bond/Servo/CGlass.cpp
@@ -369,4 +369,14 @@
 	{
 		m_tEnd = std::chrono::system_clock::now();
 	}
+
+	void CGlass::addParams(std::vector<CParam>& params)
+	{
+		m_params.insert(m_params.end(), params.begin(), params.end());
+	}
+
+	std::vector<CParam>& CGlass::getParams()
+	{
+		return m_params;
+	}
 }
diff --git a/SourceCode/Bond/Servo/CGlass.h b/SourceCode/Bond/Servo/CGlass.h
index 21aaf34..b49563e 100644
--- a/SourceCode/Bond/Servo/CGlass.h
+++ b/SourceCode/Bond/Servo/CGlass.h
@@ -8,6 +8,7 @@
 #include "CJobDataS.h"
 #include "ServoCommo.h"
 #include "ProcessJob.h"
+#include "CParam.h"
 
 
 namespace SERVO {
@@ -89,6 +90,10 @@
 		void markStart();
 		void markEnd();
 
+		// 工艺参数
+		void addParams(std::vector<CParam>& params);
+		std::vector<CParam>& getParams();
+
 	private:
 		MaterialsType m_type;
 		std::string m_strID;
@@ -100,6 +105,7 @@
 		int m_nOriginSlot;
 		BOOL m_bScheduledForProcessing;			/* 是否将加工处理 */
 		CProcessJob* m_pProcessJob;
+		std::vector<CParam> m_params;			// 工艺参数
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CProcessData.cpp b/SourceCode/Bond/Servo/CProcessData.cpp
index ed5a5aa..3f97b41 100644
--- a/SourceCode/Bond/Servo/CProcessData.cpp
+++ b/SourceCode/Bond/Servo/CProcessData.cpp
@@ -15,6 +15,16 @@
 
 	}
 
+	short CProcessData::getCassetteSequenceNo()
+	{
+		return m_nCassetteSequenceNo;
+	}
+
+	short CProcessData::getJobSequenceNo()
+	{
+		return m_nJobSequenceNo;
+	}
+
 	std::string& CProcessData::getGlassId()
 	{
 		return m_strGlassId;
@@ -40,14 +50,9 @@
 		return m_nTotalParameter;
 	}
 
-	const std::list<std::string>& CProcessData::getParameters()
+	std::vector<uint8_t>& CProcessData::getParamsRawData()
 	{
-		return m_params;
-	}
-
-	void CProcessData::getParameters(std::list<std::string>& list)
-	{
-		std::copy(m_params.begin(), m_params.end(), std::back_inserter(list));
+		return m_paramsRawData;
 	}
 
 	int CProcessData::serialize(char* pszBuffer, int nBufferSize)
@@ -57,6 +62,12 @@
 		// 解释数据
 		// Glass ID
 		int index = 0;
+		memcpy(&pszBuffer[index], &m_nCassetteSequenceNo, sizeof(short));
+		index += sizeof(short);
+
+		memcpy(&pszBuffer[index], &m_nJobSequenceNo, sizeof(short));
+		index += sizeof(short);
+
 		CToolUnits::convertString(&pszBuffer[index], 10 * 2, m_strGlassId);
 		index += 10 * 2;
 
@@ -80,17 +91,9 @@
 		m_nCurrentGroup = (unsigned int)CToolUnits::toInt16(&pszBuffer[index]);
 		index += 2;
 
-		// param list(0x1881~0x1a74), 共1000 bytes, 20个字符为一个参数, 50组
-		// 最后一group可能不满足50, 以m_nTotalParameter为依据
-		int size = (m_nCurrentGroup == m_nTotalGroup) ? m_nTotalParameter % 50 : 50;
-		for (int i = 0; i < size; i++) {
-			std::string strParam;
-			CToolUnits::convertString(&pszBuffer[index], 20, strParam);
-			if (!strParam.empty()) {
-				m_params.push_back(strParam);
-			}
-			index += 20;
-		}
+		// 解释数据
+
+
 
 		return 538 * 2;
 	}
@@ -100,6 +103,12 @@
 		if (nBufferSize < 538 * 2) return -1;
 
 		int index = 0;
+		memcpy(&m_nCassetteSequenceNo, &pszBuffer[index], sizeof(short));
+		index += sizeof(short);
+
+		memcpy(&m_nJobSequenceNo, &pszBuffer[index], sizeof(short));
+		index += sizeof(short);
+
 		CToolUnits::convertString(&pszBuffer[index], 10 * 2, m_strGlassId);
 		index += 10 * 2;
 
@@ -118,7 +127,12 @@
 		memcpy(&m_nCurrentGroup, &pszBuffer[index], sizeof(short));
 		index += sizeof(short);
 
-		// 多分组如何处理?待考虑
+		// 参数原始数据
+		m_paramsRawData.clear();
+		m_paramsRawData.insert(
+			m_paramsRawData.end(),
+			reinterpret_cast<const uint8_t*>(&pszBuffer[index]),
+			reinterpret_cast<const uint8_t*>(&pszBuffer[index]) + 500);
 
 
 		return 538 * 2;
@@ -139,13 +153,5 @@
 			std::to_string(m_nTotalGroup).c_str(), "", weight++));
 		attrubutes.addAttribute(new CAttribute("Current Group",
 			std::to_string(m_nCurrentGroup).c_str(), "", weight++));
-
-		char szName[256];
-		int index = 0;
-		for (auto item : m_params) {
-			sprintf_s(szName, 256, "Parameter %d", ++index);
-			attrubutes.addAttribute(new CAttribute(szName,
-				item.c_str(), "", weight++));
-		}
 	}
 }
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/CProcessData.h b/SourceCode/Bond/Servo/CProcessData.h
index 2bae1aa..93684de 100644
--- a/SourceCode/Bond/Servo/CProcessData.h
+++ b/SourceCode/Bond/Servo/CProcessData.h
@@ -1,6 +1,7 @@
 #pragma once
 #include <list>
 #include "CAttributeVector.h"
+#include "CParam.h"
 
 
 namespace SERVO {
@@ -11,25 +12,28 @@
 		virtual ~CProcessData();
 
 	public:
+		short getCassetteSequenceNo();
+		short getJobSequenceNo();
 		std::string& getGlassId();
 		void setGlassId(const char* pszId);
 		std::string& getStartTime();
 		std::string& getEndTime();
 		unsigned int getTotalParameter();
-		const std::list<std::string>& getParameters();
-		void getParameters(std::list<std::string>& list);
+		std::vector<uint8_t>& getParamsRawData();
 		int serialize(char* pszBuffer, int nBufferSize);
 		int unserialize(const char* pszBuffer, int nBufferSize);
 		void getAttributeVector(CAttributeVector& attrubutes, int beginWeight);
 
 	private:
+		short m_nCassetteSequenceNo;
+		short m_nJobSequenceNo;
 		std::string m_strGlassId;
 		std::string m_strStartTime;
 		std::string m_strEndTime;
 		unsigned int m_nTotalParameter;
 		unsigned int m_nTotalGroup;
 		unsigned int m_nCurrentGroup;
-		std::list<std::string> m_params;
+		std::vector<uint8_t> m_paramsRawData;
 	};
 }
 

--
Gitblit v1.9.3