| | |
| | | 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) |
| | | { |
| | |
| | | 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() |
| | | { |
| | |
| | | |
| | | |
| | | // 静音按钮 |
| | | 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); |
| | |
| | | pLine->SetLineColor(RGB(168, 168, 168)); |
| | | |
| | | |
| | | InitRxWindows(); |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // 异常: OCX 属性页应返回 FALSE |
| | | } |
| | |
| | | if (m_pActiveAlarm != nullptr) { |
| | | m_pActiveAlarm->release(); |
| | | m_pActiveAlarm = nullptr; |
| | | } |
| | | |
| | | if (m_pObserver != nullptr) { |
| | | m_pObserver->unsubscribe(); |
| | | m_pObserver = NULL; |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | }); |
| | | } |