已修改6个文件
90 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CMaster.cpp 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.rc 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.cpp 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/resource.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp
@@ -62,6 +62,7 @@
        m_ullStartTime = 0;
        m_ullRunTime = 0;
        m_state = MASTERSTATE::READY;
        m_curveMode = CurveMode::Production;
        m_pActiveRobotTask = nullptr;
        m_nLastError = ER_CODE_NOERROR;
        m_isCompareMapsBeforeProceeding = FALSE;
@@ -278,6 +279,36 @@
        LOGI("[BOOT][MASTER] init finished, total cost=%llu ms",
            (unsigned long long)(GetTickCount64() - boot_master_begin));
        return 0;
    }
    void CMaster::setCurveMode(CurveMode mode)
    {
        if (m_curveMode == mode) {
            return;
        }
        m_curveMode = mode;
        if (m_pCollector != nullptr) {
            const uint32_t mids[] = {
                MID_Bonder1, MID_Bonder2,
                MID_VacuumBakeA, MID_VacuumBakeB,
                MID_BakeCoolingA, MID_BakeCoolingB
            };
            for (uint32_t mid : mids) {
                if (mode == CurveMode::EmptyChamber) {
                    m_pCollector->buffersStart(mid); // 空腔模式:允许无批次直接采样
                }
                else {
                    m_pCollector->buffersStop(mid);
                    m_pCollector->buffersClear(mid);
                }
            }
        }
        LOGI("<Master>CurveMode=%s", mode == CurveMode::EmptyChamber ? "EmptyChamber" : "Production");
    }
    CurveMode CMaster::getCurveMode() const
    {
        return m_curveMode;
    }
    int CMaster::term()
@@ -1699,7 +1730,8 @@
                    m_state == MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER ||
                    m_state == MASTERSTATE::RUNNING_BATCH ||
                    m_state == MASTERSTATE::STARTING);
            if (!allowSvLog) {
            const bool allowCurve = allowSvLog || (m_curveMode == CurveMode::EmptyChamber);
            if (!allowCurve) {
                return;
            }
            CSVData* pSVData = (CSVData*)pData;
@@ -3622,6 +3654,17 @@
                m_pCollector->buffersSetChannelName(MID_BakeCoolingA, i + 1, coolingTypes[i].c_str());
                m_pCollector->buffersSetChannelName(MID_BakeCoolingB, i + 1, coolingTypes[i].c_str());
            }
            if (m_curveMode == CurveMode::EmptyChamber) {
                const uint32_t mids[] = {
                    MID_Bonder1, MID_Bonder2,
                    MID_VacuumBakeA, MID_VacuumBakeB,
                    MID_BakeCoolingA, MID_BakeCoolingB
                };
                for (uint32_t mid : mids) {
                    m_pCollector->buffersStart(mid);
                }
            }
        }
    }
SourceCode/Bond/Servo/CMaster.h
@@ -54,6 +54,11 @@
        ATHERERROR
    };
    enum class CurveMode {
        Production = 0,
        EmptyChamber
    };
    typedef std::function<void(void* pMaster, MASTERSTATE state)> ONMASTERSTATECHANGED;
    typedef std::function<void(void* pMaster, CEquipment* pEiuipment, BOOL bAlive)> ONEQALIVE;
    typedef std::function<void(CStep* pStep, int code, void* pData)> ONEQSTEPEVENT;
@@ -113,6 +118,8 @@
        void clearError();
        ULONGLONG getRunTime();
        MASTERSTATE getState();
        void setCurveMode(CurveMode mode);
        CurveMode getCurveMode() const;
        unsigned DispatchProc();
        unsigned ReadBitsProc();
        void onTimer(UINT nTimerid);
@@ -254,6 +261,7 @@
        ULONGLONG m_ullStartTime;
        ULONGLONG m_ullRunTime;
        MASTERSTATE m_state;
        CurveMode m_curveMode;
        // 当前任务和已完成任务列表
        CRobotTask* m_pActiveRobotTask;
SourceCode/Bond/Servo/Servo.rc
@@ -1641,6 +1641,9 @@
    POPUP "工具(&O)"
    BEGIN
        MENUITEM "曲线显示端列表(&C)",                 ID_MENU_TOOLS_CLIENT_LIST
        MENUITEM SEPARATOR
        MENUITEM "空腔调机曲线模式(&E)", ID_MENU_TOOLS_CURVE_EMPTY
        MENUITEM "生产曲线模式(&P)", ID_MENU_TOOLS_CURVE_PRODUCTION
    END
    POPUP "窗口(&W)"
    BEGIN
