LAPTOP-SNT8I5JK\Boounion
2025-01-03 518ed5e189c36f99af1157995ddd2bb61489b5a5
SourceCode/Bond/BondEq/CProjectPageMain.cpp
@@ -23,14 +23,16 @@
   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)
@@ -107,47 +109,6 @@
   });
}
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()
@@ -178,9 +139,82 @@
         // 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
@@ -194,12 +228,49 @@
   }
}
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
}
@@ -242,14 +313,6 @@
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);
}
@@ -306,6 +369,7 @@
LRESULT CProjectPageMain::OnUpdateDataToUI(WPARAM wParam, LPARAM lParam)
{
   /*
   CString strText;
   strText.Format(_T("%d %s"), nVelocityRatio, _T("%"));
   GetDlgItem(IDC_EDIT_VELOCITY_RATIO)->SetWindowText(strText);
@@ -315,6 +379,6 @@
   SetDlgItemInt(IDC_EDIT_DAY_SHIFT_CAPACITY, nDayShiftCapacity);
   SetDlgItemInt(IDC_EDIT_NIGHT_SHIFT_CAPACITY, nNightShiftCapacity);
   */
   return 0;
}