From 30847e604bbf072a0b6a4577cf395ff1a617bac3 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 24 七月 2025 08:51:17 +0800
Subject: [PATCH] 1.LoadPort状态变为InUse的时候不自动弹出LoadPort配置对话框; 2.修改调度逻辑,G2和G1分别进入Bonder的间隔不要太长,防止G2先进入Bonder,等待烘烤中的G1太久,在高温Bonder下出问题;

---
 SourceCode/Bond/Servo/CMaster.cpp |  124 +++++++++++++++++++++++++++++++++++------
 1 files changed, 106 insertions(+), 18 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 7ef3579..5b6d6e9 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -51,6 +51,7 @@
 		m_state = MASTERSTATE::READY;
 		m_pActiveRobotTask = nullptr;
 		m_nLastError = 0;
+		m_isCompareMapsBeforeProceeding = FALSE;
 		InitializeCriticalSection(&m_criticalSection);
 	}
 
@@ -659,8 +660,10 @@
 
 				// Fliper(G2) -> Bonder
 				// VacuumBake(G1) -> Bonder
+				SERVO::CRobotTask* tempTask[2] = {nullptr, nullptr};
 				if (!rmd.armState[1] && !pBonder1->hasBondClass()) {
-					m_pActiveRobotTask = createTransferTask(pFliper, pBonder1, primaryType, secondaryType, 2);
+					tempTask[0] = createTransferTask(pFliper, pBonder1, primaryType, secondaryType, 2);
+					/*
 					if (m_pActiveRobotTask != nullptr) {
 						m_pActiveRobotTask->pick();
 						std::string strDescription = m_pActiveRobotTask->getDescription();
@@ -671,24 +674,12 @@
 						LOGI("创建新任务<%s>...", strDescription.c_str());
 						continue;
 					}
-				}
-
-				if (!rmd.armState[1] && !pBonder2->hasBondClass()) {
-					m_pActiveRobotTask = createTransferTask(pFliper, pBonder2, primaryType, secondaryType, 2);
-					if (m_pActiveRobotTask != nullptr) {
-						m_pActiveRobotTask->pick();
-						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;
-					}
+					*/
 				}
 
 				if (!rmd.armState[0] && !pBonder1->hasBondClass()) {
-					m_pActiveRobotTask = createTransferTask(pVacuumBake, pBonder1, primaryType, secondaryType);
+					tempTask[1] = createTransferTask(pVacuumBake, pBonder1, primaryType, secondaryType);
+					/*
 					if (m_pActiveRobotTask != nullptr) {
 						m_pActiveRobotTask->pick();
 						std::string strDescription = m_pActiveRobotTask->getDescription();
@@ -699,10 +690,51 @@
 						LOGI("创建新任务<%s>...", strDescription.c_str());
 						continue;
 					}
+					*/
+				}
+
+				if (tempTask[1] != nullptr && pBonder1->hasG2Class()) {
+					m_pActiveRobotTask = tempTask[1];
+					if(tempTask[0] != nullptr) delete tempTask[0];
+				}
+				else if (tempTask[0] != nullptr && tempTask[1] != nullptr) {
+					m_pActiveRobotTask = tempTask[0];
+					delete tempTask[1];
+				}
+				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->pick();
+					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;
+				}
+
+				if (tempTask[0] != nullptr) delete tempTask[0];
+				if (tempTask[1] != nullptr) delete tempTask[1];
+				tempTask[0] = nullptr;
+				tempTask[1] = nullptr;
+				if (!rmd.armState[1] && !pBonder2->hasBondClass()) {
+					tempTask[0] = createTransferTask(pFliper, pBonder2, primaryType, secondaryType, 2);
+					/*
+					if (m_pActiveRobotTask != nullptr) {
+						m_pActiveRobotTask->pick();
+						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;
+					}
+					*/
 				}
 
 				if (!rmd.armState[0] && !pBonder2->hasBondClass()) {
-					m_pActiveRobotTask = createTransferTask(pVacuumBake, pBonder2, primaryType, secondaryType);
+					tempTask[1] = createTransferTask(pVacuumBake, pBonder2, primaryType, secondaryType);
+					/*
 					if (m_pActiveRobotTask != nullptr) {
 						m_pActiveRobotTask->pick();
 						std::string strDescription = m_pActiveRobotTask->getDescription();
@@ -713,8 +745,31 @@
 						LOGI("创建新任务<%s>...", strDescription.c_str());
 						continue;
 					}
+					*/
 				}
 
