From 5edb485d226790306097e40ea954efb2ed90dd21 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 11 八月 2025 16:05:09 +0800
Subject: [PATCH] 1.EAP:查询CJSpace和PJSpace功能模拟,Master对EAP查询机器变量的回复;
---
SourceCode/Bond/EAPSimulator/CHsmsActive.cpp | 12 ++++
SourceCode/Bond/EAPSimulator/Resource.h | 11 ++-
SourceCode/Bond/Servo/HsmsPassive.h | 4 +
SourceCode/Bond/Servo/CVariable.h | 1
SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp | 14 ++++
SourceCode/Bond/EAPSimulator/CHsmsActive.h | 7 ++
SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h | 2
SourceCode/Bond/Servo/HsmsPassive.cpp | 67 ++++++++++++++++++++++
SourceCode/Bond/EAPSimulator/EAPSimulator.rc | 0
SourceCode/Bond/Servo/CVariable.cpp | 11 +++
SourceCode/Bond/Servo/ServoDlg.cpp | 11 +++
SourceCode/Bond/x64/Debug/VariableList.txt | 3
12 files changed, 136 insertions(+), 7 deletions(-)
diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
index 2dc424f..b084312 100644
--- a/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
+++ b/SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
@@ -289,6 +289,18 @@
return 0;
}
+int CHsmsActive::hsmsSelectedEquipmentStatusRequest(unsigned int SVID)
+{
+ IMessage* pMessage = nullptr;
+ int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 3, ++m_nSystemByte);
+
+ pMessage->getBody()->addU4Item(SVID, "SVID");
+ m_pActive->sendMessage(pMessage);
+ HSMS_Destroy1Message(pMessage);
+
+ return 0;
+}
+
int CHsmsActive::hsmsQueryPPIDList()
{
IMessage* pMessage = nullptr;
diff --git a/SourceCode/Bond/EAPSimulator/CHsmsActive.h b/SourceCode/Bond/EAPSimulator/CHsmsActive.h
index b814d4b..0383681 100644
--- a/SourceCode/Bond/EAPSimulator/CHsmsActive.h
+++ b/SourceCode/Bond/EAPSimulator/CHsmsActive.h
@@ -6,6 +6,10 @@
#include "CCollectionEvent.h"
+#define SVID_CJobSpace 5001
+#define SVID_PJobSpace 5002
+
+
typedef std::function<void(void* pFrom, ACTIVESTATE state)> STATECHANGED;
typedef struct _ACTIVEListener
{
@@ -61,6 +65,9 @@
int hsmsTransmitSpooledData();
int hsmsPurgeSpooledData();
+ // 查询变量
+ int hsmsSelectedEquipmentStatusRequest(unsigned int SVID);
+
// 查询PPID List
int hsmsQueryPPIDList();
diff --git a/SourceCode/Bond/EAPSimulator/EAPSimulator.rc b/SourceCode/Bond/EAPSimulator/EAPSimulator.rc
index f489bd8..53f3fad 100644
--- a/SourceCode/Bond/EAPSimulator/EAPSimulator.rc
+++ b/SourceCode/Bond/EAPSimulator/EAPSimulator.rc
Binary files differ
diff --git a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
index 3af62af..eaed5c6 100644
--- a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
+++ b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
@@ -90,6 +90,8 @@
ON_BN_CLICKED(IDC_BUTTON_QUERY_PPID_LIST, &CEAPSimulatorDlg::OnBnClickedButtonQueryPpidList)
ON_BN_CLICKED(IDC_BUTTON_PROCEED_WITH_CARRIER, &CEAPSimulatorDlg::OnBnClickedButtonProceedWithCarrier)
ON_BN_CLICKED(IDC_BUTTON_CARRIER_RELEASE, &CEAPSimulatorDlg::OnBnClickedButtonCarrierRelease)
+ ON_BN_CLICKED(IDC_BUTTON_QUERY_CJ_SPACE, &CEAPSimulatorDlg::OnBnClickedButtonQueryCjSpace)
+ ON_BN_CLICKED(IDC_BUTTON_QUERY_PJ_SPACE, &CEAPSimulatorDlg::OnBnClickedButtonQueryPjSpace)
END_MESSAGE_MAP()
@@ -279,6 +281,8 @@
GetDlgItem(IDC_BUTTON_QUERY_PPID_LIST)->EnableWindow(enabled);
GetDlgItem(IDC_BUTTON_PROCEED_WITH_CARRIER)->EnableWindow(enabled);
GetDlgItem(IDC_BUTTON_CARRIER_RELEASE)->EnableWindow(enabled);
+ GetDlgItem(IDC_BUTTON_QUERY_CJ_SPACE)->EnableWindow(enabled);
+ GetDlgItem(IDC_BUTTON_QUERY_PJ_SPACE)->EnableWindow(enabled);
}
void CEAPSimulatorDlg::OnBnClickedButtonConnect()
@@ -376,6 +380,16 @@
theApp.m_model.m_pHsmsActive->hsmsPurgeSpooledData();
}
+void CEAPSimulatorDlg::OnBnClickedButtonQueryCjSpace()
+{
+ theApp.m_model.m_pHsmsActive->hsmsSelectedEquipmentStatusRequest(SVID_CJobSpace);
+}
+
+void CEAPSimulatorDlg::OnBnClickedButtonQueryPjSpace()
+{
+ theApp.m_model.m_pHsmsActive->hsmsSelectedEquipmentStatusRequest(SVID_PJobSpace);
+}
+
void CEAPSimulatorDlg::OnBnClickedButtonQueryPpidList()
{
theApp.m_model.m_pHsmsActive->hsmsQueryPPIDList();
diff --git a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
index c19a88e..42e69d2 100644
--- a/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
+++ b/SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
@@ -59,4 +59,6 @@
afx_msg void OnBnClickedButtonQueryPpidList();
afx_msg void OnBnClickedButtonProceedWithCarrier();
afx_msg void OnBnClickedButtonCarrierRelease();
+ afx_msg void OnBnClickedButtonQueryCjSpace();
+ afx_msg void OnBnClickedButtonQueryPjSpace();
};
diff --git a/SourceCode/Bond/EAPSimulator/Resource.h b/SourceCode/Bond/EAPSimulator/Resource.h
index b39967c..a16bb26 100644
--- a/SourceCode/Bond/EAPSimulator/Resource.h
+++ b/SourceCode/Bond/EAPSimulator/Resource.h
@@ -46,10 +46,11 @@
#define IDC_EDIT_CE_NAME 1031
#define IDC_BUTTON_QUERY_PPID_LIST 1032
#define IDC_EDIT_CE_RPTID 1033
-#define IDC_BUTTON_PROCEED_WITH_CARRIER 1033
-#define IDC_BUTTON_TRANSMIT_SPOOLED_DATA 1034
-#define IDC_BUTTON_PROCEED_WITH_CARRIER2 1035
-#define IDC_BUTTON_CARRIER_RELEASE 1035
+#define IDC_BUTTON_PROCEED_WITH_CARRIER 1034
+#define IDC_BUTTON_TRANSMIT_SPOOLED_DATA 1035
+#define IDC_BUTTON_CARRIER_RELEASE 1036
+#define IDC_BUTTON_QUERY_CJ_SPACE 1037
+#define IDC_BUTTON_QUERY_PJ_SPACE 1038
// Next default values for new objects
//
@@ -57,7 +58,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 141
#define _APS_NEXT_COMMAND_VALUE 32771
-#define _APS_NEXT_CONTROL_VALUE 1035
+#define _APS_NEXT_CONTROL_VALUE 1039
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
diff --git a/SourceCode/Bond/Servo/CVariable.cpp b/SourceCode/Bond/Servo/CVariable.cpp
index e9c5d83..60d0ab9 100644
--- a/SourceCode/Bond/Servo/CVariable.cpp
+++ b/SourceCode/Bond/Servo/CVariable.cpp
@@ -125,4 +125,15 @@
return strRet;
}
+
+ __int64 CVariable::getIntValue()
+ {
+ if (m_format == SVFromat::U1 || m_format == SVFromat::U2 || m_format == SVFromat::I2) {
+ return m_nValue;
+ }
+
+ return 0;
+ }
+
+
}
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/CVariable.h b/SourceCode/Bond/Servo/CVariable.h
index beeadd2..8cf68a7 100644
--- a/SourceCode/Bond/Servo/CVariable.h
+++ b/SourceCode/Bond/Servo/CVariable.h
@@ -29,6 +29,7 @@
void setValue(__int64 value);
void setValue(const char* pszValue);
std::string getValue();
+ __int64 getIntValue();
private:
unsigned int m_nVarialbeId;
diff --git a/SourceCode/Bond/Servo/HsmsPassive.cpp b/SourceCode/Bond/Servo/HsmsPassive.cpp
index 7a80fd5..1a18950 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.cpp
+++ b/SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -103,6 +103,31 @@
}
+void CHsmsPassive::addVariableValueToItem(ISECS2Item* pParent, SERVO::CVariable* pVariable)
+{
+ ASSERT(pParent);
+ ASSERT(pVariable);
+
+ SERVO::SVFromat format = pVariable->getFormat();
+ switch (format)
+ {
+ case SERVO::SVFromat::U1:
+ pParent->addU1Item((unsigned char)pVariable->getIntValue(), "SV");
+ break;
+ case SERVO::SVFromat::U2:
+ pParent->addU2Item((unsigned char)pVariable->getIntValue(), "SV");
+ break;
+ case SERVO::SVFromat::I2:
+ pParent->addI2Item((unsigned char)pVariable->getIntValue(), "SV");
+ break;
+ case SERVO::SVFromat::A20:
+ case SERVO::SVFromat::A50:
+ pParent->addItem(pVariable->getValue().c_str(), "SV");
+ default:
+ break;
+ }
+}
+
void CHsmsPassive::linkEventReport(unsigned int CEID, unsigned int RPTID)
{
SERVO::CCollectionEvent* pEvent = getEvent(CEID);
@@ -536,6 +561,9 @@
// S1F1
replyAreYouThere(pMessage);
}
+ else if (nStream == 1 && pHeader->function == 3) {
+ replySelectedEquipmentStatusData(pMessage);
+ }
else if (nStream == 1 && pHeader->function == 13) {
replyEstablishCommunications(pMessage);
}
@@ -902,6 +930,45 @@
return 0;
}
+int CHsmsPassive::replySelectedEquipmentStatusData(IMessage* pRecv)
+{
+ if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
+ return ER_NOTSELECT;
+ }
+
+ IMessage* pMessage = NULL;
+ HSMS_Create1Message(pMessage, m_nSessionId, 1, 4, pRecv->getHeader()->systemBytes);
+ ASSERT(pMessage);
+
+ unsigned char SVU1 = 0;
+ unsigned int SVID = 0;
+ ISECS2Item* pBody = pRecv->getBody();
+ if (pBody == nullptr || pBody->getType() != SITYPE::L) {
+ pMessage->getBody()->addU1Item(SVU1, "SV");
+ goto MYREPLY;
+ }
+ if (!pBody->getSubItemU4(0, SVID)) {
+ pMessage->getBody()->addU1Item(SVU1, "SV");
+ goto MYREPLY;
+ }
+
+ SERVO::CVariable* pVariable = getVariable(SVID);
+ if (pVariable == nullptr) {
+ pMessage->getBody()->addU1Item(SVU1, "SV");
+ goto MYREPLY;
+ }
+ addVariableValueToItem(pMessage->getBody(), pVariable);
+
+MYREPLY:
+ m_pPassive->sendMessage(pMessage);
+ LOGI("<HSMS>[SECS Msg SEND]%s", pMessage->toString());
+ HSMS_Destroy1Message(pMessage);
+
+
+
+ return 0;
+}
+
// S2F13
int CHsmsPassive::replyEquipmentConstantRequest(IMessage* pRecv)
{
diff --git a/SourceCode/Bond/Servo/HsmsPassive.h b/SourceCode/Bond/Servo/HsmsPassive.h
index f542cf7..f50de9b 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.h
+++ b/SourceCode/Bond/Servo/HsmsPassive.h
@@ -115,6 +115,9 @@
/* 设置软件版本号 最大长度 20 bytes */
void setSoftRev(const char* pszRev);
+ /* 添加变量值到ISECS2Item */
+ void addVariableValueToItem(ISECS2Item* pParent, SERVO::CVariable* pVariable);
+
// 连接Report
void linkEventReport(unsigned int CEID, unsigned int RPTID);
@@ -188,6 +191,7 @@
/* reply开头的函数为回复函数 */
int replyAreYouThere(IMessage* pRecv);
int replyEstablishCommunications(IMessage* pRecv);
+ int replySelectedEquipmentStatusData(IMessage* pRecv);
int replyOnLine(IMessage* pRecv);
int replyOffLine(IMessage* pRecv);
int replyEquipmentConstantRequest(IMessage* pRecv);
diff --git a/SourceCode/Bond/Servo/ServoDlg.cpp b/SourceCode/Bond/Servo/ServoDlg.cpp
index 746549b..14422e2 100644
--- a/SourceCode/Bond/Servo/ServoDlg.cpp
+++ b/SourceCode/Bond/Servo/ServoDlg.cpp
@@ -39,6 +39,8 @@
/* 运行时间定时器 */
#define TIMER_ID_UPDATE_RUMTIME 2
+/* Test */
+#define TIMER_ID_TEST 3
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
@@ -332,7 +334,7 @@
// model init
theApp.m_model.init();
-
+ SetTimer(TIMER_ID_TEST, 1000, nullptr);
// 菜单
CMenu menu;
@@ -875,6 +877,13 @@
m_pMyStatusbar->setRunTimeText((LPTSTR)(LPCTSTR)strText);
}
+ else if(TIMER_ID_TEST == nIDEvent){
+ static __int64 tttt = 0;
+ tttt++;
+ theApp.m_model.m_hsmsPassive.setVariableValue("CJobSpace", tttt % 10);
+ theApp.m_model.m_hsmsPassive.setVariableValue("PJobSpace", tttt % 5);
+ }
+
CDialogEx::OnTimer(nIDEvent);
}
diff --git a/SourceCode/Bond/x64/Debug/VariableList.txt b/SourceCode/Bond/x64/Debug/VariableList.txt
index 1a93f88..51b976d 100644
--- a/SourceCode/Bond/x64/Debug/VariableList.txt
+++ b/SourceCode/Bond/x64/Debug/VariableList.txt
@@ -8,7 +8,6 @@
701,PreviousProcessState,U1,
800,EFEMPPExecName,A20,
801,EQPPExecName,A20,
-1000,CJobSpace,U1,
2000,RbRAxisTorque,I2,机器人R轴扭矩
2001,RbLAxisTorque,l2,机器人L轴扭矩
2002,RbZAxisTorque,l2,机器人Z轴扭矩
@@ -36,3 +35,5 @@
2024,CCDEnable,U2,"CCD使能:O:开启 1:屏蔽"
2025,FFUParameter,U2,FFU设定值
5000,CarrierID,A20,卡匣ID
+5001,CJobSpace,U1,CJ Space
+5002,PJobSpace,U1,PJ Space
\ No newline at end of file
--
Gitblit v1.9.3