From 637cc6677dace087410079fd2ee434a4fbd45adb Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 26 六月 2025 15:14:43 +0800
Subject: [PATCH] 1. 添加定时器获取当前EFEM位置,并且更新(包括手臂是否有片)
---
SourceCode/Bond/Servo/CPageGraph1.h | 2 +
SourceCode/Bond/Servo/CPageGraph1.cpp | 68 +++++++++++++++++++++++++++++++--
SourceCode/Bond/Servo/Common.h | 1
3 files changed, 66 insertions(+), 5 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageGraph1.cpp b/SourceCode/Bond/Servo/CPageGraph1.cpp
index 70fefb3..b213879 100644
--- a/SourceCode/Bond/Servo/CPageGraph1.cpp
+++ b/SourceCode/Bond/Servo/CPageGraph1.cpp
@@ -41,6 +41,10 @@
#define INDICATE_BAKE_COOLING 12
#define INDICATE_MEASUREMENT 13
+// 瀹氭椂鍣�
+#define TIMER_ID_DEVICE_STATUS 1 // 鐢ㄤ簬鍒濆鍖栬澶囩姸鎬�
+#define TIMER_ID_ROBOT_STATUS 2 // 鐢ㄤ簬鍛ㄦ湡鍒锋柊鏈哄櫒浜轰綅缃�/鑷傜姸鎬�
+
// CPageGraph1 瀵硅瘽妗�
IMPLEMENT_DYNAMIC(CPageGraph1, CDialogEx)
@@ -148,8 +152,8 @@
{
CDialogEx::OnInitDialog();
InitRxWindows();
- SetTimer(1, 3000, nullptr);
-
+ SetTimer(TIMER_ID_DEVICE_STATUS, 3000, nullptr);
+ SetTimer(TIMER_ID_ROBOT_STATUS, 1000, nullptr); // 姣� 1000ms 鏇存柊涓�娆$姸鎬�
// 鍥剧ず
m_pGraph = CServoGraph::Hook(GetDlgItem(IDC_SERVO_GRAPH1)->GetSafeHwnd());
@@ -251,7 +255,12 @@
newFrameColor2 = EQ_BOX_FRAME2;
break;
case OFFLINE:
- newBackgroundColor = RGB(222, 222, 222);
+ newBackgroundColor = EQ_BOX_OFFLINE;
+ newFrameColor1 = EQ_BOX_FRAME1;
+ newFrameColor2 = EQ_BOX_FRAME2;
+ break;
+ case OCCUPIED:
+ newBackgroundColor = EQ_BOX_OCCUPIED;
newFrameColor1 = EQ_BOX_FRAME1;
newFrameColor2 = EQ_BOX_FRAME2;
break;
@@ -299,6 +308,8 @@
void CPageGraph1::OnDestroy()
{
CDialogEx::OnDestroy();
+
+ KillTimer(TIMER_ID_ROBOT_STATUS);
if (m_hbrBkgnd != nullptr) {
::DeleteObject(m_hbrBkgnd);
@@ -461,6 +472,8 @@
// 鏃嬭浆鏂瑰悜
RotateRobot(mapping.angle);
+
+ m_lastRobotPosition = position;
}
void CPageGraph1::OnGraphItemClicked(NMHDR* pNMHDR, LRESULT* pResult)
@@ -513,14 +526,20 @@
void CPageGraph1::OnTimer(UINT_PTR nIDEvent)
{
- if (1 == nIDEvent) {
- KillTimer(1);
+ if (TIMER_ID_DEVICE_STATUS == nIDEvent) {
+ KillTimer(TIMER_ID_DEVICE_STATUS);
// 鏇存柊鐘舵��
{
SERVO::CEquipment* pEquipment = (SERVO::CEFEM*)theApp.m_model.m_master.getEquipment(EQ_ID_EFEM);
ASSERT(pEquipment);
DeviceStatus status = pEquipment->isAlive() ? DeviceStatus::ONLINE : DeviceStatus::OFFLINE;
+ UpdateDeviceStatus(INDICATE_FLIPER, status);
+ UpdateDeviceStatus(INDICATE_ALIGNER, status);
+ UpdateDeviceStatus(INDICATE_LPORT1, status);
+ UpdateDeviceStatus(INDICATE_LPORT2, status);
+ UpdateDeviceStatus(INDICATE_LPORT3, status);
+ UpdateDeviceStatus(INDICATE_LPORT4, status);
UpdateDeviceStatus(INDICATE_ROBOT_ARM1, status);
UpdateDeviceStatus(INDICATE_ROBOT_ARM2, status);
}
@@ -538,6 +557,45 @@
DeviceStatus status = pEquipment->isAlive() ? DeviceStatus::ONLINE : DeviceStatus::OFFLINE;
UpdateDeviceStatus(INDICATE_BONDER2, status);
}
+
+ {
+ SERVO::CEquipment* pEquipment = theApp.m_model.m_master.getEquipment(EQ_ID_VACUUMBAKE);
+ ASSERT(pEquipment);
+ DeviceStatus status = pEquipment->isAlive() ? DeviceStatus::ONLINE : DeviceStatus::OFFLINE;
+ UpdateDeviceStatus(INDICATE_VACUUM_BAKE, status);
+ }
+
+ {
+ SERVO::CEquipment* pEquipment = theApp.m_model.m_master.getEquipment(EQ_ID_BAKE_COOLING);
+ ASSERT(pEquipment);
+ DeviceStatus status = pEquipment->isAlive() ? DeviceStatus::ONLINE : DeviceStatus::OFFLINE;
+ UpdateDeviceStatus(INDICATE_BAKE_COOLING, status);
+ }
+
+ {
+ SERVO::CEquipment* pEquipment = theApp.m_model.m_master.getEquipment(EQ_ID_MEASUREMENT);
+ ASSERT(pEquipment);
+ DeviceStatus status = pEquipment->isAlive() ? DeviceStatus::ONLINE : DeviceStatus::OFFLINE;
+ UpdateDeviceStatus(INDICATE_MEASUREMENT, status);
+ }
+ }
+ else if (nIDEvent == TIMER_ID_ROBOT_STATUS) {
+ SERVO::CEFEM* pEFEM = (SERVO::CEFEM*)theApp.m_model.m_master.getEquipment(EQ_ID_EFEM);
+ if (!pEFEM || !pEFEM->isAlive()) {
+ return;
+ }
+
+ // 濡傛灉璁惧鍦ㄧ嚎锛岄偅涔堟洿鏂� ARM 鐘舵��
+ SERVO::RMDATA& robotData = pEFEM->getRobotMonitoringData();
+ DeviceStatus arm1Status = robotData.armState[0] ? DeviceStatus::OCCUPIED : DeviceStatus::ONLINE;
+ DeviceStatus arm2Status = robotData.armState[1] ? DeviceStatus::OCCUPIED : DeviceStatus::ONLINE;
+ UpdateDeviceStatus(INDICATE_ROBOT_ARM1, arm1Status);
+ UpdateDeviceStatus(INDICATE_ROBOT_ARM2, arm2Status);
+
+ // 浣嶇疆淇℃伅鐘舵�佹樉绀�
+ if (robotData.position != m_lastRobotPosition) {
+ MoveRobotToPosition(robotData.position);
+ }
}
CDialogEx::OnTimer(nIDEvent);
diff --git a/SourceCode/Bond/Servo/CPageGraph1.h b/SourceCode/Bond/Servo/CPageGraph1.h
index 8a2b044..7609a49 100644
--- a/SourceCode/Bond/Servo/CPageGraph1.h
+++ b/SourceCode/Bond/Servo/CPageGraph1.h
@@ -5,6 +5,7 @@
enum DeviceStatus {
ONLINE, // 鍦ㄧ嚎
OFFLINE, // 绂荤嚎
+ OCCUPIED // 鏈夌墖锛堝崰鐢級
};
struct RobotPositionMapping {
@@ -39,6 +40,7 @@
BOOL m_bIsRobotMoving;
COLORREF m_crBkgnd;
HBRUSH m_hbrBkgnd;
+ SERVO::ROBOT_POSITION m_lastRobotPosition;
// 瀵硅瘽妗嗘暟鎹�
#ifdef AFX_DESIGN_TIME
diff --git a/SourceCode/Bond/Servo/Common.h b/SourceCode/Bond/Servo/Common.h
index 632b505..21fe6c9 100644
--- a/SourceCode/Bond/Servo/Common.h
+++ b/SourceCode/Bond/Servo/Common.h
@@ -34,6 +34,7 @@
#define PAGE_GRPAH2_BACKGROUND_COLOR RGB(255, 255, 255)
#define EQ_BOX_OFFLINE RGB(222, 222, 222)
#define EQ_BOX_ONLINE RGB(0, 176, 80)
+#define EQ_BOX_OCCUPIED RGB(0, 204, 102)
#define EQ_BOX_FRAME1 RGB(22, 22, 22)
#define EQ_BOX_FRAME2 RGB(255, 127, 39)
#define CR_MSGBOX_BKGND RGB(7, 71, 166)
--
Gitblit v1.9.3