From fc8a07f476648f82abf9934483b04cfee0161e4e Mon Sep 17 00:00:00 2001
From: LAPTOP-T815PCOQ\25526 <mr.liuyang@126.com>
Date: 星期四, 28 十一月 2024 10:44:27 +0800
Subject: [PATCH] 1.扩展静态文本实现回调函数点击事件 2.模拟监听PLC
---
SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp | 74 ++++++++++++++++++++++++++++++++++++-
1 files changed, 72 insertions(+), 2 deletions(-)
diff --git a/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp b/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp
index 2897dfb..39e90a4 100644
--- a/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp
+++ b/SourceCode/Bond/BondEq/View/IOMonitoringDlg.cpp
@@ -6,6 +6,8 @@
#include "afxdialogex.h"
#include "IOMonitoringDlg.h"
+#define TIMER_INIT 1
+#define TIMER_READ_PLC_DATA 2
// CIOMonitoringDlg 瀵硅瘽妗�
@@ -177,7 +179,21 @@
x += colWidthLarge + groupSpacing;
// 鍒涘缓绗� 2 缁� (3, 4, 5)
- CreateStaticControl(x, y, colWidthSmall, rowHeight, _T("OFF"), true, AlignCenter);
+ CreateStaticControl(x, y, colWidthSmall, rowHeight, _T("OFF"), true, AlignCenter, [this, i]() {
+ // 鑷畾涔夌偣鍑讳簨浠剁殑閫昏緫
+ auto* pControl = static_cast<CBLLabel*>(m_staticControls[i * m_nCols + 3]);
+ CString currentText;
+ pControl->GetWindowText(currentText);
+
+ if (currentText == _T("OFF")) {
+ pControl->SetBkColor(RGB(0, 255, 0)); // 缁胯壊鑳屾櫙
+ pControl->SetText(_T("ON")); // 鏇存柊鏂囨湰涓� ON
+ }
+ else {
+ pControl->SetBkColor(RGB(255, 0, 0)); // 绾㈣壊鑳屾櫙
+ pControl->SetText(_T("OFF")); // 鏇存柊鏂囨湰涓� OFF
+ }
+ });
x += colWidthSmall;
CreateStaticControl(x, y, colWidthSmall, rowHeight, _T("Y1010"), false, AlignCenter);
x += colWidthSmall;
@@ -185,7 +201,7 @@
}
}
-void CIOMonitoringDlg::CreateStaticControl(int x, int y, int width, int height, const CString& text, bool hasBorder, TextAlign alignment)
+void CIOMonitoringDlg::CreateStaticControl(int x, int y, int width, int height, const CString& text, bool hasBorder, TextAlign alignment, std::function<void()> clickCallback)
{
// 鍒涘缓鍔ㄦ�佹帶浠�
CBLLabel* pStatic = new CBLLabel();
@@ -205,6 +221,11 @@
pStatic->SetFontSize(nSize);
pStatic->SetDynamicFont(TRUE);
+ // 璁剧疆鍥炶皟
+ if (clickCallback) {
+ pStatic->SetClickCallback(clickCallback);
+ }
+
// 瀛樺偍鎺т欢鎸囬拡
m_staticControls.push_back(pStatic);
}
@@ -214,11 +235,18 @@
int startIndex = (m_nCurrentPage - 1) * m_nRowsPerPage;
int endIndex = min(startIndex + m_nRowsPerPage, static_cast<int>(m_displayData.size()));
+ m_inputPLCAddresses.clear();
+ m_outputPLCAddresses.clear();
+
for (int i = 0; i < m_nRowsPerPage; ++i) {
int row = i;
if (startIndex + i < endIndex) {
const auto& data = m_displayData[startIndex + i];
+
+ // 娣诲姞 PLC 鍦板潃鍒板鍣ㄤ腑
+ m_inputPLCAddresses.push_back(CString(data.inputAddress.c_str())); // 1 鍒�
+ m_outputPLCAddresses.push_back(CString(data.outputAddress.c_str())); // 4 鍒�
// 鏄剧ず鎺т欢骞惰缃唴瀹�
m_staticControls[row * m_nCols + 0]->SetWindowText(_T("OFF"));
@@ -263,10 +291,32 @@
m_staticControls.clear();
}
+void CIOMonitoringDlg::UpdatePLCStates()
+{
+ // 闅忔満鍊兼ā鎷�
+ for (size_t i = 0; i < m_inputPLCAddresses.size(); ++i) {
+ // 妯℃嫙鑾峰彇杈撳叆鐘舵��
+ bool inputState = (rand() % 2 == 0); // 鍋跺皵涓� true/false
+ auto* inputControl = static_cast<CBLLabel*>(m_staticControls[i * m_nCols + 0]);
+ inputControl->SetBkColor(inputState ? RGB(0, 255, 0) : RGB(255, 0, 0));
+ inputControl->SetText(inputState ? _T("ON") : _T("OFF"));
+ }
+
+ for (size_t i = 0; i < m_outputPLCAddresses.size(); ++i) {
+ // 妯℃嫙鑾峰彇杈撳嚭鐘舵��
+ bool outputState = (rand() % 2 == 0); // 鍋跺皵涓� true/false
+ auto* outputControl = static_cast<CBLLabel*>(m_staticControls[i * m_nCols + 3]);
+ outputControl->SetBkColor(outputState ? RGB(0, 255, 0) : RGB(255, 0, 0));
+ outputControl->SetText(outputState ? _T("ON") : _T("OFF"));
+ }
+}
+
BEGIN_MESSAGE_MAP(CIOMonitoringDlg, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON_PREV_PAGE, &CIOMonitoringDlg::OnBnClickedButtonPrevPage)
ON_BN_CLICKED(IDC_BUTTON_NEXT_PAGE, &CIOMonitoringDlg::OnBnClickedButtonNextPage)
ON_WM_SIZE()
+ ON_WM_TIMER()
+ ON_WM_CLOSE()
END_MESSAGE_MAP()
@@ -331,6 +381,8 @@
CreateDynamicControls();
DisplayCurrentPage();
+ SetTimer(TIMER_READ_PLC_DATA, 500, nullptr);
+
return TRUE; // return TRUE unless you set the focus to a control
// 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
}
@@ -374,3 +426,21 @@
AfxMessageBox(_T("宸茬粡鏄渶鍚庝竴椤碉紒"));
}
}
+
+void CIOMonitoringDlg::OnTimer(UINT_PTR nIDEvent)
+{
+ // TODO: 鍦ㄦ娣诲姞娑堟伅澶勭悊绋嬪簭浠g爜鍜�/鎴栬皟鐢ㄩ粯璁ゅ��
+ if (TIMER_READ_PLC_DATA == nIDEvent) {
+ //ASSERT(m_pPLC);
+ UpdatePLCStates();
+ Sleep(100);
+ }
+ CDialogEx::OnTimer(nIDEvent);
+}
+
+void CIOMonitoringDlg::OnClose()
+{
+ // TODO: 鍦ㄦ娣诲姞娑堟伅澶勭悊绋嬪簭浠g爜鍜�/鎴栬皟鐢ㄩ粯璁ゅ��
+ KillTimer(TIMER_READ_PLC_DATA);
+ CDialogEx::OnClose();
+}
--
Gitblit v1.9.3