SourceCode/Bond/Servo/ServoDlg.cpp
@@ -150,6 +150,10 @@
    ON_UPDATE_COMMAND_UI(ID_MENU_TEST_MESSAGE_CLEAR, &CServoDlg::OnUpdateMenuTestMessageClear)
    ON_COMMAND(ID_MENU_TOOLS_CLIENT_LIST, &CServoDlg::OnMenuToolsClientList)
    ON_UPDATE_COMMAND_UI(ID_MENU_TOOLS_CLIENT_LIST, &CServoDlg::OnUpdateMenuToolsClientList)
    ON_COMMAND(ID_MENU_TOOLS_CURVE_EMPTY, &CServoDlg::OnMenuToolsCurveEmptyMode)
    ON_UPDATE_COMMAND_UI(ID_MENU_TOOLS_CURVE_EMPTY, &CServoDlg::OnUpdateMenuToolsCurveEmptyMode)
    ON_COMMAND(ID_MENU_TOOLS_CURVE_PRODUCTION, &CServoDlg::OnMenuToolsCurveProductionMode)
    ON_UPDATE_COMMAND_UI(ID_MENU_TOOLS_CURVE_PRODUCTION, &CServoDlg::OnUpdateMenuToolsCurveProductionMode)
    ON_COMMAND(ID_MENU_WND_TEST_PANEL, &CServoDlg::OnMenuWndTestPanel)
    ON_UPDATE_COMMAND_UI(ID_MENU_WND_TEST_PANEL, &CServoDlg::OnUpdateMenuWndTestPanel)
    ON_COMMAND(ID_MENU_WND_PRO_PANEL, &CServoDlg::OnMenuWndProPanel)
@@ -892,6 +896,28 @@
    pCmdUI->Enable(TRUE);
}
void CServoDlg::OnMenuToolsCurveEmptyMode()
{
    theApp.m_model.getMaster().setCurveMode(SERVO::CurveMode::EmptyChamber);
}
void CServoDlg::OnUpdateMenuToolsCurveEmptyMode(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(TRUE);
    pCmdUI->SetCheck(theApp.m_model.getMaster().getCurveMode() == SERVO::CurveMode::EmptyChamber);
}
void CServoDlg::OnMenuToolsCurveProductionMode()
{
    theApp.m_model.getMaster().setCurveMode(SERVO::CurveMode::Production);
}
void CServoDlg::OnUpdateMenuToolsCurveProductionMode(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(TRUE);
    pCmdUI->SetCheck(theApp.m_model.getMaster().getCurveMode() == SERVO::CurveMode::Production);
}
void CServoDlg::OnMenuWndTestPanel()
{
    SetLeftPanelType(1);
SourceCode/Bond/Servo/ServoDlg.h
@@ -124,6 +124,10 @@
    afx_msg void OnUpdateMenuTestMessageClear(CCmdUI* pCmdUI);
    afx_msg void OnMenuToolsClientList();
    afx_msg void OnUpdateMenuToolsClientList(CCmdUI* pCmdUI);
    afx_msg void OnMenuToolsCurveEmptyMode();
    afx_msg void OnUpdateMenuToolsCurveEmptyMode(CCmdUI* pCmdUI);
    afx_msg void OnMenuToolsCurveProductionMode();
    afx_msg void OnUpdateMenuToolsCurveProductionMode(CCmdUI* pCmdUI);
    afx_msg void OnMenuWndTestPanel();
    afx_msg void OnUpdateMenuWndTestPanel(CCmdUI* pCmdUI);
    afx_msg void OnMenuWndProPanel();
SourceCode/Bond/Servo/resource.h
@@ -384,13 +384,15 @@
#define ID_MENU_WND_PRO_PANEL           32803
#define ID_MENU_TEST_ALARM_ON           32804
#define ID_MENU_TEST_ALARM_OFF          32805
#define ID_MENU_TOOLS_CURVE_EMPTY       32806
#define ID_MENU_TOOLS_CURVE_PRODUCTION  32807
// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        192
#define _APS_NEXT_COMMAND_VALUE         32806
#define _APS_NEXT_COMMAND_VALUE         32808
#define _APS_NEXT_CONTROL_VALUE         1274
#define _APS_NEXT_SYMED_VALUE           101
#endif