| 2026-01-23 | chenluhua1980 | ![]() |
| 2026-01-23 | chenluhua1980 | ![]() |
| SourceCode/Bond/Servo/CMaster.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.rc | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/resource.h | ●●●●● 补丁 | 查看 | 原始文档 | 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