From 526735d2fe4a3dad2b5ed27759a627a971b98ebc Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期三, 27 八月 2025 18:12:30 +0800
Subject: [PATCH] 1.port加料时,暂时修改为混料模式;

---
 SourceCode/Bond/Servo/CMaster.cpp |  126 +++++++++++++++++++++++++++++++++++++++---
 1 files changed, 117 insertions(+), 9 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index e6ed125..e574cd6 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -761,6 +761,10 @@
 				if (m_pControlJob->state() == CJState::Queued) {
 					LOGI("<Master>ControlJob已经启动");
 					m_pControlJob->start();
+
+					if (m_listener.onCjStart != nullptr) {
+						m_listener.onCjStart(this, m_pControlJob);
+					}
 				}
 				if (m_pControlJob->state() == CJState::Paused) {
 					LOGI("<Master>ControlJob已经恢复运行");
@@ -939,15 +943,22 @@
 						&& pLoadPorts[s]->getPortStatus() == PORT_INUSE) {
 						m_pActiveRobotTask = createTransferTask(pLoadPorts[s], pAligner, primaryType, secondaryType, m_bJobMode);
 						if (m_pActiveRobotTask != nullptr) {
-							pEFEM->setContext(m_pActiveRobotTask->getContext());
-							bool bMoved = glassFromQueueToInPorcess((CGlass*)m_pActiveRobotTask->getContext());
+							CGlass* pGlass = (CGlass*)m_pActiveRobotTask->getContext();
+							pEFEM->setContext(pGlass);
+							pGlass->start();
+							bool bMoved = glassFromQueueToInPorcess(pGlass);
 							if (bMoved) {
 								LOGI("<Master>Glass(%s)从等待列队到工艺列队转移成功.",
-									((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str());
+									pGlass->getID().c_str());
 							}
 							else {
 								LOGE("<Master>Glass(%s)从等待列队到工艺列队转移失败.",
-									((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str());
+									pGlass->getID().c_str());
+							}
+
+							// 这里上报Panel Start事件
+							if (m_listener.onPanelStart != nullptr) {
+								m_listener.onPanelStart(this, pGlass);
 							}
 
 							goto BATCH_PORT_GET;
@@ -1258,6 +1269,15 @@
 							bOk = TRUE;
 							LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性.");
 						}
+						LOGI("<CMaster>onPreFethedOutJob 0004.");
+						if (pJobDataS != nullptr) {
+							LOGI("<CMaster>onPreFethedOutJob 0005. %d,%d,%d,%d", 
+								pJobDataS->getCassetteSequenceNo(),
+								pJobDataB->getCassetteSequenceNo(),
+								pJobDataS->getJobSequenceNo(),
+								pJobDataB->getJobSequenceNo()
+								);
+						}
 					}
 				}
 				else if (p->getID() == EQ_ID_ARM_TRAY1 || p->getID() == EQ_ID_ARM_TRAY2) {
@@ -1299,7 +1319,7 @@
 					if (pGlass == nullptr) {
 						bOk = TRUE;
 						slot = m_pActiveRobotTask->getTarSlot();
-						LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性.");
+						LOGI("<CMaster>onPreStoredJob, 已校验数据一致性.");
 					}
 				}
 
@@ -1310,7 +1330,7 @@
 					if (pGlass == nullptr && m_pActiveRobotTask->getSrcSlot() == port) {
 						bOk = TRUE;
 						slot = m_pActiveRobotTask->getSrcSlot();
-						LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性.");
+						LOGI("<CMaster>onPreStoredJob, 已校验数据一致性.");
 					}
 				}
 			}
