| | |
| | | m_crBkgnd = PROPAGE_BACKGROUND_COLOR; |
| | | m_hbrBkgnd = nullptr; |
| | | m_pObserver = nullptr; |
| | | for (int i = 0; i < BTN_MAX; i++) { |
| | | m_pBlBtns[i] = new CBlButton(); |
| | | } |
| | | } |
| | | |
| | | CProjectPageMain::~CProjectPageMain() |
| | | { |
| | | for (int i = 0; i < BTN_MAX; i++) { |
| | | delete m_pBlBtns[i]; |
| | | } |
| | | } |
| | | |
| | | void CProjectPageMain::SetPLC(CPLC* pPLC) |
| | |
| | | |
| | | void CProjectPageMain::WriteOperationDataToPLC(OperationType eOpType, bool bPressed) |
| | | { |
| | | MC::SOFT_COMPONENT enComponent = MC::ZR; |
| | | int nStartAddress = 10000; |
| | | int nEndAddress = nStartAddress + 300; |
| | | int nSize = (nEndAddress - nStartAddress + 1) * 2; |
| | | if (m_pPLC == nullptr || !m_pPLC->isConnected()) { |
| | | return; |
| | | } |
| | | |
| | | MC::SOFT_COMPONENT enComponent = MC::M; |
| | | int nStartAddress = 1000; |
| | | |
| | | // 根据操作类型计算目标地址 |
| | | int bitIndex = 0; |
| | | char szWrite[4] = { 0x0, 0x0, 0x0, 0x0 }; |
| | | switch (eOpType) { |
| | | case OperationType::RUN: |
| | | nStartAddress += 0; // RUN 信号地址 0,闪动信息06.0 |
| | | szWrite[0] = bPressed ? 0x1 : 0; |
| | | nStartAddress = 1002; // RUN 信号地址 M1002,闪动信息 M1103 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::AUTO: |
| | | nStartAddress += 01; // AUTO 信号地址 c |
| | | szWrite[1] = bPressed ? 0x10 : 0; |
| | | nStartAddress = 1000; // AUTO 信号地址 M1000,闪动信息 M1100 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::PUASE: |
| | | nStartAddress += 01; // PUASE 信号地址 d |
| | | szWrite[1] = bPressed ? 0x20 : 0; |
| | | nStartAddress = 1004; // PUASE 信号地址 M1004,闪动信息 M1104 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::MANUAL: |
| | | nStartAddress += 05; // MANUAL 信号地址 5.e |
| | | szWrite[1] = bPressed ? 0x40 : 0; |
| | | nStartAddress = 1001; // MANUAL 信号地址 M1001,闪动信息 M1100 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::MUTE: |
| | | nStartAddress += 01; // MUTE 信号地址 1.a |
| | | szWrite[1] = bPressed ? 0x04 : 0; |
| | | nStartAddress = 1003; // MUTE 信号地址 M1003,闪动信息 M1003 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::OPR: |
| | | nStartAddress += 01; // OPR 信号地址 1.a |
| | | szWrite[1] = bPressed ? 0x04 : 0; |
| | | nStartAddress = 1050; // OPR 信号地址 M1050,闪动信息 M1150 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | case OperationType::STOP: |
| | | nStartAddress += 01; // STOP 信号地址 1.a |
| | | szWrite[1] = bPressed ? 0x04 : 0; |
| | | nStartAddress = 1114; // STOP 信号地址 M1114,闪动信息 M1114 |
| | | szWrite[0] = bPressed ? 0x01 : 0; |
| | | break; |
| | | default: |
| | | AfxMessageBox(_T("未知操作类型!")); |
| | |
| | | TRACE("操作失败:类型=%d,地址=%d,错误码=%d\n", static_cast<int>(eOpType), nAddr, nFlag); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | void CProjectPageMain::ReadPLCDataToUI() |
| | | { |
| | | MC::SOFT_COMPONENT enComponent = MC::ZR; |
| | | int nStartAddress = 10000; |
| | | int nEndAddress = nStartAddress + 300; |
| | | int nSize = (nEndAddress - nStartAddress + 1) * 2; |
| | | |
| | | auto funOnReadData = [this, nStartAddress, nSize](IMcChannel* pChannel, int addr, char* pData, unsigned int nDataSize, int flag) -> void { |
| | | if (nDataSize == nSize && flag == 0 && ::IsWindow(m_hWnd)) { |
| | | dVelocityRatio = CToolUnits::toInt32(&pData[20 * 2]) * 0.001; |
| | | dTactTime = CToolUnits::toInt32(&pData[82 * 2]) * 0.001; |
| | | nDayShiftCapacity = CToolUnits::toInt16(&pData[84 * 2]) * 0.001; |
| | | nNightShiftCapacity = CToolUnits::toInt16(&pData[50 * 2]) * 0.1; |
| | | |
| | | PostMessage(ID_MSG_UPDATA_DATA_TO_UI); |
| | | } |
| | | }; |
| | | |
| | | // m_pPLC->readData(enComponent, nStartAddress, nSize, funOnReadData); |
| | | } |
| | | |
| | | BEGIN_MESSAGE_MAP(CProjectPageMain, CDialogEx) |
| | |
| | | ON_MESSAGE(ID_MSG_UPDATA_DATA_TO_UI, &CProjectPageMain::OnUpdateDataToUI) |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CProjectPageMain 消息处理程序 |
| | | |
| | | void CProjectPageMain::InitRxWindows() |
| | |
| | | // onNext |
| | | pAny->addRef(); |
| | | int code = pAny->getCode(); |
| | | //if (true) { |
| | | |
| | | //} |
| | | if (RX_CODE_BONDER_BEEP == code) { |
| | | bool bMute = theApp.m_model.getBonder().isMute(); |
| | | GetDlgItem(IDC_BUTTON_SOUND_OFF)->SetWindowText(bMute ? _T("静音") : _T("声音")); |
| | | } |
| | | else if (RX_CODE_BONDER_VELOCITY_RATIO == code) { |
| | | int nVelocityRatio; |
| | | 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_BONDER_TACT_TIME == code) { |
| | | double dTactTime; |
| | | if (pAny->getDoubleValue("value", dTactTime)) { |
| | | CString strText; |
| | | strText.Format(_T("%.2f"), dTactTime); |
| | | GetDlgItem(IDC_EDIT_TACT_TIME)->SetWindowText(strText); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_DAY_SHIFT_CAPACTITY == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetDlgItemInt(IDC_EDIT_DAY_SHIFT_CAPACITY, capactity); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_NIGHT_SHIFT_CAPACTITY == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetDlgItemInt(IDC_EDIT_NIGHT_SHIFT_CAPACITY, capactity); |
| | | } |
| | | } |
| | | // 临时添加 |
| | | else if (RX_CODE_BONDER_STATES_BTN0 == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_RUN], capactity == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_STATES_BTN1 == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_AUTO], capactity == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_STATES_BTN2 == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_PUASE], capactity == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_STATES_BTN3 == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_MANUAL], capactity == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_STATES_BTN4 == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_MUTE], capactity == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_STATES_BTN5 == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_OPR], capactity == 0); |
| | | } |
| | | } |
| | | else if (RX_CODE_BONDER_STATES_BTN6 == code) { |
| | | int capactity; |
| | | if (pAny->getIntValue("exCode", capactity)) { |
| | | SetButtonBackgroundColors(m_pBlBtns[BTN_STOP], capactity == 0); |
| | | } |
| | | } |
| | | pAny->release(); |
| | | }, [&]() -> void { |
| | | // onComplete |
| | |
| | | } |
| | | } |
| | | |
| | | void CProjectPageMain::SetButtonBackgroundColors(CBlButton* btn, bool bOff) |
| | | { |
| | | if (bOff) { |
| | | btn->SetBkgndColor(BS_NORMAL, BTN_SOUND_OFF_BKGND_NORMAL); |
| | | btn->SetBkgndColor(BS_HOVER, BTN_SOUND_OFF_BKGND_HOVER); |
| | | btn->SetBkgndColor(BS_PRESS, BTN_SOUND_OFF_BKGND_PRESS); |
| | | btn->Invalidate(); |
| | | } |
| | | else { |
| | | btn->SetBkgndColor(BS_NORMAL, BTN_SOUND_ON_BKGND_NORMAL); |
| | | btn->SetBkgndColor(BS_HOVER, BTN_SOUND_ON_BKGND_HOVER); |
| | | btn->SetBkgndColor(BS_PRESS, BTN_SOUND_ON_BKGND_PRESS); |
| | | btn->Invalidate(); |
| | | } |
| | | } |
| | | |
| | | BOOL CProjectPageMain::OnInitDialog() |
| | | { |
| | | CDialogEx::OnInitDialog(); |
| | | |
| | | InitRxWindows(); |
| | | SetTimer(TIMER_READ_PLC_DATA, 500, nullptr); |
| | | |
| | | // 按钮初始化 |
| | | 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_SOUND_OFF_FRAME_NORMAL); |
| | | m_pBlBtns[i]->SetFrameColor(BS_HOVER, BTN_SOUND_OFF_FRAME_HOVER); |
| | | m_pBlBtns[i]->SetFrameColor(BS_PRESS, BTN_SOUND_OFF_FRAME_PRESS); |
| | | } |
| | | |
| | | // 初始值 |
| | | 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 |
| | | } |
| | |
| | | |
| | | void CProjectPageMain::OnTimer(UINT_PTR nIDEvent) |
| | | { |
| | | if (TIMER_READ_PLC_DATA == nIDEvent) { |
| | | ASSERT(m_pPLC); |
| | | |
| | | if (m_pPLC != nullptr) { |
| | | ReadPLCDataToUI(); |
| | | } |
| | | } |
| | | |
| | | CDialogEx::OnTimer(nIDEvent); |
| | | } |
| | | |
| | |
| | | void CProjectPageMain::OnBnClickedButtonSoundOff() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | HandleOperation(OperationType::MUTE); |
| | | bool bMute = theApp.m_model.getBonder().isMute(); |
| | | WriteOperationDataToPLC(OperationType::MUTE, !bMute); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonResetting() |
| | |
| | | |
| | | LRESULT CProjectPageMain::OnUpdateDataToUI(WPARAM wParam, LPARAM lParam) |
| | | { |
| | | CString strText; |
| | | strText.Format(_T("%.3f %"), dVelocityRatio); |
| | | GetDlgItem(IDC_EDIT_VELOCITY_RATIO)->SetWindowText(strText); |
| | | |
| | | strText.Format(_T("%.3f"), dTactTime); |
| | | GetDlgItem(IDC_EDIT_TACT_TIME)->SetWindowText(strText); |
| | | |
| | | SetDlgItemInt(IDC_EDIT_DAY_SHIFT_CAPACITY, nDayShiftCapacity); |
| | | SetDlgItemInt(IDC_EDIT_NIGHT_SHIFT_CAPACITY, nNightShiftCapacity); |
| | | |
| | | return 0; |
| | | } |