From 2cc4dfef234b47bef364edf798b5051a25f33217 Mon Sep 17 00:00:00 2001 From: hutongqing <hutongqing@hnkhzn.com> Date: 星期五, 30 八月 2024 10:58:56 +0800 Subject: [PATCH] 1 --- WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 46 insertions(+), 7 deletions(-) diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs index e67f1e5..045573d 100644 --- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs +++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs @@ -37,14 +37,14 @@ /// <summary> /// 涓�鑸爢鍨涙満瀹炵幇绫伙紝瀹炵幇鍫嗗灈鏈烘帴鍙e眰 /// </summary> - [Description("閫氱敤鍫嗗灈鏈�")] + [Description("鍫嗗灈鏈�")] public class CommonStackerCrane : IStackerCrane { #region Private Member /// <summary> /// 鍫嗗灈鏈洪�氳瀵硅薄 /// </summary> - private readonly BaseCommunicator _communicator; + private BaseCommunicator _communicator; /// <summary> /// 鍫嗗灈鏈哄崗璁俊鎭� /// </summary> @@ -66,7 +66,11 @@ /// </summary> private int _lastTaskNum; - private bool _isChecked; + private bool _isChecked = false; + + private bool _heartStatr = true; + + private bool _isConnected = true; #endregion Private Member #region Public Member @@ -148,7 +152,7 @@ /// <summary> /// 閫氳鏄惁宸茶繛鎺� /// </summary> - public bool IsConnected => Communicator.IsConnected; + public bool IsConnected => Communicator.IsConnected && _isConnected; /// <summary> /// 鍫嗗灈鏈轰换鍔″畬鎴愪簨浠� @@ -184,6 +188,7 @@ _deviceProtocolDetailDTOs = deviceProtocolDetailDTOs; _deviceCode = deviceCode; _deviceName = deviceName; + CheckConnect(); } #endregion @@ -314,6 +319,30 @@ { return value.Equals(paramValue); } + + private void CheckConnect() + { + Task.Run(() => + { + while (_heartStatr) + { + try + { + DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(); + if (devicePro == null) + _isConnected = false; + else + Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); + _isConnected = true; + } + catch (Exception ex) + { + _isConnected = false; + } + Thread.Sleep(500); + } + }); + } #endregion #region Public Method @@ -322,8 +351,9 @@ /// </summary> /// <param name="command">浠诲姟鍛戒护</param> /// <returns></returns> - public bool SendCommand<T>(T command)where T : IDataTransfer, new() + public bool SendCommand<T>(T command) where T : IDataTransfer, new() { + if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�"); DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); if (devicePro == null) { @@ -413,6 +443,7 @@ /// <exception cref="Exception"></exception> public TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum { + if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�"); DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString()); return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); } @@ -423,9 +454,9 @@ public void Heartbeat() { - //todo 蹇冭烦鍐欏叆 - throw new NotImplementedException(); } + + /// <summary> /// 鏍规嵁鍙傛暟鍚嶇О鍐欏叆鍫嗗灈鏈哄搴旂殑鏁版嵁銆� @@ -440,9 +471,17 @@ where TEnum : Enum where TValue : notnull { + if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�"); DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString()); return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value); } + + public void Dispose() + { + _heartStatr = false; + _communicator.Dispose(); + GC.SuppressFinalize(this); + } #endregion } } -- Gitblit v1.9.3