LAPTOP-SNT8I5JK\Boounion
2025-06-13 1a181b77b4eb7670e668506c10d9de97ca0c20c6
1.由于EFEM不支持Transfer(直接搬运),将搬运动作拆分为Get和Put
已修改4个文件
67 ■■■■ 文件已修改
SourceCode/Bond/Servo/CMaster.cpp 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CRobotTask.cpp 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CRobotTask.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
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");
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;
    };
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());