From 3c387cc7bcd469938fbfac8bc5435bb1e846c70f Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 17 六月 2025 17:42:53 +0800
Subject: [PATCH] Merge branch 'liuyang' into clh

---
 SourceCode/Bond/Servo/CEFEM.cpp |   81 ++++++++++++++++------------------------
 1 files changed, 32 insertions(+), 49 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEFEM.cpp b/SourceCode/Bond/Servo/CEFEM.cpp
index 099e2cd..dd297b1 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;
 				}
 			}
@@ -692,6 +653,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