From e370d743235b6c182a62e15fb3efe764103ad8ef Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期六, 07 六月 2025 11:53:33 +0800
Subject: [PATCH] 1.流程中断后,物料的人工搬出机制,用于恢复流程,保证数据同步;
---
SourceCode/Bond/Servo/CMaster.cpp | 62 +++++++++++++++++++++++++++++-
1 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index a73e03c..e65347c 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -295,6 +295,7 @@
CBonder* pBonder1 = (CBonder*)getEquipment(EQ_ID_Bonder1);
CBonder* pBonder2 = (CBonder*)getEquipment(EQ_ID_Bonder2);
CBakeCooling* pBakeCooling = (CBakeCooling*)getEquipment(EQ_ID_BAKE_COOLING);
+ CMeasurement* pMeasurement = (CMeasurement*)getEquipment(EQ_ID_MEASUREMENT);
ASSERT(pLoadPort1);
ASSERT(pLoadPort2);
@@ -304,6 +305,7 @@
ASSERT(pBonder1);
ASSERT(pBonder2);
ASSERT(pBakeCooling);
+ ASSERT(pMeasurement);
while (1) {
// 待退出信号或时间到
@@ -367,7 +369,19 @@
}
+ // BakeCooling ->Measurement
+ m_pActiveRobotTask = createTransferTask_bakecooling_to_measurement(pBakeCooling, pMeasurement);
+ if (m_pActiveRobotTask != nullptr) {
+ 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;
+ }
+
// BakeCooling内部
// Bake -> Cooling
m_pActiveRobotTask = createTransferTask_bake_to_cooling(pBakeCooling);
@@ -508,9 +522,6 @@
LOGI("创建新任务<%s>...", strDescription.c_str());
continue;
}
-
-
- // BakeCooling ->Measurement
// Measurement -> LoadPort
@@ -1168,4 +1179,49 @@
return pTask;
}
+
+ CRobotTask* CMaster::createTransferTask_bakecooling_to_measurement(CEquipment* pSrcEq, CEquipment* pTarEq)
+ {
+ std::vector<int> slots = { 3, 4 };
+
+ CRobotTask* pTask = nullptr;
+ CSlot* pSrcSlot, * pTarSlot;
+ pTarSlot = pTarEq->getAvailableSlotForGlass(MaterialsType::G1);
+ pSrcSlot = pSrcEq->getProcessedSlot2(MaterialsType::G1, slots);
+
+ if (pSrcSlot != nullptr && nullptr != pTarSlot) {
+ pTask = new CRobotTask();
+ pTask->setContext(pSrcSlot->getContext());
+ pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
+ pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
+ }
+
+
+ return pTask;
+ }
+
+ int CMaster::abortCurrentTask()
+ {
+ lock();
+ if (m_pActiveRobotTask != nullptr) {
+ m_pActiveRobotTask->abort();
+ }
+ unlock();
+
+ if (m_listener.onRobotTaskEvent != nullptr) {
+ m_listener.onRobotTaskEvent(this, m_pActiveRobotTask, ROBOT_EVENT_ABORT);
+ }
+
+ lock();
+ if (m_pActiveRobotTask != nullptr) {
+ delete m_pActiveRobotTask;
+ m_pActiveRobotTask = nullptr;
+ }
+ unlock();
+
+ // 当前任务手动中止后,停止调度,需要操作员在解决问题后,重新启动
+ stop();
+
+ return 0;
+ }
}
--
Gitblit v1.9.3