From 87cc1c0d71fe6c6000ac6523bbb367d5ac29b5d2 Mon Sep 17 00:00:00 2001 From: 肖洋 <cathay_xy@163.com> Date: 星期六, 11 一月 2025 16:40:51 +0800 Subject: [PATCH] 更新设备通讯超时设置及优化代码结构 --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs | 118 +++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 66 insertions(+), 52 deletions(-) diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs index 1d1a3ce..bb6c121 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs @@ -41,6 +41,11 @@ public class CommonStackerCrane : IStackerCrane { #region Private Member + + // 甯搁噺 + private const int WaitTimeout = 20 * 6000; + private const int ReadTimeout = 1500; + /// <summary> /// 鍫嗗灈鏈洪�氳瀵硅薄 /// </summary> @@ -229,8 +234,11 @@ private int GetCurrentTaskNum() { - DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CurrentTaskNum)); - return devicePro == null ? throw new Exception() : (int)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); + //DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CurrentTaskNum)); + //return devicePro == null ? throw new Exception() : (int)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); + + DeviceProDTO devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CurrentTaskNum))?? throw new Exception("鏈幏鍙栧埌褰撳墠浠诲姟鍙风殑淇℃伅"); + return (int)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); } /// <summary> @@ -326,7 +334,7 @@ private void CheckConnect() { - Task.Run(() => + Task.Run(async () => { while (_heartStatr) { @@ -343,7 +351,8 @@ { _isConnected = false; } - Thread.Sleep(500); + //Thread.Sleep(500); + await Task.Delay(500); } }); } @@ -372,69 +381,74 @@ return false; } + private readonly object _lockObject = new(); /// <summary> /// 鐩戞祴鍫嗗灈鏈轰换鍔℃槸鍚﹀畬鎴�(闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽畾涔夋墜鍔ㄨЕ鍙戝姛鑳�) /// </summary> public void CheckStackerCraneTaskCompleted() { - if (_isChecked) - return; - - Task.Run(() => + // 浣跨敤閿佺‘淇濆悓涓�鏃堕棿鍙湁涓�涓嚎绋嬪彲浠ヨ繘鍏ヨ鏂规硶 + lock (_lockObject) { + if (_isChecked) + return; + _isChecked = true; - try + Task.Run(() => { - DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(StackerCraneWorkStatus)); - if (devicePro != null) + try { - DeviceProtocolDetailDTO? deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePro.DeviceProParamName && x.ProtocolDetailType == StackerCraneWorkStatus.WorkCompleted.ToString()); - if (deviceProtocolDetail != null) + DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(StackerCraneWorkStatus)); + if (devicePro != null) { - OperateResult<TimeSpan> operateResult = new OperateResult<TimeSpan>(); - TypeCode typeCode = SiemensDBDataType.GetTypeCode(devicePro.DeviceDataType); - switch (typeCode) + DeviceProtocolDetailDTO? deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePro.DeviceProParamName && x.ProtocolDetailType == StackerCraneWorkStatus.WorkCompleted.ToString()); + if (deviceProtocolDetail != null) { - case TypeCode.Boolean: - operateResult = Communicator.Wait(devicePro.DeviceProAddress, 1500, 20 * 6000, Convert.ToBoolean(deviceProtocolDetail.ProtocalDetailValue)); - break; - case TypeCode.Byte: - operateResult = Communicator.Wait(devicePro.DeviceProAddress, 1500, 20 * 6000, Convert.ToByte(deviceProtocolDetail.ProtocalDetailValue)); - break; - case TypeCode.Int16: - operateResult = Communicator.Wait(devicePro.DeviceProAddress, 1500, 20 * 6000, Convert.ToInt16(deviceProtocolDetail.ProtocalDetailValue)); - break; - case TypeCode.Int32: - operateResult = Communicator.Wait(devicePro.DeviceProAddress, 1500, 20 * 6000, Convert.ToInt32(deviceProtocolDetail.ProtocalDetailValue)); - break; - case TypeCode.UInt16: - operateResult = Communicator.Wait(devicePro.DeviceProAddress, 1500, 20 * 6000, Convert.ToUInt16(deviceProtocolDetail.ProtocalDetailValue)); - break; - case TypeCode.UInt32: - operateResult = Communicator.Wait(devicePro.DeviceProAddress, 1500, 20 * 6000, Convert.ToUInt32(deviceProtocolDetail.ProtocalDetailValue)); - break; - default: - break; - } - int taskNum = CurrentTaskNum; - if (operateResult.IsSuccess /*&& LastTaskNum != taskNum*/) - { - StackerCraneTaskCompletedEventArgs args = new(taskNum); - StackerCraneTaskCompletedEventHandler?.Invoke(this, args); - _lastTaskNum = taskNum; + OperateResult<TimeSpan> operateResult = new OperateResult<TimeSpan>(); + TypeCode typeCode = SiemensDBDataType.GetTypeCode(devicePro.DeviceDataType); + switch (typeCode) + { + case TypeCode.Boolean: + operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToBoolean(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.Byte: + operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToByte(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.Int16: + operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToInt16(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.Int32: + operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToInt32(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.UInt16: + operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToUInt16(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.UInt32: + operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToUInt32(deviceProtocolDetail.ProtocalDetailValue)); + break; + default: + break; + } + int taskNum = CurrentTaskNum; + if (operateResult.IsSuccess /*&& LastTaskNum != taskNum*/) + { + StackerCraneTaskCompletedEventArgs args = new(taskNum); + StackerCraneTaskCompletedEventHandler?.Invoke(this, args); + _lastTaskNum = taskNum; + } } } } - } - catch (Exception ex) - { + catch (Exception ex) + { - } - finally - { - _isChecked = false; - } - }); + } + finally + { + _isChecked = false; + } + }); + } } /// <summary> -- Gitblit v1.9.3