+				if (tempTask[1] != nullptr && pBonder1->hasG2Class()) {
+					m_pActiveRobotTask = tempTask[1];
+					if (tempTask[0] != nullptr) delete tempTask[0];
+				}
+				else if (tempTask[0] != nullptr && tempTask[1] != nullptr) {
+					m_pActiveRobotTask = tempTask[0];
+					delete tempTask[1];
+				}
+				if (m_pActiveRobotTask != nullptr) {
+					m_pActiveRobotTask->pick();
+					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;
+				}
+				if (tempTask[0] != nullptr) delete tempTask[0];
+				if (tempTask[1] != nullptr) delete tempTask[1];
+				tempTask[0] = nullptr;
+				tempTask[1] = nullptr;
 
 				// Aligner -> Fliper(G2)
 				// Aligner -> VacuumBake(G1)
@@ -1016,6 +1071,12 @@
 			LOGE("<Master-%s>Port InUse, map(%d!=%d)不一致,请检查。",
 				((CEquipment*)pEquipment)->getName().c_str(), scanMap, downMap);
 		};
+		listener.onPortInUse = [&](void* pEquipment, short scanMap) {
+			LOGE("<Master-%s>Port InUse。scanMap=%d", ((CEquipment*)pEquipment)->getName().c_str(), scanMap);
+			if (m_listener.onLoadPortInUse != nullptr) {
+				m_listener.onLoadPortInUse(this, (CEquipment*)pEquipment, scanMap);
+			}
+		};
 		pEquipment->setListener(listener);
 		pEquipment->setCcLink(&m_cclink);
 		m_listEquipment.push_back(pEquipment);
@@ -1053,6 +1114,7 @@
 		pEquipment->setID(EQ_ID_LOADPORT1 + index);
 		pEquipment->setName(szName);
 		pEquipment->setDescription(szName);
+		pEquipment->setCompareMapsBeforeProceeding(m_isCompareMapsBeforeProceeding);		
 		addToEquipmentList(pEquipment);
 
 
@@ -1567,7 +1629,8 @@
 		unlock();
 
 		// 当前任务手动中止后,停止调度,需要操作员在解决问题后,重新启动
-		stop();
+		// 25年7月23日后修改为不停止任务
+		// stop();
 
 		return 0;
 	}
@@ -1577,6 +1640,18 @@
 		lock();
 		if (m_pActiveRobotTask != nullptr) {
 			m_pActiveRobotTask->restore();
+		}
+		unlock();
+
+
+		return 0;
+	}
+
+	int CMaster::resendCurrentTask()
+	{
+		lock();
+		if (m_pActiveRobotTask != nullptr) {
+			m_pActiveRobotTask->resend();
 		}
 		unlock();
 
@@ -1597,4 +1672,17 @@
 		pPort->localSetTransferMode((SERVO::TransferMode)transferMode);
 		pPort->localAutoChangeEnable(autoChangeEnable);
 	}
+
+	void CMaster::setPortCassetteType(unsigned int index, SERVO::CassetteType type)
+	{
+		ASSERT(index < 4);
+		int eqid[] = { EQ_ID_LOADPORT1, EQ_ID_LOADPORT2, EQ_ID_LOADPORT3, EQ_ID_LOADPORT4 };
+		CLoadPort* pPort = (CLoadPort*)getEquipment(eqid[index]);
+		pPort->localSetCessetteType(type);
+	}
+
+	void CMaster::setCompareMapsBeforeProceeding(BOOL bCompare)
+	{
+		m_isCompareMapsBeforeProceeding = bCompare;
+	}
 }

--
Gitblit v1.9.3