From 44360bc2cdeee16be72f9cc4bfb42e0ac26b5b44 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 19 一月 2026 14:47:19 +0800
Subject: [PATCH] 1.修改优化
---
SourceCode/Bond/SGMeasurement/PLCSignalListener.h | 199 ++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 155 insertions(+), 44 deletions(-)
diff --git a/SourceCode/Bond/SGMeasurement/PLCSignalListener.h b/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
index 219e963..aa40df7 100644
--- a/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
+++ b/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
@@ -1,4 +1,4 @@
-#pragma once
+锘�#pragma once
#include "CCLinkIEControl.h"
@@ -15,62 +15,173 @@
class CPLCSignalListener
{
public:
- CPLCSignalListener();
- ~CPLCSignalListener();
+ CPLCSignalListener();
+ ~CPLCSignalListener();
- bool Initialize(StationIdentifier station, int nIntervalMs = 200);
+ /**
+ * @brief 鍒濆鍖� PLC 淇″彿鐩戝惉鍣ㄣ��
+ *
+ * @param station 鐩爣 PLC 鐨勭珯鍙锋爣璇嗙銆�
+ * @param nIntervalMs 杞鍛ㄦ湡锛堝崟浣嶏細姣锛夛紝榛樿 200ms銆�
+ * @return true 鍒濆鍖栨垚鍔熴��
+ * @return false 鍒濆鍖栧け璐ャ��
+ */
+ bool Initialize(StationIdentifier station, int nIntervalMs = 200);
- void SetStartCallback(Callback cb);
- void SetStopCallback(Callback cb);
- void SetAnalyzeCallback(AnalyzeCallback cb);
- void SetLogCallback(LogCallback cb);
+ /**
+ * @brief 璁剧疆寮�濮嬪懡浠ょ殑鍥炶皟鍑芥暟锛堝搴� PLC 鐨� Start 淇″彿锛夈��
+ *
+ * @param cb 鐢ㄦ埛鑷畾涔夌殑寮�濮嬪洖璋冨嚱鏁般��
+ */
+ void SetStartCallback(Callback cb);
- bool Start();
- void Stop();
+ /**
+ * @brief 璁剧疆鍋滄鍛戒护鐨勫洖璋冨嚱鏁帮紙瀵瑰簲 PLC 鐨� Stop 淇″彿锛夈��
+ *
+ * @param cb 鐢ㄦ埛鑷畾涔夌殑鍋滄鍥炶皟鍑芥暟銆�
+ */
+ void SetStopCallback(Callback cb);
- bool WriteOutValues(const OutValuesArray& values);
+ /**
+ * @brief 璁剧疆鍒嗘瀽璁$畻鍥炶皟鍑芥暟锛屽湪鎺ユ敹鍒板仠姝㈠懡浠ゅ悗璋冪敤銆�
+ *
+ * @param cb 杩斿洖璁$畻缁撴灉鏁扮粍锛圤UT1~OUT4锛夌殑鍑芥暟銆�
+ */
+ void SetAnalyzeCallback(AnalyzeCallback cb);
+
+ /**
+ * @brief 璁剧疆鏃ュ織杈撳嚭鍥炶皟鍑芥暟銆�
+ *
+ * @param cb 鐢ㄦ埛鎻愪緵鐨勬棩蹇楄緭鍑烘帴鍙o紙鍖呭惈鏃ュ織鍐呭鍜屾棩蹇楃被鍨嬶級銆�
+ */
+ void SetLogCallback(LogCallback cb);
+
+ /**
+ * @brief 鍚姩淇″彿鐩戝惉绾跨▼銆�
+ *
+ * @return true 鍚姩鎴愬姛銆�
+ * @return false 鍚姩澶辫触锛堝彲鑳藉凡杩愯鎴栨湭鍒濆鍖栵級銆�
+ */
+ bool Start();
+
+ /**
+ * @brief 鍋滄淇″彿鐩戝惉绾跨▼銆�
+ */
+ void Stop();
+
+ /**
+ * @brief 鍚� PLC 鍐欏叆鍒嗘瀽缁撴灉鍊硷紙閫氬父涓� OUT1 ~ OUT4锛夈��
+ *
+ * @param values 鍖呭惈鍥涗釜 double 绫诲瀷鐨勭粨鏋滃�硷紝灏嗚浆鎹负鏁存暟鍚庡啓鍏� PLC銆�
+ * @return true 鍐欏叆鎴愬姛銆�
+ * @return false 鍐欏叆澶辫触銆�
+ */
+ bool WriteOutValues(const OutValuesArray& values);
+
+ /**
+ * @brief 璇诲彇 PLC 鍐呴儴鐨勪骇鍝� ID锛堝瓧绗︿覆褰㈠紡锛夈��
+ *
+ * @param strProductID 杈撳嚭鍙傛暟锛屽瓨鍌ㄨ鍙栧埌鐨勪骇鍝� ID銆�
+ * @return true 璇诲彇鎴愬姛銆�
+ * @return false 璇诲彇澶辫触銆�
+ */
+ bool ReadProductID(std::string& strProductID);
private:
- void LogInfo(const CString& strText, int nType);
- bool SendHeartbeat();
- bool CheckHeartbeat();
- bool MonitorHeartbeat();
- void StartHeartbeatMonitor();
- void StopHeartbeatMonitor();
- void PulseBitDevice(DeviceType eDevType, long nBitNo, int nDelayMs = 50);
- void HandleAckLife(int i, bool bCurrTriggerBit);
- void ThreadProc();
+ /**
+ * @brief 杈撳嚭鏃ュ織淇℃伅锛堝皝瑁呮棩蹇楀洖璋冿級銆�
+ *
+ * @param strText 鏃ュ織鍐呭鏂囨湰銆�
+ * @param nType 鏃ュ織绫诲瀷锛圠OG_TYPE_NORMAL / ERROR / WARNING 绛夛級銆�
+ */
+ void LogInfo(const CString& strText, int nType);
+
+ /**
+ * @brief 鍚� PLC 鍐欏叆蹇冭烦淇″彿锛堜氦鏇夸綅锛夈��
+ *
+ * @return true 鍐欏叆鎴愬姛銆�
+ * @return false 鍐欏叆澶辫触锛堝鏈繛鎺ワ級銆�
+ */
+ bool SendHeartbeat();
+
+ /**
+ * @brief 妫�鏌ヤ粠 PLC 璇诲彇鍒扮殑蹇冭烦淇″彿鏄惁鍙戠敓鍙樺寲銆�
+ *
+ * @return true 蹇冭烦鏈夊彉鍖栵紙PLC 姝e父鍦ㄧ嚎锛夈��
+ * @return false 蹇冭烦鏃犲彉鍖栵紙鍙兘绂荤嚎锛夈��
+ */
+ bool CheckHeartbeat();
+
+ /**
+ * @brief 鐩戞帶 PLC 蹇冭烦鏄惁涓柇锛屽苟鑷姩璁板綍鐘舵�併��
+ *
+ * @return true PLC 鍦ㄧ嚎鎴栧湪鍏佽鐨勬湭鍝嶅簲娆℃暟鍐呫��
+ * @return false PLC 蹇冭烦涓柇锛岃秴杩囧厑璁搁槇鍊笺��
+ */
+ bool MonitorHeartbeat();
+
+ /**
+ * @brief 鍚姩蹇冭烦鐩戞帶绾跨▼锛堢嫭绔嬩簬淇″彿鐩戝惉绾跨▼锛夈��
+ */
+ void StartHeartbeatMonitor();
+
+ /**
+ * @brief 鍋滄蹇冭烦鐩戞帶绾跨▼銆�
+ */
+ void StopHeartbeatMonitor();
+
+ /**
+ * @brief 鍚戞寚瀹氳蒋鍏冧欢浣嶅啓鍏ヤ竴涓剦鍐诧紙鍏堝啓1锛屽欢鏃跺悗鑷姩鍐�0锛夈��
+ *
+ * @param eDevType 浣嶈蒋鍏冧欢绫诲瀷锛堝 M/B锛夈��
+ * @param nBitNo 浣嶅湴鍧�缂栧彿銆�
+ * @param nDelayMs 鑴夊啿鎸佺画鏃堕棿锛岄粯璁�50姣銆�
+ */
+ void PulseBitDevice(DeviceType eDevType, long nBitNo, int nDelayMs = 50);
+
+ /**
+ * @brief 绠$悊 ACK 鍝嶅簲鐨勭敓鍛藉懆鏈燂紝瓒呮椂鑷姩娓呴櫎銆�
+ *
+ * @param i 鎺у埗浣嶇储寮曪紙0=Start锛�1=Stop锛夈��
+ * @param bCurrTriggerBit 褰撳墠浠� PLC 璇诲彇鍒扮殑瑙﹀彂浣嶇姸鎬併��
+ */
+ void HandleAckLife(int i, bool bCurrTriggerBit);
+
+ /**
+ * @brief 涓荤洃鍚嚎绋嬮�昏緫锛屽惊鐜鍙� PLC 鎺у埗淇″彿骞跺鐞嗚Е鍙戙��
+ */
+ void ThreadProc();
private:
- // === PLC 通信核心对象 ===
- std::unique_ptr<CCCLinkIEControl> m_pPlc; // PLC 通信控制器
- StationIdentifier m_station; // PLC 站号
- std::atomic<bool> m_bConnected{ false }; // 是否成功连接
+ // === PLC 閫氫俊鏍稿績瀵硅薄 ===
+ std::unique_ptr<CCCLinkIEControl> m_pPlc; // PLC 閫氫俊鎺у埗鍣�
+ StationIdentifier m_station; // PLC 绔欏彿
+ std::atomic<bool> m_bConnected{ false }; // 鏄惁鎴愬姛杩炴帴
- // === 控制参数 ===
- int m_nIntervalMs = 200; // 轮询周期(ms)
+ // === 鎺у埗鍙傛暟 ===
+ int m_nIntervalMs = 200; // 杞鍛ㄦ湡锛坢s锛�
- // === 命令触发状态缓存 ===
- std::vector<bool> m_vecPrevBits; // 上一周期的命令位状态(用于检测上升沿)
+ // === 鍛戒护瑙﹀彂鐘舵�佺紦瀛� ===
+ std::vector<bool> m_vecPrevBits; // 涓婁竴鍛ㄦ湡鐨勫懡浠や綅鐘舵�侊紙鐢ㄤ簬妫�娴嬩笂鍗囨部锛�
- // === 回调函数(控制/计算/日志)===
- Callback m_cbStart; // Start 命令回调
- Callback m_cbStop; // Stop 命令回调
- AnalyzeCallback m_cbAnalyze; // Analyze 计算回调(返回 OUT1~OUT4)
- LogCallback m_cbLog; // 日志输出回调
+ // === 鍥炶皟鍑芥暟锛堟帶鍒�/璁$畻/鏃ュ織锛�===
+ Callback m_cbStart; // Start 鍛戒护鍥炶皟
+ Callback m_cbStop; // Stop 鍛戒护鍥炶皟
+ AnalyzeCallback m_cbAnalyze; // Analyze 璁$畻鍥炶皟锛堣繑鍥� OUT1~OUT4锛�
+ LogCallback m_cbLog; // 鏃ュ織杈撳嚭鍥炶皟
- // === 主线程控制 ===
- std::atomic<bool> m_bRunning{ false }; // 主监听线程是否运行
- std::thread m_thread; // 主监听线程对象
+ // === 涓荤嚎绋嬫帶鍒� ===
+ std::atomic<bool> m_bRunning{ false }; // 涓荤洃鍚嚎绋嬫槸鍚﹁繍琛�
+ std::thread m_thread; // 涓荤洃鍚嚎绋嬪璞�
- // === ACK 信号状态 ===
- std::array<bool, 2> m_vecAckSent = { false, false }; // 是否已发送应答信号(B10/B11)
- std::array<int, 2> m_vecAckCounter = { 0, 0 }; // 对应应答信号的生命周期计数器
+ // === ACK 淇″彿鐘舵�� ===
+ std::array<bool, 2> m_vecAckSent = { false, false }; // 鏄惁宸插彂閫佸簲绛斾俊鍙凤紙B10/B11锛�
+ std::array<int, 2> m_vecAckCounter = { 0, 0 }; // 瀵瑰簲搴旂瓟淇″彿鐨勭敓鍛藉懆鏈熻鏁板櫒
- // === 心跳检测相关 ===
- std::thread m_heartbeatThread; // 心跳检测线程对象
- std::atomic<bool> m_bHeartbeatRunning = false; // 心跳线程运行标志
- std::atomic<bool> m_bHeartbeatLost = false; // 心跳丢失标志
- int m_nMissedHeartbeatCount = 0; // 心跳未变化次数(用于检测 PLC 掉线)
+ // === 蹇冭烦妫�娴嬬浉鍏� ===
+ std::thread m_heartbeatThread; // 蹇冭烦妫�娴嬬嚎绋嬪璞�
+ std::atomic<bool> m_bHeartbeatRunning = false; // 蹇冭烦绾跨▼杩愯鏍囧織
+ std::atomic<bool> m_bHeartbeatLost = false; // 蹇冭烦涓㈠け鏍囧織
+ int m_nMissedHeartbeatCount = 0; // 蹇冭烦鏈彉鍖栨鏁帮紙鐢ㄤ簬妫�娴� PLC 鎺夌嚎锛�
};
--
Gitblit v1.9.3