From 7203ac92219156addaa0d4b6e6a9d81b5ffe8a13 Mon Sep 17 00:00:00 2001
From: Darker <mr.darker@163.com>
Date: 星期三, 26 二月 2025 09:56:59 +0800
Subject: [PATCH] 1. 添加报警对话框的按钮 2. 接受报警消息,并获取数据添加到数据库和显示在界面列表
---
SourceCode/Bond/Servo/AlarmDlg.h | 1
SourceCode/Bond/Servo/Servo.vcxproj.filters | 2
SourceCode/Bond/Servo/CEqAlarmStep.h | 27 ++++++
SourceCode/Bond/Servo/resource.h | 0
SourceCode/Bond/Servo/AlarmDlg.cpp | 71 ++++++++++++++---
SourceCode/Bond/Servo/CEqAlarmStep.cpp | 71 +++++++++++++++++
SourceCode/Bond/Servo/Servo.rc | 0
SourceCode/Bond/Servo/ServoDlg.cpp | 29 +++++++
SourceCode/Bond/Servo/Common.h | 8 ++
SourceCode/Bond/Servo/ServoDlg.h | 4 +
10 files changed, 197 insertions(+), 16 deletions(-)
diff --git a/SourceCode/Bond/Servo/AlarmDlg.cpp b/SourceCode/Bond/Servo/AlarmDlg.cpp
index 4da1912..121451a 100644
--- a/SourceCode/Bond/Servo/AlarmDlg.cpp
+++ b/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); // 瑙i櫎鏃堕棿
+
+ // 閲嶆柊璋冩暣鍒楀
+ 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);
diff --git a/SourceCode/Bond/Servo/AlarmDlg.h b/SourceCode/Bond/Servo/AlarmDlg.h
index 7b305cb..67aefe0 100644
--- a/SourceCode/Bond/Servo/AlarmDlg.h
+++ b/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;
diff --git a/SourceCode/Bond/Servo/CEqAlarmStep.cpp b/SourceCode/Bond/Servo/CEqAlarmStep.cpp
index 307f814..0b42394 100644
--- a/SourceCode/Bond/Servo/CEqAlarmStep.cpp
+++ b/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;
+ }
}
diff --git a/SourceCode/Bond/Servo/CEqAlarmStep.h b/SourceCode/Bond/Servo/CEqAlarmStep.h
index 45510bf..98cc3bc 100644
--- a/SourceCode/Bond/Servo/CEqAlarmStep.h
+++ b/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;
diff --git a/SourceCode/Bond/Servo/Common.h b/SourceCode/Bond/Servo/Common.h
index 22cd941..7aeb6aa 100644
--- a/SourceCode/Bond/Servo/Common.h
+++ b/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
diff --git a/SourceCode/Bond/Servo/Servo.rc b/SourceCode/Bond/Servo/Servo.rc
index d5864f9..228ffdd 100644
--- a/SourceCode/Bond/Servo/Servo.rc
+++ b/SourceCode/Bond/Servo/Servo.rc
Binary files differ
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj.filters b/SourceCode/Bond/Servo/Servo.vcxproj.filters
index 842dad9..06cd13e 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj.filters
+++ b/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" />
diff --git a/SourceCode/Bond/Servo/ServoDlg.cpp b/SourceCode/Bond/Servo/ServoDlg.cpp
index 1e29081..f6b355c 100644
--- a/SourceCode/Bond/Servo/ServoDlg.cpp
+++ b/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();
+}
diff --git a/SourceCode/Bond/Servo/ServoDlg.h b/SourceCode/Bond/Servo/ServoDlg.h
index 88ed43d..ab71ed2 100644
--- a/SourceCode/Bond/Servo/ServoDlg.h
+++ b/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();
};
diff --git a/SourceCode/Bond/Servo/resource.h b/SourceCode/Bond/Servo/resource.h
index faada95..2afa563 100644
--- a/SourceCode/Bond/Servo/resource.h
+++ b/SourceCode/Bond/Servo/resource.h
Binary files differ
--
Gitblit v1.9.3