From 6fe6f0ccc9a788de59a8ea2c31ce2a0a02af80fa Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 09 一月 2025 14:09:48 +0800
Subject: [PATCH] Merge branch 'liuyang' into clh
---
SourceCode/Bond/BoounionPLC/PlcView.cpp | 257 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 247 insertions(+), 10 deletions(-)
diff --git a/SourceCode/Bond/BoounionPLC/PlcView.cpp b/SourceCode/Bond/BoounionPLC/PlcView.cpp
index 9fac0f2..9d0926e 100644
--- a/SourceCode/Bond/BoounionPLC/PlcView.cpp
+++ b/SourceCode/Bond/BoounionPLC/PlcView.cpp
@@ -15,11 +15,17 @@
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)
@@ -27,11 +33,18 @@
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 消息处理程序
@@ -55,7 +68,77 @@
// 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
@@ -69,6 +152,99 @@
}
}
+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();
@@ -77,10 +253,31 @@
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)
{
@@ -116,11 +313,51 @@
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);
}
\ No newline at end of file
--
Gitblit v1.9.3