Bladeren bron

巷道分配新增并发管控

林豪 左 3 jaren geleden
bovenliggende
commit
97d8d639fc

+ 61 - 24
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -16,11 +16,49 @@ namespace WCS.Service.Extensions
     /// </summary>
     public class StationDeviceGroup : DeviceGroup<IStation520, IStation521, IStation523>
     {
+        /// <summary>
+        /// 当前设备可用的RGV
+        /// </summary>
+        private static List<RGVDevice> AllRGVList;
+
+        static StationDeviceGroup()
+        {
+            AllRGVList = Device.Where(v => v.IsRGV() && v.CODE != "RGV8").Select(v => v.Create<RGVDevice>()).ToList();
+        }
+
         public StationDeviceGroup(WCS_DEVICE entity) : base(entity)
         {
         }
 
-        private List<RGVDevice> RGVs;
+        public void EX(Action<StationDeviceGroup> act)
+        {
+            try
+            {
+                if (ExDevice.Any(v => v == Entity.CODE)) return;
+                AddExDevice(Entity.CODE);
+                act(this);
+            }
+            catch (Exception ex)
+            {
+                InfoLog.INFO_ERROR($"{ex.Message}--{ex.StackTrace}");
+                LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, "待定");
+            }
+            finally
+            {
+                RemoveExDevice(Entity.CODE);
+            }
+        }
+
+        /// <summary>
+        /// 当前设备可用的RGV
+        /// </summary>
+        private List<RGVDevice> RgvList
+        {
+            get
+            {
+                return AllRGVList.Where(v => v.LocationList.Any(p => p.Station == Entity.CODE)).ToList();
+            }
+        }
 
         /// <summary>
         /// 设备组自身的位置
@@ -112,7 +150,10 @@ namespace WCS.Service.Extensions
         /// <returns></returns>
         public RGVDevice CurrentRGV()
         {
-            return new RGVDevice(new WCS_DEVICE());
+            //RGV与站台距离误差为 正负50
+            var max = Position + 50;
+            var min = Position - 50;
+            return RgvList.FirstOrDefault(v => v.Data2.Position < max && v.Data2.Position > min);
         }
 
         /// <summary>
@@ -223,6 +264,7 @@ namespace WCS.Service.Extensions
         {
         }
 
+        /// <summary>
         /// 所有环穿RGV
         /// </summary>
         private static List<RGVDevice> AllRGVList { get; set; }
@@ -251,7 +293,7 @@ namespace WCS.Service.Extensions
         }
 
         /// <summary>
-        /// 与当前RGV处于同一环穿的RGV
+        /// 与当前RGV处于同一环穿的站台
         /// </summary>
         public List<StationLocation> LocationList
         {
@@ -324,22 +366,35 @@ namespace WCS.Service.Extensions
         /// <param name="addr">目标地址</param>
         public void Move(StationDeviceGroup addr)
         {
+            Data.TaskType_1 = RGVTaskType.移动;
+            Data.DestPosition_1 = addr.Entity.CODE.ToShort();
+            Data.Trigger_1++;
         }
 
         /// <summary>
         /// 写入取货任务
         /// </summary>
         /// <param name="addr">目标地址</param>
-        public void Pick(StationDeviceGroup addr)
+        public void Pick(StationDeviceGroup addr, int task1 = 0, int task2 = 0)
         {
+            Data.TaskType_1 = RGVTaskType.取货;
+            Data.DestPosition_1 = addr.Entity.CODE.ToShort();
+            if (task1 != 0) Data.TaskID_1 = task1;
+            if (task2 != 0) Data.TaskID_2 = task2;
+            Data.Trigger_1++;
         }
 
         /// <summary>
         /// 写入放货任务
         /// </summary>
         /// <param name="addr">目标地址</param>
-        public void Put(StationDeviceGroup addr)
+        public void Put(StationDeviceGroup addr, int task1 = 0, int task2 = 0)
         {
+            Data.TaskType_1 = RGVTaskType.放货;
+            Data.DestPosition_1 = addr.Entity.CODE.ToShort();
+            if (task1 != 0) Data.TaskID_1 = task1;
+            if (task2 != 0) Data.TaskID_2 = task2;
+            Data.Trigger_1++;
         }
 
         /// <summary>
@@ -525,7 +580,7 @@ namespace WCS.Service.Extensions
         public int Location { get; set; }
 
         /// <summary>
-        /// 所属PLC名称
+        /// 所属RGV组 PLC名称
         /// </summary>
         public string PLC { get; set; }
 
@@ -544,22 +599,4 @@ namespace WCS.Service.Extensions
         public WCS_DEVICE taskIN;
         public Device<ISRM520, ISRM521, ISRM537> SRM;
     }
-
-    /// <summary>
-    /// 设备扩展
-    /// </summary>
-    public static class DeviceExtension
-    {
-        public static void EX(this StationDevice dev, Func<bool> func)
-        {
-            try
-            {
-                func();
-            }
-            catch (Exception ex)
-            {
-                InfoLog.INFO_ERROR($"{ex.Source}----{ex.Message}");
-            }
-        }
-    }
 }

+ 1 - 1
Projects/永冠OPP/WCS.Service/Helpers/LogHelper.cs

@@ -83,7 +83,7 @@ namespace WCS.Service.Helpers
         /// <param name="device">异常关联设备</param>
         /// <param name="type">异常类型</param>
         /// <returns></returns>
-        public static string SpliceLogMessage(string msg, string device, WCS_EXCEPTIONTYPE type,Type type1)
+        public static string SpliceLogMessage(string msg, string device, WCS_EXCEPTIONTYPE type, Type type1)
         {
             InfoLog.INFO_ERROR($"{type1.FullName}--{msg}--{device}--{type}");
             return $"{msg}|{device}|{type}";

+ 2 - 7
Projects/永冠OPP/WCS.Service/Works/Station/一楼入库.cs

@@ -8,7 +8,6 @@ using WCS.Entity.Protocol;
 using WCS.Entity.Protocol.SRM;
 using WCS.Service.Extensions;
 using WCS.Service.Helpers;
-using WCS.Service.Log;
 
 namespace WCS.Service.Works.Station
 {
@@ -84,7 +83,7 @@ namespace WCS.Service.Works.Station
 
         protected override void Do(StationDeviceGroup obj)
         {
-            try
+            obj.EX(obj =>
             {
                 var code = obj.Entity.CODE;
                 //当前组有一个运行的设备就停止执行
@@ -164,11 +163,7 @@ namespace WCS.Service.Works.Station
                         dev.Data.VoucherNo++;
                     }
                 });
-            }
-            catch (Exception ex)
-            {
-                InfoLog.INFO_ERROR(ex.Message);
-            }
+            });
         }
     }