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