Jelajahi Sumber

重写是否有入库任务的检查逻辑

林豪 左 3 tahun lalu
induk
melakukan
5c774129ca

+ 11 - 0
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -386,6 +386,17 @@ namespace WCS.Service.Extensions
                                 .Where(v => v.IsConv()) //必须是输送线
                                 .Select(v => v.Create<StationDevice>()).ToList();
         }
+
+        /// <summary>
+        /// 获取取货点
+        /// </summary>
+        public List<StationDevice> GetPickPoint()
+        {
+            return Device.Where(v => v.Is(DF.SRM取货))
+                         .Where(v => v.ROUTES.Any(p => p.NEXT.ROUTES.Any(d => d.NEXT == Entity)))
+                         .Select(v => v.Create<StationDevice>())
+                         .ToList();
+        }
     }
 
     /// <summary>

+ 11 - 7
Projects/永冠OPP/WCS.Service/Worker.cs

@@ -82,13 +82,12 @@ namespace WCS.Service
                    //.Where(v => v.ENABLED && v.DEVICE.ENABLED && v.DB.ENABLED && v.DB.PLC.ENABLED)
                    .Include(v => v.DEVICE.ROUTES)
                    .Include(v => v.DEVICE.PATHS)
-                   .Include(v => v.DEVICE.PATHPOINTS)
                    .Include(v => v.DB.PLC).ToArray();
                     items.Select(v => v.Data()).ToArray();
                     LogicHandler.AllObjects.AddRange(items);
 
                     //var devices = items.GroupBy(v => v.DEVICE).Select(v => v.Key).ToArray();
-                    var devices = db.Default.Set<WCS_DEVICE>().Include(v => v.ROUTES).Include(v => v.PATHS).Include(v => v.DEVICEGROUP).Include(v => v.PATHPOINTS).ToArray();
+                    var devices = db.Default.Set<WCS_DEVICE>().Include(v => v.ROUTES).Include(v => v.PATHS).Include(v => v.DEVICEGROUP).ToArray();
                     LogicHandler.AllObjects.AddRange(devices);
                 });
 
@@ -96,20 +95,25 @@ namespace WCS.Service
 
                 Device.AddFlag(DF.一楼RGV放货, "G1035", "G1044", "G1053", "G1062");
                 Device.AddFlag(DF.堆垛机, "SRM1", "SRM2", "SRM3", "SRM4", "SRM5", "SRM6", "SRM7", "SRM8");
-                Device.AddFlag(DF.SRM取货, "G1040", "G1042", "G1049", "G1051", "G1058", "G1060", "G1067");
+
                 Device.AddFlag(DF.月台出货, "G1469", "G1561", "G1538", "G1574", "G1509");
                 Device.AddFlag(DF.RGV1, "G1244");
                 Device.AddFlag(DF.RGV2, "G1244");
 
                 #region SRM放货
 
-                Device.AddFlag(DF.SRM放货, "1473", "1476", "1474", "1475");
-                Device.AddFlag(DF.SRM放货, "1491", "1492", "1493", "1494");
-                Device.AddFlag(DF.SRM放货, "1520", "1521", "1522", "1523");
-                Device.AddFlag(DF.SRM放货, "1545", "1546", "1451", "1453");
+                Device.AddFlag(DF.SRM放货, "1473", "1476", "1474", "1475", "1491", "1492", "1493", "1494");
+                Device.AddFlag(DF.SRM放货, "1520", "1521", "1522", "1523", "1545", "1546", "1451", "1453");
 
                 #endregion SRM放货
 
+                #region SRM取货
+
+                Device.AddFlag(DF.SRM取货, "1440", "1441", "1442", "1443", "1449", "1450", "1451", "1452");
+                Device.AddFlag(DF.SRM取货, "1058", "1059", "1060", "1061", "1067", "1068");
+
+                #endregion SRM取货
+
                 #endregion 设备扩展数据配置
 
                 var managerTypes = Assembly.GetExecutingAssembly().GetTypes().Where(v => v.IsSubclassOf(typeof(LogicHandler)) && !v.IsGenericType && !v.IsAbstract).ToArray();

+ 11 - 14
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -174,21 +174,18 @@ namespace WCS.Service.Works.SRM
             {
                 #region 入库
 
-                // 获取当前堆垛机的取货巷道信息
-                var t = Device.Where(v => v.PATHPOINTS.Any(p => p.NEXT == obj.Entity)).FirstOrDefault();
-                // 获取可以到达目标巷道的取货点
-                var arrIn = Device.Where(v => v.PATHPOINTS.Any(p => p.NEXT == t)).Select(v => v.Create<StationDevice>()).ToArray();
-
-                arrIn = arrIn.Where(v => Device.Where(d => d.IsConv()).Select(d => d.Device<IStation521>()).Where(d => d.Data.Goodsend == v.Entity.Code()).Any()).ToArray();
-
-                if (arrIn.Length == 0) return; //无当前堆垛机的入库任务
-
-                //入库口设备信息 不是设备组
+                //获取所有取货点
+                var arrIn = obj.GetPickPoint()
+                               .Where(v => Device.Where(d => d.IsConv())
+                                                 .Select(d => d.Device<IStation521>())
+                                                 .Where(d => d.Data.Goodsend == v.Entity.Code())
+                                                 .Any()).ToList();
+                if (!arrIn.Any()) return; //当前堆垛机无入库任务
+
+                //入库口设备信息 找一个有任务有光电且不在运行状态位的取货点 如果找不到代表任务还在输送途中
                 var st = arrIn.OrderBy(v => v.Data2.Tasknum > 0 && v.Data2.Status.HasFlag(IstationStatus.光电状态) && !v.Data3.Status.HasFlag(StationStatus.运行状态位) ? 0 : 1)
-                              .ThenBy(v => v.UpdateTime).First();
-
-                if (!(st.Data2.Tasknum > 0 && st.Data2.Status.HasFlag(IstationStatus.光电状态) && !st.Data3.Status.HasFlag(StationStatus.运行状态位)))
-                    throw new Exception($"[{deviceCode}]等待入库任务输送到位");
+                              .ThenBy(v => v.UpdateTime)
+                              .FirstOrDefault() ?? throw new Exception($"[{deviceCode}]等待入库任务输送到位");
 
                 //根据上述筛选条件筛选出来的入库任务 找到对应的设备组
                 var item = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER.CODE == st.Entity.CODE)).Single();

+ 0 - 3
WCS.Entity/WCS_DEVICE.cs

@@ -50,9 +50,6 @@ namespace WCS.Entity
         [InverseProperty("START")]
         public List<WCS_PATH> PATHS { get; set; } = new List<WCS_PATH>();
 
-        [InverseProperty("DEVICE")]
-        public List<WCS_PATHPOINT> PATHPOINTS { get; set; } = new List<WCS_PATHPOINT>();
-
         /// <summary>
         /// 设备组中的内容
         /// </summary>