| | |
| | | m_crBkgnd = PLC_VIEW_BACKGROUND; |
| | | m_hbrBkgnd = nullptr; |
| | | m_pPlc = nullptr; |
| | | } |
| | | |
| | | for (int i = 0; i < BTN_MAX; i++) { |
| | | m_pBlBtns[i] = new CBlButton(); |
| | | } |
| | | } |
| | | |
| | | CPlcView::~CPlcView() |
| | | { |
| | | for (int i = 0; i < BTN_MAX; i++) { |
| | | delete m_pBlBtns[i]; |
| | | } |
| | | } |
| | | |
| | | void CPlcView::DoDataExchange(CDataExchange* pDX) |
| | |
| | | CBaseView::DoDataExchange(pDX); |
| | | } |
| | | |
| | | |
| | | BEGIN_MESSAGE_MAP(CPlcView, CBaseView) |
| | | ON_WM_CTLCOLOR() |
| | | ON_WM_DESTROY() |
| | | ON_WM_SIZE() |
| | | ON_WM_CLOSE() |
| | | ON_BN_CLICKED(IDC_BUTTON_ACTIVATE, &CPlcView::OnBnClickedButtonActivate) |
| | | ON_BN_CLICKED(IDC_BUTTON_AUTO, &CPlcView::OnBnClickedButtonAuto) |
| | | ON_BN_CLICKED(IDC_BUTTON_PUASE, &CPlcView::OnBnClickedButtonPuase) |
| | | ON_BN_CLICKED(IDC_BUTTON_MANUAL_OPERATION, &CPlcView::OnBnClickedButtonManualOperation) |
| | | ON_BN_CLICKED(IDC_BUTTON_SOUND_OFF, &CPlcView::OnBnClickedButtonSoundOff) |
| | | ON_BN_CLICKED(IDC_BUTTON_RESETTING, &CPlcView::OnBnClickedButtonResetting) |
| | | ON_BN_CLICKED(IDC_BUTTON_STOP, &CPlcView::OnBnClickedButtonStop) |
| | | END_MESSAGE_MAP() |
| | | |
| | | // CComponentData1Dlg 消息处理程序 |
| | |
| | | // onNext |
| | | pAny->addRef(); |
| | | int code = pAny->getCode(); |
| | | |
| | | if (RX_CODE_ACTIVATE == code) { |
| | | int nValue = 0; |
| | | if (pAny->getIntValue("exCode", nValue)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_RUN], nValue == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_AUTO == code) { |
| | | int nValue = 0; |
| | | if (pAny->getIntValue("exCode", nValue)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_AUTO], nValue == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_PUASE == code) { |
| | | int nValue = 0; |
| | | if (pAny->getIntValue("exCode", nValue)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_PUASE], nValue == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_MANUAL == code) { |
| | | int nValue = 0; |
| | | if (pAny->getIntValue("exCode", nValue)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_MANUAL], nValue == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_BEEP == code) { |
| | | int nValue = 0; |
| | | if (pAny->getIntValue("exCode", nValue)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_MUTE], nValue == 0); |
| | | GetDlgItem(IDC_BUTTON_SOUND_OFF)->SetWindowText(nValue == 0 ? _T("静音") : _T("声音")); |
| | | } |
| | | } |
| | | else if (RX_CODE_RESETTING == code) { |
| | | int nValue = 0; |
| | | if (pAny->getIntValue("exCode", nValue)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_OPR], nValue == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_STOP == code) { |
| | | int nValue = 0; |
| | | if (pAny->getIntValue("exCode", nValue)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_STOP], nValue == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_VELOCITY_RATIO == code) { |
| | | int nVelocityRatio = 0; |
| | | if (pAny->getIntValue("exCode", nVelocityRatio)) { |
| | | CString strText; |
| | | strText.Format(_T("%d %s"), nVelocityRatio, _T("%")); |
| | | GetDlgItem(IDC_EDIT_VELOCITY_RATIO)->SetWindowText(strText); |
| | | } |
| | | } |
| | | else if (RX_CODE_TACT_TIME == code) { |
| | | double dTactTime = 0.00; |
| | | if (pAny->getDoubleValue("value", dTactTime)) { |
| | | CString strText; |
| | | strText.Format(_T("%.2f"), dTactTime); |
| | | GetDlgItem(IDC_EDIT_TACT_TIME)->SetWindowText(strText); |
| | | } |
| | | } |
| | | else if (RX_CODE_DAY_SHIFT_CAPACTITY == code) { |
| | | int nCapactity = 0; |
| | | if (pAny->getIntValue("exCode", nCapactity)) { |
| | | SetDlgItemInt(IDC_EDIT_DAY_SHIFT_CAPACITY, nCapactity); |
| | | } |
| | | } |
| | | else if (RX_CODE_NIGHT_SHIFT_CAPACTITY == code) { |
| | | int nCapactity; |
| | | if (pAny->getIntValue("exCode", nCapactity)) { |
| | | SetDlgItemInt(IDC_EDIT_NIGHT_SHIFT_CAPACITY, nCapactity); |
| | | } |
| | | } |
| | | pAny->release(); |
| | | }, [&]() -> void { |
| | | // onComplete |
| | |
| | | } |
| | | } |
| | | |
| | | void CPlcView::Resize() |
| | | { |
| | | int y = 12; |
| | | int x = 0; |
| | | CRect rcClient, rcItem; |
| | | CWnd* pItem; |
| | | GetClientRect(&rcClient); |
| | | } |
| | | |
| | | void CPlcView::SetButtonBackgroundColors(CBlButton* btn, bool bOff) |
| | | { |
| | | if (bOff) { |
| | | btn->SetBkgndColor(BS_NORMAL, BTN_PLCVIEW_OFF_BKGND_NORMAL); |
| | | btn->SetBkgndColor(BS_HOVER, BTN_PLCVIEW_OFF_BKGND_HOVER); |
| | | btn->SetBkgndColor(BS_PRESS, BTN_PLCVIEW_OFF_BKGND_PRESS); |
| | | btn->Invalidate(); |
| | | } |
| | | else { |
| | | btn->SetBkgndColor(BS_NORMAL, BTN_PLCVIEW_ON_BKGND_NORMAL); |
| | | btn->SetBkgndColor(BS_HOVER, BTN_PLCVIEW_ON_BKGND_HOVER); |
| | | btn->SetBkgndColor(BS_PRESS, BTN_PLCVIEW_ON_BKGND_PRESS); |
| | | btn->Invalidate(); |
| | | } |
| | | } |
| | | |
| | | void CPlcView::HandleOperation(OperationType eOpType) |
| | | { |
| | | WriteOperationDataToPLC(eOpType, true); |
| | | Sleep(200); |
| | | WriteOperationDataToPLC(eOpType, false); |
| | | } |
| | | |
| | | void CPlcView::WriteOperationDataToPLC(OperationType eOpType, bool bPressed) |
| | | { |
| | | if (m_pContext == nullptr) { |
| | | return; |
| | | } |
| | | |
| | | CPLC* pPlc = (CPLC*)m_pContext; |
| | | if (pPlc == nullptr || !pPlc->isConnected()) { |
| | | return; |
| | | } |
| | | |
| | | MC::SOFT_COMPONENT enComponent = MC::M; |
| | | int nStartAddress = 1000; |
| | | |
| | | // 根据操作类型计算目标地址 |
| | | char szWrite[4] = { 0x0, 0x0, 0x0, 0x0 }; |
| | | switch (eOpType) { |
| | | case OperationType::RUN: |
| | | nStartAddress = 1002; // RUN 信号地址 M1002,闪动信息 M1103 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::AUTO: |
| | | nStartAddress = 1000; // AUTO 信号地址 M1000,闪动信息 M1100 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::PUASE: |
| | | nStartAddress = 1004; // PUASE 信号地址 M1004,闪动信息 M1104 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::MANUAL: |
| | | nStartAddress = 1001; // MANUAL 信号地址 M1001,闪动信息 M1100 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::MUTE: |
| | | nStartAddress = 1003; // MUTE 信号地址 M1003,闪动信息 M1003 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::OPR: |
| | | nStartAddress = 1050; // OPR 信号地址 M1050,闪动信息 M1150 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::STOP: |
| | | nStartAddress = 1114; // STOP 信号地址 M1114,闪动信息 M1114 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | default: |
| | | AfxMessageBox(_T("未知操作类型!")); |
| | | return; |
| | | } |
| | | |
| | | // 向 PLC 写入信号 |
| | | pPlc->writeData(enComponent, nStartAddress, szWrite, 2, [eOpType, nStartAddress, bPressed](IMcChannel* pChannel, int nAddr, DWORD nValue, int nFlag) { |
| | | if (nFlag == 0) { |
| | | TRACE("操作成功:类型=%d,地址=%d,值=%d\n", static_cast<int>(eOpType), nAddr, bPressed); |
| | | } |
| | | else { |
| | | TRACE("操作失败:类型=%d,地址=%d,错误码=%d\n", static_cast<int>(eOpType), nAddr, nFlag); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | BOOL CPlcView::OnInitDialog() |
| | | { |
| | | CBaseView::OnInitDialog(); |
| | |
| | | SetDlgItemText(IDC_LABEL_PLC_NAME, ((CPLC*)m_pContext)->getName().c_str()); |
| | | } |
| | | |
| | | // 按钮初始化 |
| | | m_pBlBtns[BTN_RUN]->SubclassDlgItem(IDC_BUTTON_ACTIVATE, this); |
| | | m_pBlBtns[BTN_AUTO]->SubclassDlgItem(IDC_BUTTON_AUTO, this); |
| | | m_pBlBtns[BTN_PUASE]->SubclassDlgItem(IDC_BUTTON_PUASE, this); |
| | | m_pBlBtns[BTN_MANUAL]->SubclassDlgItem(IDC_BUTTON_MANUAL_OPERATION, this); |
| | | m_pBlBtns[BTN_MUTE]->SubclassDlgItem(IDC_BUTTON_SOUND_OFF, this); |
| | | m_pBlBtns[BTN_OPR]->SubclassDlgItem(IDC_BUTTON_RESETTING, this); |
| | | m_pBlBtns[BTN_STOP]->SubclassDlgItem(IDC_BUTTON_STOP, this); |
| | | |
| | | for (int i = 0; i < BTN_MAX; i++) { |
| | | m_pBlBtns[i]->SetFrameColor(BS_NORMAL, BTN_PLCVIEW_FRAME_NORMAL); |
| | | m_pBlBtns[i]->SetFrameColor(BS_HOVER, BTN_PLCVIEW_FRAME_HOVER); |
| | | m_pBlBtns[i]->SetFrameColor(BS_PRESS, BTN_PLCVIEW_FRAME_PRESS); |
| | | SetButtonBackgroundColors(m_pBlBtns[i], false); |
| | | } |
| | | |
| | | // 初始值 |
| | | SetDlgItemText(IDC_EDIT_VELOCITY_RATIO, _T("0 %")); |
| | | SetDlgItemText(IDC_EDIT_TACT_TIME, _T("0.00")); |
| | | SetDlgItemText(IDC_EDIT_DAY_SHIFT_CAPACITY, _T("0")); |
| | | SetDlgItemText(IDC_EDIT_NIGHT_SHIFT_CAPACITY, _T("0")); |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // 异常: OCX 属性页应返回 FALSE |
| | | } |
| | | |
| | | |
| | | HBRUSH CPlcView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) |
| | | { |
| | |
| | | CBaseView::OnSize(nType, cx, cy); |
| | | } |
| | | |
| | | void CPlcView::Resize() |
| | | void CPlcView::OnClose() |
| | | { |
| | | int y = 12; |
| | | int x = 0; |
| | | CRect rcClient, rcItem; |
| | | CWnd* pItem; |
| | | GetClientRect(&rcClient); |
| | | // TODO: 在此添加消息处理程序代码和/或调用默认值 |
| | | CDialogEx::OnClose(); |
| | | } |
| | | |
| | | void CPlcView::OnBnClickedButtonActivate() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | HandleOperation(OperationType::RUN); |
| | | } |
| | | |
| | | void CPlcView::OnBnClickedButtonAuto() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | HandleOperation(OperationType::AUTO); |
| | | } |
| | | |
| | | void CPlcView::OnBnClickedButtonPuase() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | HandleOperation(OperationType::PUASE); |
| | | } |
| | | |
| | | void CPlcView::OnBnClickedButtonManualOperation() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | HandleOperation(OperationType::MANUAL); |
| | | } |
| | | |
| | | void CPlcView::OnBnClickedButtonSoundOff() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | bool bMute = false;//theApp.m_model.getBonder().isMute(); |
| | | WriteOperationDataToPLC(OperationType::MUTE, !bMute); |
| | | } |
| | | |
| | | void CPlcView::OnBnClickedButtonResetting() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | HandleOperation(OperationType::OPR); |
| | | } |
| | | |
| | | void CPlcView::OnBnClickedButtonStop() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | HandleOperation(OperationType::STOP); |
| | | } |