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.cpp |   68 +++++++++++++++++++++++++++++++--
 1 files changed, 63 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);

--
Gitblit v1.9.3