From 829fe6c6bc33d53fda9c31fd45a37e1df87befff Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 30 一月 2026 11:16:24 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/Servo/CAligner.cpp |   79 ++++++++++++++++++++++++---------------
 1 files changed, 48 insertions(+), 31 deletions(-)

diff --git a/SourceCode/Bond/Servo/CAligner.cpp b/SourceCode/Bond/Servo/CAligner.cpp
index f656bf6..e15bfe0 100644
--- a/SourceCode/Bond/Servo/CAligner.cpp
+++ b/SourceCode/Bond/Servo/CAligner.cpp
@@ -32,7 +32,7 @@
 	void CAligner::initPins()
 	{
 		// 加入Pin初始化代码
-		LOGI("<CAligner>initPins");
+		LOGD("<CAligner>initPins");
 		addPin(SERVO::PinType::INPUT, _T("In1"));
 		addPin(SERVO::PinType::INPUT, _T("In2"));
 		addPin(SERVO::PinType::OUTPUT, _T("Out1"));
@@ -46,6 +46,53 @@
 		m_slot[0].setPosition(m_nID);
 		m_slot[0].setNo(1);
 		m_slot[0].setName("Slot 1");
+	}
+
+	void CAligner::initSteps()
+	{
+		CEquipment::initSteps();
+
+		{
+			// Panel Data Report
+			CEqReadStep* pStep = new CEqReadStep(0x617f, 386 * 2,
+				[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
+					if (code == ROK && pszData != nullptr && size > 0) {
+						decodePanelDataReport((CStep*)pFrom, pszData, size);
+					}
+					return -1;
+				});
+			pStep->setName(STEP_EQ_PANEL_DATA_REPORT);
+			pStep->setProp("Port", (void*)1);
+			pStep->setWriteSignalDev(0x15e);
+			if (addStep(STEP_ID_PANEL_DATA_REPORT, pStep) != 0) {
+				delete pStep;
+			}
+		}
+
+		// VCR Event Report
+		// 机器上报扫码结果,扫码器预计安装在巡边检机器上
+		{
+			CEqReadStep* pStep = new CEqReadStep(0x5fef, 15 * 2,
+				[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
+					if (code == ROK && pszData != nullptr && size > 0) {
+						decodeVCREventReport((CStep*)pFrom, pszData, size);
+					}
+					return -1;
+				});
+			pStep->setName(STEP_EQ_VCR1_EVENT_REPORT);
+			pStep->setProp("Port", (void*)1);
+			pStep->setWriteSignalDev(0x4a);
+			pStep->setReturnDev(0x91e);
+			if (addStep(STEP_ID_VCR1_EVENT_REPORT, pStep) != 0) {
+				delete pStep;
+			}
+		}
+	}
+
+	void CAligner::onReceiveLBData(const char* pszData, size_t size)
+	{
+		__super::onReceiveLBData(pszData, size);
+		CHECK_READ_STEP_SIGNAL(STEP_ID_PANEL_DATA_REPORT, pszData, size);
 	}
 
 	void CAligner::onTimer(UINT nTimerid)
@@ -66,35 +113,5 @@
 	int CAligner::recvIntent(CPin* pPin, CIntent* pIntent)
 	{
 		return __super::recvIntent(pPin, pIntent);
-	}
-
-	BOOL CAligner::glassWillArrive(CGlass* pGlass)
-	{
-		BOOL bRet = __super::glassWillArrive(pGlass);
-		if (!bRet) {
-			return FALSE;
-		}
-
-		return m_glassList.empty();
-	}
-
-	BOOL CAligner::onPreStoredJob(int port, CJobDataB* pJobDataB)
-	{
-		CJobDataS* pJobDataS = getJobDataS(pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo());
-		if (pJobDataS == nullptr) {
-			LOGE("<CAligner-%s>onPreFetchedOutJob,找不到对应的JobDataS(CassetteSequenceNo:%d, JobSequenceNo:%d), 注意排查风险!", m_strName.c_str(),
-				pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo());
-			return FALSE;
-		}
-
-		// 只能一片一片的对位
-		Lock();
-		if (!m_glassList.empty()) {
-			Unlock();
-			LOGE("<CEquipment-%s>onPreFetchedOutJob,当前机器或单元存在玻璃片,不能进料,请注意风险!", m_strName.c_str());
-			return FALSE;
-		}
-
-		return TRUE;
 	}
 }

--
Gitblit v1.9.3