From fac102938562e13dd4e4e4914d0fde9b1cd05d8b Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 09 六月 2025 09:47:37 +0800
Subject: [PATCH] 1.CMaster调度线程中添加任务运行发送到EFEM;

---
 SourceCode/Bond/Servo/CRobotTask.h   |    4 ++++
 SourceCode/Bond/Servo/CRobotTask.cpp |   31 +++++++++++++++++++++++++++++++
 SourceCode/Bond/Servo/CMaster.cpp    |   17 +++++++++++++++++
 3 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index e65347c..6a7437a 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -287,6 +287,7 @@
 
 
 		// 各种机器
+		CEFEM* pEFEM = (CEFEM*)getEquipment(EQ_ID_EFEM);
 		CLoadPort* pLoadPort1 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT1);
 		CLoadPort* pLoadPort2 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT2);
 		CFliper* pFliper = (CFliper*)getEquipment(EQ_ID_FLIPER);
@@ -297,6 +298,7 @@
 		CBakeCooling* pBakeCooling = (CBakeCooling*)getEquipment(EQ_ID_BAKE_COOLING);
 		CMeasurement* pMeasurement = (CMeasurement*)getEquipment(EQ_ID_MEASUREMENT);
 
+		ASSERT(pEFEM);
 		ASSERT(pLoadPort1);
 		ASSERT(pLoadPort2);
 		ASSERT(pFliper);
@@ -372,6 +374,7 @@
 				// BakeCooling ->Measurement
 				m_pActiveRobotTask = createTransferTask_bakecooling_to_measurement(pBakeCooling, pMeasurement);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -386,6 +389,7 @@
 				// Bake -> Cooling
 				m_pActiveRobotTask = createTransferTask_bake_to_cooling(pBakeCooling);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -399,6 +403,7 @@
 				// Bonder -> BakeCooling
 				m_pActiveRobotTask = createTransferTask_bonder_to_bakecooling(pBonder1, pBakeCooling);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -410,6 +415,7 @@
 
 				m_pActiveRobotTask = createTransferTask_bonder_to_bakecooling(pBonder2, pBakeCooling);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -422,6 +428,7 @@
 				// Aligner -> Bonder
 				m_pActiveRobotTask = createTransferTask(pAligner, pBonder1, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -433,6 +440,7 @@
 
 				m_pActiveRobotTask = createTransferTask(pAligner, pBonder2, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -447,6 +455,7 @@
 				// VacuumBake(G1) -> Aligner
 				m_pActiveRobotTask = createTransferTask(pFliper, pAligner, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -458,6 +467,7 @@
 
 				m_pActiveRobotTask = createTransferTask(pVacuumBack, pAligner, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -478,6 +488,7 @@
 				}
 				m_pActiveRobotTask = createTransferTask(pLoadPort1, pEqTar1, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -489,6 +500,7 @@
 
 				m_pActiveRobotTask = createTransferTask(pLoadPort2, pEqTar1, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -503,6 +515,7 @@
 				// LoadPort -> VacuumBake(G1)
 				m_pActiveRobotTask = createTransferTask(pLoadPort1, pEqTar2, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -514,6 +527,7 @@
 
 				m_pActiveRobotTask = createTransferTask(pLoadPort2, pEqTar2, primaryType, secondaryType);
 				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
 					unlock();
 					if (m_listener.onRobotTaskEvent != nullptr) {
@@ -1131,6 +1145,7 @@
 		if (pSrcSlot != nullptr && nullptr != pTarSlot) {
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
+			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
 			pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
 				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
 		}
@@ -1151,6 +1166,7 @@
 		if (pSrcSlot != nullptr && nullptr != pTarSlot) {
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
+			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
 			pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
 				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
 		}
@@ -1172,6 +1188,7 @@
 		if (pSrcSlot != nullptr && nullptr != pTarSlot) {
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
+			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
 			pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
 				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
 		}
diff --git a/SourceCode/Bond/Servo/CRobotTask.cpp b/SourceCode/Bond/Servo/CRobotTask.cpp
index a33cc40..dc1b82e 100644
--- a/SourceCode/Bond/Servo/CRobotTask.cpp
+++ b/SourceCode/Bond/Servo/CRobotTask.cpp
@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "CRobotTask.h"
 #include "ToolUnits.h"
+#include "Log.h"
 
 
 namespace SERVO {
@@ -13,6 +14,7 @@
 		m_timeStored = 0;
 		m_timeFinish = 0;
 		m_pContext = nullptr;
+		m_pEFEM = nullptr;
 	}
 
 	CRobotTask::~CRobotTask()
@@ -78,6 +80,11 @@
 		return m_pContext;
 	}
 
+	void CRobotTask::setEFEM(CEFEM* pEFEM)
+	{
+		m_pEFEM = pEFEM;
+	}
+
 	std::string& CRobotTask::generateId(std::string& out)
 	{
 		char szBuffer[256];
@@ -139,6 +146,30 @@
 		return m_state;
 	}
 
+	void CRobotTask::run()
+	{
+		ASSERT(m_pEFEM);
+		m_state = ROBOT_TASK_STATE::Running;
+
+		static int seq = 0;
+		m_pEFEM->robotSendTransfer(++seq,
+			m_robotCmdParam.armNo,
+			m_robotCmdParam.getPosition, 
+			m_robotCmdParam.putPosition,
+			m_robotCmdParam.getSlotNo,
+			m_robotCmdParam.putSlotNo, 
+			[&](int code) -> int {
+				if (code == WOK) {
+					LOGI(_T("RobotTask已下发到EFEM"));
+				}
+				else {
+					LOGI(_T("RobotTask已下发失败"));
+				}
+
+				return 0;
+			});
+	}
+
 	void CRobotTask::completed()
 	{
 		m_state = ROBOT_TASK_STATE::Completed;
diff --git a/SourceCode/Bond/Servo/CRobotTask.h b/SourceCode/Bond/Servo/CRobotTask.h
index 2cd8654..63edbeb 100644
--- a/SourceCode/Bond/Servo/CRobotTask.h
+++ b/SourceCode/Bond/Servo/CRobotTask.h
@@ -1,6 +1,7 @@
 #pragma once
 #include "ServoCommo.h"
 #include "Context.h"
+#include "CEFEM.h"
 
 
 namespace SERVO {
@@ -16,6 +17,7 @@
 		std::string getSimpleDescription() const;
 		void setContext(CContext* pContext);
 		CContext* getContext();
+		void setEFEM(CEFEM* pEFEM);
 		void setRobotTransferParam(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot);
 		ROBOT_CMD_PARAM& getRobotCmdParam();
 		time_t getCreateTime();
@@ -23,6 +25,7 @@
 		time_t getStoredTime();
 		time_t getFinishTime();
 		ROBOT_TASK_STATE getState();
+		void run();
 		void completed();
 		void error();
 		void abort();
@@ -50,5 +53,6 @@
 		time_t m_timeFinish;						/* 结束时间 */
 		ROBOT_CMD_PARAM m_robotCmdParam;			/* 参数 */
 		CContext* m_pContext;
+		CEFEM* m_pEFEM;
 	};
 }

--
Gitblit v1.9.3