From 49cab6105eccb35d8b18a12f8ea29c05a857471b Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 12 九月 2025 11:11:19 +0800
Subject: [PATCH] 1. SG精度检文件字符集全部修改成UTF-8

---
 SourceCode/Bond/SGMeasurement/PLCSignalListener.h |  292 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 146 insertions(+), 146 deletions(-)

diff --git a/SourceCode/Bond/SGMeasurement/PLCSignalListener.h b/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
index 592cfde..0a4030d 100644
--- a/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
+++ b/SourceCode/Bond/SGMeasurement/PLCSignalListener.h
@@ -15,173 +15,173 @@
 class CPLCSignalListener
 {
 public:
-    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);
+	CPLCSignalListener();
+	~CPLCSignalListener();
 
 	/**
-	 * @brief 读取 PLC 内部的产品 ID(字符串形式)。
+	 * @brief 鍒濆鍖� PLC 淇″彿鐩戝惉鍣ㄣ��
 	 *
-	 * @param strProductID  输出参数,存储读取到的产品 ID。
-	 * @return true         读取成功。
-	 * @return false        读取失败。
+	 * @param station      鐩爣 PLC 鐨勭珯鍙锋爣璇嗙銆�
+	 * @param nIntervalMs  杞鍛ㄦ湡锛堝崟浣嶏細姣锛夛紝榛樿 200ms銆�
+	 * @return true        鍒濆鍖栨垚鍔熴��
+	 * @return false       鍒濆鍖栧け璐ャ��
 	 */
-    bool ReadProductID(std::string& strProductID);
+	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  杩斿洖璁$畻缁撴灉鏁扮粍锛圤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:
-    /**
-     * @brief 输出日志信息(封装日志回调)。
-     *
-     * @param strText 日志内容文本。
-     * @param nType   日志类型(LOG_TYPE_NORMAL / ERROR / WARNING 等)。
-     */
-    void LogInfo(const CString& strText, int nType);
+	/**
+	 * @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  鍐欏叆鎴愬姛銆�
+	 * @return false 鍐欏叆澶辫触锛堝鏈繛鎺ワ級銆�
+	 */
+	bool SendHeartbeat();
 
-    /**
-     * @brief 检查从 PLC 读取到的心跳信号是否发生变化。
-     *
-     * @return true  心跳有变化(PLC 正常在线)。
-     * @return false 心跳无变化(可能离线)。
-     */
-    bool CheckHeartbeat();
+	/**
+	 * @brief 妫�鏌ヤ粠 PLC 璇诲彇鍒扮殑蹇冭烦淇″彿鏄惁鍙戠敓鍙樺寲銆�
+	 *
+	 * @return true  蹇冭烦鏈夊彉鍖栵紙PLC 姝e父鍦ㄧ嚎锛夈��
+	 * @return false 蹇冭烦鏃犲彉鍖栵紙鍙兘绂荤嚎锛夈��
+	 */
+	bool CheckHeartbeat();
 
-    /**
-     * @brief 监控 PLC 心跳是否中断,并自动记录状态。
-     *
-     * @return true  PLC 在线或在允许的未响应次数内。
-     * @return false PLC 心跳中断,超过允许阈值。
-     */
-    bool MonitorHeartbeat();
+	/**
+	 * @brief 鐩戞帶 PLC 蹇冭烦鏄惁涓柇锛屽苟鑷姩璁板綍鐘舵�併��
+	 *
+	 * @return true  PLC 鍦ㄧ嚎鎴栧湪鍏佽鐨勬湭鍝嶅簲娆℃暟鍐呫��
+	 * @return false PLC 蹇冭烦涓柇锛岃秴杩囧厑璁搁槇鍊笺��
+	 */
+	bool MonitorHeartbeat();
 
-    /**
-     * @brief 启动心跳监控线程(独立于信号监听线程)。
-     */
-    void StartHeartbeatMonitor();
+	/**
+	 * @brief 鍚姩蹇冭烦鐩戞帶绾跨▼锛堢嫭绔嬩簬淇″彿鐩戝惉绾跨▼锛夈��
+	 */
+	void StartHeartbeatMonitor();
 
-    /**
-     * @brief 停止心跳监控线程。
-     */
-    void StopHeartbeatMonitor();
+	/**
+	 * @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 鍚戞寚瀹氳蒋鍏冧欢浣嶅啓鍏ヤ竴涓剦鍐诧紙鍏堝啓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 绠$悊 ACK 鍝嶅簲鐨勭敓鍛藉懆鏈燂紝瓒呮椂鑷姩娓呴櫎銆�
+	 *
+	 * @param i                鎺у埗浣嶇储寮曪紙0=Start锛�1=Stop锛夈��
+	 * @param bCurrTriggerBit  褰撳墠浠� PLC 璇诲彇鍒扮殑瑙﹀彂浣嶇姸鎬併��
+	 */
+	void HandleAckLife(int i, bool bCurrTriggerBit);
 
-    /**
-     * @brief 主监听线程逻辑,循环读取 PLC 控制信号并处理触发。
-     */
-    void ThreadProc();
+	/**
+	 * @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