From 82114df5ce7233a3fd22c44f0c72a083feab539c Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 05 八月 2025 15:59:25 +0800
Subject: [PATCH] 1. SGMeasurement的PLC监听超时设置5秒 2. SGMeasurement的PLC监听类添加注释

---
 SourceCode/Bond/SGMeasurement/PLCSignalListener.h   |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++
 SourceCode/Bond/SGMeasurement/PLCSignalListener.cpp |    2 
 2 files changed, 103 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/SGMeasurement/PLCSignalListener.cpp b/SourceCode/Bond/SGMeasurement/PLCSignalListener.cpp
index d820ab9..bef7669 100644
--- a/SourceCode/Bond/SGMeasurement/PLCSignalListener.cpp
+++ b/SourceCode/Bond/SGMeasurement/PLCSignalListener.cpp
@@ -20,7 +20,7 @@
 #define PLC_CMD_BIT_COUNT       2       // 总共几个命令位(B6CD3=Start, B6CD4=Stop)
 
 // === PLC 应答输出配置(PC -> PLC) ===
-#define PLC_ACK_MAX_LIFE        5       // PLC响应信号最大保留周期数(每周期为 m_nIntervalMs 毫秒)
+#define PLC_ACK_MAX_LIFE        25      // PLC响应信号最大保留周期数(每周期为 m_nIntervalMs 毫秒)
 #define PLC_ACK_BASE_BIT        0x1060  // PLC应答起始地址(B1060表示B6CD3的应答;B1061表示B6CD4的应答)
 
 // === PLC软元件类型宏(用于应答、数据写入)===
diff --git a/SourceCode/Bond/SGMeasurement/PLCSignalListener.h b/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
index 219e963..fe8638b 100644
--- a/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
+++ b/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
@@ -18,27 +18,129 @@
     CPLCSignalListener();
     ~CPLCSignalListener();
 
+    /**
+     * @brief 初始化 PLC 信号监听器。
+     *
+     * @param station      目标 PLC 的站号标识符。
+     * @param nIntervalMs  轮询周期(单位:毫秒),默认 200ms。
+     * @return true        初始化成功。
+     * @return false       初始化失败。
+     */
     bool Initialize(StationIdentifier station, int nIntervalMs = 200);
 
+    /**
+     * @brief 设置开始命令的回调函数(对应 PLC 的 Start 信号)。
+     *
+     * @param cb  用户自定义的开始回调函数。
+     */
     void SetStartCallback(Callback cb);
+
+    /**
+     * @brief 设置停止命令的回调函数(对应 PLC 的 Stop 信号)。
+     *
+     * @param cb  用户自定义的停止回调函数。
+     */
     void SetStopCallback(Callback cb);
+
+    /**
+     * @brief 设置分析计算回调函数,在接收到停止命令后调用。
+     *
+     * @param cb  返回计算结果数组(OUT1~OUT4)的函数。
+     */
     void SetAnalyzeCallback(AnalyzeCallback cb);
+
+    /**
+     * @brief 设置日志输出回调函数。
+     *
+     * @param cb  用户提供的日志输出接口(包含日志内容和日志类型)。
+     */
     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);
 
 private:
+    /**
+     * @brief 输出日志信息(封装日志回调)。
+     *
+     * @param strText 日志内容文本。
+     * @param nType   日志类型(LOG_TYPE_NORMAL / ERROR / WARNING 等)。
+     */
     void LogInfo(const CString& strText, int nType);
+
+    /**
+     * @brief 向 PLC 写入心跳信号(交替位)。
+     *
+     * @return true  写入成功。
+     * @return false 写入失败(如未连接)。
+     */
     bool SendHeartbeat();
+
+    /**
+     * @brief 检查从 PLC 读取到的心跳信号是否发生变化。
+     *
+     * @return true  心跳有变化(PLC 正常在线)。
+     * @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:

--
Gitblit v1.9.3