| | |
| | | { |
| | | 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 |
| | |
| | | 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; |
| | |
| | | } |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |