1. 添加报警对话框的按钮
2. 接受报警消息,并获取数据添加到数据库和显示在界面列表
已修改10个文件
213 ■■■■■ 文件已修改
SourceCode/Bond/Servo/AlarmDlg.cpp 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/AlarmDlg.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqAlarmStep.cpp 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqAlarmStep.h 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Common.h 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.rc 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj.filters 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.cpp 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/resource.h 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/AlarmDlg.cpp
@@ -6,6 +6,7 @@
#include "afxdialogex.h"
#include "AlarmDlg.h"
#include "AlarmManager.h"
#include "Common.h"
#define PAGE_SIZE                        10
#define PAGE_BACKGROUND_COLOR            RGB(252, 252, 255)
@@ -48,18 +49,41 @@
            // onNext
            pAny->addRef();
            int code = pAny->getCode();
            //if (RX_CODE_ALARM_ON == code) {
            //    CAlarm* pAlarm;
            //    if (pAny->getObject("obj", (IRxObject*&)pAlarm)) {
            //        AddAlarm(nullptr, pAlarm);
            //    }
            //}
            //else if (RX_CODE_ALARM_OFF == code) {
            //    CAlarm* pAlarm;
            //    if (pAny->getObject("obj", (IRxObject*&)pAlarm)) {
            //        UpdateAlarm(nullptr, pAlarm);
            //    }
            //}
            if (RX_CODE_STEP_EVENT_READDATA == code) {
                LOGI("<CAlarmDlg> Accept RX_CODE_STEP_EVENT_READDATA successfully!");
                // 通知设备状态
                SERVO::CEqAlarmStep* pStep = nullptr;
                if (pAny->getPtrValue("ptr", (void*&)pStep)) {
                    if (pStep != nullptr) {
                        // 获取 AlarmManager 单例
                        AlarmManager& alarmManager = AlarmManager::getInstance();
                        // 从 pStep 获取需要的参数,假设这些值是从 pStep 中获取的
                        std::string id = std::to_string(pStep->getAlarmId());
                        std::string deviceName = std::to_string(pStep->getUnitId());
                        std::string description = pStep->getText();
                        std::string startTime = "2025-02-25 10:00";
                        std::string endTime = "2025-02-25 12:00";
                        // 插入列表控件
                        CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM);
                        if (pListCtrl != nullptr) {
                            InsertAlarmData(pListCtrl, id.c_str(), deviceName.c_str(), description.c_str(), startTime.c_str(), endTime.c_str());
                        }
                        // 调用 addAlarm 添加新的 Alarm
                        bool result = alarmManager.addAlarm(id, deviceName, description, startTime, endTime);
                        if (result) {
                            LOGI("<CAlarmDlg> Alarm added successfully!");
                        }
                        else {
                            LOGI("<CAlarmDlg> Failed to add alarm.");
                        }
                    }
                }
            }
        pAny->release();
        }, [&]() -> void {
@@ -174,6 +198,29 @@
    }
}
void CAlarmDlg::InsertAlarmData(CListCtrl* pListCtrl, const CString& alarmId, const CString& deviceName, const CString& description, const CString& startTime, const CString& endTime)
{
    int nRowCount = pListCtrl->GetItemCount();
    if (nRowCount >= PAGE_SIZE) {
        pListCtrl->DeleteItem(nRowCount - 1);
    }
    int nNewItem = pListCtrl->InsertItem(0, _T(""));
    pListCtrl->SetItemText(nNewItem, 1, alarmId);       // 警告ID
    pListCtrl->SetItemText(nNewItem, 2, deviceName);    // 设备名称
    pListCtrl->SetItemText(nNewItem, 3, description);   // 描述
    pListCtrl->SetItemText(nNewItem, 4, startTime);     // 发生时间
    pListCtrl->SetItemText(nNewItem, 5, endTime);       // 解除时间
    // 重新调整列宽
    pListCtrl->SetColumnWidth(0, LVSCW_AUTOSIZE);
    pListCtrl->SetColumnWidth(1, LVSCW_AUTOSIZE);
    pListCtrl->SetColumnWidth(2, LVSCW_AUTOSIZE);
    pListCtrl->SetColumnWidth(3, LVSCW_AUTOSIZE);
    pListCtrl->SetColumnWidth(4, LVSCW_AUTOSIZE);
    pListCtrl->SetColumnWidth(5, LVSCW_AUTOSIZE);
}
void CAlarmDlg::DoDataExchange(CDataExchange* pDX)
{
    DDX_Control(pDX, IDC_DATETIMEPICKER_START, m_dateTimeStart);
SourceCode/Bond/Servo/AlarmDlg.h
@@ -22,6 +22,7 @@
    void UpdatePageData();
    void UpdatePageControls();
    void FillDataToListCtrl(CListCtrl* pListCtrl, const std::vector<std::vector<std::string>>& vecData);
    void InsertAlarmData(CListCtrl* pListCtrl, const CString& alarmId, const CString& deviceName, const CString& description, const CString& startTime, const CString& endTime);
private:
    COLORREF m_crBkgnd;
SourceCode/Bond/Servo/CEqAlarmStep.cpp
@@ -59,10 +59,75 @@
        return 0;
    }
    void CEqAlarmStep::setAlarmDev(int nDev)
    {
        m_nAlarmDev = nDev;
    // 获取和设置 AlarmDev
    int CEqAlarmStep::getAlarmDev() const {
        return m_nAlarmDev;
    }
    void CEqAlarmStep::setAlarmDev(int nAlarmDev) {
        m_nAlarmDev = nAlarmDev;
    }
    // 获取和设置 AlarmState
    int CEqAlarmStep::getAlarmState() const {
        return m_nAlarmState;
    }
    void CEqAlarmStep::setAlarmState(int nAlarmState) {
        m_nAlarmState = nAlarmState;
    }
    // 获取和设置 UnitId
    int CEqAlarmStep::getUnitId() const {
        return m_nUnitId;
    }
    void CEqAlarmStep::setUnitId(int nUnitId) {
        m_nUnitId = nUnitId;
    }
    // 获取和设置 AlarmLevel
    int CEqAlarmStep::getAlarmLevel() const {
        return m_nAlarmLevel;
    }
    void CEqAlarmStep::setAlarmLevel(int nAlarmLevel) {
        m_nAlarmLevel = nAlarmLevel;
    }
    // 获取和设置 AlarmCode
    int CEqAlarmStep::getAlarmCode() const {
        return m_nAlarmCode;
    }
    void CEqAlarmStep::setAlarmCode(int nAlarmCode) {
        m_nAlarmCode = nAlarmCode;
    }
    // 获取和设置 AlarmId
    int CEqAlarmStep::getAlarmId() const {
        return m_nAlarmId;
    }
    void CEqAlarmStep::setAlarmId(int nAlarmId) {
        m_nAlarmId = nAlarmId;
    }
    // 获取和设置 Text
    std::string CEqAlarmStep::getText() const {
        return m_strText;
    }
    void CEqAlarmStep::setText(const std::string& strText) {
        m_strText = strText;
    }
    // 获取和设置 Description
    std::string CEqAlarmStep::getDescription() const {
        return m_strDescription;
    }
    void CEqAlarmStep::setDescription(const std::string& strDescription) {
        m_strDescription = strDescription;
    }
}
SourceCode/Bond/Servo/CEqAlarmStep.h
@@ -13,7 +13,32 @@
        virtual int onReadData();
        virtual int onComplete();
        virtual int onTimeout();
        void setAlarmDev(int nDev);
        // Getter 和 Setter 声明
        int getAlarmDev() const;
        void setAlarmDev(int nAlarmDev);
        int getAlarmState() const;
        void setAlarmState(int nAlarmState);
        int getUnitId() const;
        void setUnitId(int nUnitId);
        int getAlarmLevel() const;
        void setAlarmLevel(int nAlarmLevel);
        int getAlarmCode() const;
        void setAlarmCode(int nAlarmCode);
        int getAlarmId() const;
        void setAlarmId(int nAlarmId);
        std::string getText() const;
        void setText(const std::string& strText);
        std::string getDescription() const;
        void setDescription(const std::string& strDescription);
    private:
        int m_nAlarmDev;
