From 26c208594fba1cae3a71d2caa9ff744e3ece81de Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 12 六月 2025 11:47:22 +0800
Subject: [PATCH] 1.准备增加机器手臂的选择;

---
 SourceCode/Bond/Servo/CMaster.cpp |   65 ++++++++++++++++++++++----------
 1 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 0a3b906..2b509e8 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -284,6 +284,7 @@
 		// Bonder1和Bonder2需要的G2就过不来了
 		// 最基本的实现,可以G2和G2轮流搬送,但最好根据Bonder的需求来决定
 		MaterialsType primaryType, secondaryType;
+		int armNo = 1;			// 默认使用手臂2
 
 
 		// 各种机器
@@ -375,6 +376,37 @@
 				}
 
 
+				// Measurement -> LoadPort
+				CLoadPort* pEqLoadPort[] = { pLoadPort1, pLoadPort2, pLoadPort3, pLoadPort4 };
+				CEquipment* pEqTar[] = { pVacuumBack, pFliper };
+				if (primaryType == MaterialsType::G2) {
+					pEqTar[0] = pFliper;
+					pEqTar[1] = pVacuumBack;
+				}
+				for (int s = 0; s < 4; s++) {
+					if (pEqLoadPort[s]->isEnable()
+						&& pEqLoadPort[s]->getPortType() == PortType::Unloading
+						&& pEqLoadPort[s]->getPortMode() == PortMode::ReadyToUnload) {
+						m_pActiveRobotTask = createTransferTask(pMeasurement, pEqLoadPort[s], primaryType, secondaryType, armNo);
+						if (m_pActiveRobotTask != nullptr) {
+							goto PORT_PUT;
+						}
+					}
+				}
+
+			PORT_PUT:
+				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->run();
+					std::string strDescription = m_pActiveRobotTask->getDescription();
+					unlock();
+					if (m_listener.onRobotTaskEvent != nullptr) {
+						m_listener.onRobotTaskEvent(this, m_pActiveRobotTask, ROBOT_EVENT_CREATE);
+					}
+					LOGI("创建新任务<%s>...", strDescription.c_str());
+					continue;
+				}
+
+
 				// BakeCooling ->Measurement
 				m_pActiveRobotTask = createTransferTask_bakecooling_to_measurement(pBakeCooling, pMeasurement);
 				if (m_pActiveRobotTask != nullptr) {
@@ -430,7 +462,7 @@
 				}
 
 				// Aligner -> Bonder
-				m_pActiveRobotTask = createTransferTask(pAligner, pBonder1, primaryType, secondaryType);
+				m_pActiveRobotTask = createTransferTask(pAligner, pBonder1, primaryType, secondaryType, armNo);
 				if (m_pActiveRobotTask != nullptr) {
 					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
@@ -442,7 +474,7 @@
 					continue;
 				}
 
-				m_pActiveRobotTask = createTransferTask(pAligner, pBonder2, primaryType, secondaryType);
+				m_pActiveRobotTask = createTransferTask(pAligner, pBonder2, primaryType, secondaryType, armNo);
 				if (m_pActiveRobotTask != nullptr) {
 					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
@@ -457,7 +489,7 @@
 
 				// Fliper(G2) -> Aligner
 				// VacuumBake(G1) -> Aligner
-				m_pActiveRobotTask = createTransferTask(pFliper, pAligner, primaryType, secondaryType);
+				m_pActiveRobotTask = createTransferTask(pFliper, pAligner, primaryType, secondaryType, armNo);
 				if (m_pActiveRobotTask != nullptr) {
 					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
@@ -469,7 +501,7 @@
 					continue;
 				}
 
-				m_pActiveRobotTask = createTransferTask(pVacuumBack, pAligner, primaryType, secondaryType);
+				m_pActiveRobotTask = createTransferTask(pVacuumBack, pAligner, primaryType, secondaryType, armNo);
 				if (m_pActiveRobotTask != nullptr) {
 					m_pActiveRobotTask->run();
 					std::string strDescription = m_pActiveRobotTask->getDescription();
@@ -484,18 +516,12 @@
 
 				// LoadPort -> Fliper(G2)
 				// LoadPort -> VacuumBake(G1)
-				CLoadPort* pEqSrc[] = { pLoadPort1, pLoadPort2, pLoadPort3, pLoadPort4 };
-				CEquipment* pEqTar[] = { pVacuumBack, pFliper };
-				if (primaryType == MaterialsType::G2) {
-					pEqTar[0] = pFliper;
-					pEqTar[1] = pVacuumBack;
-				}
 				for (int s = 0; s < 4; s++) {
 					for (int t = 0; t < 2; t++) {
-						if (pEqSrc[s]->isEnable()
-							&& pEqSrc[s]->getPortType() == PortType::Loading
-							&& pEqSrc[s]->getPortMode() == PortMode::ReadyToLoad) {
-							m_pActiveRobotTask = createTransferTask(pEqSrc[s], pEqTar[t], primaryType, secondaryType);
+						if (pEqLoadPort[s]->isEnable()
+							&& pEqLoadPort[s]->getPortType() == PortType::Loading
+							&& pEqLoadPort[s]->getPortMode() == PortMode::ReadyToLoad) {
+							m_pActiveRobotTask = createTransferTask(pEqLoadPort[s], pEqTar[t], primaryType, secondaryType, armNo);
 							if (m_pActiveRobotTask != nullptr) {
 								goto PORT_GET;
 							}
@@ -514,11 +540,6 @@
 					LOGI("创建新任务<%s>...", strDescription.c_str());
 					continue;
 				}
-
-
-				// Measurement -> LoadPort
-
-
 
 				unlock();
 
@@ -1108,7 +1129,8 @@
 
 	static int taskSeqNo = 0;
 	CRobotTask* CMaster::createTransferTask(CEquipment* pSrcEq, CEquipment* pTarEq,
-		MaterialsType primaryType/* = MaterialsType::G1*/, MaterialsType secondaryType/* = MaterialsType::G2*/)
+		MaterialsType primaryType/* = MaterialsType::G1*/, MaterialsType secondaryType/* = MaterialsType::G2*/,
+		int armNo/* = 1*/)
 	{
 		CRobotTask* pTask = nullptr;
 		CSlot* pSrcSlot, * pTarSlot;
@@ -1124,7 +1146,7 @@
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
 			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
-			pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
+			pTask->setRobotTransferParam(++taskSeqNo, armNo, pSrcSlot->getPosition(),
 				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
 		}
 
@@ -1187,6 +1209,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());
 		}

--
Gitblit v1.9.3