| | |
| | | m_crBkgnd = PROPAGE_BACKGROUND_COLOR; |
| | | m_hbrBkgnd = nullptr; |
| | | m_pObserver = nullptr; |
| | | |
| | | nVelocityRatio = 0.0; |
| | | dTactTime = 0.0; |
| | | nDayShiftCapacity = 0; |
| | | nNightShiftCapacity = 0; |
| | | 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::ReadPLCDataToUI() |
| | | { |
| | | ASSERT(m_pPLC->isConnected()); |
| | | |
| | | // 总任务数 |
| | | int nPendingTasks = 5; |
| | | |
| | | auto createReadTask = [this, &nPendingTasks](MC::SOFT_COMPONENT type, int nAddr, auto onProcessData) { |
| | | return [this, &nPendingTasks, onProcessData](IMcChannel* pChannel, int nAddr, char* pData, unsigned int nDataSize, int nFlag) { |
| | | if (nDataSize == 2 && nFlag == 0 && ::IsWindow(m_hWnd)) { |
| | | onProcessData(CToolUnits::toInt16(&pData[0])); |
| | | } |
| | | |
| | | // 任务完成,减少计数 |
| | | if (--nPendingTasks == 0) { |
| | | PostMessage(ID_MSG_UPDATA_DATA_TO_UI); |
| | | } |
| | | }; |
| | | }; |
| | | |
| | | m_pPLC->readData(MC::M, 1003, 2, createReadTask(MC::M, 1003, [this](int nValue) { |
| | | theApp.m_model.getBonder().setMute(nValue != 0); |
| | | })); |
| | | |
| | | m_pPLC->readData(MC::D, 530, 2, createReadTask(MC::D, 530, [this](int nValue) { |
| | | nVelocityRatio = static_cast<unsigned int>(nValue); |
| | | })); |
| | | |
| | | m_pPLC->readData(MC::ZR, 1500, 2, createReadTask(MC::ZR, 1500, [this](int nValue) { |
| | | dTactTime = nValue; |
| | | })); |
| | | |
| | | m_pPLC->readData(MC::ZR, 2012, 2, createReadTask(MC::ZR, 2012, [this](int nValue) { |
| | | nDayShiftCapacity = nValue; |
| | | })); |
| | | |
| | | m_pPLC->readData(MC::ZR, 2027, 2, createReadTask(MC::ZR, 2027, [this](int nValue) { |
| | | nNightShiftCapacity = nValue; |
| | | })); |
| | | } |
| | | |
| | | BEGIN_MESSAGE_MAP(CProjectPageMain, CDialogEx) |
| | | ON_WM_CTLCOLOR() |
| | | ON_WM_DESTROY() |
| | |
| | | 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 && m_pPLC->isConnected()) { |
| | | ReadPLCDataToUI(); |
| | | } |
| | | } |
| | | |
| | | CDialogEx::OnTimer(nIDEvent); |
| | | } |
| | | |
| | |
| | | |
| | | LRESULT CProjectPageMain::OnUpdateDataToUI(WPARAM wParam, LPARAM lParam) |
| | | { |
| | | CString strText; |
| | | strText.Format(_T("%d %s"), nVelocityRatio, _T("%")); |
| | | GetDlgItem(IDC_EDIT_VELOCITY_RATIO)->SetWindowText(strText); |
| | | |
| | | strText.Format(_T("%.2f"), dTactTime); |
| | | GetDlgItem(IDC_EDIT_TACT_TIME)->SetWindowText(strText); |
| | | |
| | | SetDlgItemInt(IDC_EDIT_DAY_SHIFT_CAPACITY, nDayShiftCapacity); |
| | | SetDlgItemInt(IDC_EDIT_NIGHT_SHIFT_CAPACITY, nNightShiftCapacity); |
| | | |
| | | return 0; |
| | | } |