From d100db102ded4dc2047f1b92f4ed0ed4c18d8ee4 Mon Sep 17 00:00:00 2001 From: Huangxiaoqiang-03 <1247017146@qq.com> Date: 星期一, 11 十一月 2024 13:56:48 +0800 Subject: [PATCH] 1 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs | 146 ++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 128 insertions(+), 18 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs" index 4dd2e42..d806122 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs" @@ -17,76 +17,81 @@ { public class GetStackerObject { + private SpeStackerCrane _speStackerCrane; + public GetStackerObject(SpeStackerCrane speStackerCrane) + { + _speStackerCrane = speStackerCrane; + } /// <summary> /// 璁惧鐘舵�� /// </summary> /// <param name="speStackerCrane"></param> /// <returns></returns> - public StackerCraneStatus StackerCraneStatusValue(SpeStackerCrane speStackerCrane) => GetStackerCraneStatus(speStackerCrane); + public StackerCraneStatus StackerCraneStatusValue => GetStackerCraneStatus(); /// <summary> /// 宸ヤ綔妯″紡 /// </summary> /// <param name="speStackerCrane"></param> /// <returns></returns> - public StackerCraneAutoStatus StackerCraneAutoStatusValue(SpeStackerCrane speStackerCrane) => GetStackerCraneAutoStatus(speStackerCrane); + public StackerCraneAutoStatus StackerCraneAutoStatusValue => GetStackerCraneAutoStatus(); /// <summary> /// 宸ヤ綔鐘舵�� /// </summary> /// <param name="speStackerCrane"></param> /// <returns></returns> - public StackerCraneWorkStatus StackerCraneWorkStatusValue(SpeStackerCrane speStackerCrane) => GetStackerCraneWorkStatus(speStackerCrane); + public StackerCraneWorkStatus StackerCraneWorkStatusValue => GetStackerCraneWorkStatus(); /// <summary> /// 浠诲姟瀹屾垚 /// </summary> /// <param name="speStackerCrane"></param> /// <returns></returns> - public StackerCraneTaskCompleted StackerCraneTaskCompletedValue(SpeStackerCrane speStackerCrane) => GetStackerCraneTaskCompleted(speStackerCrane); + public StackerCraneTaskCompleted StackerCraneTaskCompletedValue => GetStackerCraneTaskCompleted(); /// <summary> /// 浣滀笟鍛戒护 /// </summary> /// <param name="speStackerCrane"></param> /// <returns></returns> - public int WorkCommandValue(SpeStackerCrane speStackerCrane) => speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkCommand); + public int WorkCommandValue() => _speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkCommand); /// <summary> /// 鑾峰彇鍫嗗灈鏈鸿澶囩姸鎬� /// </summary> /// <returns></returns> - private StackerCraneStatus GetStackerCraneStatus(SpeStackerCrane speStackerCrane) + private StackerCraneStatus GetStackerCraneStatus() { - return Enum.Parse<StackerCraneStatus>(GetStatus(nameof(StackerCraneStatus), speStackerCrane)); + return Enum.Parse<StackerCraneStatus>(GetStatus(nameof(StackerCraneStatus))); } /// <summary> /// 鑾峰彇鍫嗗灈鏈烘墜鑷姩鐘舵�� /// </summary> /// <returns></returns> - private StackerCraneAutoStatus GetStackerCraneAutoStatus(SpeStackerCrane speStackerCrane) + private StackerCraneAutoStatus GetStackerCraneAutoStatus() { - return Enum.Parse<StackerCraneAutoStatus>(GetStatus(nameof(StackerCraneAutoStatus), speStackerCrane)); + return Enum.Parse<StackerCraneAutoStatus>(GetStatus(nameof(StackerCraneAutoStatus))); } /// <summary> /// 鑾峰彇鍫嗗灈鏈哄伐浣滅姸鎬� /// </summary> /// <returns></returns> - private StackerCraneWorkStatus GetStackerCraneWorkStatus(SpeStackerCrane speStackerCrane) + private StackerCraneWorkStatus GetStackerCraneWorkStatus() { - return Enum.Parse<StackerCraneWorkStatus>(GetStatus(nameof(StackerCraneWorkStatus), speStackerCrane)); + return Enum.Parse<StackerCraneWorkStatus>(GetStatus(nameof(StackerCraneWorkStatus))); } /// <summary> /// 鑾峰彇鍫嗗灈鏈轰换鍔$姸鎬� /// </summary> /// <returns></returns> - private StackerCraneTaskCompleted GetStackerCraneTaskCompleted(SpeStackerCrane speStackerCrane) + private StackerCraneTaskCompleted GetStackerCraneTaskCompleted() { - return Enum.Parse<StackerCraneTaskCompleted>(GetStatus(nameof(StackerCraneTaskCompleted), speStackerCrane)); + return Enum.Parse<StackerCraneTaskCompleted>(GetStatus(nameof(StackerCraneTaskCompleted))); } private string GetEnumDes<T>(T value) where T : Enum @@ -104,18 +109,18 @@ return "鏈煡"; } - private string GetStatus(string protocolParamType, SpeStackerCrane speStackerCrane) + private string GetStatus(string protocolParamType) { - List<DeviceProDTO> devicePros = speStackerCrane.DeviceProDTOs.Where(x => x.DeviceProParamType == protocolParamType).ToList(); + List<DeviceProDTO> devicePros = _speStackerCrane.DeviceProDTOs.Where(x => x.DeviceProParamType == protocolParamType).ToList(); if (devicePros.Count == 0) { throw new Exception("鏈幏鍙栧埌鍗忚淇℃伅"); } for (int i = 0; i < devicePros.Count; i++) { - object readStatus = speStackerCrane.Communicator.ReadAsObj(devicePros[i].DeviceProAddress, devicePros[i].DeviceDataType); - DeviceProtocolDetailDTO? deviceProtocolDetail = speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName) ?? throw new Exception(); - deviceProtocolDetail = speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamType && x.ProtocalDetailValue.Equals(readStatus.ToString())); + object readStatus = _speStackerCrane.Communicator.ReadAsObj(devicePros[i].DeviceProAddress, devicePros[i].DeviceDataType); + DeviceProtocolDetailDTO? deviceProtocolDetail = _speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName) ?? throw new Exception(); + deviceProtocolDetail = _speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamType && x.ProtocalDetailValue.Equals(readStatus.ToString())); if (deviceProtocolDetail != null) { return deviceProtocolDetail.ProtocolDetailType; @@ -124,5 +129,110 @@ } return StackerCraneStatus.Unkonw.ToString(); } + + /// <summary> + /// 鍫嗗灈鏈轰换鍔″畬鎴愪簨浠� + /// </summary> + public event EventHandler<StackerCraneTaskCompletedEventArgs> StackerCraneTaskCompletedEventHandler; + + + /// <summary> + /// 鍫嗗灈鏈哄畬鎴愪簨浠舵槸鍚﹀凡璁㈤槄 + /// </summary> + public bool IsEventSubscribed => StackerCraneTaskCompletedEventHandler != null; + + + private bool _isChecked = false; + + /// <summary> + /// 鐩戞祴鍫嗗灈鏈轰换鍔℃槸鍚﹀畬鎴� + /// </summary> + public void CheckStackerCraneTaskCompleted() + { + if (_isChecked) + return; + + Task.Run(() => + { + _isChecked = true; + try + { + DeviceProDTO? devicePro = _speStackerCrane.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(StackerCraneTaskCompleted)); + if (devicePro != null) + { + DeviceProtocolDetailDTO? deviceProtocolDetail = _speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePro.DeviceProParamName && x.ProtocolDetailType == StackerCraneTaskCompleted.WorkCompleted.ToString()); + if (deviceProtocolDetail != null) + { + OperateResult<TimeSpan> operateResult = new OperateResult<TimeSpan>(); + TypeCode typeCode = SiemensDBDataType.GetTypeCode(devicePro.DeviceDataType); + switch (typeCode) + { + case TypeCode.Boolean: + operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToBoolean(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.Byte: + operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToByte(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.Int16: + operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToInt16(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.Int32: + operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToInt32(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.UInt16: + operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToUInt16(deviceProtocolDetail.ProtocalDetailValue)); + break; + case TypeCode.UInt32: + operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToUInt32(deviceProtocolDetail.ProtocalDetailValue)); + break; + default: + break; + } + int taskNum = _speStackerCrane.CurrentTaskNum; + if (operateResult.IsSuccess) + { + StackerCraneTaskCompletedEventArgs args = new(taskNum); + StackerCraneTaskCompletedEventHandler?.Invoke(_speStackerCrane, args); + } + } + } + } + catch (Exception ex) + { + + } + finally + { + _isChecked = false; + } + }); + } + + public bool SendCommand(StackerCraneTaskCommand command) + { + try + { + if(_speStackerCrane.IsConnected) + { + _speStackerCrane.SetValue(StackerCraneDBName.TaskNum, command.TaskNum); + _speStackerCrane.SetValue(StackerCraneDBName.StartRow, command.StartRow); + _speStackerCrane.SetValue(StackerCraneDBName.StartColumn, command.StartColumn); + _speStackerCrane.SetValue(StackerCraneDBName.StartLayer, command.StartLayer); + _speStackerCrane.SetValue(StackerCraneDBName.EndRow, command.EndRow); + _speStackerCrane.SetValue(StackerCraneDBName.EndColumn, command.EndColumn); + _speStackerCrane.SetValue(StackerCraneDBName.EndLayer, command.EndLayer); + _speStackerCrane.SetValue(StackerCraneDBName.Barcode, command.Barcode); + _speStackerCrane.SetValue(StackerCraneDBName.WorkType, command.WorkType); + _speStackerCrane.SetValue(StackerCraneDBName.TrayType, command.TrayType); + return true; + } + return false; + + } + catch (Exception ex) + { + return false; + } + } } } -- Gitblit v1.9.3