@@ -1371,16 +1391,32 @@
 
 					// 如果是搬送回从AOI搬送回Port, 则glass工艺完成
 					if (m_pActiveRobotTask->getSrcPosition() == EQ_ID_MEASUREMENT) {
-						bool bMoved = glassFromInPorcessToComplete((CGlass*)m_pActiveRobotTask->getContext());
+						CGlass* pGlass = (CGlass*)m_pActiveRobotTask->getContext();
+						pGlass->complete();
+						bool bMoved = glassFromInPorcessToComplete(pGlass);
 						if (bMoved) {
 							LOGI("<Master>Glass(%s)从工艺列队到完成列队转移成功.",
-								((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str());
+								pGlass->getID().c_str());
 						}
 						else {
 							LOGE("<Master>Glass(%s)从工艺列队到完成列队转移失败.",
-								((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str());
+								pGlass->getID().c_str());
+						}
+						if (m_listener.onPanelEnd != nullptr) {
+							m_listener.onPanelEnd(this, pGlass);
+						}
+
+						// 检查PJ是否已经完成
+						CProcessJob* pJob = getGlassProcessJob((CGlass*)m_pActiveRobotTask->getContext());
+						if (pJob != nullptr && checkAndUpdatePjComplete(pJob)) {
+							LOGE("<Master>ProcessJob(%s)完成.",
+								pJob->id().c_str());
+							if (m_listener.onPjEnd != nullptr) {
+								m_listener.onPjEnd(this, pJob);
+							}
 						}
 					}
+
 
 
 					unlock();
@@ -1684,6 +1720,46 @@
 			}
 		}
 
+
+
+		// 模拟测试
+		static int aaa = 0;
+		aaa++;
+		if (aaa % 30 == 0) {
+			if (!m_queueGlasses.empty()) {
+				CGlass* pGlass = m_queueGlasses.front();
+				pGlass->start();
+				glassFromQueueToInPorcess(pGlass);
+
+				// 这里上报Panel Start事件
+				if (m_listener.onPanelStart != nullptr) {
+					m_listener.onPanelStart(this, pGlass);
+				}
+			}
+		}
+
+		if (aaa % 45 == 0) {
+			if (!m_inProcesGlasses.empty()) {
+				CGlass* pGlass = m_inProcesGlasses.front();
+				pGlass->complete();
+				glassFromInPorcessToComplete(pGlass);
+
+				// 这里上报Panel End事件
+				if (m_listener.onPanelEnd != nullptr) {
+					m_listener.onPanelEnd(this, pGlass);
+				}
+
+				CProcessJob* pJob = getGlassProcessJob(pGlass);
+				if (pJob != nullptr && checkAndUpdatePjComplete(pJob)) {
+					LOGE("<Master>ProcessJob(%s)完成.",
+						pJob->id().c_str());
+					if (m_listener.onPjEnd != nullptr) {
+						m_listener.onPjEnd(this, pJob);
+					}
+				}
+			}
+		}
+		
 	}
 
 	void CMaster::connectEquipments()
@@ -2456,4 +2532,36 @@
 		}
 		return false;
 	}
+
+	bool CMaster::checkAndUpdatePjComplete(CProcessJob* pJob)
+	{
+		ASSERT(pJob);
+		auto state = pJob->state();
+		if (state != PJState::InProcess && state != PJState::Paused) return false;
+
+		for (auto c : pJob->carriers()) {
+			for (auto g : c.contexts) {
+				CGlass* pGlass = (CGlass*)g;
+				if (pGlass->state() != GlsState::Aborted
+					&& pGlass->state() != GlsState::Completed
+					&& pGlass->state() != GlsState::Failed) return false;
+			}
+		}
+
+		return pJob->complete();
+	}
+
+	CProcessJob* CMaster::getGlassProcessJob(CGlass* pGlass)
+	{
+		if (m_pControlJob == nullptr) return nullptr;
+		for (auto pj : m_pControlJob->getPjs()) {
+			for (auto c : pj->carriers()) {
+				for (auto g : c.contexts) {
+					if (g == pGlass) return pj;
+				}
+			}
+		}
+
+		return nullptr;
+	}
 }

--
Gitblit v1.9.3