SourceCode/Bond/Servo/Common.h
@@ -27,6 +27,14 @@
#define BTN_LOG_BKGND_HOVER                RGB(153, 217, 234)
#define BTN_LOG_BKGND_PRESS                RGB(133, 203, 225)
/* ALARM BTN */
#define BTN_ALARM_FRAME_NORMAL            RGB(88, 88, 88)
#define BTN_ALARM_FRAME_HOVER            RGB(88, 88, 88)
#define BTN_ALARM_FRAME_PRESS            RGB(88, 88, 88)
#define BTN_ALARM_BKGND_NORMAL            RGB(232, 232, 232)
#define BTN_ALARM_BKGND_HOVER            RGB(153, 217, 234)
#define BTN_ALARM_BKGND_PRESS            RGB(133, 203, 225)
/* Equipment ID */
#define EQ_ID_EFEM            1
#define EQ_ID_Bonder1        2
SourceCode/Bond/Servo/Servo.rc
Binary files differ
SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -40,6 +40,7 @@
    <ClCompile Include="CEqModeStep.cpp" />
    <ClCompile Include="CEqStatusStep.cpp" />
    <ClCompile Include="CEqAlarmStep.cpp" />
    <ClCompile Include="AlarmDlg.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="AlarmManager.h" />
@@ -78,6 +79,7 @@
    <ClInclude Include="CEqModeStep.h" />
    <ClInclude Include="CEqStatusStep.h" />
    <ClInclude Include="CEqAlarmStep.h" />
    <ClInclude Include="AlarmDlg.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="Servo.rc" />
