| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // CProjectPageMain.cpp: å®ç°æä»¶ |
| | | // |
| | | |
| | | #include "stdafx.h" |
| | | #include "BondEq.h" |
| | | #include "afxdialogex.h" |
| | | #include "CProjectPageMain.h" |
| | | #include "ToolUnits.h" |
| | | |
| | | #define TIMER_INIT 1 |
| | | #define TIMER_READ_PLC_DATA 2 |
| | | |
| | | #define ID_MSG_UPDATA_DATA_TO_UI WM_USER + 101 |
| | | |
| | | // CProjectPageMain å¯¹è¯æ¡ |
| | | |
| | | IMPLEMENT_DYNAMIC(CProjectPageMain, CDialogEx) |
| | | |
| | | CProjectPageMain::CProjectPageMain(CWnd* pParent /*=nullptr*/) |
| | | : CDialogEx(IDD_PROJECT_PAGE_MAIN, pParent) |
| | | { |
| | | m_crBkgnd = PROPAGE_BACKGROUND_COLOR; |
| | | m_hbrBkgnd = nullptr; |
| | | m_pObserver = nullptr; |
| | | } |
| | | |
| | | CProjectPageMain::~CProjectPageMain() |
| | | { |
| | | } |
| | | |
| | | void CProjectPageMain::SetPLC(CPLC* pPLC) |
| | | { |
| | | ASSERT(pPLC); |
| | | m_pPLC = pPLC; |
| | | } |
| | | |
| | | void CProjectPageMain::DoDataExchange(CDataExchange* pDX) |
| | | { |
| | | CDialogEx::DoDataExchange(pDX); |
| | | } |
| | | |
| | | void CProjectPageMain::HandleOperation(OperationType eOpType) |
| | | { |
| | | WriteOperationDataToPLC(eOpType, true); |
| | | Sleep(200); |
| | | WriteOperationDataToPLC(eOpType, false); |
| | | } |
| | | |
| | | 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; |
| | | |
| | | // æ ¹æ®æä½ç±»å计ç®ç®æ å°å |
| | | 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; |
| | | break; |
| | | case OperationType::AUTO: |
| | | nStartAddress += 01; // AUTO ä¿¡å·å°å c |
| | | szWrite[1] = bPressed ? 0x10 : 0; |
| | | break; |
| | | case OperationType::PUASE: |
| | | nStartAddress += 01; // PUASE ä¿¡å·å°å d |
| | | szWrite[1] = bPressed ? 0x20 : 0; |
| | | break; |
| | | case OperationType::MANUAL: |
| | | nStartAddress += 05; // MANUAL ä¿¡å·å°å 5.e |
| | | szWrite[1] = bPressed ? 0x40 : 0; |
| | | break; |
| | | case OperationType::MUTE: |
| | | nStartAddress += 01; // MUTE ä¿¡å·å°å 1.a |
| | | szWrite[1] = bPressed ? 0x04 : 0; |
| | | break; |
| | | case OperationType::OPR: |
| | | nStartAddress += 01; // OPR ä¿¡å·å°å 1.a |
| | | szWrite[1] = bPressed ? 0x04 : 0; |
| | | break; |
| | | case OperationType::STOP: |
| | | nStartAddress += 01; // STOP ä¿¡å·å°å 1.a |
| | | szWrite[1] = bPressed ? 0x04 : 0; |
| | | break; |
| | | default: |
| | | AfxMessageBox(_T("æªç¥æä½ç±»åï¼")); |
| | | return; |
| | | } |
| | | |
| | | // å PLC åå
¥ä¿¡å· |
| | | m_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); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | 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_WM_CTLCOLOR() |
| | | ON_WM_DESTROY() |
| | | ON_WM_SIZE() |
| | | ON_WM_TIMER() |
| | | ON_WM_CLOSE() |
| | | ON_BN_CLICKED(IDC_BUTTON_ACTIVATE, &CProjectPageMain::OnBnClickedButtonActivate) |
| | | ON_BN_CLICKED(IDC_BUTTON_AUTO, &CProjectPageMain::OnBnClickedButtonAuto) |
| | | ON_BN_CLICKED(IDC_BUTTON_PUASE, &CProjectPageMain::OnBnClickedButtonPuase) |
| | | ON_BN_CLICKED(IDC_BUTTON_MANUAL_OPERATION, &CProjectPageMain::OnBnClickedButtonManualOperation) |
| | | ON_BN_CLICKED(IDC_BUTTON_SOUND_OFF, &CProjectPageMain::OnBnClickedButtonSoundOff) |
| | | ON_BN_CLICKED(IDC_BUTTON_RESETTING, &CProjectPageMain::OnBnClickedButtonResetting) |
| | | ON_BN_CLICKED(IDC_BUTTON_STOP, &CProjectPageMain::OnBnClickedButtonStop) |
| | | ON_MESSAGE(ID_MSG_UPDATA_DATA_TO_UI, &CProjectPageMain::OnUpdateDataToUI) |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CProjectPageMain æ¶æ¯å¤çç¨åº |
| | | |
| | | void CProjectPageMain::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 (true) { |
| | | |
| | | //} |
| | | pAny->release(); |
| | | }, [&]() -> void { |
| | | // onComplete |
| | | }, [&](IThrowable* pThrowable) -> void { |
| | | // onErrorm |
| | | pThrowable->printf(); |
| | | }); |
| | | |
| | | theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread()) |
| | | ->subscribe(m_pObserver); |
| | | } |
| | | } |
| | | |
| | | BOOL CProjectPageMain::OnInitDialog() |
| | | { |
| | | CDialogEx::OnInitDialog(); |
| | | |
| | | InitRxWindows(); |
| | | SetTimer(TIMER_READ_PLC_DATA, 500, nullptr); |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // å¼å¸¸: OCX 屿§é¡µåºè¿å FALSE |
| | | } |
| | | |
| | | HBRUSH CProjectPageMain::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) |
| | | { |
| | | HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); |
| | | |
| | | if (nCtlColor == CTLCOLOR_STATIC) { |
| | | pDC->SetBkColor(m_crBkgnd); |
| | | } |
| | | |
| | | if (m_hbrBkgnd == nullptr) { |
| | | m_hbrBkgnd = CreateSolidBrush(m_crBkgnd); |
| | | } |
| | | |
| | | return m_hbrBkgnd; |
| | | } |
| | | |
| | | void CProjectPageMain::OnDestroy() |
| | | { |
| | | CDialogEx::OnDestroy(); |
| | | |
| | | if (m_hbrBkgnd != nullptr) { |
| | | ::DeleteObject(m_hbrBkgnd); |
| | | } |
| | | |
| | | ASSERT(m_pObserver != NULL); |
| | | m_pObserver->unsubscribe(); |
| | | m_pObserver = NULL; |
| | | } |
| | | |
| | | void CProjectPageMain::OnSize(UINT nType, int cx, int cy) |
| | | { |
| | | CDialogEx::OnSize(nType, cx, cy); |
| | | |
| | | CRect rcClient; |
| | | GetClientRect(&rcClient); |
| | | } |
| | | |
| | | 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::OnClose() |
| | | { |
| | | // TODO: 卿¤æ·»å æ¶æ¯å¤çç¨åºä»£ç å/æè°ç¨é»è®¤å¼ |
| | | KillTimer(TIMER_READ_PLC_DATA); |
| | | |
| | | CDialogEx::OnClose(); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonActivate() |
| | | { |
| | | // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç |
| | | HandleOperation(OperationType::RUN); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonAuto() |
| | | { |
| | | // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç |
| | | HandleOperation(OperationType::AUTO); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonPuase() |
| | | { |
| | | // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç |
| | | HandleOperation(OperationType::PUASE); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonManualOperation() |
| | | { |
| | | // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç |
| | | HandleOperation(OperationType::MANUAL); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonSoundOff() |
| | | { |
| | | // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç |
| | | HandleOperation(OperationType::MUTE); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonResetting() |
| | | { |
| | | // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç |
| | | HandleOperation(OperationType::OPR); |
| | | } |
| | | |
| | | void CProjectPageMain::OnBnClickedButtonStop() |
| | | { |
| | | // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç |
| | | HandleOperation(OperationType::STOP); |
| | | } |
| | | |
| | | 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; |
| | | } |