From cd32500504c97874c8fc0f8ceb1ac58f3cb37b01 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期五, 01 八月 2025 15:26:35 +0800
Subject: [PATCH] 111

---
 UniversalModbusManager.cs  |   12 +++++++-----
 config/ModbusDataParser.cs |   10 +++++-----
 ModbusManager.cs           |   20 ++++++++++++--------
 3 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/ModbusManager.cs b/ModbusManager.cs
index e862353..9175333 100644
--- a/ModbusManager.cs
+++ b/ModbusManager.cs
@@ -76,17 +76,17 @@
         /// <summary>
         /// EasyModbus TCP瀹㈡埛绔疄渚�
         /// </summary>
-        private ModbusClient _modbusClient;
+        private ModbusClient? _modbusClient;
         
         /// <summary>
         /// 蹇冭烦瀹氭椂鍣� - 鐢ㄤ簬瀹氭湡鍙戦�佸績璺冲寘
         /// </summary>
-        private System.Timers.Timer _heartbeatTimer;
+        private System.Timers.Timer? _heartbeatTimer;
         
         /// <summary>
         /// 鏁版嵁杞瀹氭椂鍣� - 鐢ㄤ簬瀹氭湡璇诲彇PLC鏁版嵁
         /// </summary>
-        private System.Timers.Timer _dataPollingTimer;
+        private System.Timers.Timer? _dataPollingTimer;
         
         /// <summary>
         /// 蹇冭烦鍖呯姸鎬� - 鍦�0鍜�1涔嬮棿浜ゆ浛
@@ -110,17 +110,17 @@
         /// <summary>
         /// 杩炴帴鐘舵�佹敼鍙樹簨浠�
         /// </summary>
-        public event EventHandler<bool> ConnectionStatusChanged;
+        public event EventHandler<bool>? ConnectionStatusChanged;
         
         /// <summary>
         /// 鎺ユ敹鍒癙LC鏁版嵁浜嬩欢
         /// </summary>
-        public event EventHandler<PlcData> DataReceived;
+        public event EventHandler<PlcData>? DataReceived;
         
         /// <summary>
         /// 閿欒鍙戠敓浜嬩欢
         /// </summary>
-        public event EventHandler<string> ErrorOccurred;
+        public event EventHandler<string>? ErrorOccurred;
 
         #endregion
 
@@ -340,7 +340,7 @@
                 // 妫�鏌LC鏁版嵁鏄惁鍑嗗灏辩华
                 if (controlSignals[1] == 0) // DataOK淇″彿涓�0琛ㄧず鏁版嵁鏈噯澶囧ソ
                 {
-                    return null;
+                    return new PlcData(); // 杩斿洖绌虹殑PlcData瀵硅薄鑰屼笉鏄痭ull
                 }
 
                 // 璇诲彇浜у搧鍨嬪彿 (10涓瘎瀛樺櫒)
@@ -554,7 +554,11 @@
             Disconnect();
             
             // EasyModbus鐨凪odbusClient娌℃湁瀹炵幇IDisposable鎺ュ彛
-            _modbusClient = null;
+            // 娓呯悊杩炴帴寮曠敤
+            if (_modbusClient != null)
+            {
+                _modbusClient = null;
+            }
             _cancellationTokenSource?.Dispose();
         }
 
diff --git a/UniversalModbusManager.cs b/UniversalModbusManager.cs
index a57816f..ae6a7aa 100644
--- a/UniversalModbusManager.cs
+++ b/UniversalModbusManager.cs
@@ -363,13 +363,13 @@
             
             LogWarning($"灏嗗湪 {delay}ms 鍚庡皾璇曠 {_retryCount} 娆¢噸杩�");
 
-            Task.Delay(delay, _cancellationTokenSource.Token).ContinueWith(async _ =>
+            Task.Delay(delay, _cancellationTokenSource?.Token ?? CancellationToken.None).ContinueWith(async _ =>
             {
-                if (!_cancellationTokenSource.Token.IsCancellationRequested)
+                if (!(_cancellationTokenSource?.Token.IsCancellationRequested ?? true))
                 {
                     await ConnectAsync();
                 }
-            }, _cancellationTokenSource.Token);
+            }, _cancellationTokenSource?.Token ?? CancellationToken.None);
         }
 
         #endregion
