From 65802dfbbaf135e97a2415e3306aabfd2af49c69 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 05 六月 2025 16:41:04 +0800
Subject: [PATCH] 1.Link Signal数据获取,解释。
---
SourceCode/Bond/Servo/CPageGraph2.cpp | 5 +++++
SourceCode/Bond/Servo/CEquipment.cpp | 29 +++++++++++++++++++++++++++--
SourceCode/Bond/Servo/CEquipment.h | 10 +++++++++-
SourceCode/Bond/Servo/ServoCommo.h | 2 ++
4 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index 03f4b5d..43067d2 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -35,6 +35,7 @@
m_bLocalAlarm = FALSE;
m_bAutoRecipeChange = FALSE;
m_bVCREnable[0] = FALSE;
+ memset(m_bLinkSignal, 0, sizeof(m_bLinkSignal));
m_pCclink = nullptr;
m_nBaseAlarmId = 0;
m_pArm = nullptr;
@@ -363,9 +364,19 @@
}
*/
- // 以下解释和处理数据
+ // 连接信号解释和保存
BOOL bFlag;
- int index = 0x540;
+ int index = 0;
+ for (int i = 0; i < 8; i++) {
+ m_bLinkSignal[i][SIGNAL_UPSTREAM_INLINE] = isBitOn(pszData, size, index + 0);
+ m_bLinkSignal[i][SIGNAL_UPSTREAM_TROUBLE] = isBitOn(pszData, size, index + 1);
+ m_bLinkSignal[i][SIGNAL_SEND_ABLE] = isBitOn(pszData, size, index + 3);
+ index += 0x40;
+ }
+
+
+ // 其它信号及响应
+ index = 0x540;
// alive
@@ -582,6 +593,20 @@
return m_bVCREnable[index];
}
+ BOOL CEquipment::isLinkSignalOn(unsigned int path, unsigned int signal)
+ {
+ if (path >= PATH_MAX) return FALSE;
+ if (signal >= SIGNAL_MAX) return FALSE;
+ return m_bLinkSignal[path][signal];
+ }
+
+ void CEquipment::setLinkSignal(unsigned int path, unsigned int signal, BOOL bOn)
+ {
+ if (path >= PATH_MAX) return;
+ if (signal >= SIGNAL_MAX) return;
+ m_bLinkSignal[path][signal] = bOn;
+ }
+
int CEquipment::onStepEvent(CStep* pStep, int code)
{
if (code == STEP_EVENT_READDATA) {
diff --git a/SourceCode/Bond/Servo/CEquipment.h b/SourceCode/Bond/Servo/CEquipment.h
index a005fba..7b2b24e 100644
--- a/SourceCode/Bond/Servo/CEquipment.h
+++ b/SourceCode/Bond/Servo/CEquipment.h
@@ -38,7 +38,10 @@
namespace SERVO {
-#define SLOT_MAX 12
+#define SLOT_MAX 12
+#define SIGNAL_UPSTREAM_INLINE 0
+#define SIGNAL_UPSTREAM_TROUBLE 1
+#define SIGNAL_SEND_ABLE 2
typedef std::function<void(void* pEiuipment, BOOL bAlive)> ONALIVE;
typedef std::function<void(void* pEiuipment, int code)> ONDATACHANGED;
@@ -187,6 +190,10 @@
BOOL isLocalAlarm();
BOOL isAutoRecipeChange();
BOOL isVCREnable(unsigned int index);
+ BOOL isLinkSignalOn(unsigned int path, unsigned int signal);
+
+ // 只在模拟测试时使用的函数,用于模拟信号
+ void setLinkSignal(unsigned int path, unsigned int signal, BOOL bOn);
protected:
inline void Lock() { EnterCriticalSection(&m_criticalSection); }
@@ -231,6 +238,7 @@
BOOL m_bLocalAlarm;
BOOL m_bAutoRecipeChange;
BOOL m_bVCREnable[VCR_MAX];
+ BOOL m_bLinkSignal[PATH_MAX][SIGNAL_MAX];
protected:
CCCLinkIEControl* m_pCclink;
diff --git a/SourceCode/Bond/Servo/CPageGraph2.cpp b/SourceCode/Bond/Servo/CPageGraph2.cpp
index 6f06274..d2a356e 100644
--- a/SourceCode/Bond/Servo/CPageGraph2.cpp
+++ b/SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -128,6 +128,11 @@
CHMPropertyDlg dlg(pEquipment->getName().c_str(), 658, 788);
+ CEquipmentPage1* pPage1 = new CEquipmentPage1();
+ pPage1->setEquipment(pEquipment);
+ pPage1->Create(IDD_PAGE_EQUIPMENT1);
+ dlg.addPage(pPage1, "Link Signal");
+
if (_strcmpi(pEquipment->getClassName(), "CLoadPort") == 0) {
CPagePortProperty* pPageA = new CPagePortProperty();
pPageA->setLoadPort((SERVO::CLoadPort*)pEquipment);
diff --git a/SourceCode/Bond/Servo/ServoCommo.h b/SourceCode/Bond/Servo/ServoCommo.h
index acfd20a..e80ba90 100644
--- a/SourceCode/Bond/Servo/ServoCommo.h
+++ b/SourceCode/Bond/Servo/ServoCommo.h
@@ -5,6 +5,8 @@
#define BLOCK_BUFFER_MAX 1024
#define ALIVE_TIMEOUT 15
#define VCR_MAX 1
+#define PATH_MAX 8
+#define SIGNAL_MAX 8
#define ARM_ALL 99
enum class PortType {
--
Gitblit v1.9.3