From 0d07b90fd906e52ce486484aa53a6850983b1325 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期二, 15 十月 2024 14:21:57 +0800
Subject: [PATCH] 更新

---
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs |   38 ++++++++++++++++++++++++++++++++++----
 1 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
index e504bdc..ce35fed 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
@@ -27,6 +27,7 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using System.Net;
+using System.Net.NetworkInformation;
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
@@ -38,7 +39,7 @@
     /// 瑗块棬瀛怱7閫氳绫�
     /// </summary>
     [Description("瑗块棬瀛怱7")]
-    public class SiemensS7 : BaseCommunicator, IDisposable
+    public class SiemensS7 : BaseCommunicator
     {
         #region Private Member
         /// <summary>
@@ -67,6 +68,8 @@
         private string _name;
 
         private ILogNet _logNet;
+
+        private bool _isPing = true;
         #endregion Private Member
 
         #region Public Member
@@ -89,10 +92,11 @@
         /// </summary>
         /// <param name="ipAddress">璁惧鐨処P鍦板潃</param>
         /// <param name="port">杩炴帴浣跨敤鐨勭鍙e彿</param>
+        /// <param name="name">璁惧鍚嶇О</param>
         public SiemensS7(string ipAddress, int port, string name)
         {
             string path = AppDomain.CurrentDomain.BaseDirectory + $"Log_PLCReadWrite\\{name}";
-            _logNet = new LogNetFileSize(path, 3 * 1024 * 1024, 100);
+            _logNet = new LogNetFileSize(path, 10 * 1024 * 1024, 100);
 
             bool ipCheck = IPAddress.TryParse(ipAddress, out IPAddress? address);
             if (!ipCheck)
@@ -272,6 +276,29 @@
                 throw new CommunicationException($"璇诲彇鏁版嵁寮傚父,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.ReadException, innerException: ex);
             }
         }
+
+        private void Ping()
+        {
+            Task.Run(() =>
+            {
+                while (_isPing)
+                {
+                    try
+                    {
+                        IPStatus status = plc.IpAddressPing();
+                        if (status == IPStatus.Success)
+                            _connected = true;
+                        else
+                            _connected = false;
+                    }
+                    finally
+                    {
+                        Thread.Sleep(100);
+                    }
+                }
+            });
+
+        }
         #endregion
 
         #region Public Method
@@ -284,6 +311,7 @@
         {
             try
             {
+
                 //瀹炰緥鍖栦竴涓タ闂ㄥ瓙鐨凷7鍗忚鐨勯�氳瀵硅薄
                 plc = new SiemensS7Net(SiemensPLCS.S1500)
                 {
@@ -297,7 +325,7 @@
                     LogNet.WriteInfo(Name, string.Format(CommunicationInfoMessage.ConnectSuccess, _ipAddress, _port));
                 else
                     LogNet.WriteError(Name, string.Format(CommunicationExceptionMessage.ConnectFaild, _ipAddress, _port, operateResult.Message));
-
+                Ping();
                 return operateResult.IsSuccess;
             }
             catch (Exception ex)
@@ -625,9 +653,11 @@
         #endregion
 
         // 鏄惧紡瀹炵幇IDisposable鎺ュ彛浠ユ彁渚涘瀮鍦惧洖鏀舵椂鐨勬竻鐞�  
-        public void Dispose()
+        public override void Dispose()
         {
+            _isPing = false;
             Disconnect();
+            plc.Dispose();
             GC.SuppressFinalize(this);
         }
 

--
Gitblit v1.9.3