From 349f26accd28cd83356334239b11728ce50b7f95 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期三, 14 五月 2025 18:10:21 +0800
Subject: [PATCH] 1.重新理顺Glass的流转,CJobDataB, CJobDataS在CEquipment的列表存储等;
---
SourceCode/Bond/Servo/CEquipment.cpp | 187 +++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 174 insertions(+), 13 deletions(-)
diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index 3b15620..cea483e 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -85,6 +85,11 @@
m_pArm = pEquipment;
}
+ CEquipment* CEquipment::getArm()
+ {
+ return m_pArm;
+ }
+
void CEquipment::setBaseAlarmId(int nBaseId)
{
m_nBaseAlarmId = nBaseId;
@@ -822,7 +827,7 @@
return pGlass;
}
- int CEquipment::fetchedOutJob(const char* pszGlassId)
+ int CEquipment::fetchedOutJob(CJobDataB* pJobDataB)
{
if (m_pArm == nullptr) {
return -1;
@@ -837,7 +842,7 @@
CGlass* pContext = nullptr;
for (auto iter = m_glassList.begin(); iter != m_glassList.end(); iter++) {
- if ((*iter)->getID().compare(pszGlassId) == 0) {
+ if ((*iter)->getID().compare(pJobDataB->getGlassId()) == 0) {
pContext = (*iter);
m_glassList.erase(iter);
break;
@@ -859,7 +864,7 @@
return 0;
}
- int CEquipment::storedJob(const char* pszGlassId)
+ int CEquipment::storedJob(CJobDataB* pJobDataB)
{
if (m_pArm == nullptr) {
return -1;
@@ -1061,6 +1066,24 @@
return m_recipesManager.decodeRecipeParameterReport(pszData, size);
}
+ int CEquipment::decodeProcessDataReport(CStep* pStep, const char* pszData, size_t size)
+ {
+ CProcessData processData;
+ int nRet = processData.unserialize(&pszData[0], (int)size);
+ if (nRet < 0) return nRet;
+
+ // 缓存Attribute,用于调试时显示信息
+ unsigned int weight = 201;
+ CAttributeVector attrubutes;
+ processData.getAttributeVector(attrubutes, weight);
+ pStep->addAttributeVector(attrubutes);
+
+
+ onProcessData(&processData);
+
+ return nRet;
+ }
+
int CEquipment::decodeReceivedJobReport(CStep* pStep, int port, const char* pszData, size_t size)
{
CJobDataS jobDataS;
@@ -1082,7 +1105,8 @@
int CEquipment::onReceivedJob(int port, CJobDataS* pJobDataS)
{
LOGI("<CEquipment-%s>onReceivedJob.", m_strName.c_str());
- // return fetchedOutJob(pszGlassId);
+
+ addJobDataS(pJobDataS);
return 0;
}
@@ -1107,7 +1131,15 @@
int CEquipment::onSentOutJob(int port, CJobDataS* pJobDataS)
{
LOGI("<CEquipment-%s>onSentOutJob.", m_strName.c_str());
- // return fetchedOutJob(pszGlassId);
+
+ int count = removeJobDataS(pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo());
+ if (count == 1) {
+ LOGI("<CEquipment-%s>onSentOutJob,删除数据 %d 条", m_strName.c_str(), count);
+ }
+ else {
+ LOGE("<CEquipment-%s>onSentOutJob,删除数据 %d 条,注意排查风险", m_strName.c_str(), count);
+ }
+
return 0;
}
@@ -1148,16 +1180,32 @@
jobDataB.getGlassId().c_str(), "", weight++));
- onFetchedOutJob(port, jobDataB.getGlassId().c_str());
+ onFetchedOutJob(port, &jobDataB);
return index;
}
- int CEquipment::onFetchedOutJob(int port, const char* pszGlassId)
+ int CEquipment::onPreFetchedOutJob(int port, CJobDataB* pJobDataB)
+ {
+ LOGI("<CEquipment-%s>onPreFetchedOutJob:port:%d|GlassId:%s",
+ m_strName.c_str(), port, pJobDataB->getGlassId().c_str());
+ return TRUE;
+ }
+
+ int CEquipment::onFetchedOutJob(int port, CJobDataB* pJobDataB)
{
LOGI("<CEquipment-%s>onFetchedOutJob:port:%d|GlassId:%s",
- m_strName.c_str(), port, pszGlassId);
- return fetchedOutJob(pszGlassId);
+ m_strName.c_str(), port, pJobDataB->getGlassId().c_str());
+
+ BOOL bCheck = onPreFetchedOutJob(port, pJobDataB);
+ if (bCheck) {
+ return fetchedOutJob(pJobDataB);
+ }
+
+ // 数据异常,处理或显示
+ LOGI("<CEquipment-%s>onFetchedOutJob Error.ort:%d|GlassId:%s",
+ m_strName.c_str(), port, pJobDataB->getGlassId().c_str());
+ return -1;
}
int CEquipment::decodeStoredJobReport(CStep* pStep, int port, const char* pszData, size_t size)
@@ -1197,15 +1245,128 @@
jobDataB.getGlassId().c_str(), "", weight++));
- onStoreJob(port, jobDataB.getGlassId().c_str());
+ onStoredJob(port, &jobDataB);
return index;
}
- int CEquipment::onStoreJob(int port, const char* pszGlassId)
+ int CEquipment::onPreStoredJob(int port, CJobDataB* pJobDataB)
+ {
+ LOGI("<CEquipment-%s>onPreStoredJob:port:%d|GlassId:%s",
+ m_strName.c_str(), port, pJobDataB->getGlassId().c_str());
+ return TRUE;
+ }
+
+ int CEquipment::onStoredJob(int port, CJobDataB* pJobDataB)
{
LOGI("<CEquipment-%s>onStore:port:%d|GlassId:%s",
- m_strName.c_str(), port, pszGlassId);
- return storedJob(pszGlassId);
+ m_strName.c_str(), port, pJobDataB->getGlassId().c_str());
+
+ BOOL bCheck = onPreStoredJob(port, pJobDataB);
+ if (bCheck) {
+ addJobDataB(pJobDataB);
+ return storedJob(pJobDataB);
+ }
+
+ // 数据异常,处理或显示
+ LOGI("<CEquipment-%s>onStoredJob Error.ort:%d|GlassId:%s",
+ m_strName.c_str(), port, pJobDataB->getGlassId().c_str());
+ return -1;
+ }
+
+ int CEquipment::onProcessData(CProcessData* pProcessData)
+ {
+ LOGI("<CEquipment-%s>onProcessData.", m_strName.c_str());
+ return 0;
+ }
+
+ int CEquipment::addJobDataB(CJobDataB* pJobDataB)
+ {
+ // 添加之前先删除旧的,以免数据重复
+ Lock();
+ int count = removeJobDataB(pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo());
+ if (count > 0) {
+ LOGE("<CEquipment-%s>addJobDataB,删除重复数据 %d 条,注意排查风险", m_strName.c_str(), count);
+ }
+
+ m_listJobDataB.push_back(std::move(*pJobDataB));
+ Unlock();
+
+ return (int)m_listJobDataB.size();
+ }
+
+ int CEquipment::removeJobDataB(int nCassetteSequenceNo, int nJobSequenceNo)
+ {
+ int count = 0;
+ for (auto it = m_listJobDataB.begin(); it != m_listJobDataB.end(); ) {
+ if ((*it).getCassetteSequenceNo() == nCassetteSequenceNo
+ && (*it).getJobSequenceNo() == nJobSequenceNo) {
+ it = m_listJobDataB.erase(it);
+ count++;
+ }
+ else {
+ ++it;
+ }
+ }
+
+ return count;
+ }
+
+ CJobDataB* CEquipment::getJobDataB(int nCassetteSequenceNo, int nJobSequenceNo)
+ {
+ for (auto& item : m_listJobDataB) {
+ if (item.getCassetteSequenceNo() == nCassetteSequenceNo
+ && item.getJobSequenceNo() == nJobSequenceNo) {
+ return &item;
+ }
+ }
+
+ return nullptr;
+ }
+
+ int CEquipment::addJobDataS(CJobDataS* pJobDataS)
+ {
+ // 添加之前先删除旧的,以免数据重复
+ Lock();
+ int count = removeJobDataS(pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo());
+ if (count > 0) {
+ LOGE("<CEquipment-%s>addJobDataS,删除重复数据 %d 条,注意排查风险", m_strName.c_str(), count);
+ }
+
+ m_listJobDataS.push_back(std::move(*pJobDataS));
+ Unlock();
+
+ return (int)m_listJobDataB.size();
+ }
+
+ int CEquipment::removeJobDataS(int nCassetteSequenceNo, int nJobSequenceNo)
+ {
+ int count = 0;
+ Lock();
+ for (auto it = m_listJobDataS.begin(); it != m_listJobDataS.end(); ) {
+ if ((*it).getCassetteSequenceNo() == nCassetteSequenceNo
+ && (*it).getJobSequenceNo() == nJobSequenceNo) {
+ it = m_listJobDataS.erase(it);
+ count++;
+ }
+ else {
+ ++it;
+ }
+ }
+ Unlock();
+
+ return count;
+ }
+
+ CJobDataS* CEquipment::getJobDataS(int nCassetteSequenceNo, int nJobSequenceNo)
+ {
+ for (auto& item : m_listJobDataS) {
+ if (item.getCassetteSequenceNo() == nCassetteSequenceNo
+ && item.getJobSequenceNo() == nJobSequenceNo) {
+ return &item;
+ }
+ }
+
+ return nullptr;
}
}
\ No newline at end of file
--
Gitblit v1.9.3