From bfe14e41fa5b07771d78af4511ba18d706bc23cc Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 28 七月 2025 17:07:52 +0800
Subject: [PATCH] 1.Spooling Config功能EAP模拟测试;

---
 SourceCode/Bond/BondEq/AlarmPopupDlg.cpp |  124 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 119 insertions(+), 5 deletions(-)

diff --git a/SourceCode/Bond/BondEq/AlarmPopupDlg.cpp b/SourceCode/Bond/BondEq/AlarmPopupDlg.cpp
index 6df9740..f37c3ca 100644
--- a/SourceCode/Bond/BondEq/AlarmPopupDlg.cpp
+++ b/SourceCode/Bond/BondEq/AlarmPopupDlg.cpp
@@ -16,14 +16,24 @@
 CAlarmPopupDlg::CAlarmPopupDlg(CWnd* pParent /*=NULL*/)
 	: CDialogEx(IDD_DIALOG_POPUP_ALARM, pParent)
 {
+	m_pPLC = nullptr;
+
 	m_crBkgnd = RGB(225, 225, 225);
 	m_hbrBkgnd = nullptr;
 	m_pActiveAlarm = nullptr;
+	m_pObserver = nullptr;
 }
 
 CAlarmPopupDlg::~CAlarmPopupDlg()
 {
 }
+
+void CAlarmPopupDlg::SetPLC(CPLC* pPLC)
+{
+	ASSERT(pPLC);
+	m_pPLC = pPLC;
+}
+
 
 void CAlarmPopupDlg::DoDataExchange(CDataExchange* pDX)
 {
@@ -36,11 +46,42 @@
 	ON_WM_DESTROY()
 	ON_WM_SIZE()
 	ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CAlarmPopupDlg::OnBnClickedButtonClose)
+	ON_BN_CLICKED(IDC_BUTTON_SOUND_OFF, &CAlarmPopupDlg::OnBnClickedButtonSoundOff)
+	ON_BN_CLICKED(IDC_BUTTON_ALARM_OFF, &CAlarmPopupDlg::OnBnClickedButtonAlarmOff)
 END_MESSAGE_MAP()
 
 
 // CAlarmPopupDlg 消息处理程序
 
+
+void CAlarmPopupDlg::InitRxWindows()
+{
+	/* code */
+	// 订阅数据
+	IRxWindows* pRxWindows = RX_GetRxWindows();
+	pRxWindows->enableLog(5);
+	if (m_pObserver == NULL) {
+		m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void {
+			// onNext
+			pAny->addRef();
+			int code = pAny->getCode();
+			if (RX_CODE_BONDER_BEEP == code) {
+				bool bMute = theApp.m_model.getBonder().isMute();
+				SetButtonBackgroundColors(bMute);
+				TRACE("RX_CODE_BONDER_BEEP %s\n", bMute ? "1" : "0");
+			}
+			pAny->release();
+		}, [&]() -> void {
+			// onComplete
+		}, [&](IThrowable* pThrowable) -> void {
+			// onErrorm
+			pThrowable->printf();
+		});
+
+		theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())
+			->subscribe(m_pObserver);
+	}
+}
 
 BOOL CAlarmPopupDlg::OnInitDialog()
 {
@@ -115,14 +156,12 @@
 
 
 	// 静音按钮
+	bool bMute = theApp.m_model.getBonder().isMute();
 	m_btnSoundOff.SubclassDlgItem(IDC_BUTTON_SOUND_OFF, this);
 	m_btnSoundOff.SetFrameColor(BS_NORMAL, BTN_SOUND_OFF_FRAME_NORMAL);
 	m_btnSoundOff.SetFrameColor(BS_HOVER, BTN_SOUND_OFF_FRAME_HOVER);
 	m_btnSoundOff.SetFrameColor(BS_PRESS, BTN_SOUND_OFF_FRAME_PRESS);
-	m_btnSoundOff.SetBkgndColor(BS_NORMAL, BTN_SOUND_OFF_BKGND_NORMAL);
-	m_btnSoundOff.SetBkgndColor(BS_HOVER, BTN_SOUND_OFF_BKGND_HOVER);
-	m_btnSoundOff.SetBkgndColor(BS_PRESS, BTN_SOUND_OFF_BKGND_PRESS);
-
+	SetButtonBackgroundColors(bMute);
 
 	// 横线1
 	CHorizontalLine* pLine = CHorizontalLine::Hook(GetDlgItem(IDC_LINE1)->m_hWnd);
@@ -134,6 +173,7 @@
 	pLine->SetLineColor(RGB(168, 168, 168));
 
 
+	InitRxWindows();
 	return TRUE;  // return TRUE unless you set the focus to a control
 				  // 异常: OCX 属性页应返回 FALSE
 }
