From 9370dd2497683084f8c0ae958f8be5dec34bd2f1 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期一, 01 九月 2025 21:53:51 +0800
Subject: [PATCH] 1. JobDataS多了一次Last Glass Flag
---
SourceCode/Bond/Servo/CMaster.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 95 insertions(+), 7 deletions(-)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index e6ed125..baf3806 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -939,15 +939,17 @@
&& 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());
}
goto BATCH_PORT_GET;
@@ -1258,6 +1260,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) {
@@ -1371,16 +1382,29 @@
// 如果是搬送回从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());
+ }
+
+ // 检查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 +1708,38 @@
}
}
+
+
+ // 模拟测试
+ /*
+ static int aaa = 0;
+ aaa++;
+ if (aaa % 30 == 0) {
+ if (!m_queueGlasses.empty()) {
+ CGlass* pGlass = m_queueGlasses.front();
+ pGlass->start();
+ glassFromQueueToInPorcess(pGlass);
+ }
+ }
+
+ if (aaa % 45 == 0) {
+ if (!m_inProcesGlasses.empty()) {
+ CGlass* pGlass = m_inProcesGlasses.front();
+ pGlass->complete();
+ glassFromInPorcessToComplete(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 +2512,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