From 02d1df7b4fa1a0e686c112e7bf3c8e794ba42b82 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 19 六月 2025 10:04:26 +0800
Subject: [PATCH] 1. 添加设备配方绑定

---
 SourceCode/Bond/Servo/CEFEM.cpp |   84 +++++++++++++++++-------------------------
 1 files changed, 34 insertions(+), 50 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEFEM.cpp b/SourceCode/Bond/Servo/CEFEM.cpp
index 099e2cd..c9f4f2e 100644
--- a/SourceCode/Bond/Servo/CEFEM.cpp
+++ b/SourceCode/Bond/Servo/CEFEM.cpp
@@ -22,6 +22,10 @@
 		m_pPort[3] = nullptr;
 		m_pAligner = nullptr;
 		m_pFliper = nullptr;
+		m_robotData.status = ROBOT_STATUS::Setup;
+		m_robotData.position = ROBOT_POSITION::Port1;
+		m_robotData.armState[0] = FALSE;
+		m_robotData.armState[1] = FALSE;
 	}
 
 	CEFEM::~CEFEM()
@@ -331,6 +335,11 @@
 		return robotCmds(cmds, 2, onWritedBlock);
 	}
 
+	RMDATA& CEFEM::getRobotMonitoringData()
+	{
+		return m_robotData;
+	}
+
 	void CEFEM::init()
 	{
 		CEquipment::init();
@@ -540,55 +549,7 @@
 				pStep->setName(szBuffer);
 				pStep->setProp("Upstream", (void*)(__int64)(i + 1));
 				pStep->setWriteSignalDev(0x0 + i);
-				if (addStep(STEP_ID_FETCHED_OUT_JOB_REPORT1 + i, pStep) != 0) {
-					delete pStep;
-				}
-			}
-		}
-
-		{
-			// Fetched Out Job Report #1~15
-			char szBuffer[256];
-			for (int i = 0; i < 15; i++) {
-				CEqReadStep* pStep = new CEqReadStep(0x5c31 + 18 * i, 18 * 2,
-					[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
-						if (code == ROK && pszData != nullptr && size > 0) {
-							int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
-							if (port > 0) {
-								decodeFetchedOutJobReport((CStep*)pFrom, port, pszData, size);
-							}
-						}
-						return -1;
-					});
-				sprintf_s(szBuffer, "%s%d", STEP_EQ_FETCHED_OUT_JOBn, i+1);
-				pStep->setName(szBuffer);
-				pStep->setProp("Port", (void*)(__int64)(i + 1));
-				pStep->setWriteSignalDev(0x023 + i);
-				if (addStep(STEP_ID_FETCHED_OUT_JOB_REPORT1 + i, pStep) != 0) {
-					delete pStep;
-				}
-			}
-		}
-
-		{
-			// Store Job Report #1~15
-			char szBuffer[256];
-			for (int i = 0; i < 15; i++) {
-				CEqReadStep* pStep = new CEqReadStep(0x5b23 + 18 * i, 18 * 2,
-					[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
-						if (code == ROK && pszData != nullptr && size > 0) {
-							int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
-							if (port > 0) {
-								decodeStoredJobReport((CStep*)pFrom, port, pszData, size);
-							}
-						}
-						return -1;
-					});
-				sprintf_s(szBuffer, "%s%d", STEP_EQ_STORED_JOBn, i + 1);
-				pStep->setName(szBuffer);
-				pStep->setProp("Port", (void*)(__int64)(i + 1));
-				pStep->setWriteSignalDev(0x014 + i);
-				if (addStep(STEP_ID_STORE_JOB_REPORT1 + i, pStep) != 0) {
+				if (addStep(STEP_ID_RECIVE_JOB_UPS1 + i, pStep) != 0) {
 					delete pStep;
 				}
 			}
@@ -619,9 +580,10 @@
 		{
 			// Indexer Operation Mode Change
 			CEqWriteStep* pStep = new CEqWriteStep();
-			pStep->setName(STEP_EFEM_IN_OP_MODE_CHANGE);
+			pStep->setName(STEP_EQ_IN_OP_MODE_CHANGE);
 			pStep->setWriteSignalDev(0x070);
 			pStep->setDataDev(0x023);
+			pStep->setRetDataDev(0x600e, 2);
 			if (addStep(STEP_ID_IN_OP_CMD_REPLY, pStep) != 0) {
 				delete pStep;
 			}
@@ -692,6 +654,28 @@
 	{
 		__super::onReceiveLBData(pszData, size);
 
+		// 解释得到Robot状态
+		// 地址从(0x3500 - 0x3000)开始
+		int index = 0x500;
+		for (int i = 0; i < 6; i++) {
+			if (isBitOn(pszData, size, index + i)) {
+				m_robotData.status = (ROBOT_STATUS)i;
+				break;
+			}
+		}
+		index += 8;
+
+		for (int i = 0; i < 11; i++) {
+			if (isBitOn(pszData, size, index + i)) {
+				m_robotData.position = (ROBOT_POSITION)i;
+				break;
+			}
+		}
+		index += 16;
+		m_robotData.armState[0] = isBitOn(pszData, size, index);
+		m_robotData.armState[1] = isBitOn(pszData, size, index + 1);
+
+
 		for (unsigned int i = 0; i < 4; i++) {
 			if (m_pPort[i] != nullptr) {
 				m_pPort[i]->onReceiveLBData(pszData, size);

--
Gitblit v1.9.3