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/CMaster.cpp |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 6efd863..84d09f9 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -340,7 +340,7 @@
 				int nRet;
 				CEquipment* pEq[6] = { pEFEM, pBonder1, pBonder2, pBakeCooling, 
 					pVacuumBake, pMeasurement};
-				BOOL bIomcOk[7] = {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE};
+				BOOL bIomcOk[7] = {FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE};
 				std::vector<std::promise<void>> promises(6);
 				std::vector<std::future<void>> futures;
 
@@ -356,7 +356,7 @@
 					goto WAIT;
 				}
 				futures.push_back(promises[0].get_future());
-
+				/*
 				nRet = pEq[1]->indexerOperationModeChange(IDNEXER_OPERATION_MODE::Start,
 					[&](int writeCode, int retCode) -> void {
 						bIomcOk[1] = retCode == (int)RET::OK;
@@ -421,6 +421,7 @@
 					goto WAIT;
 				}
 				futures.push_back(promises[5].get_future());
+				*/
 
 WAIT:
 				for (auto& f : futures) {
@@ -450,7 +451,49 @@
 			// 处理完成当前事务后,切换到停止或就绪状态
 			else if (m_state == MASTERSTATE::STOPPING) {
 				unlock();
-				Sleep(1000);
+				LOGI("<Master>开始切换各设备到 Stop 模式...");
+
+				std::vector<std::promise<void>> promises(6);
+				std::vector<std::future<void>> futures;
+				BOOL bIomcOk[7] = { FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE };
+
+				int nRet;
+				CEquipment* pEq[6] = { pEFEM, pBonder1, pBonder2, pBakeCooling,
+					pVacuumBake, pMeasurement };
+
+				for (int i = 0; i < 1; ++i) {
+					nRet = pEq[i]->indexerOperationModeChange(IDNEXER_OPERATION_MODE::Stop,
+						[i, &promises, &bIomcOk](int writeCode, int retCode) -> void {
+							bIomcOk[i] = retCode == (int)RET::OK;
+							promises[i].set_value();
+							TRACE("s000%d: ret=%d\n", i + 1, retCode);
+						});
+					if (nRet != 0) {
+						LOGI("<Master>%s切换Stop状态发送失败", pEq[i]->getName().c_str());
+						m_strLastError = pEq[i]->getName() + "切换Stop状态发送失败.";
+						bIomcOk[i] = FALSE;
+						promises[i].set_value(); // 避免 wait 阻塞
+					}
+					futures.push_back(promises[i].get_future());
+				}
+
+				for (auto& f : futures) {
+					f.wait();  // 等待所有完成
+				}
+
+				for (int i = 0; i < 6; ++i) {
+					if (!bIomcOk[i]) {
+						bIomcOk[6] = FALSE;
+						LOGI("<Master>%s切换Stop状态失败", pEq[i]->getName().c_str());
+					}
+				}
+
+				if (!bIomcOk[6]) {
+					setState(MASTERSTATE::MSERROR);
+					continue;
+				}
+
+				LOGI("<Master>所有设备成功切换到 Stop 模式");
 				setState(MASTERSTATE::READY);
 				continue;
 			}
@@ -466,6 +509,9 @@
 				}
 
 				if (m_pActiveRobotTask != nullptr) {
+					if (m_pActiveRobotTask->isPicked()) {
+						m_pActiveRobotTask->place();
+					}
 					unlock();
 					// 检测到当前有正在下午的任务,确保当前任务完成或中止后继续
 					// LOGI("检测到当前有正在下午的任务,确保当前任务完成或中止后继续...");
@@ -686,6 +732,7 @@
 						&& pEqLoadPort[s]->getPortMode() == PortMode::ReadyToLoad) {
 						m_pActiveRobotTask = createTransferTask(pEqLoadPort[s], pAligner, primaryType, secondaryType);
 						if (m_pActiveRobotTask != nullptr) {
+							pEFEM->setContext(m_pActiveRobotTask->getContext());
 							goto PORT_GET;
 						}
 					}
@@ -869,7 +916,7 @@
 					) {
 					LOGI("取片完成.");
 					m_pActiveRobotTask->fetchOut();
-					m_pActiveRobotTask->place();
+					m_pActiveRobotTask->picked();
 				}
 
 				else if (m_pActiveRobotTask != nullptr

--
Gitblit v1.9.3