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