@@ -167,6 +207,11 @@
 	if (m_pActiveAlarm != nullptr) {
 		m_pActiveAlarm->release();
 		m_pActiveAlarm = nullptr;
+	}
+
+	if (m_pObserver != nullptr) {
+		m_pObserver->unsubscribe();
+		m_pObserver = NULL;
 	}
 }
 
@@ -202,15 +247,84 @@
 	}
 
 	CString strText;
-	CAlarmMonitor* pAlarmMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent("警告信息");
+	CAlarmMonitor* pAlarmMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent(ALARM_MONITOR);
 	m_pActiveAlarm = pAlarmMonitor->getActiveAlarm();
 	if (m_pActiveAlarm != nullptr) {
 		m_pActiveAlarm->addRef();
 		SetDlgItemText(IDC_LABEL_NAME, pAlarmMonitor->getAlarmText(m_pActiveAlarm->getId()));
 		strText.Format(_T("ID: %d"), m_pActiveAlarm->getId());
 		SetDlgItemText(IDC_LABEL_LEVEL, strText);		
+		ShowWindow(SW_SHOW);
 	}
 	else {
 		ShowWindow(SW_HIDE);
 	}
 }
+
+void CAlarmPopupDlg::SetButtonBackgroundColors(bool bMute)
+{
+	if (!bMute) {
+		m_btnSoundOff.SetBkgndColor(BS_NORMAL, BTN_SOUND_OFF_BKGND_NORMAL);
+		m_btnSoundOff.SetBkgndColor(BS_HOVER, BTN_SOUND_OFF_BKGND_HOVER);
+		m_btnSoundOff.SetBkgndColor(BS_PRESS, BTN_SOUND_OFF_BKGND_PRESS);
+		m_btnSoundOff.Invalidate();
+	}
+	else {
+		m_btnSoundOff.SetBkgndColor(BS_NORMAL, BTN_SOUND_ON_BKGND_NORMAL);
+		m_btnSoundOff.SetBkgndColor(BS_HOVER, BTN_SOUND_ON_BKGND_HOVER);
+		m_btnSoundOff.SetBkgndColor(BS_PRESS, BTN_SOUND_ON_BKGND_PRESS);
+		m_btnSoundOff.Invalidate();
+	}
+}
+
+void CAlarmPopupDlg::OnBnClickedButtonSoundOff()
+{
+	// TODO: 在此添加控件通知处理程序代码
+	if (m_pPLC == nullptr || !m_pPLC->isConnected()) {
+		return;
+	}
+
+	// 向 PLC 写入信号
+	bool bMute = theApp.m_model.getBonder().isMute();
+	char szWrite[4] = { 0x1, 0x0, 0x0, 0x0 };
+	szWrite[0] = !bMute;
+	m_pPLC->writeData(MC::M, 1003, szWrite, 2, [](IMcChannel* pChannel, int nAddr, DWORD nValue, int nFlag) {
+		if (nFlag == 0) {
+			TRACE("操作成功:地址=1003\n",  nAddr);
+		}
+		else {
+			TRACE("操作失败:地址=1003,错误码=%d\n", nFlag);
+		}
+	});
+}
+
+void CAlarmPopupDlg::OnBnClickedButtonAlarmOff()
+{
+	// TODO: 在此添加控件通知处理程序代码
+	if (m_pPLC == nullptr || !m_pPLC->isConnected()) {
+		return;
+	}
+	
+	// 向 PLC 写入信号
+	char szWrite[4] = { 0x1, 0x0, 0x0, 0x0 };
+	m_pPLC->writeData(MC::M, 1009, szWrite, 2, [](IMcChannel* pChannel, int nAddr, DWORD nValue, int nFlag) {
+		if (nFlag == 0) {
+			TRACE("操作成功:地址=1009\n", nAddr);
+		}
+		else {
+			TRACE("操作失败:地址=1009,错误码=%d\n", nFlag);
+		}
+	});
+
+	Sleep(500);
+
+	szWrite[0] = 0x0;
+	m_pPLC->writeData(MC::M, 1009, szWrite, 2, [](IMcChannel* pChannel, int nAddr, DWORD nValue, int nFlag) {
+		if (nFlag == 0) {
+			TRACE("操作成功:地址=1009\n", nAddr);
+		}
+		else {
+			TRACE("操作失败:地址=1009,错误码=%d\n", nFlag);
+		}
+	});
+}

--
Gitblit v1.9.3