@@ -676,7 +676,7 @@
             // 妫�娴嬪父瑙佺殑閿欒鐮佹ā寮�
             if (registers.Length >= 2)
             {
-                var combined = ((long)(registers[0] & 0xFFFF) << 16) | (registers[1] & 0xFFFF);
+                var combined = ((long)((uint)registers[0] & 0xFFFF) << 16) | ((uint)registers[1] & 0xFFFF);
                 if (combined == 0xE2400001)
                 {
                     LogInfo($"[PATTERN] 瀛楁 '{fieldName}' 妫�娴嬪埌宸茬煡鐨勬棤鏁堟暟鎹爣璇� 0xE2400001");
@@ -739,7 +739,7 @@
         /// <summary>
         /// 澶勭悊杩炴帴涓㈠け
         /// </summary>
-        private async Task HandleConnectionLoss()
+        private Task HandleConnectionLoss()
         {
             if (_isConnected)
             {
@@ -754,6 +754,8 @@
                     ScheduleReconnect();
                 }
             }
+            
+            return Task.CompletedTask;
         }
 
         #endregion
diff --git a/config/ModbusDataParser.cs b/config/ModbusDataParser.cs
index c42bf90..871146c 100644
--- a/config/ModbusDataParser.cs
+++ b/config/ModbusDataParser.cs
@@ -93,7 +93,7 @@
                 if (config.Encoding?.ToLower() == "littleendian")
                 {
                     // 灏忕锛氫綆浣嶅瘎瀛樺櫒鍦ㄥ墠锛岄珮浣嶅瘎瀛樺櫒鍦ㄥ悗
-                    value = (registers[0] & 0xFFFF) | ((long)(registers[1] & 0xFFFF) << 16);
+                    value = ((uint)registers[0] & 0xFFFF) | ((long)((uint)registers[1] & 0xFFFF) << 16);
                 }
                 else
                 {
@@ -103,7 +103,7 @@
                     if (registers.Length >= 2)
                     {
                         // 鍏堟寜灏忕鏂瑰紡缁勫悎锛堝嵆浣块厤缃笉鏄痩ittleendian锛�
-                        long littleEndianValue = (registers[0] & 0xFFFF) | ((long)(registers[1] & 0xFFFF) << 16);
+                        long littleEndianValue = ((uint)registers[0] & 0xFFFF) | ((long)((uint)registers[1] & 0xFFFF) << 16);
                         
                         // 妫�鏌ユ槸鍚﹂渶瑕佺壒娈婄殑闄や互10澶勭悊锛堥拡瀵规祴閲忔暟鎹級
                         if (littleEndianValue > 100000) // 6浣嶆暟鎴栨洿澶氾紝鍙兘闇�瑕侀櫎浠�10
@@ -115,13 +115,13 @@
                         else
                         {
                             // PLC榛樿浣跨敤澶х鏍煎紡杩涜澶氬瘎瀛樺櫒缁勫悎锛氶珮浣嶅瘎瀛樺櫒鍦ㄥ墠锛屼綆浣嶅瘎瀛樺櫒鍦ㄥ悗
-                            value = ((long)(registers[0] & 0xFFFF) << 16) | (registers[1] & 0xFFFF);
+                            value = ((long)((uint)registers[0] & 0xFFFF) << 16) | ((uint)registers[1] & 0xFFFF);
                         }
                     }
                     else
                     {
                         // PLC榛樿浣跨敤澶х鏍煎紡杩涜澶氬瘎瀛樺櫒缁勫悎锛氶珮浣嶅瘎瀛樺櫒鍦ㄥ墠锛屼綆浣嶅瘎瀛樺櫒鍦ㄥ悗
-                        value = ((long)(registers[0] & 0xFFFF) << 16) | (registers[1] & 0xFFFF);
+                        value = ((long)((uint)registers[0] & 0xFFFF) << 16) | ((uint)registers[1] & 0xFFFF);
                     }
                 }
                 
@@ -140,7 +140,7 @@
                 Console.WriteLine($"[PARSER-DEBUG] 澶氬瘎瀛樺櫒缁勫悎 ({config.Length}涓�): [{string.Join(", ", registers.Take(config.Length))}]");
                 for (int i = 0; i < Math.Min(registers.Length, config.Length); i++)
                 {
-                    value = (value << 16) | (registers[i] & 0xFFFF);
+                    value = (value << 16) | ((uint)registers[i] & 0xFFFF);
                     Console.WriteLine($"[PARSER-DEBUG] 姝ラ{i+1}: 0x{value:X} (瀵勫瓨鍣▄i}: {registers[i]})");
                 }
             }

--
Gitblit v1.9.3