From e950b5681e510aad50925b2447bdb7320928e359 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 10 六月 2025 11:30:41 +0800
Subject: [PATCH] 1.添加新的信号展示页面;
---
SourceCode/Bond/Servo/CPageGraph2.cpp | 9 +
SourceCode/Bond/Servo/CPageLinkSignal.cpp | 180 +++++++++++++++++++++++++++++++++++++++++++++
SourceCode/Bond/Servo/Servo.vcxproj | 2
SourceCode/Bond/Servo/Servo.vcxproj.filters | 2
SourceCode/Bond/Servo/resource.h | 0
SourceCode/Bond/Servo/Servo.rc | 0
SourceCode/Bond/Servo/CPageLinkSignal.h | 40 ++++++++++
7 files changed, 231 insertions(+), 2 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageGraph2.cpp b/SourceCode/Bond/Servo/CPageGraph2.cpp
index d095b21..45a272b 100644
--- a/SourceCode/Bond/Servo/CPageGraph2.cpp
+++ b/SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -9,6 +9,7 @@
#include "CEquipmentPage1.h"
#include "CEquipmentPage2.h"
#include "CEquipmentPage3.h"
+#include "CPageLinkSignal.h"
#include "CPagePortProperty.h"
#include "CPagePortStatus.h"
#include "CPageCassetteCtrlCmd.h"
@@ -128,9 +129,9 @@
CHMPropertyDlg dlg(pEquipment->getName().c_str(), 658, 788);
- CEquipmentPage1* pPage1 = new CEquipmentPage1();
+ CPageLinkSignal* pPage1 = new CPageLinkSignal();
pPage1->setEquipment(pEquipment);
- pPage1->Create(IDD_PAGE_EQUIPMENT1);
+ pPage1->Create(IDD_PAGE_LINK_SIGNAL);
dlg.addPage(pPage1, "Link Signal");
if (_strcmpi(pEquipment->getClassName(), "CLoadPort") == 0) {
@@ -292,6 +293,10 @@
pEquipment->setLinkSignal(0, SIGNAL_UPSTREAM_TROUBLE, TRUE);
pEquipment->setLinkSignal(0, SIGNAL_INTERLOCK, TRUE);
pEquipment->setLinkSignal(0, SIGNAL_SEND_ABLE, FALSE);
+ pEquipment->setLinkSignal(1, SIGNAL_UPSTREAM_INLINE, TRUE);
+ pEquipment->setLinkSignal(1, SIGNAL_UPSTREAM_TROUBLE, TRUE);
+ pEquipment->setLinkSignal(1, SIGNAL_INTERLOCK, TRUE);
+ pEquipment->setLinkSignal(1, SIGNAL_SEND_ABLE, FALSE);
}
}
else if (nCmd == ID_EQSGRAPHITEM_TEST6) {
diff --git a/SourceCode/Bond/Servo/CPageLinkSignal.cpp b/SourceCode/Bond/Servo/CPageLinkSignal.cpp
new file mode 100644
index 0000000..ca7ee40
--- /dev/null
+++ b/SourceCode/Bond/Servo/CPageLinkSignal.cpp
@@ -0,0 +1,180 @@
+锘�// CPageLinkSignal.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "CPageLinkSignal.h"
+#include "afxdialogex.h"
+
+
+#define FACECOLOR_ON RGB(34, 177, 76)
+#define FACECOLOR_OFF RGB(195, 195, 195)
+
+#define TIMER_ID_SIGNAL_UPDATE 1001
+#define TIMER_INTERVAL_MS 1000 // 姣� 1 绉掓洿鏂颁竴娆�
+
+// CPageLinkSignal 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CPageLinkSignal, CHMPropertyPage)
+
+CPageLinkSignal::CPageLinkSignal(CWnd* pParent /*=nullptr*/)
+ : CHMPropertyPage(IDD_PAGE_LINK_SIGNAL, pParent)
+{
+ m_pEquipment = nullptr;
+}
+
+CPageLinkSignal::~CPageLinkSignal()
+{
+}
+
+void CPageLinkSignal::DoDataExchange(CDataExchange* pDX)
+{
+ CHMPropertyPage::DoDataExchange(pDX);
+}
+
+
+BEGIN_MESSAGE_MAP(CPageLinkSignal, CHMPropertyPage)
+ ON_WM_CTLCOLOR()
+ ON_WM_DESTROY()
+ ON_WM_SIZE()
+ ON_WM_TIMER()
+END_MESSAGE_MAP()
+
+
+// CPageLinkSignal 娑堟伅澶勭悊绋嬪簭
+
+void CPageLinkSignal::setEquipment(SERVO::CEquipment* pEquipment)
+{
+ m_pEquipment = pEquipment;
+}
+
+BOOL CPageLinkSignal::OnInitDialog()
+{
+ CHMPropertyPage::OnInitDialog();
+ CreateSignalButtons();
+
+
+ KillTimer(TIMER_ID_SIGNAL_UPDATE);
+ SetTimer(TIMER_ID_SIGNAL_UPDATE, TIMER_INTERVAL_MS, nullptr);
+
+ return TRUE; // return TRUE unless you set the focus to a control
+ // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+
+HBRUSH CPageLinkSignal::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+ HBRUSH hbr = CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
+
+ // TODO: 鍦ㄦ鏇存敼 DC 鐨勪换浣曠壒鎬�
+
+ // TODO: 濡傛灉榛樿鐨勪笉鏄墍闇�鐢荤瑪锛屽垯杩斿洖鍙︿竴涓敾绗�
+ return hbr;
+}
+
+
+void CPageLinkSignal::OnDestroy()
+{
+ CHMPropertyPage::OnDestroy();
+
+ // TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+ for (int i = 0; i < 8; i++) {
+ for (int j = 0; j < 8; j++) {
+ if (m_pBtn[i][j] != nullptr) {
+ m_pBtn[i][j]->DestroyWindow();
+ delete m_pBtn[i][j];
+ m_pBtn[i][j] = nullptr;
+ }
+ }
+ }
+}
+
+
+void CPageLinkSignal::OnSize(UINT nType, int cx, int cy)
+{
+ CHMPropertyPage::OnSize(nType, cx, cy);
+
+ // TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+}
+
+#define BTN_X 98
+#define BTN_Y 80
+#define BTN_WIDTH 36
+void CPageLinkSignal::CreateSignalButtons()
+{
+ int x = 100;
+ int y = 100;
+ int marginx = 32;
+ int marginy = 12;
+ for (int row = 0; row < 8; row++) {
+ y = BTN_Y + (BTN_WIDTH + marginy) * row;
+ for (int col = 0; col < 8; col++) {
+ x = BTN_X + (BTN_WIDTH + marginx) * col;
+ m_pBtn[row][col] = new CBlButton();
+ m_pBtn[row][col]->Create("", WS_VISIBLE, { x, y, x + 36, y + 36 }, this, 1000);
+ m_pBtn[row][col]->SetFaceColor(FACECOLOR_OFF);
+ m_pBtn[row][col]->SetFrameColor(RGB(28, 28, 28));
+ m_pBtn[row][col]->SetTextColor(RGB(238, 238, 238));
+ }
+ }
+
+ CWnd* pItem;
+ CRect rcItem;
+ int idx[] = { IDC_LABEL_PATH1, IDC_LABEL_PATH2, IDC_LABEL_PATH3, IDC_LABEL_PATH4, IDC_LABEL_PATH5,
+ IDC_LABEL_PATH6, IDC_LABEL_PATH7, IDC_LABEL_PATH8};
+ for (int i = 0; i < 8; i++) {
+ pItem = GetDlgItem(idx[i]);
+ pItem->GetWindowRect(&rcItem);
+ pItem->MoveWindow(BTN_X - rcItem.Width() - 18,
+ BTN_Y + (36 - rcItem.Height()) / 2 + (BTN_WIDTH + marginy) * i,
+ rcItem.Width(), rcItem.Height());
+ }
+
+ int idy[] = { IDC_LABEL_NAME1, IDC_LABEL_NAME2, IDC_LABEL_NAME3, IDC_LABEL_NAME4, IDC_LABEL_NAME5,
+ IDC_LABEL_NAME6, IDC_LABEL_NAME7, IDC_LABEL_NAME8 };
+ for (int i = 0; i < 8; i++) {
+ pItem = GetDlgItem(idy[i]);
+ pItem->GetWindowRect(&rcItem);
+ pItem->MoveWindow(BTN_X + (BTN_WIDTH + marginx) * i,
+ BTN_Y - 36,
+ rcItem.Width(), rcItem.Height());
+ }
+}
+
+void CPageLinkSignal::OnTimer(UINT_PTR nIDEvent)
+{
+ if (nIDEvent == TIMER_ID_SIGNAL_UPDATE) {
+ if (m_pEquipment) {
+ UpdateAllSignalStatesFromDevice();
+ }
+ }
+
+ CHMPropertyPage::OnTimer(nIDEvent);
+}
+
+void CPageLinkSignal::UpdateAllSignalStatesFromDevice()
+{
+ ASSERT(m_pEquipment);
+
+ for (int nRow = 0; nRow < 8; ++nRow) {
+ for (int nCol = 0; nCol < 8; ++nCol) {
+ BOOL bCurrentState = m_pEquipment->isLinkSignalOn(nRow, nCol);
+ UpdateSignalState(nRow, nCol, bCurrentState);
+ }
+ }
+}
+
+void CPageLinkSignal::UpdateSignalState(int nRow, int nCol, bool bNewState)
+{
+ if (!::IsWindow(m_pBtn[nRow][nCol]->GetSafeHwnd())) {
+ return;
+ }
+
+ bool bState = ::GetProp(m_pBtn[nRow][nCol]->GetSafeHwnd(), _T("State")) == (void*)1;
+ if (bState != bNewState) {
+ m_pBtn[nRow][nCol]->SetFaceColor(bNewState ? FACECOLOR_ON : FACECOLOR_OFF);
+ ::SetProp(m_pBtn[nRow][nCol]->GetSafeHwnd(), _T("State"), bNewState ? (void*)1 : (void*)0);
+ }
+}
+
+
diff --git a/SourceCode/Bond/Servo/CPageLinkSignal.h b/SourceCode/Bond/Servo/CPageLinkSignal.h
new file mode 100644
index 0000000..c671159
--- /dev/null
+++ b/SourceCode/Bond/Servo/CPageLinkSignal.h
@@ -0,0 +1,40 @@
+锘�#pragma once
+#include "CHMPropertyPage.h"
+#include "BlButton.h"
+
+
+// CPageLinkSignal 瀵硅瘽妗�
+
+class CPageLinkSignal : public CHMPropertyPage
+{
+ DECLARE_DYNAMIC(CPageLinkSignal)
+
+public:
+ CPageLinkSignal(CWnd* pParent = nullptr); // 鏍囧噯鏋勯�犲嚱鏁�
+ virtual ~CPageLinkSignal();
+ void setEquipment(SERVO::CEquipment* pEquipment);
+ void CreateSignalButtons();
+ void UpdateAllSignalStatesFromDevice();
+ void UpdateSignalState(int nRow, int nCol, bool bNewState);
+
+
+private:
+ SERVO::CEquipment* m_pEquipment;
+ CBlButton* m_pBtn[8][8];
+
+// 瀵硅瘽妗嗘暟鎹�
+#ifdef AFX_DESIGN_TIME
+ enum { IDD = IDD_PAGE_LINK_SIGNAL };
+#endif
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 鏀寔
+
+ DECLARE_MESSAGE_MAP()
+public:
+ virtual BOOL OnInitDialog();
+ afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+ afx_msg void OnDestroy();
+ afx_msg void OnSize(UINT nType, int cx, int cy);
+ afx_msg void OnTimer(UINT_PTR nIDEvent);
+};
diff --git a/SourceCode/Bond/Servo/Servo.rc b/SourceCode/Bond/Servo/Servo.rc
index 7f2c66a..07850e9 100644
--- a/SourceCode/Bond/Servo/Servo.rc
+++ b/SourceCode/Bond/Servo/Servo.rc
Binary files differ
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj b/SourceCode/Bond/Servo/Servo.vcxproj
index 6a9a993..7c55823 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj
+++ b/SourceCode/Bond/Servo/Servo.vcxproj
@@ -201,6 +201,7 @@
<ClInclude Include="CEquipmentPage3.h" />
<ClInclude Include="CGlassPool.h" />
<ClInclude Include="CMyStatusbar.h" />
+ <ClInclude Include="CPageLinkSignal.h" />
<ClInclude Include="CRobotCmdContainerDlg.h" />
<ClInclude Include="CRobotCmdTestDlg.h" />
<ClInclude Include="CPagePortStatus.h" />
@@ -332,6 +333,7 @@
<ClCompile Include="CEquipmentPage3.cpp" />
<ClCompile Include="CGlassPool.cpp" />
<ClCompile Include="CMyStatusbar.cpp" />
+ <ClCompile Include="CPageLinkSignal.cpp" />
<ClCompile Include="CRobotCmdContainerDlg.cpp" />
<ClCompile Include="CRobotCmdTestDlg.cpp" />
<ClCompile Include="CPagePortStatus.cpp" />
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj.filters b/SourceCode/Bond/Servo/Servo.vcxproj.filters
index 0ce3503..bb768f8 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj.filters
+++ b/SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -158,6 +158,7 @@
<ClCompile Include="CRobotTaskDlg.cpp" />
<ClCompile Include="PageTransferLog.cpp" />
<ClCompile Include="ServoMemDC.cpp" />
+ <ClCompile Include="CPageLinkSignal.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="AlarmManager.h" />
@@ -321,6 +322,7 @@
<ClInclude Include="CRobotTaskDlg.h" />
<ClInclude Include="PageTransferLog.h" />
<ClInclude Include="ServoMemDC.h" />
+ <ClInclude Include="CPageLinkSignal.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Servo.rc" />
diff --git a/SourceCode/Bond/Servo/resource.h b/SourceCode/Bond/Servo/resource.h
index 1827348..fd67615 100644
--- a/SourceCode/Bond/Servo/resource.h
+++ b/SourceCode/Bond/Servo/resource.h
Binary files differ
--
Gitblit v1.9.3