From 1a181b77b4eb7670e668506c10d9de97ca0c20c6 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 13 六月 2025 13:58:44 +0800
Subject: [PATCH] 1.由于EFEM不支持Transfer(直接搬运),将搬运动作拆分为Get和Put
---
SourceCode/Bond/Servo/CRobotTask.h | 6 ++
SourceCode/Bond/Servo/CRobotTask.cpp | 24 ++++++++++++
SourceCode/Bond/Servo/CMaster.cpp | 36 +++++++++++++-----
SourceCode/Bond/Servo/Model.cpp | 1
4 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 8d6bbef..6f60f8c 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -551,7 +551,7 @@
PORT_GET:
if (m_pActiveRobotTask != nullptr) {
- m_pActiveRobotTask->run();
+ m_pActiveRobotTask->pick();
std::string strDescription = m_pActiveRobotTask->getDescription();
unlock();
if (m_listener.onRobotTaskEvent != nullptr) {
@@ -677,17 +677,24 @@
BOOL bOk = FALSE;
lock();
if (m_pActiveRobotTask != nullptr) {
- if (m_pActiveRobotTask->getTarPosition() == p->getID()) {
+ // 是否已经进入手臂(即取片完成),进入下一步,放片
+ if (m_pActiveRobotTask->isPicking() &&
+ ((m_pActiveRobotTask->getArmNo() == 1 && p->getID() == EQ_ID_ARM_TRAY1)
+ || (m_pActiveRobotTask->getArmNo() == 2 && p->getID() == EQ_ID_ARM_TRAY2))
+ ) {
+ slot = 1;
+ bOk = TRUE;
+ }
+
+ // 是否放片完成
+ else if (m_pActiveRobotTask->isPlacing() &&
+ m_pActiveRobotTask->getTarPosition() == p->getID()) {
CGlass* pGlass = p->getGlassFromSlot(m_pActiveRobotTask->getTarSlot());
if (pGlass == nullptr) {
bOk = TRUE;
slot = m_pActiveRobotTask->getTarSlot();
LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性.");
}
- }
- else if (p->getID() == EQ_ID_ARM_TRAY1 || p->getID() == EQ_ID_ARM_TRAY2) {
- slot = 1;
- bOk = TRUE;
}
}
unlock();
@@ -710,21 +717,30 @@
if (code == EDCC_FETCHOUT_JOB) {
lock();
if (m_pActiveRobotTask != nullptr && m_pActiveRobotTask->getSrcPosition() == p->getID()) {
- m_pActiveRobotTask->fetchOut();
LOGI("开始取片...");
}
unlock();
}
else if (code == EDCC_STORED_JOB) {
lock();
- if (m_pActiveRobotTask != nullptr && m_pActiveRobotTask->getTarPosition() == p->getID()) {
+ if (m_pActiveRobotTask != nullptr
+ && m_pActiveRobotTask->isPicking()
+ && ((m_pActiveRobotTask->getArmNo() == 1 && p->getID() == EQ_ID_ARM_TRAY1)
+ || (m_pActiveRobotTask->getArmNo() == 2 && p->getID() == EQ_ID_ARM_TRAY2))
+ ) {
+ LOGI("取片完成.");
+ m_pActiveRobotTask->fetchOut();
+ m_pActiveRobotTask->place();
+ }
+
+ else if (m_pActiveRobotTask != nullptr
+ && m_pActiveRobotTask->isPlacing()
+ && m_pActiveRobotTask->getTarPosition() == p->getID()) {
m_pActiveRobotTask->stored();
m_pActiveRobotTask->completed();
LOGI("放片完成...");
-
// 完成此条搬送任务,但要把数据和消息上抛应用层
unlock();
-
lock();
diff --git a/SourceCode/Bond/Servo/CRobotTask.cpp b/SourceCode/Bond/Servo/CRobotTask.cpp
index 9c5596d..4ac89d3 100644
--- a/SourceCode/Bond/Servo/CRobotTask.cpp
+++ b/SourceCode/Bond/Servo/CRobotTask.cpp
@@ -167,9 +167,30 @@
return m_timeFinish;
}
+ int CRobotTask::getArmNo()
+ {
+ return m_robotCmdParam[ACTION_PICK].armNo;
+
+ }
+
ROBOT_TASK_STATE CRobotTask::getState()
{
return m_state;
+ }
+
+ bool CRobotTask::isPicking()
+ {
+ return m_state == ROBOT_TASK_STATE::Picking;
+ }
+
+ bool CRobotTask::isPlacing()
+ {
+ return m_state == ROBOT_TASK_STATE::Placing;
+ }
+
+ bool CRobotTask::isRestoring()
+ {
+ return m_state == ROBOT_TASK_STATE::Restoring;
}
void CRobotTask::run()
@@ -299,6 +320,9 @@
switch (m_state) {
case ROBOT_TASK_STATE::Ready: return _T("Ready");
case ROBOT_TASK_STATE::Running: return _T("Running");
+ case ROBOT_TASK_STATE::Picking: return _T("Picking");
+ case ROBOT_TASK_STATE::Placing: return _T("Placing");
+ case ROBOT_TASK_STATE::Restoring: return _T("Restoring");
case ROBOT_TASK_STATE::Error: return _T("Error");
case ROBOT_TASK_STATE::Abort: return _T("Abort");
case ROBOT_TASK_STATE::Completed: return _T("Completed");
diff --git a/SourceCode/Bond/Servo/CRobotTask.h b/SourceCode/Bond/Servo/CRobotTask.h
index 4c897cd..7e83046 100644
--- a/SourceCode/Bond/Servo/CRobotTask.h
+++ b/SourceCode/Bond/Servo/CRobotTask.h
@@ -29,7 +29,11 @@
time_t getFetchoutTime();
time_t getStoredTime();
time_t getFinishTime();
+ int getArmNo();
ROBOT_TASK_STATE getState();
+ bool isPicking();
+ bool isPlacing();
+ bool isRestoring();
void run();
void pick();
void place();
@@ -59,7 +63,7 @@
time_t m_timeFetchOut; /* 取片时间*/
time_t m_timeStored; /* 放片时间 */
time_t m_timeFinish; /* 结束时间 */
- ROBOT_CMD_PARAM m_robotCmdParam[3]; /* 参数 */
+ ROBOT_CMD_PARAM m_robotCmdParam[4]; /* 参数 */
CContext* m_pContext;
CEFEM* m_pEFEM;
};
diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index e39f62d..f68d9cc 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -188,7 +188,6 @@
break;
case ROBOT_EVENT_FINISH:
LOGI("<CModel>onRobotTaskEvent: 任务完成(%s, ClassID=%s).", strDesc.c_str(), strClassID.c_str());
- pTask->completed();
break;
case ROBOT_EVENT_ERROR:
LOGE("<CModel>onRobotTaskEvent: 任务错误(%s, ClassID=%s).", strDesc.c_str(), strClassID.c_str());
--
Gitblit v1.9.3