Quellcode durchsuchen

大环穿调度优化

林豪 左 vor 3 Jahren
Ursprung
Commit
c01ceab7a0

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

@@ -553,9 +553,9 @@ namespace WCS.Service.Extensions
             if (Data2.WorkMode != RGVMode.自动) throw new WarnException($"RGV状态{Data2.WorkMode},无法执行移动任务");
             if (Data2.SystemStatus != RGVRunStatus.空闲) throw new WarnException($"rgv状态为{Data2.SystemStatus},无法执行移动任务");
             if (Data2.Status_1.HasFlag(WCS.Entity.Protocol.RGVStatus.光电)) throw new WarnException("RGV有光电,无法执行移动任务");
-            Data.TaskID_1 = addr.Entity.CODE.Replace("G", "").ToShort();
+            Data.TaskID_1 = addr.Entity.CODE.GetShortCode();
             Data.TaskType_1 = RGVTaskType.移动;
-            Data.DestPosition_1 = addr.Entity.CODE.Replace("G", "").ToShort();
+            Data.DestPosition_1 = addr.Entity.CODE.GetShortCode();
             Data.Trigger_1++;
             InfoLog.INFO_RGVINFO($"[{Entity.CODE}]--写入RGV移动任务-结束:{Data.TaskID_1},{Data.TaskType_1},{Data.DestPosition_1},{Data.Trigger_1}");
         }
@@ -568,7 +568,7 @@ namespace WCS.Service.Extensions
         {
             InfoLog.INFO_RGVINFO($"[{Entity.CODE}]--写入RGV取货任务-开始:{Data.TaskID_1},{Data.TaskID_2},{Data.TaskType_1},{Data.DestPosition_1},{Data.Trigger_1}");
             Data.TaskType_1 = RGVTaskType.取货;
-            Data.DestPosition_1 = addr.Entity.CODE.ToShort();
+            Data.DestPosition_1 = addr.Entity.CODE.GetShortCode();
             if (task1 != 0) Data.TaskID_1 = task1;
             if (task2 != 0) Data.TaskID_2 = task2;
             Data.Trigger_1++;
@@ -583,7 +583,7 @@ namespace WCS.Service.Extensions
         {
             InfoLog.INFO_RGVINFO($"[{Entity.CODE}]--写入RGV放货任务-开始:{Data.TaskID_1},{Data.TaskID_2},{Data.TaskType_1},{Data.DestPosition_1},{Data.Trigger_1}");
             Data.TaskType_1 = RGVTaskType.放货;
-            Data.DestPosition_1 = addr.Entity.CODE.Replace("G", "").ToShort();
+            Data.DestPosition_1 = addr.Entity.CODE.GetShortCode();
             if (task1 != 0) Data.TaskID_1 = task1;
             if (task2 != 0) Data.TaskID_2 = task2;
             Data.Trigger_1++;
@@ -1030,12 +1030,12 @@ namespace WCS.Service.Extensions
                 new StationLocation("G14",879930,"RGV1",3719290),
                 new StationLocation("G15",936310,"RGV1",3719290),
                 new StationLocation("G16",988000,"RGV1",3719290),
-                new StationLocation("G17",1607000,"RGV1",3719290),
-                new StationLocation("G18",1667000,"RGV1",3719290),
+                //new StationLocation("G17",1607000,"RGV1",3719290),
+                //new StationLocation("G18",1667000,"RGV1",3719290),
                 new StationLocation("G19",1785000,"RGV1",3719290),
-                new StationLocation("G20",2548012,"RGV1",3719290),
-                new StationLocation("G21",2606033,"RGV1",3719290),
-                new StationLocation("G22",2660833,"RGV1",3719290),
+                //new StationLocation("G20",2548012,"RGV1",3719290),
+                //new StationLocation("G21",2606033,"RGV1",3719290),
+                //new StationLocation("G22",2660833,"RGV1",3719290),
                 new StationLocation("G23",2714350,"RGV1",3719290),
             });
         }

+ 2 - 1
Projects/永冠OPP/WCS.Service/Worker.cs

@@ -116,7 +116,8 @@ namespace WCS.Service
                 Device.AddFlag(DF.涂布RGV取货站台, "1285", "1286", "1294", "1295", "1303", "1304", "1312", "1313");
                 Device.AddFlag(DF.涂布RGV取货站台, "1391", "1392", "1399", "1400");
                 Device.AddFlag(DF.BOPPRGV, "RGV1", "RGV2", "RGV3", "RGV4", "RGV5", "RGV6", "RGV7");
-                Device.AddFlag(DF.BOPPRGV取货设备组, "G17", "G18", "G19", "G20", "G21", "G22", "G23");
+                //Device.AddFlag(DF.BOPPRGV取货设备组, "G17", "G18", "G19", "G20", "G21", "G22", "G23");
+                Device.AddFlag(DF.BOPPRGV取货设备组, "G19", "G23");
                 Device.AddFlag(DF.BOPPRGV放货设备组, "G12", "G13", "G14", "G15", "G16");
 
                 #endregion 设备扩展数据配置

+ 36 - 30
Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

@@ -323,12 +323,7 @@ namespace WCS.Service.Works.RGV
                                 {
                                     if (gw1.Data2.Goodsend != gw2.Data2.Goodsend) throw new WarnException($"{obj.Entity.CODE}目标地址不一致");
                                 }
-                                obj.Data.TaskID_1 = gw1.Data2.Tasknum;
-                                obj.Data.TaskID_2 = gw2.Data2.Tasknum;
-                                obj.Data.TaskType_1 = RGVTaskType.取货;
-                                obj.Data.DestPosition_1 = pickStation.Entity.CODE.Replace("G", "").ToShort();
-
-                                obj.Data.Trigger_1++;
+                                obj.Pick(pickStation, gw1.Data2.Tasknum, gw2.Data2.Tasknum);
 
                                 foreach (var task in tasks)
                                 {
@@ -341,33 +336,44 @@ namespace WCS.Service.Works.RGV
                             return;
                         }
 
-                        //找到自己的后一个小车
-                        var afterRgv = obj.After();
-
-                        //自己是否阻挡了该小车
-                        if (afterRgv.Data2.WorkMode == RGVMode.自动 && afterRgv.Data2.SystemStatus != RGVRunStatus.空闲 && obj.StopedByMe(afterRgv))
+                        ////找到自己的后一个小车
+                        //var afterRgv = obj.After();
+
+                        ////自己是否阻挡了该小车
+                        //if (afterRgv.Data2.WorkMode == RGVMode.自动 && afterRgv.Data2.SystemStatus != RGVRunStatus.空闲 && obj.StopedByMe(afterRgv))
+                        //{
+                        //    //找到当前所在站台的下一个取货点
+                        //    var beforeStation = Device.Where(v => v.Is(DF.BOPPRGV取货设备组) && v.CODE != pickStation.Entity.CODE)
+                        //                  .Select(v => v.Create<StationDeviceGroup>())
+                        //                  .OrderBy(v => pickStation.Distance(v))
+                        //                  .FirstOrDefault();
+
+                        //    //写入移动任务
+                        //    obj.Move(beforeStation);
+                        //    return;
+                        //}
+                        //else
+                        //{
+                        //    //取前一个取货点
+                        //    pickStation = obj.BeforeStation();
+                        //    //前一个取货点的小车
+                        //    var rgv = pickStation.CurrentRGV();
+                        //    //前一个取货点没有车 且没有非空闲目的地为前一个取货点的小车
+                        //    if (rgv == null && !obj.RGVList.Any(v => v.Data2.SystemStatus != RGVRunStatus.空闲 && v.Data2.DestPosition_1 == pickStation.Entity.CODE.Replace("G", "").ToShort()))
+                        //    {
+                        //        obj.Move(pickStation);
+                        //        return;
+                        //    }
+                        //}
+                        //计算当前RGV拦住小车的数量
+                        var max = obj.RGVList.Count(v => v.Data2.WorkMode == RGVMode.自动 && v.Data2.SystemStatus != RGVRunStatus.空闲 && obj.StopedByMe(v));
+                        if (pickStation.Entity.CODE == "G19" && max > 3)
                         {
-                            //找到当前所在站台的下一个取货点
-                            var beforeStation = Device.Where(v => v.Is(DF.BOPPRGV取货设备组) && v.CODE != pickStation.Entity.CODE)
-                                          .Select(v => v.Create<StationDeviceGroup>())
-                                          .OrderBy(v => pickStation.Distance(v))
-                                          .FirstOrDefault();
-
-                            //写入移动任务
-                            obj.Move(beforeStation);
-                            return;
+                            obj.Move(Device.Find("G23").Create<StationDeviceGroup>());
                         }
-                        else
+                        else if (pickStation.Entity.CODE == "G23" && max > 4)
                         {
-                            //取前一个取货点
-                            pickStation = obj.BeforeStation();
-                            //前一个取货点的小车
-                            var rgv = pickStation.CurrentRGV();
-                            //前一个取货点没有车 且没有非空闲目的地为前一个取货点的小车
-                            if (rgv == null && !obj.RGVList.Any(v => v.Data2.SystemStatus != RGVRunStatus.空闲 && v.Data2.DestPosition_1 == pickStation.Entity.CODE.Replace("G", "").ToShort()))
-                            {
-                                obj.Move(pickStation);
-                            }
+                            obj.Move(Device.Find("G19").Create<StationDeviceGroup>());
                         }
                     }