From 39e5424c8ce474c09ef9939f28e07232dedf3113 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 03 四月 2025 15:13:15 +0800
Subject: [PATCH] 1. 添加生产履历的报表的界面,并且绑定生产履历的报表管理器

---
 SourceCode/Bond/BondEq/CProjectPageMain.cpp |  205 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 141 insertions(+), 64 deletions(-)

diff --git a/SourceCode/Bond/BondEq/CProjectPageMain.cpp b/SourceCode/Bond/BondEq/CProjectPageMain.cpp
index 6ab5ce9..53f1689 100644
--- a/SourceCode/Bond/BondEq/CProjectPageMain.cpp
+++ b/SourceCode/Bond/BondEq/CProjectPageMain.cpp
@@ -22,10 +22,16 @@
 	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)
@@ -48,42 +54,43 @@
 
 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("鏈煡鎿嶄綔绫诲瀷锛�"));
@@ -99,27 +106,6 @@
 			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)
@@ -138,7 +124,6 @@
 	ON_MESSAGE(ID_MSG_UPDATA_DATA_TO_UI, &CProjectPageMain::OnUpdateDataToUI)
 END_MESSAGE_MAP()
 
-
 // CProjectPageMain 娑堟伅澶勭悊绋嬪簭
 
 void CProjectPageMain::InitRxWindows()
@@ -152,9 +137,81 @@
 			// 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
@@ -168,12 +225,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
 }
@@ -216,14 +310,6 @@
 
 void CProjectPageMain::OnTimer(UINT_PTR nIDEvent)
 {
-	if (TIMER_READ_PLC_DATA == nIDEvent) {
-		ASSERT(m_pPLC);
-
-		if (m_pPLC != nullptr) {
-			ReadPLCDataToUI();
-		}
-	}
-
 	CDialogEx::OnTimer(nIDEvent);
 }
 
@@ -262,7 +348,8 @@
 void CProjectPageMain::OnBnClickedButtonSoundOff()
 {
 	// TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
-	HandleOperation(OperationType::MUTE);
+	bool bMute = theApp.m_model.getBonder().isMute();
+	WriteOperationDataToPLC(OperationType::MUTE, !bMute);
 }
 
 void CProjectPageMain::OnBnClickedButtonResetting()
@@ -279,15 +366,5 @@
 
 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;
 }

--
Gitblit v1.9.3