Browse Source

连廊赶车逻辑、合流

xu.lu 3 years ago
parent
commit
85655232a9

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

@@ -665,6 +665,16 @@ namespace WCS.Service.Extensions
             return (this.Distance(station) < rgv.Distance(station)) || station.CurrentRGV()?.Entity.CODE == this.Entity.CODE;
         }
 
+        /// <summary>
+        /// 当前站台rgv是否挡住放货任务需要移动
+        /// </summary>
+        /// <param name="rgv">RGV</param>
+        /// <returns></returns>
+        public bool NeedToMove(RGVDevice rgv)
+        {
+            return (rgv.Position > 1777767 && rgv.Position < 2714350);
+        }
+
         /// <summary>
         /// 获取当前RGV的下一个站台,即距离最近的一个站台
         /// </summary>
@@ -1136,7 +1146,7 @@ namespace WCS.Service.Extensions
                 new StationLocation("G16",988000,"RGV1",3719290),
                 //new StationLocation("G17",1607000,"RGV1",3719290),
                 //new StationLocation("G18",1667000,"RGV1",3719290),
-                new StationLocation("G19",1785000,"RGV1",3719290),
+                new StationLocation("G19",1777767,"RGV1",3719290),
                 //new StationLocation("G20",2548012,"RGV1",3719290),
                 //new StationLocation("G21",2606033,"RGV1",3719290),
                 //new StationLocation("G22",2660833,"RGV1",3719290),

+ 17 - 38
Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

@@ -310,7 +310,6 @@ namespace WCS.Service.Works.RGV
                         var destStation = Device.Find(tasks.FirstOrDefault().ADDRNEXT).Create<StationDeviceGroup>();
                         obj.Put(destStation, obj.Data2.TaskID_1, obj.Data2.TaskID_2);
                     });
-
                     return;
                 }
 
@@ -354,51 +353,31 @@ namespace WCS.Service.Works.RGV
                             return;
                         }
 
-                        ////找到自己的后一个小车
-                        //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;
-                        //    }
-                        //}
+                        bool NeedToMove = obj.RGVList.Any(v => v.Data2.TaskType_1 == RGVTaskType.放货 && v.Position > 1777767 && v.Position < 2714350);                                                      
+                        if(pickStation.Entity.CODE == "G23" && NeedToMove)                        
+                        {
+                                //找到当前所在站台的下一个取货点
+                                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;                           
+                        }
+                     
                         //计算当前RGV拦住小车的数量
                         var max = obj.RGVList.Count(v => v.Data2.WorkMode == RGVMode.自动 && v.Data2.SystemStatus != RGVRunStatus.空闲 && obj.StopedByMe(v));
-                        if (pickStation.Entity.CODE == "G19" && max > 2)
+                        if (pickStation.Entity.CODE == "G19" && max >= 2)
                         {
                             obj.Move(Device.Find("G23").Create<StationDeviceGroup>());
-                        }
-                        //else if (pickStation.Entity.CODE == "G23" && max > 3)
-                        //{
-                        //    obj.Move(Device.Find("G19").Create<StationDeviceGroup>());
-                        //}
+                        }                       
                     }
-
                     //是否在一个放货站台
                     if (pickStation.Entity.Is(DF.BOPPRGV放货设备组))
                     {
                         pickStation = obj.BeforeStation();
-                        obj.Move(Device.Find("G23").Create<StationDeviceGroup>());
+                        obj.Move(Device.Find("G19").Create<StationDeviceGroup>());
                     }
                     return;
                 }
@@ -408,7 +387,7 @@ namespace WCS.Service.Works.RGV
                 //必须所有RGV都是空闲状态时才可以进行初始化
                 if (obj.RGVList.Any(v => v.Data2.SystemStatus != RGVRunStatus.空闲 || v.Data2.WorkMode != RGVMode.自动)) return;
                 pickStation = obj.BeforeStation();
-                obj.Move(Device.Find("G23").Create<StationDeviceGroup>());
+                obj.Move(Device.Find("G19").Create<StationDeviceGroup>());
             });
         }
 

+ 1 - 1
Projects/永冠OPP/WCS.Service/Works/Station/BOPP入库.cs

@@ -240,7 +240,7 @@ namespace WCS.Service.Works.Station
 
         protected override bool SelectDevice(WCS_DEVICE dev)
         {
-            return dev.CODE is "G23";
+            return dev.CODE is "G23" or "G19";
         }
     }
 

+ 25 - 0
Projects/永冠OPP/WCS.Service/Works/Station/合流入库.cs

@@ -23,6 +23,7 @@ namespace WCS.Service.Works.Station
     //        if (Ltc.Do(dev, v => v.Data2.Status.HasFlag(IstationStatus.光电状态) == false)) return;
     //        if (Ltc.Do(dev, v => v.Data2.Tasknum < 10000)) return;
                    
+<<<<<<< HEAD
     //        var bcr = dev.Entity.BCR();
     //        var barcode = bcr.Content.Trim('\r');
     //        if (barcode == "")                 
@@ -45,4 +46,28 @@ namespace WCS.Service.Works.Station
     //        return new string[] { "3047","3163" }.Contains(dev.CODE);
     //    }
     //}
+=======
+            var bcr = dev.Entity.BCR();
+            var barcode = bcr.Content.Trim('\r');
+            if (barcode == "")                 
+            {
+                InfoLog.INFO_WarnDb($"{dev.Entity.CODE}--扫码失败,内容为空", dev.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                return;
+            };
+            var res = WMS.GetSingleOrDouble(barcode,dev.Entity.CODE);
+            if (res == null) throw new WarnException($"{dev.Entity.CODE}: WMS未返回结果");
+            DB.Do(db =>
+            {
+                if (!db.Default.Set<WCS_TASK>().Any(v => v.ID == dev.Data2.Tasknum)) throw new Exception($"任务号不存在");
+                dev.Data.Tasknum = dev.Data2.Tasknum;
+                dev.Data.Goodsnum = res.Root.ToShort();
+                dev.Data.VoucherNo++;
+            });
+        }
+        protected override bool SelectDevice(WCS_DEVICE dev)
+        {
+            return new string[] { "3047","3163" }.Contains(dev.CODE);
+        }
+    }
+>>>>>>> 连廊赶车逻辑、合流
 }