From 7f55a7c6cef156e553866d0012464e4697cb1849 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 20 六月 2025 16:27:04 +0800
Subject: [PATCH] 1.联调,优化。

---
 SourceCode/Bond/Servo/CRobotTask.h   |    2 +
 SourceCode/Bond/Servo/CRobotTask.cpp |   31 ++++++++-------
 SourceCode/Bond/Servo/CEFEM.cpp      |   65 ++++++++------------------------
 SourceCode/Bond/Servo/CMaster.cpp    |    5 ++
 SourceCode/Bond/Servo/CLoadPort.cpp  |    5 ++
 SourceCode/Bond/Servo/ServoCommo.h   |    1 
 6 files changed, 43 insertions(+), 66 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEFEM.cpp b/SourceCode/Bond/Servo/CEFEM.cpp
index 995763b..645251f 100644
--- a/SourceCode/Bond/Servo/CEFEM.cpp
+++ b/SourceCode/Bond/Servo/CEFEM.cpp
@@ -713,7 +713,7 @@
 			// JOB Data Request
 			CEqReadStep* pStep = new CEqReadStep(0x0, 0,
 				[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
-					if (code == ROK && pszData != nullptr && size > 0) {
+					if (code == ROK /* && pszData != nullptr && size > 0*/) {
 						// 由于EFEM没有发送参数到master, 我们只需要返回数据
 						// Cassette Sequence No和Job Sequence No根据上一次调试缓存而来
 						// decodeJobDataRequest((CStep*)pFrom, pszData, size);
@@ -727,6 +727,7 @@
 						if (m_pActiveContext != nullptr) {
 							CJobDataS* pJobDataS = ((CGlass*)m_pActiveContext)->getJobDataS();
 							if (pJobDataS != nullptr) {
+								pJobDataS->serialize(szBuffer, 1024);
 								pJobDataS->serialize(szBuffer, 1024);
 								ack = (short)JobDataRequestAck::OK;
 							}
@@ -843,62 +844,28 @@
 
 	int CEFEM::onFetchedOutJob(int port, CJobDataB* pJobDataB)
 	{
-		if (port == 1) {
-			return m_pPort[0]->onFetchedOutJob(port, pJobDataB);
-		}
-		if (port == 2) {
-			return m_pPort[1]->onFetchedOutJob(port, pJobDataB);
-		}
-		if (port == 3) {
-			return m_pPort[2]->onFetchedOutJob(port, pJobDataB);
-		}
-		if (port == 4) {
-			return m_pPort[3]->onFetchedOutJob(port, pJobDataB);
-		}
-		if (port == 5) {
-			return m_pArmTray[0]->onFetchedOutJob(port, pJobDataB);
-		}
-		if (port == 6) {
-			return m_pArmTray[1]->onFetchedOutJob(port, pJobDataB);
-		}
-		if (port == 7) {
-			return m_pAligner->onFetchedOutJob(port, pJobDataB);
-		}
-		if (port == 8) {
-			return m_pFliper->onFetchedOutJob(port, pJobDataB);
+		// 转发到子单元设备
+		CEquipment* pEqs[] = { m_pPort[0], m_pPort[1], m_pPort[2], m_pPort[3], m_pArmTray[0], m_pArmTray[1],
+			m_pAligner, m_pFliper };
+		if (1 <= port && port <= 8) {
+			pEqs[port - 1]->onFetchedOutJob(port, pJobDataB);
 		}
 
-		return -1;
+
+		return 0;
 	}
 
 	int CEFEM::onStoredJob(int port, CJobDataB* pJobDataB)
 	{
-		if (port == 1) {
-			return m_pPort[0]->onStoredJob(port, pJobDataB);
-		}
-		if (port == 2) {
-			return m_pPort[1]->onStoredJob(port, pJobDataB);
-		}
-		if (port == 3) {
-			return m_pPort[2]->onStoredJob(port, pJobDataB);
-		}
-		if (port == 4) {
-			return m_pPort[3]->onStoredJob(port, pJobDataB);
-		}
-		if (port == 5) {
-			return m_pArmTray[0]->onStoredJob(port, pJobDataB);
-		}
-		if (port == 6) {
-			return m_pArmTray[1]->onStoredJob(port, pJobDataB);
-		}
-		if (port == 7) {
-			return m_pAligner->onStoredJob(port, pJobDataB);
-		}
-		if (port == 8) {
-			return m_pFliper->onStoredJob(port, pJobDataB);
+		// 转发到子单元设备
+		CEquipment* pEqs[] = { m_pPort[0], m_pPort[1], m_pPort[2], m_pPort[3], m_pArmTray[0], m_pArmTray[1],
+			m_pAligner, m_pFliper };
+		if (1 <= port && port <= 8) {
+			pEqs[port - 1]->onStoredJob(port, pJobDataB);
 		}
 
-		return -1;
+
+		return 0;
 	}
 
 	int CEFEM::getIndexerOperationModeBaseValue()
diff --git a/SourceCode/Bond/Servo/CLoadPort.cpp b/SourceCode/Bond/Servo/CLoadPort.cpp
index 540a5e6..54c0d85 100644
--- a/SourceCode/Bond/Servo/CLoadPort.cpp
+++ b/SourceCode/Bond/Servo/CLoadPort.cpp
@@ -348,6 +348,8 @@
 				}
 			}
 		}
+
+		/*
 		
 		{
 			// Fetched Out Job Report #1~15
@@ -392,6 +394,7 @@
 				delete pStep;
 			}
 		}
+		*/
 	}
 
 	void CLoadPort::onTimer(UINT nTimerid)
@@ -1168,7 +1171,7 @@
 			js.setCassetteSequenceNo(getNextCassetteSequenceNo());
 			js.setJobSequenceNo(m_slot[i].getNo());
 			sprintf_s(szBuffer, 64, "%05d%05d", js.getCassetteSequenceNo(), js.getJobSequenceNo());
-			js.setGlass1Id(szBuffer);
+			//js.setGlass1Id(szBuffer);
 			js.setJobType(1);
 			js.setMaterialsType((int)type);
 
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 7349b9b..84d09f9 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -509,6 +509,9 @@
 				}
 
 				if (m_pActiveRobotTask != nullptr) {
+					if (m_pActiveRobotTask->isPicked()) {
+						m_pActiveRobotTask->place();
+					}
 					unlock();
 					// 检测到当前有正在下午的任务,确保当前任务完成或中止后继续
 					// LOGI("检测到当前有正在下午的任务,确保当前任务完成或中止后继续...");
@@ -913,7 +916,7 @@
 					) {
 					LOGI("取片完成.");
 					m_pActiveRobotTask->fetchOut();
-					m_pActiveRobotTask->place();
+					m_pActiveRobotTask->picked();
 				}
 
 				else if (m_pActiveRobotTask != nullptr
diff --git a/SourceCode/Bond/Servo/CRobotTask.cpp b/SourceCode/Bond/Servo/CRobotTask.cpp
index 5b4fbab..e67d6e7 100644
--- a/SourceCode/Bond/Servo/CRobotTask.cpp
+++ b/SourceCode/Bond/Servo/CRobotTask.cpp
@@ -123,7 +123,7 @@
 		transformPosAndSlot(toPos, toSlot, tarPos, tarSlot);
 
 		m_robotCmdParam[ACTION_PICK] = {};
-		m_robotCmdParam[ACTION_PICK].sequenceNo = static_cast<short>(seq+2);
+		m_robotCmdParam[ACTION_PICK].sequenceNo = static_cast<short>(seq+1);
 		m_robotCmdParam[ACTION_PICK].rcmd = static_cast<short>(SERVO::RCMD::Get);
 		m_robotCmdParam[ACTION_PICK].armNo = static_cast<short>(armNo);
 		m_robotCmdParam[ACTION_PICK].getPosition = static_cast<short>(srcPos);
@@ -137,13 +137,13 @@
 		m_robotCmdParam[ACTION_PLACE].putSlotNo = static_cast<short>(tarSlot);
 
 		m_robotCmdParam[ACTION_RESTORE] = {};
-		m_robotCmdParam[ACTION_RESTORE].sequenceNo = static_cast<short>(seq + 1);
+		m_robotCmdParam[ACTION_RESTORE].sequenceNo = static_cast<short>(seq + 3);
 		m_robotCmdParam[ACTION_RESTORE].rcmd = static_cast<short>(SERVO::RCMD::Put);
 		m_robotCmdParam[ACTION_RESTORE].armNo = static_cast<short>(armNo);
 		m_robotCmdParam[ACTION_RESTORE].putPosition = static_cast<short>(srcPos);
 		m_robotCmdParam[ACTION_RESTORE].putSlotNo = static_cast<short>(srcSlot);
 
-		return seq + 1;
+		return seq + 3;
 	}
 
 	ROBOT_CMD_PARAM& CRobotTask::getRobotCmdParam(int index)
@@ -188,6 +188,11 @@
 		return m_state == ROBOT_TASK_STATE::Picking;
 	}
 
+	bool CRobotTask::isPicked()
+	{
+		return m_state == ROBOT_TASK_STATE::Picked;
+	}
+
 	bool CRobotTask::isPlacing()
 	{
 		return m_state == ROBOT_TASK_STATE::Placing;
@@ -227,10 +232,7 @@
 		ASSERT(m_pEFEM);
 		m_state = ROBOT_TASK_STATE::Picking;
 
-		m_pEFEM->robotSendGet(m_robotCmdParam->sequenceNo,
-			m_robotCmdParam[ACTION_PICK].armNo,
-			m_robotCmdParam[ACTION_PICK].getPosition,
-			m_robotCmdParam[ACTION_PICK].getSlotNo,
+		m_pEFEM->robotCmd(m_robotCmdParam[ACTION_PICK],
 			[&](int code) -> int {
 				if (code == WOK) {
 					LOGI(_T("RobotTask/get已下发到EFEM"));
@@ -243,15 +245,17 @@
 			});
 	}
 
+	void CRobotTask::picked()
+	{
+		m_state = ROBOT_TASK_STATE::Picked;
+	}
+
 	void CRobotTask::place()
 	{
 		ASSERT(m_pEFEM);
 		m_state = ROBOT_TASK_STATE::Placing;
 
-		m_pEFEM->robotSendMoveToPut(m_robotCmdParam->sequenceNo,
-			m_robotCmdParam[ACTION_PLACE].armNo,
-			m_robotCmdParam[ACTION_PLACE].putPosition,
-			m_robotCmdParam[ACTION_PLACE].putSlotNo,
+		m_pEFEM->robotCmd(m_robotCmdParam[ACTION_PLACE],
 			[&](int code) -> int {
 				if (code == WOK) {
 					LOGI(_T("RobotTask/put已下发到EFEM"));
@@ -269,10 +273,7 @@
 		ASSERT(m_pEFEM);
 		m_state = ROBOT_TASK_STATE::Restoring;
 
-		m_pEFEM->robotSendMoveToPut(m_robotCmdParam->sequenceNo,
-			m_robotCmdParam[ACTION_RESTORE].armNo,
-			m_robotCmdParam[ACTION_RESTORE].putPosition,
-			m_robotCmdParam[ACTION_RESTORE].putSlotNo,
+		m_pEFEM->robotCmd(m_robotCmdParam[ACTION_RESTORE],
 			[&](int code) -> int {
 				if (code == WOK) {
 					LOGI(_T("RobotTask/restore-put已下发到EFEM"));
diff --git a/SourceCode/Bond/Servo/CRobotTask.h b/SourceCode/Bond/Servo/CRobotTask.h
index 990e106..aa9348e 100644
--- a/SourceCode/Bond/Servo/CRobotTask.h
+++ b/SourceCode/Bond/Servo/CRobotTask.h
@@ -32,10 +32,12 @@
 		int getArmNo();
 		ROBOT_TASK_STATE getState();
 		bool isPicking();
+		bool isPicked();
 		bool isPlacing();
 		bool isRestoring();
 		void run();
 		void pick();
+		void picked();
 		void place();
 		void restore();
 		void completed();
diff --git a/SourceCode/Bond/Servo/ServoCommo.h b/SourceCode/Bond/Servo/ServoCommo.h
index 0b58600..0210e31 100644
--- a/SourceCode/Bond/Servo/ServoCommo.h
+++ b/SourceCode/Bond/Servo/ServoCommo.h
@@ -117,6 +117,7 @@
 		Ready = 0,
 		Running,
 		Picking,
+		Picked,
 		Placing,
 		Restoring,
 		Error,

--
Gitblit v1.9.3