LAPTOP-SNT8I5JK\Boounion
2025-08-26 f2f77036149a57e84e9c75caa06e14158b502376
1.PJEnd事件上报功能实现,EAP模拟器接收数据并验证;
已修改6个文件
118 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CMaster.cpp 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/CollectionEventList.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp
@@ -939,15 +939,17 @@
                        && 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());
                            }
                            goto BATCH_PORT_GET;
@@ -1258,6 +1260,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) {
@@ -1371,16 +1382,29 @@
                    // 如果是搬送回从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());
                        }
                        // 检查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 +1708,38 @@
            }
        }
        // 模拟测试
        /*
        static int aaa = 0;
        aaa++;
        if (aaa % 30 == 0) {
            if (!m_queueGlasses.empty()) {
                CGlass* pGlass = m_queueGlasses.front();
                pGlass->start();
                glassFromQueueToInPorcess(pGlass);
            }
        }
        if (aaa % 45 == 0) {
            if (!m_inProcesGlasses.empty()) {
                CGlass* pGlass = m_inProcesGlasses.front();
                pGlass->complete();
                glassFromInPorcessToComplete(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 +2512,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;
    }
}
SourceCode/Bond/Servo/CMaster.h
@@ -66,7 +66,7 @@
        ONLOADPORTSTATUSCHANGED    onLoadPortStatusChanged;
        ONCTROUNDEND            onCTRoundEnd;
        ONPJSTART               onPjStart;
        ONPJSTART               onPjEnd;
    } MasterListener;
    class CMaster : public IResourceView
@@ -167,6 +167,9 @@
        bool addGlassToQueue(CGlass* pGlass);
        bool glassFromQueueToInPorcess(CGlass* pGlass);
        bool glassFromInPorcessToComplete(CGlass* pGlass);
        bool checkAndUpdatePjComplete(CProcessJob* pJob);
        CProcessJob* getGlassProcessJob(CGlass* pGlass);
    private:
        CRITICAL_SECTION m_criticalSection;
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -1884,6 +1884,11 @@
    return requestEventReportSend("PJ_Start");
}
int CHsmsPassive::requestEventReportSend_PJ_End()
{
    return requestEventReportSend("PJ_End");
}
SourceCode/Bond/Servo/HsmsPassive.h
@@ -193,6 +193,7 @@
    int requestEventReportSend_CarrierID_Readed();
    int requestEventReportSend_PJ_Queued();
    int requestEventReportSend_PJ_Start();
    int requestEventReportSend_PJ_End();
private:
    void replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName);
SourceCode/Bond/Servo/Model.cpp
@@ -391,6 +391,10 @@
        m_hsmsPassive.setVariableValue("PJStartID", ((SERVO::CProcessJob*)pj)->id().c_str());
        m_hsmsPassive.requestEventReportSend_PJ_Start();
    };
    masterListener.onPjEnd = [&](void* pMaster, void* pj) {
        m_hsmsPassive.setVariableValue("PJEndID", ((SERVO::CProcessJob*)pj)->id().c_str());
        m_hsmsPassive.requestEventReportSend_PJ_End();
    };
    m_master.setListener(masterListener);
    m_master.setContinuousTransferCount(m_configuration.getContinuousTransferCount());
SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -40,3 +40,4 @@
50000,CarrierID_Readed,,(50000)
50001,PJ_Queued,,(50001)
50002,PJ_Start,,(50002)
50002,PJ_End,,(50003)