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