From 56fd8f57fcc763ae079ae752d82e41b38d7d9e5f Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期一, 16 六月 2025 10:50:16 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/Servo/CEquipment.cpp | 95 +++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 86 insertions(+), 9 deletions(-)
diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index 0aa06b1..7f10e53 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -47,7 +47,6 @@
for (int i = 0; i < SLOT_MAX; i++) {
CContext* pContext = m_slot[i].getContext();
if (pContext != nullptr) {
- pContext->release();
m_slot[i].setContext(nullptr);
}
}
@@ -543,6 +542,10 @@
CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_INUSE, pszData, size);
CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_UNLOAD_READY, pszData, size);
CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_BLOCKED, pszData, size);
+
+ // robot cmd reply
+ CHECK_WRITE_STEP_SIGNAL(STEP_ID_ROBOT_CMD_REPLY, pszData, size);
+
}
BOOL CEquipment::isBitOn(const char* pszData, size_t size, int index)
@@ -1149,10 +1152,11 @@
if (m_slot[i].isLock()) continue;
CGlass* pGlass = (CGlass*)m_slot[i].getContext();
if (pGlass == nullptr) continue;
- if(!m_bLinkSignal[0][SIGNAL_UPSTREAM_INLINE]
- || m_bLinkSignal[0][SIGNAL_UPSTREAM_TROUBLE]
- || !m_bLinkSignal[0][SIGNAL_INTERLOCK]
- || !m_bLinkSignal[0][SIGNAL_SEND_ABLE] ) continue;
+ int lsPath = m_slot[i].getLinkSignalPath();
+ if(!m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_INLINE]
+ || m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_TROUBLE]
+ || !m_bLinkSignal[lsPath][SIGNAL_INTERLOCK]
+ || !m_bLinkSignal[lsPath][SIGNAL_SEND_ABLE] ) continue;
MaterialsType glassType = pGlass->getType();
if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue;
@@ -1173,10 +1177,11 @@
if (m_slot[i].isLock()) continue;
CGlass* pGlass = (CGlass*)m_slot[i].getContext();
if (pGlass == nullptr) continue;
- if (!m_bLinkSignal[0][SIGNAL_UPSTREAM_INLINE]
- || m_bLinkSignal[0][SIGNAL_UPSTREAM_TROUBLE]
- || !m_bLinkSignal[0][SIGNAL_INTERLOCK]
- || !m_bLinkSignal[0][SIGNAL_SEND_ABLE]) continue;
+ int lsPath = m_slot[i].getLinkSignalPath();
+ if (!m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_INLINE]
+ || m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_TROUBLE]
+ || !m_bLinkSignal[lsPath][SIGNAL_INTERLOCK]
+ || !m_bLinkSignal[lsPath][SIGNAL_SEND_ABLE]) continue;
MaterialsType glassType = pGlass->getType();
if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue;
@@ -1188,6 +1193,12 @@
}
return nullptr;
+ }
+
+ CSlot* CEquipment::getSlot(int index)
+ {
+ if (index >= SLOT_MAX) return nullptr;
+ return &m_slot[index];
}
CGlass* CEquipment::getGlassFromSlot(int slotNo)
@@ -1227,6 +1238,21 @@
if (m_slot[slotIndex].getContext() != nullptr) return FALSE;
return TRUE;
+ }
+
+ int CEquipment::removeGlass(int slotNo)
+ {
+ CSlot* pSlot = nullptr;
+ for (int i = 0; i < SLOT_MAX; i++) {
+ if (!m_slot[i].isEnable()) continue;
+ if (m_slot[i].getNo() != slotNo) continue;
+ pSlot = &m_slot[i];
+ break;
+ }
+
+ if (pSlot == nullptr) return -1;
+ pSlot->setContext(nullptr);
+ return 0;
}
short CEquipment::decodeRecipeListReport(const char* pszData, size_t size)
@@ -1448,6 +1474,57 @@
return 0;
}
+ int CEquipment::decodePanelDataReport(CStep* pStep, const char* pszData, size_t size)
+ {
+ short cassetteNo, jobSequenceNo;
+ int index = 0;
+ std::string strPanelJudgeData, strPanelGradeData;
+ memcpy(&cassetteNo, &pszData[index], sizeof(short));
+ index += sizeof(short);
+ memcpy(&jobSequenceNo, &pszData[index], sizeof(short));
+ index += sizeof(short);
+ CToolUnits::convertString(&pszData[index], 128 * 2, strPanelJudgeData);
+ index += 128 * 2;
+ CToolUnits::convertString(&pszData[index], 256 * 2, strPanelJudgeData);
+ index += 256 * 2;
+
+
+ // 缓存Attribute,用于调试时显示信息
+ unsigned int weight = 201;
+ pStep->addAttribute(new CAttribute("CassetteNo",
+ std::to_string(cassetteNo).c_str(), "", weight++));
+ pStep->addAttribute(new CAttribute("JobSequenceNo",
+ std::to_string(jobSequenceNo).c_str(), "", weight++));
+ pStep->addAttribute(new CAttribute("PanelJudgeData",
+ strPanelJudgeData.c_str(), "", weight++));
+ pStep->addAttribute(new CAttribute("PanelGradeData",
+ strPanelGradeData.c_str(), "", weight++));
+
+
+ return 0;
+ }
+
+ int CEquipment::decodeFacDataReport(CStep* pStep, const char* pszData, size_t size)
+ {
+ int index = 0;
+ std::string strSvTimeRecord, strSvData;
+ CToolUnits::convertString(&pszData[index], 8 * 2, strSvTimeRecord);
+ index += 128 * 2;
+ CToolUnits::convertString(&pszData[index], 640 * 2, strSvData);
+ index += 256 * 2;
+
+
+ // 缓存Attribute,用于调试时显示信息
+ unsigned int weight = 201;
+ pStep->addAttribute(new CAttribute("SV Time Record",
+ strSvTimeRecord.c_str(), "", weight++));
+ pStep->addAttribute(new CAttribute("SV Data",
+ strSvData.c_str(), "", weight++));
+
+
+ return 0;
+ }
+
int CEquipment::onPreStoredJob(int port, CJobDataB* pJobDataB, short& putSlot)
{
LOGI("<CEquipment-%s>onPreStoredJob:port:%d|GlassId:%s",
--
Gitblit v1.9.3