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