mrDarker
2025-07-24 7096025175b6d100923dcd66c1face07d2e28555
1. 完善获取配方列表的功能
2. 添加获取配方超时警告
已修改6个文件
47 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CEFEM.cpp 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CRecipeList.cpp 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CRecipeList.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CRecipesManager.cpp 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CRecipesManager.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageRecipe.cpp 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEFEM.cpp
@@ -547,14 +547,16 @@
        {
            // master recipe list report
            CEqReadStep* pStep = new CEqReadStep(0x6955, 250 * 2,
            CEqReadStep* pStep = new CEqReadStep(0x6955, 255 * 2,
            [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                    /*CEqReadStep* pTmpStep = dynamic_cast<CEqReadStep*>((CEqReadStep*)pFrom);*/
                    CEqReadStep* pTmpStep = (CEqReadStep*)pFrom;
                    short ret = MRLRC_OK;
                if (code == ROK && pszData != nullptr && size > 0) {
                    // 此处解释配方数据
                    short ret = decodeRecipeListReport(pszData, size);
                    pStep->setReturnCode(ret);
                        ret = decodeRecipeListReport(pszData, size);
                }
                pStep->setReturnCode(MRLRC_OK);
                    pTmpStep->setReturnCode(ret);
                return -1;
            });
            pStep->setName(STEP_EQ_MASTER_RECIPE_LIST);
SourceCode/Bond/Servo/CRecipeList.cpp
@@ -26,7 +26,7 @@
        return m_nUnitNo;
    }
    int CRecipeList::addRecipePacket(int totalGroup, int currentGroup, const char* pszData, size_t size)
    int CRecipeList::addRecipePacket(int totalCount, int totalGroup, int currentGroup, const char* pszData, size_t size)
    {
        if (m_nToatlGroupCount == 0) m_nToatlGroupCount = totalGroup;
        if (m_nToatlGroupCount != totalGroup) {
@@ -47,7 +47,9 @@
        for (int i = 0; i < size; i += 4) {
            int index = CToolUnits::toInt16(&pszData[i]);
            short id = CToolUnits::toInt16(&pszData[i + 2]);
            if (index != 0 && id != 0) {
            addRecipe(index, id);
            }
        }
        if (m_nCurrentGroupCount == m_nToatlGroupCount) {
@@ -67,7 +69,7 @@
        }
        m_ids[index] = id;
        return 0;
        return (int)m_ids.size();
    }
    std::map<int, short>& CRecipeList::getIds()
SourceCode/Bond/Servo/CRecipeList.h
@@ -12,7 +12,7 @@
    public:
        int getUnitNo();
        int addRecipePacket(int totalGroup, int currentGroup, const char* pszData, size_t size);
        int addRecipePacket(int totalCount,int totalGroup, int currentGroup, const char* pszData, size_t size);
        int addRecipe(int index, short id);
        std::map<int, short>& getIds();
        void reset();
SourceCode/Bond/Servo/CRecipesManager.cpp
@@ -86,7 +86,18 @@
        if (m_onSyncingStateChanged != nullptr) {
            m_onSyncingStateChanged(m_nSyncStatus);
        }
    }
    void CRecipesManager::syncTimeout()
    {
        lock();
        m_nSyncStatus = SS_TIMEOUT;
        m_nTimeoutCount = 0;
        unlock();
        if (m_onSyncingStateChanged != nullptr) {
            m_onSyncingStateChanged(m_nSyncStatus);
        }
    }
    short CRecipesManager::decodeRecipeListReport(const char* pszData, size_t size)
@@ -150,7 +161,7 @@
        }
        else if (reportType == RT_REQUEST_FROM_EAS) {
            int nRet = pRecipeList->addRecipePacket(toatlGroupCount, currentGroupCount, pszIdsData, 250 * 2);
            int nRet = pRecipeList->addRecipePacket(totalMasterRecipeCount, toatlGroupCount, currentGroupCount, pszIdsData, 250 * 2);
            if (MRLRC_CURRENT_RECIPE_COMPLETE == nRet) {
                lock();
                for (auto item : m_mapRecipes) {
@@ -304,9 +315,10 @@
            if (m_nSyncStatus == SS_SYNCING) {
                m_nTimeoutCount++;
                if (m_nTimeoutCount > 10) {
                    m_nSyncStatus = SS_TIMEOUT;
                    unlock();
                    syncTimeout();
                    TRACE("CRecipesManager::TimeoutCheckWorkingProc 超时退出\n");
                    lock();
                }
            }
SourceCode/Bond/Servo/CRecipesManager.h
@@ -24,6 +24,7 @@
        unsigned TimeoutCheckWorkingProc();
        int syncing();
        void syncFailed();
        void syncTimeout();
        short decodeRecipeListReport(const char* pszData, size_t size);
        short decodeRecipeParameterReport(const char* pszData, size_t size);
        CRecipeList* getRecipeListFromTemp(int unitNo);
SourceCode/Bond/Servo/PageRecipe.cpp
@@ -189,12 +189,12 @@
    pListCtrl->InsertColumn(0, _T(""), LVCFMT_RIGHT, 0); // 隐藏列
    pListCtrl->InsertColumn(1, _T("No."), LVCFMT_LEFT, width[1]);
    pListCtrl->InsertColumn(2, _T("PPID/Recipe ID"), LVCFMT_LEFT, width[2]);
    pListCtrl->InsertColumn(3, _T("EFEM"), LVCFMT_LEFT, width[3]);
    pListCtrl->InsertColumn(3, _T("真空烘烤"), LVCFMT_LEFT, width[6]);
    pListCtrl->InsertColumn(4, _T("Bonder1"), LVCFMT_LEFT, width[4]);
    pListCtrl->InsertColumn(5, _T("Bonder2"), LVCFMT_LEFT, width[5]);
    pListCtrl->InsertColumn(6, _T("真空烘烤"), LVCFMT_LEFT, width[6]);
    pListCtrl->InsertColumn(7, _T("后烘冷却"), LVCFMT_LEFT, width[7]);
    pListCtrl->InsertColumn(8, _T("精度检查"), LVCFMT_LEFT, width[8]);
    pListCtrl->InsertColumn(6, _T("后烘冷却"), LVCFMT_LEFT, width[7]);
    pListCtrl->InsertColumn(7, _T("精度检查"), LVCFMT_LEFT, width[8]);
    pListCtrl->InsertColumn(8, _T("EFEM"), LVCFMT_LEFT, width[3]);
    pListCtrl->InsertColumn(9, _T("创建时间"), LVCFMT_LEFT, width[9]);
    pListCtrl->InsertColumn(10, _T("描述"), LVCFMT_LEFT, width[10]);
    pListCtrl->SetColumnWidth(10, LVSCW_AUTOSIZE_USEHEADER);
@@ -441,9 +441,9 @@
        // enable port
        CMsgDlg msgDlg("请等待", "正在获取配方...");
        pEq->masterRecipeListRequest(0, [&](int status) -> void {
            if (status == SS_FAILED) {
            if (status == SS_FAILED || status == SS_TIMEOUT) {
                CString strMsg;
                strMsg.Format(_T("获取配方失败!"));
                strMsg.Format(status == SS_FAILED ? _T("获取配方失败!") : _T("获取配方超时!"));
                msgDlg.DelayClose(3000);
                msgDlg.SetIcon(MSG_BOX_ERROR);
                msgDlg.SetTitle(_T("操作失败"));