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