Przeglądaj źródła

优化涂布调车逻辑 次日发布

林豪 左 3 lat temu
rodzic
commit
30c39640d5
1 zmienionych plików z 10 dodań i 13 usunięć
  1. 10 13
      Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

+ 10 - 13
Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

@@ -195,7 +195,7 @@ namespace WCS.Service.Works.RGV
                             {
                                 //为了减少空跑,需要被阻拦的小车后面的小车任务类型为移动并且位置值要大于618500小于被阻拦小车的位置值
                                 var afterRgv1 = afterRgv.After();
-                                if (afterRgv.Data2.WorkMode == RGVMode.自动 && afterRgv1.Data2.TaskType_1 != RGVTaskType.移动 || !(afterRgv1.Position < afterRgv.Position && afterRgv1.Position > 618500)) return;
+                                if (afterRgv1.Data2.WorkMode == RGVMode.自动 && afterRgv1.Data2.TaskType_1 != RGVTaskType.移动 && !(afterRgv1.Position < afterRgv.Position && afterRgv1.Position > 618500)) return;
                             }
                             //找到当前所在站台的下一个取货点
                             var beforeStation = Device.Where(v => v.Is(DF.涂布RGV取货设备组) && v.CODE != pickStation.Entity.CODE)
@@ -213,27 +213,24 @@ namespace WCS.Service.Works.RGV
                         }
                         else
                         {
-                            //有货 没有小车也并没有正在过来的小车  的站台
-                            var stationList = Device.Where(v => v.Is(DF.涂布RGV取货设备组))
+                            //找到自己前面的 有货 没有小车 没有正在过来的小车 距离自己最近的  的站台
+                            var station = Device.Where(v => v.Is(DF.涂布RGV取货设备组))
                                                     .Select(v => v.Create<StationDeviceGroup>())
+                                                    .Where(v => v.Position > obj.Position) //前面的
                                                     .Where(v => v.CurrentRGV() == null)
-                                                    .Where(v => v.RgvList.Any(c => c.Data2.SystemStatus != RGVRunStatus.空闲 && c.Data2.DestPosition_1 == v.Entity.CODE.GetShortCode()))
+                                                    .Where(v => !v.RgvList.Any(c => c.Data2.SystemStatus != RGVRunStatus.空闲 && c.Data2.DestPosition_1 == v.Entity.CODE.GetShortCode()))
                                                     .Where(v =>
                                                     {
                                                         // 筛选出有任务号和起始及目标地址的设备
                                                         var b = pickStation.RGVGetTaskedDevice();
                                                         //是否需要取货
                                                         if (b != null && b.Count > 0) return true;
-                                                        return false;
-                                                    });
-                            foreach (var station in stationList)
+                                                        else return false;
+                                                    })
+                                                    .OrderBy(v => obj.Distance(v)).FirstOrDefault();
+                            if (obj.Data2.TaskType_1 == RGVTaskType.移动 && obj.Distance(station) > 100000)
                             {
-                                //找到距离当前站台最近的一个小车
-                                var rgv = station.RecentRGV();
-                                if (rgv.Data2.TaskType_1 == RGVTaskType.移动 && rgv.Distance(station) > 100000)
-                                {
-                                    rgv.Move(station);
-                                }
+                                obj.Move(station);
                             }
                         }
                     }