From 9ffd50c8ed26e0be4ccdb500f261132c19600e96 Mon Sep 17 00:00:00 2001 From: hutongqing <hutongqing@hnkhzn.com> Date: 星期二, 03 九月 2024 15:34:59 +0800 Subject: [PATCH] 增加注释 --- WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs | 55 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 46 insertions(+), 9 deletions(-) diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs index f14f87c..e36428f 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) { @@ -339,7 +369,7 @@ } /// <summary> - /// + /// 鐩戞祴鍫嗗灈鏈轰换鍔℃槸鍚﹀畬鎴�(闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽畾涔夋墜鍔ㄨЕ鍙戝姛鑳�) /// </summary> public void CheckStackerCraneTaskCompleted() { @@ -383,7 +413,7 @@ break; } int taskNum = CurrentTaskNum; - if (operateResult.IsSuccess && LastTaskNum != taskNum) + if (operateResult.IsSuccess /*&& LastTaskNum != taskNum*/) { StackerCraneTaskCompletedEventArgs args = new(taskNum); StackerCraneTaskCompletedEventHandler?.Invoke(this, args); @@ -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,8 +454,6 @@ public void Heartbeat() { - //todo 蹇冭烦鍐欏叆 - throw new NotImplementedException(); } /// <summary> @@ -440,9 +469,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