SourceCode/Bond/Servo/ServoDlg.cpp
@@ -9,6 +9,7 @@
#include "Common.h"
#include "Log.h"
#include "SecsTestDlg.h"
#include "AlarmDlg.h"
#include <chrono>
#include <thread>
#include <cmath>
@@ -84,6 +85,7 @@
    m_crBkgnd = APPDLG_BACKGROUND_COLOR;
    m_hbrBkgnd = nullptr;
    m_bShowLogWnd = FALSE;
    m_bShowAlarmWnd = FALSE;
    m_bIsRobotMoving = FALSE;
    m_pLogDlg = nullptr;
    m_pTerminalDisplayDlg = nullptr;
@@ -94,6 +96,7 @@
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_BUTTON_LOG, m_btnLog);
    DDX_Control(pDX, IDC_BUTTON_ALARM, m_btnAlarm);
}
BEGIN_MESSAGE_MAP(CServoDlg, CDialogEx)
@@ -122,6 +125,7 @@
    ON_WM_INITMENUPOPUP()
    ON_WM_TIMER()
    ON_WM_ERASEBKGND()
    ON_BN_CLICKED(IDC_BUTTON_ALARM, &CServoDlg::OnBnClickedButtonAlarm)
END_MESSAGE_MAP()
@@ -307,6 +311,7 @@
    InitRxWindows();
    OnBnClickedButtonLog();
    UpdateLogBtn();
    UpdateAlarmBtn();
    Resize();
@@ -567,6 +572,17 @@
    m_btnLog.Invalidate();
}
void CServoDlg::UpdateAlarmBtn()
{
    m_btnAlarm.SetFrameColor(BS_NORMAL, BTN_ALARM_FRAME_NORMAL);
    m_btnAlarm.SetFrameColor(BS_HOVER, BTN_ALARM_FRAME_HOVER);
    m_btnAlarm.SetFrameColor(BS_PRESS, BTN_ALARM_FRAME_PRESS);
    m_btnAlarm.SetBkgndColor(BS_NORMAL, m_bShowAlarmWnd ? BTN_ALARM_BKGND_PRESS : BTN_ALARM_BKGND_NORMAL);
    m_btnAlarm.SetBkgndColor(BS_HOVER, BTN_ALARM_BKGND_HOVER);
    m_btnAlarm.SetBkgndColor(BS_PRESS, BTN_ALARM_BKGND_PRESS);
    m_btnAlarm.Invalidate();
}
void CServoDlg::UpdateRobotPosition(float percentage)
{
    // 限制百分比范围在 [0, 1] 之间
@@ -725,6 +741,11 @@
    pItem = GetDlgItem(IDC_BUTTON_LOG);
    pItem->GetClientRect(&rcItem);
    pItem->MoveWindow(x, rcClient.bottom - 8 - rcItem.Height(), rcItem.Width(), rcItem.Height());
    x = 20 + rcItem.Width();
    pItem = GetDlgItem(IDC_BUTTON_ALARM);
    pItem->GetClientRect(&rcItem);
    pItem->MoveWindow(x, rcClient.bottom - 8 - rcItem.Height(), rcItem.Width(), rcItem.Height());
}
void CServoDlg::OnClose()
@@ -799,3 +820,11 @@
    
    return CDialogEx::OnEraseBkgnd(pDC);
}
void CServoDlg::OnBnClickedButtonAlarm()
{
    // TODO: 在此添加控件通知处理程序代码
    CAlarmDlg dlg;
    dlg.DoModal();
}
SourceCode/Bond/Servo/ServoDlg.h
@@ -28,6 +28,7 @@
    void InitRxWindows();
    void Resize();
    void UpdateLogBtn();
    void UpdateAlarmBtn();
    void UpdateRobotPosition(float percentage);
    void RotateRobot(float angleInDegrees);
    void UpdateDeviceStatus(int id, DeviceStatus status);
@@ -36,6 +37,7 @@
private:
    IObserver* m_pObserver;
    BOOL m_bShowLogWnd;
    BOOL m_bShowAlarmWnd;
    CLogDlg* m_pLogDlg;
    CTerminalDisplayDlg* m_pTerminalDisplayDlg;
@@ -59,6 +61,7 @@
    COLORREF m_crBkgnd;
    HBRUSH m_hbrBkgnd;
    CBlButton m_btnLog;
    CBlButton m_btnAlarm;
    // 生成的消息映射函数
@@ -90,4 +93,5 @@
    afx_msg void OnMenuHelpAbout();
    afx_msg void OnTimer(UINT_PTR nIDEvent);
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnBnClickedButtonAlarm();
};
SourceCode/Bond/Servo/resource.h
Binary files differ