1.ControlJob工作流程模拟测试,保存工作状态,重启软件还原工作状态等;
2.CJEnd事件上报,EAP模拟测试,数据验证等;
已修改4个文件
71 ■■■■■ 文件已修改
Document/Panel Bonder八零联合 SecsTest CheckList_v3.0.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/Panel Bonder°ËÁãÁªºÏ SecsTest CheckList_v3.0.xlsx
Binary files differ
SourceCode/Bond/Servo/CMaster.cpp
@@ -1417,6 +1417,7 @@
                    if (m_pActiveRobotTask->getSrcPosition() == EQ_ID_MEASUREMENT) {
                        CGlass* pGlass = (CGlass*)m_pActiveRobotTask->getContext();
                        pGlass->complete();
                        this->saveState();
                        bool bMoved = glassFromInPorcessToComplete(pGlass);
                        if (bMoved) {
                            LOGI("<Master>Glass(%s)从工艺列队到完成列队转移成功.",
@@ -1433,10 +1434,22 @@
                        // æ£€æŸ¥PJ是否已经完成
                        CProcessJob* pJob = getGlassProcessJob((CGlass*)m_pActiveRobotTask->getContext());
                        if (pJob != nullptr && checkAndUpdatePjComplete(pJob)) {
                            this->saveState();
                            LOGE("<Master>ProcessJob(%s)完成.",
                                pJob->id().c_str());
                            if (m_listener.onPjEnd != nullptr) {
                                m_listener.onPjEnd(this, pJob);
                            }
                            // æ£€æŸ¥CJ是否已经完成
                            ASSERT(m_pControlJob);
                            if (checkAndUpdateCjComplete(m_pControlJob)) {
                                this->saveState();
                                LOGE("<Master>ControlJob(%s)完成.",
                                    m_pControlJob->id().c_str());
                                if (m_listener.onCjEnd != nullptr) {
                                    m_listener.onCjEnd(this, pJob);
                                }
                            }
                        }
                    }
@@ -1754,6 +1767,7 @@
                CGlass* pGlass = m_queueGlasses.front();
                pGlass->start();
                glassFromQueueToInPorcess(pGlass);
                this->saveState();
                // è¿™é‡Œä¸ŠæŠ¥Panel Start事件
                if (m_listener.onPanelStart != nullptr) {
@@ -1767,6 +1781,7 @@
                CGlass* pGlass = m_inProcesGlasses.front();
                pGlass->complete();
                glassFromInPorcessToComplete(pGlass);
                this->saveState();
                // è¿™é‡Œä¸ŠæŠ¥Panel End事件
                if (m_listener.onPanelEnd != nullptr) {
@@ -1775,10 +1790,23 @@
                CProcessJob* pJob = getGlassProcessJob(pGlass);
                if (pJob != nullptr && checkAndUpdatePjComplete(pJob)) {
                    processJobFromInPorcessToComplete(pJob);
                    this->saveState();
                    LOGE("<Master>ProcessJob(%s)完成.",
                        pJob->id().c_str());
                    if (m_listener.onPjEnd != nullptr) {
                        m_listener.onPjEnd(this, pJob);
                    }
                    // æ£€æŸ¥CJ是否已经完成
                    ASSERT(m_pControlJob);
                    if (checkAndUpdateCjComplete(m_pControlJob)) {
                        this->saveState();
                        LOGE("<Master>ControlJob(%s)完成.",
                            m_pControlJob->id().c_str());
                        if (m_listener.onCjEnd != nullptr) {
                            m_listener.onCjEnd(this, pJob);
                        }
                    }
                }
            }
@@ -2483,8 +2511,8 @@
        for (const auto pj : pjs) {
            if (pj->state() == PJState::Queued) {
                pj->start();
                return pj;
            }
            return pj;
        }
@@ -2558,6 +2586,17 @@
        return false;
    }
    bool CMaster::processJobFromInPorcessToComplete(CProcessJob* pProcessJob)
    {
        auto it = std::find(m_inProcesJobs.begin(), m_inProcesJobs.end(), pProcessJob);
        if (it != m_inProcesJobs.end()) {
            m_completeProcessJobs.push_back(*it);
            m_inProcesJobs.erase(it);
            return true;
        }
        return false;
    }
    bool CMaster::checkAndUpdatePjComplete(CProcessJob* pJob)
    {
        ASSERT(pJob);
@@ -2566,10 +2605,26 @@
        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;
                auto state = ((CGlass*)g)->state();
                if (state != GlsState::Aborted && state != GlsState::Completed
                    && state != GlsState::Failed) return false;
            }
        }
        return pJob->complete();
    }
    bool CMaster::checkAndUpdateCjComplete(CControlJob* pJob)
    {
        ASSERT(pJob);
        auto state = pJob->state();
        if (state != CJState::Executing && state != CJState::Paused) return false;
        for (auto pj : pJob->getPjs()) {
            auto state = pj->state();
            if (state != PJState::Aborted && state != PJState::Completed
                && state != PJState::Failed) {
                return false;
            }
        }
SourceCode/Bond/Servo/CMaster.h
@@ -171,7 +171,9 @@
        bool addGlassToQueue(CGlass* pGlass);
        bool glassFromQueueToInPorcess(CGlass* pGlass);
        bool glassFromInPorcessToComplete(CGlass* pGlass);
        bool processJobFromInPorcessToComplete(CProcessJob* pProcessJob);
        bool checkAndUpdatePjComplete(CProcessJob* pJob);
        bool checkAndUpdateCjComplete(CControlJob* pJob);
        CProcessJob* getGlassProcessJob(CGlass* pGlass);
@@ -221,6 +223,7 @@
        // æ–°å¢žå·²ç»å¼€å§‹å¤„理的ProcessJob列表
        std::vector<CProcessJob*> m_inProcesJobs;
        std::vector<CProcessJob*> m_completeProcessJobs;
        std::vector<CGlass*> m_queueGlasses;
        std::vector<CGlass*> m_inProcesGlasses;
        std::vector<CGlass*> m_completeGlasses;
SourceCode/Bond/Servo/Model.cpp
@@ -394,6 +394,9 @@
    masterListener.onCjEnd = [&](void* pMaster, void* pj) {
        m_hsmsPassive.setVariableValue("CJEndID", ((SERVO::CControlJob*)pj)->id().c_str());
        m_hsmsPassive.requestEventReportSend_CJ_End();
        // ç»“批,保存ControlJob
        //
    };
    masterListener.onPjStart = [&](void* pMaster, void* pj) {
        m_hsmsPassive.setVariableValue("PJStartID", ((SERVO::CProcessJob*)pj)->id().c_str());