1.BakeCoolingr Slot位置修改;
2.Bonder的Slot绑定信号Path修正;
3.搬送任务,转换到EFEM的Slot和Pos修正;
4.任务报表数据显示修正;
已修改8个文件
181 ■■■■ 文件已修改
SourceCode/Bond/Servo/CBakeCooling.cpp 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CBonder.cpp 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMeasurement.cpp 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CRobotTask.cpp 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CVacuumBake.cpp 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CBakeCooling.cpp
@@ -239,7 +239,7 @@
        {
            // Received Job Report Upstream #1~9
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 4; i++) {
                CEqReadStep* pStep = new CEqReadStep(0x10c90 + 320 * i, 320 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
@@ -263,13 +263,13 @@
        {
            // Sent Out Job Report Downstream #1~9
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 4; i++) {
                CEqReadStep* pStep = new CEqReadStep(0x10000 + 320 * i, 320 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeReceivedJobReport((CStep*)pFrom, port, pszData, size);
                                decodeSentOutJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
@@ -287,7 +287,7 @@
        {
            // Fetched Out Job Report #1~15
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 4; i++) {
                CEqReadStep* pStep = new CEqReadStep(0x11c31 + 18 * i, 18 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
@@ -311,7 +311,7 @@
        {
            // Stored Job Report #1~15
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 4; i++) {
                CEqReadStep* pStep = new CEqReadStep(0x11b23 + 18 * i, 18 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
@@ -331,6 +331,38 @@
                }
            }
        }
        // process start/end report
        {
            CEqReadStep* pStep = new CEqReadStep(0x11D3F, 13 * 2,
                [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                    if (code == ROK && pszData != nullptr && size > 0) {
                        decodeJobProcessStartReport((CStep*)pFrom, pszData, size);
                    }
                    return -1;
                });
            pStep->setName(STEP_EQ_JOB_PROCESS_START_REPORT);
            pStep->setProp("Port", (void*)1);
            pStep->setWriteSignalDev(0x933);
            if (addStep(STEP_ID_JOB_PROCESS_START_REPORT, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqReadStep* pStep = new CEqReadStep(0x11D4C, 13 * 2,
                [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                    if (code == ROK && pszData != nullptr && size > 0) {
                        decodeJobProcessEndReport((CStep*)pFrom, pszData, size);
                    }
                    return -1;
                });
            pStep->setName(STEP_EQ_JOB_PROCESS_END_REPORT);
            pStep->setProp("Port", (void*)1);
            pStep->setWriteSignalDev(0x934);
            if (addStep(STEP_ID_JOB_PROCESS_END_REPORT, pStep) != 0) {
                delete pStep;
            }
        }
    }
    // 必须要实现的虚函数,在此初始化Slot信息
@@ -344,18 +376,18 @@
        m_slot[1].enable();
        m_slot[1].setPosition(m_nID);
        m_slot[1].setNo(2);
        m_slot[1].setName("Bake 2");
        m_slot[1].setLinkSignalPath(0);
        m_slot[1].setName("Cooling 1");
        m_slot[1].setLinkSignalPath(1);
        m_slot[2].enable();
        m_slot[2].setPosition(m_nID);
        m_slot[2].setNo(3);
        m_slot[2].setName("Cooling 1");
        m_slot[2].setLinkSignalPath(1);
        m_slot[2].setName("Bake 2");
        m_slot[2].setLinkSignalPath(2);
        m_slot[3].enable();
        m_slot[3].setPosition(m_nID);
        m_slot[3].setNo(4);
        m_slot[3].setName("Cooling 2");
        m_slot[3].setLinkSignalPath(1);
        m_slot[3].setLinkSignalPath(3);
    }
    void CBakeCooling::onTimer(UINT nTimerid)
SourceCode/Bond/Servo/CBonder.cpp
@@ -244,7 +244,7 @@
        {
            // Received Job Report Upstream #1~9
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 2; i++) {
                CEqReadStep* pStep = new CEqReadStep((m_nIndex == 0 ? 0x8c90 : 0xcc90) + 320 * i, 320 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
@@ -267,13 +267,13 @@
        {
            // Sent Out Job Report Downstream #1~9
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 2; i++) {
                CEqReadStep* pStep = new CEqReadStep((m_nIndex == 0 ? 0x8000 : 0xc000) + 320 * i, 320 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeReceivedJobReport((CStep*)pFrom, port, pszData, size);
                                decodeSentOutJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
@@ -291,7 +291,7 @@
        {
            // Fetched Out Job Report #1~15
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 2; i++) {
                CEqReadStep* pStep = new CEqReadStep((m_nIndex == 0 ? 0x9c31 : 0xdc31) + 18 * i, 18 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
@@ -315,7 +315,7 @@
        {
            // Stored Job Report #1~15
            char szBuffer[256];
            for (int i = 0; i < 1; i++) {
            for (int i = 0; i < 2; i++) {
                CEqReadStep* pStep = new CEqReadStep((m_nIndex == 0 ? 0x9b23 : 0xdb23) + 18 * i, 18 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
@@ -422,11 +422,13 @@
        m_slot[0].setPosition(m_nID);
        m_slot[0].setNo(1);
        m_slot[0].setName("Slot 1(G2)");
        m_slot[0].setLinkSignalPath(0);
        m_slot[0].setType(MaterialsType::G2);
        m_slot[1].enable();
        m_slot[1].setPosition(m_nID);
        m_slot[1].setNo(2);
        m_slot[1].setName("Slot 2(G1)");
        m_slot[1].setLinkSignalPath(1);
        m_slot[1].setType(MaterialsType::G1);
    }
SourceCode/Bond/Servo/CEquipment.cpp
@@ -1718,6 +1718,10 @@
            );
        if (m_processState != PROCESS_STATE::Processing) {
            setProcessState(PROCESS_STATE::Processing);
        }
        // 缓存Attribute,用于调试时显示信息
        unsigned int weight = 201;
@@ -1782,6 +1786,10 @@
        );
        if (m_processState != PROCESS_STATE::Complete) {
            setProcessState(PROCESS_STATE::Complete);
        }
        // 缓存Attribute,用于调试时显示信息
        unsigned int weight = 201;
        pStep->addAttribute(new CAttribute("CassetteNo",
@@ -1817,7 +1825,7 @@
        CJobDataS* pJobDataS = pGlass->getJobDataS();
        ASSERT(pJobDataS);
        if (!compareJobData(pJobDataB, pJobDataS)) {
            LOGE("<CEquipemnt-%s>onPreFetchedOutJob,JobData数据不匹配(JobDataB(%d, %d),JobDataS(%d, %d)), 注意排查风险!", m_strName.c_str(),
            LOGE("<CEquipemnt-%s>onPreStoredJob,JobData数据不匹配(JobDataB(%d, %d),JobDataS(%d, %d)), 注意排查风险!", m_strName.c_str(),
                pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo(),
                pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo());
            return FALSE;
@@ -1878,7 +1886,6 @@
    int CEquipment::onSendAble()
    {
        LOGI("<CEquipment-%s>onSendAble.", m_strName.c_str());
        if (m_processState != PROCESS_STATE::Complete) {
            setProcessState(PROCESS_STATE::Complete);
        }
SourceCode/Bond/Servo/CMaster.cpp
@@ -1392,7 +1392,7 @@
    CRobotTask* CMaster::createTransferTask_bonder_to_bakecooling(CEquipment* pSrcEq, CEquipment* pTarEq)
    {
        std::vector<int> slots = {1, 2};
        std::vector<int> slots = {1, 3};
        CRobotTask* pTask = nullptr;
        CSlot* pSrcSlot, * pTarSlot;
@@ -1413,8 +1413,8 @@
    CRobotTask* CMaster::createTransferTask_bake_to_cooling(CEquipment* pSrcEq)
    {
        std::vector<int> slotsTar = { 3, 4 };
        std::vector<int> slotsSrc = { 1, 2 };
        std::vector<int> slotsTar = { 2, 4 };
        std::vector<int> slotsSrc = { 1, 3 };
        CRobotTask* pTask = nullptr;
        CSlot* pSrcSlot, * pTarSlot;
@@ -1435,7 +1435,7 @@
    CRobotTask* CMaster::createTransferTask_bakecooling_to_measurement(CEquipment* pSrcEq, CEquipment* pTarEq)
    {
        std::vector<int> slots = { 3, 4 };
        std::vector<int> slots = { 2, 4 };
        CRobotTask* pTask = nullptr;
        CSlot* pSrcSlot, * pTarSlot;
SourceCode/Bond/Servo/CMeasurement.cpp
@@ -269,7 +269,7 @@
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeReceivedJobReport((CStep*)pFrom, port, pszData, size);
                                decodeSentOutJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
@@ -331,6 +331,38 @@
                }
            }
        }
        // process start/end report
        {
            CEqReadStep* pStep = new CEqReadStep(0x19D3F, 13 * 2,
                [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                    if (code == ROK && pszData != nullptr && size > 0) {
                        decodeJobProcessStartReport((CStep*)pFrom, pszData, size);
                    }
                    return -1;
                });
            pStep->setName(STEP_EQ_JOB_PROCESS_START_REPORT);
            pStep->setProp("Port", (void*)1);
            pStep->setWriteSignalDev(0xf33);
            if (addStep(STEP_ID_JOB_PROCESS_START_REPORT, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqReadStep* pStep = new CEqReadStep(0x19D4C, 13 * 2,
                [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                    if (code == ROK && pszData != nullptr && size > 0) {
                        decodeJobProcessEndReport((CStep*)pFrom, pszData, size);
                    }
                    return -1;
                });
            pStep->setName(STEP_EQ_JOB_PROCESS_END_REPORT);
            pStep->setProp("Port", (void*)1);
            pStep->setWriteSignalDev(0xf34);
            if (addStep(STEP_ID_JOB_PROCESS_END_REPORT, pStep) != 0) {
                delete pStep;
            }
        }
    }
    // 必须要实现的虚函数,在此初始化Slot信息
SourceCode/Bond/Servo/CRobotTask.cpp
@@ -359,6 +359,9 @@
        case EQ_ID_LOADPORT2:
        case EQ_ID_LOADPORT3:
        case EQ_ID_LOADPORT4:
            tarPos = srcPos;
            tarSlot = srcSlot;
            break;
        case EQ_ID_ARM_TRAY1:
        case EQ_ID_ARM_TRAY2:
        case EQ_ID_ALIGNER:
SourceCode/Bond/Servo/CVacuumBake.cpp
@@ -269,7 +269,7 @@
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeReceivedJobReport((CStep*)pFrom, port, pszData, size);
                                decodeSentOutJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
@@ -331,6 +331,38 @@
                }
            }
        }
        // process start/end report
        {
            CEqReadStep* pStep = new CEqReadStep(0x15D3F, 13 * 2,
                [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                    if (code == ROK && pszData != nullptr && size > 0) {
                        decodeJobProcessStartReport((CStep*)pFrom, pszData, size);
                    }
                    return -1;
                });
            pStep->setName(STEP_EQ_JOB_PROCESS_START_REPORT);
            pStep->setProp("Port", (void*)1);
            pStep->setWriteSignalDev(0xc33);
            if (addStep(STEP_ID_JOB_PROCESS_START_REPORT, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqReadStep* pStep = new CEqReadStep(0x15D4C, 13 * 2,
                [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                    if (code == ROK && pszData != nullptr && size > 0) {
                        decodeJobProcessEndReport((CStep*)pFrom, pszData, size);
                    }
                    return -1;
                });
            pStep->setName(STEP_EQ_JOB_PROCESS_END_REPORT);
            pStep->setProp("Port", (void*)1);
            pStep->setWriteSignalDev(0xc34);
            if (addStep(STEP_ID_JOB_PROCESS_END_REPORT, pStep) != 0) {
                delete pStep;
            }
        }
    }
    // 必须要实现的虚函数,在此初始化Slot信息
SourceCode/Bond/Servo/Model.cpp
@@ -190,8 +190,16 @@
        }
        // 任务描述与 ID 用于日志
        SERVO::CGlass* pGlass = (SERVO::CGlass*)pTask->getContext();
        const std::string& strDesc = pTask->getDescription();
        const std::string& strClassID = pTask->getId();
        std::string strClassID;
        if (pGlass != nullptr) {
            strClassID = pGlass->getID();
            if (pGlass->getBuddy() != nullptr) {
                strClassID += "/";
                strClassID += pGlass->getBuddy()->getID();
            }
        }
        // 日志输出与状态处理
        switch (code) {
@@ -245,23 +253,26 @@
        // 状态映射
        static const char* STATUS_STR[] = {
            "Unknown", "Ready", "Running", "Picking", "Placing", "Restoring", "Error", "Abort", "Completed"
            "Ready", "Running", "Picking", "Picked", "Placing", "Restoring", "Error", "Abort", "Restored", "Completed"
        };
        auto state = pTask->getState();
        int index = static_cast<int>(state);
        if (index > 0 && index < static_cast<int>(std::size(STATUS_STR))) {
        if (index >= 0 && index < static_cast<int>(std::size(STATUS_STR))) {
            data.strStatus = STATUS_STR[index];
        }
        else {
            data.strStatus = STATUS_STR[0];
            data.strStatus = "Unknown";
        }
        // 写入数据库
        int nRecordId = 0;
        TransferManager::getInstance().addTransferRecord(data, nRecordId);
        if (code == ROBOT_EVENT_FINISH || code == ROBOT_EVENT_ERROR
            || code == ROBOT_EVENT_ABORT || code == ROBOT_EVENT_RESTORE) {
            int nRecordId = 0;
            TransferManager::getInstance().addTransferRecord(data, nRecordId);
            LOGI("<CModel>onRobotTaskEvent: 任务记录已保存,RecordID=%d", nRecordId);
        }
        notifyPtrAndInt(RX_CODE_EQ_ROBOT_TASK, pTask, nullptr, code);
        LOGI("<CModel>onRobotTaskEvent: 任务记录已保存,RecordID=%d", nRecordId);
    };
    m_master.setListener(masterListener);