From 9ad04a15d7f9438cf3e5f1b69b8d458ae767bdf5 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期六, 26 四月 2025 18:06:39 +0800
Subject: [PATCH] 1.CReadStep增加写入返回值或数据的功能;

---
 SourceCode/Bond/Servo/CReadStep.cpp                                               |   22 ++++++++++++++++++++++
 SourceCode/Bond/Servo/CEqVcrEventStep.cpp                                         |    6 ++++++
 SourceCode/Bond/Servo/CEqVcrEventStep.h                                           |    1 +
 SourceCode/Bond/Servo/CWriteStep.cpp                                              |    4 ++--
 SourceCode/Bond/Servo/CEquipment.cpp                                              |    2 ++
 SourceCode/Bond/Servo/CReadStep.h                                                 |    7 +++++++
 Document/~$WIN_EAS_Equipment_Communication_Specification(CC-LINK)_v3.1(翻译结果).docx |    0 
 SourceCode/Bond/Servo/CMaster.cpp                                                 |    1 +
 8 files changed, 41 insertions(+), 2 deletions(-)

diff --git "a/Document/~$WIN_EAS_Equipment_Communication_Specification\050CC-LINK\051_v3.1\050\347\277\273\350\257\221\347\273\223\346\236\234\051.docx" "b/Document/~$WIN_EAS_Equipment_Communication_Specification\050CC-LINK\051_v3.1\050\347\277\273\350\257\221\347\273\223\346\236\234\051.docx"
new file mode 100644
index 0000000..ac59be7
--- /dev/null
+++ "b/Document/~$WIN_EAS_Equipment_Communication_Specification\050CC-LINK\051_v3.1\050\347\277\273\350\257\221\347\273\223\346\236\234\051.docx"
Binary files differ
diff --git a/SourceCode/Bond/Servo/CEqVcrEventStep.cpp b/SourceCode/Bond/Servo/CEqVcrEventStep.cpp
index d98d170..644a7e3 100644
--- a/SourceCode/Bond/Servo/CEqVcrEventStep.cpp
+++ b/SourceCode/Bond/Servo/CEqVcrEventStep.cpp
@@ -78,5 +78,11 @@
 	{
 		return &m_vcrEventReport;
 	}
+
+	int CEqVcrEventStep::setReturnCode(short code)
+	{
+		memcpy(m_szReturnBuf, &code, sizeof(short));
+		m_nReturnDataSize = sizeof(short);
+	}
 }
 
diff --git a/SourceCode/Bond/Servo/CEqVcrEventStep.h b/SourceCode/Bond/Servo/CEqVcrEventStep.h
index 6d8cb63..b7b64a4 100644
--- a/SourceCode/Bond/Servo/CEqVcrEventStep.h
+++ b/SourceCode/Bond/Servo/CEqVcrEventStep.h
@@ -17,6 +17,7 @@
 		virtual int onTimeout();
 		void setVcrEventReportDev(int nDev);
 		CVcrEventReport* getVcrEventReport();
+		int setReturnCode(short code);
 
 	private:
 		int m_nVcrEventReportDev;
diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index f710669..28b9a38 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -543,6 +543,8 @@
 					m_listener.onVcrEventReport(this, pVcrEventReport);
 				}
 
+				// 0426, 先固定返回1(OK)
+				pEqVcrEventStep->setReturnCode(1);		
 				return 1;
 			}
 		}
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 0c7ab7c..c05e973 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -445,6 +445,7 @@
 			CEqVcrEventStep* pStep = new CEqVcrEventStep();
 			pStep->setName(STEP_EQ_VCR1_EVENT_REPORT);
 			pStep->setWriteSignalDev(0x4a);
+			pStep->setReturnDev(0x91e);
 			pStep->setVcrEventReportDev(0x5fef);
 			if (pEquipment->addStep(STEP_ID_VCR1_EVENT_REPORT, pStep) != 0) {
 				delete pStep;
diff --git a/SourceCode/Bond/Servo/CReadStep.cpp b/SourceCode/Bond/Servo/CReadStep.cpp
index a482c7a..787d92a 100644
--- a/SourceCode/Bond/Servo/CReadStep.cpp
+++ b/SourceCode/Bond/Servo/CReadStep.cpp
@@ -22,6 +22,9 @@
 		m_hReadSignalOff = ::CreateEvent(NULL, TRUE, FALSE, NULL);
 		m_nSignalType = 0;
 		m_nCurStep = 0;
+		m_szReturnBuf[1024] = {0};
+		m_nReturnDataSize = 0;
+		m_nReturnDevNo = 0;
 	}
 
 	CReadStep::~CReadStep()
@@ -38,6 +41,11 @@
 	void CReadStep::setWriteSignalDev(int dev)
 	{
 		m_nWriteSignalDev = dev;
+	}
+	
+	void CReadStep::setReturnDev(int dev)
+	{
+		m_nReturnDevNo = dev;
 	}
 
 	void CReadStep::onReadSignal(int nSignalType)
@@ -88,6 +96,17 @@
 					m_pEquipment->onStepEvent(this, STEP_EVENT_READDATA);
 				}
 
+				// 0426新增
+				// 1.1,写return code or data
+				if (m_nReturnDataSize > 0) {
+					int nWriteRet = m_pCclink->WriteData(m_station, (short)DeviceType::W,
+						m_nReturnDevNo, m_nReturnDataSize, (short*)m_szReturnBuf);
+					if (0 != nWriteRet) {
+						onTimeout();
+						goto RESET;
+					}
+				}
+
 				// 2.给对方写ON
 				nextStep();
 				m_pCclink->SetBitDeviceEx(m_station, (long)DeviceType::B, m_nWriteSignalDev);
@@ -115,6 +134,9 @@
 					ASSERT(m_pEquipment);
 					m_pEquipment->onStepEvent(this, STEP_EVENT_COMPLETE);
 				}
+
+				// 回复数据清空
+				m_nReturnDataSize = 0;
 			}
 		}
 
diff --git a/SourceCode/Bond/Servo/CReadStep.h b/SourceCode/Bond/Servo/CReadStep.h
index e5c88d2..c79ea0f 100644
--- a/SourceCode/Bond/Servo/CReadStep.h
+++ b/SourceCode/Bond/Servo/CReadStep.h
@@ -12,6 +12,7 @@
 	public:
 		unsigned WorkingProc();
 		virtual void setWriteSignalDev(int dev);
+		virtual void setReturnDev(int dev);
 		virtual void onReadSignal(int nSignalType);
 		virtual int onReadData();
 		virtual void init();
@@ -31,6 +32,12 @@
 		int m_nSignalType;
 		int m_nCurStep;
 		int m_nWriteSignalDev;			// 对方BIT地址
+
+		// return code or data
+	protected:
+		char m_szReturnBuf[1024];
+		int m_nReturnDataSize;
+		int m_nReturnDevNo;
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CWriteStep.cpp b/SourceCode/Bond/Servo/CWriteStep.cpp
index 5414b12..ba18a5c 100644
--- a/SourceCode/Bond/Servo/CWriteStep.cpp
+++ b/SourceCode/Bond/Servo/CWriteStep.cpp
@@ -89,9 +89,9 @@
 				// 1.写数据
 				nextStep();
 				ASSERT(m_pCclink);
-				int nRet = m_pCclink->WriteData(m_station, (short)DeviceType::W,
+				int nWriteRet = m_pCclink->WriteData(m_station, (short)DeviceType::W,
 					m_nWriteDevNo, m_nWriteDataSize, (short*)m_szBuffer);
-				if (0 != nRet) {
+				if (0 != nWriteRet) {
 					onTimeout();
 					goto RESET;
 				}

--
Gitblit v1.9.3