Forráskód Böngészése

增加组盘区设备;码垛垛型信息判断

xu.lu 1 éve
szülő
commit
6d9eeadd75

+ 97 - 66
YWGC/FJK/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -221,36 +221,67 @@ namespace WCS.WorkEngineering.Systems
                                             {
                                                 //获取当前任务可以去的目标地址
                                                 var positionList = new List<string>(); //当前分配点对应的放货点
-                                                var allPositionList = new List<string>(); //同库区另一侧的放货点
-                                                var nearPositionList = new List<string>(); //所有的放货点
+                                                //var allPositionList = new List<string>(); //同库区另一侧的放货点
+                                                //var nearPositionList = new List<string>(); //所有的放货点
 
-                                                GetPositionList(positionList, nearPositionList, allPositionList, task.WarehouseCode);
+                                                //GetPositionList(positionList, nearPositionList, allPositionList, task.WarehouseCode);
+                                                switch (agv.Station)
+                                                {
+                                                    case "2501":
+                                                        positionList.AddRange(new List<string>() { "2501", "2505", "2509", "2513" });                                                        
+                                                        break;
+
+                                                    case "2701":
+                                                        positionList.AddRange(new List<string>() { "2701", "2705", "2709", "2713" });
+                                                        
+                                                        break;
+
+                                                    case "2901":
+                                                        positionList.AddRange(new List<string>() { "2901", "2905", "2909", "2913" });
+                                                       
+                                                        break;
+
+                                                    case "3101":
+                                                        positionList.AddRange(new List<string>() { "3101", "3105", "3109", "3113" });
+                                                        
+                                                        break;
+
+                                                    case "3301":
+                                                        positionList.AddRange(new List<string>() { "3301", "3305", "3309", "3313" });
+                                                        
+                                                        break;
+
+                                                    case "3501":
+                                                        positionList.AddRange(new List<string>() { "3501", "3505", "3509", "3513" });
+                                                        
+                                                        break;
+                                                }
 
                                                 List<WCS_AgvTaskInfo> agvs = new List<WCS_AgvTaskInfo>(); //当前分配点对应的放货点已用点
-                                                List<WCS_AgvTaskInfo> agvsNear = new List<WCS_AgvTaskInfo>(); //同库区另一侧的放货点已用点
-                                                List<WCS_AgvTaskInfo> agvsAll = new List<WCS_AgvTaskInfo>(); //所有的放货点已用点
+                                                //List<WCS_AgvTaskInfo> agvsNear = new List<WCS_AgvTaskInfo>(); //同库区另一侧的放货点已用点
+                                                //List<WCS_AgvTaskInfo> agvsAll = new List<WCS_AgvTaskInfo>(); //所有的放货点已用点
 
                                                 agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && positionList.Contains(v.Station))
                                                     .SplitTable(v => v.Take(2)).ToList();
-                                                agvsAll = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && allPositionList.Contains(v.Station))
-                                                    .SplitTable(v => v.Take(2)).ToList();
-                                                agvsNear = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && nearPositionList.Contains(v.Station))
-                                                    .SplitTable(v => v.Take(2)).ToList();
+                                                //agvsAll = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && allPositionList.Contains(v.Station))
+                                                //    .SplitTable(v => v.Take(2)).ToList();
+                                                //agvsNear = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && nearPositionList.Contains(v.Station))
+                                                //    .SplitTable(v => v.Take(2)).ToList();
                                                 //获取放货点
                                                 var agvPositionLists = agvs.Select(x => x.Station).Distinct();
-                                                var agvPositionListsNear = agvsNear.Select(x => x.Station).Distinct();
-                                                var agvPositionListsAll = agvsAll.Select(x => x.Station).Distinct();
+                                                //var agvPositionListsNear = agvsNear.Select(x => x.Station).Distinct();
+                                                //var agvPositionListsAll = agvsAll.Select(x => x.Station).Distinct();
                                                 //获取各区域可用点
                                                 var endDev = positionList.Where(x => !agvPositionLists.Contains(x)).ToList();
-                                                var endNearDev = nearPositionList.Where(x => !agvPositionListsNear.Contains(x)).ToList();
-                                                var endAllDev = allPositionList.Where(x => !agvPositionListsAll.Contains(x)).ToList();
+                                                //var endNearDev = nearPositionList.Where(x => !agvPositionListsNear.Contains(x)).ToList();
+                                                //var endAllDev = allPositionList.Where(x => !agvPositionListsAll.Contains(x)).ToList();
 
                                                 World.Log($"agv可用巷道信息:{JsonConvert.SerializeObject(endDev)}");
                                                 //World.Log($"agv可用巷道信息(所有):{JsonConvert.SerializeObject(endAllDev)}");
 
-                                                if (!endDev.Any() && !endAllDev.Any() && !endNearDev.Any())//没有可用放货站台
+                                                if (!endDev.Any() /*&& !endAllDev.Any() && !endNearDev.Any()*/)//没有可用放货站台
                                                 {
-                                                    var msg = "已无可用放货站台,任务正在执行中:";
+                                                    var msg = $"任务{agv.ID}已无可用放货站台";
                                                     foreach (var ag in agvs)
                                                     {
                                                         msg += $"[任务号:{ag.ID},目标地址:{ag.Station}]";
@@ -269,61 +300,61 @@ namespace WCS.WorkEngineering.Systems
                                                         !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
                                                         x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
 
-                                                    var devsNear = Device.All.Where(x => endNearDev.Contains(x.Code)).Select(x =>
-                                                        new Device<IStation520, IStation521, IStation523>(x, World));
-                                                    devsNear = devsNear.Where(x =>
-                                                        !x.Data3.Status.HasFlag(StationStatus.Run) &&
-                                                        !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                        x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
+                                                    //var devsNear = Device.All.Where(x => endNearDev.Contains(x.Code)).Select(x =>
+                                                    //    new Device<IStation520, IStation521, IStation523>(x, World));
+                                                    //devsNear = devsNear.Where(x =>
+                                                    //    !x.Data3.Status.HasFlag(StationStatus.Run) &&
+                                                    //    !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                    //    x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
 
-                                                    var devsAll = Device.All.Where(x => endAllDev.Contains(x.Code)).Select(x =>
-                                                        new Device<IStation520, IStation521, IStation523>(x, World));
-                                                    devsAll = devsAll.Where(x =>
-                                                        !x.Data3.Status.HasFlag(StationStatus.Run) &&
-                                                        !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                        x.Data3.Status.HasFlag(StationStatus.Auto)).OrderBy(v => allPositionList.Contains(v.Entity.Code)).ToList();
+                                                    //var devsAll = Device.All.Where(x => endAllDev.Contains(x.Code)).Select(x =>
+                                                    //    new Device<IStation520, IStation521, IStation523>(x, World));
+                                                    //devsAll = devsAll.Where(x =>
+                                                    //    !x.Data3.Status.HasFlag(StationStatus.Run) &&
+                                                    //    !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                    //    x.Data3.Status.HasFlag(StationStatus.Auto)).OrderBy(v => allPositionList.Contains(v.Entity.Code)).ToList();
                                                     if (!devs.Any()) //自身所属位置无可用放货点
                                                     {
-                                                        //throw new Exception($"当前任务{agv.ID}无可用站台");
+                                                        throw new Exception($"当前任务{agv.ID}无可用站台");
                                                         #region  弃用
-                                                        if (devsNear.Any())//先判断同库一侧
-                                                        {
-                                                            foreach (var dev in devsNear)
-                                                            {
-                                                                if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
-                                                                {
-                                                                    World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
-                                                                    agv.Status = AGVTaskStatus.Complete1;
-                                                                    agv.Station = dev.Entity.Code;
-                                                                    db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                                                    World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
-                                                                    task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
-                                                                    World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                                                    World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
-                                                                    return;
-                                                                }
-                                                            }
-                                                        }
-                                                        else if (devsAll.Any())
-                                                        {
-                                                            foreach (var dev in devsAll)
-                                                            {
-                                                                if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
-                                                                {
-                                                                    World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
-                                                                    agv.Status = AGVTaskStatus.Complete1;
-                                                                    agv.Station = dev.Entity.Code;
-                                                                    db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                                                    World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
-                                                                    task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
-                                                                    World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                                                    World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
-                                                                    return;
-                                                                }
-                                                            }
-                                                        }
+                                                        //if (devsNear.Any())//先判断同库一侧
+                                                        //{
+                                                        //    foreach (var dev in devsNear)
+                                                        //    {
+                                                        //        if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
+                                                        //        {
+                                                        //            World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
+                                                        //            agv.Status = AGVTaskStatus.Complete1;
+                                                        //            agv.Station = dev.Entity.Code;
+                                                        //            db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                                        //            World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
+                                                        //            task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
+                                                        //            World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
+                                                        //            AgvApi.ContinueTask(agv.AgvID, agv.Station);
+                                                        //            World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
+                                                        //            return;
+                                                        //        }
+                                                        //    }
+                                                        //}
+                                                        //else if (devsAll.Any())
+                                                        //{
+                                                        //    foreach (var dev in devsAll)
+                                                        //    {
+                                                        //        if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
+                                                        //        {
+                                                        //            World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
+                                                        //            agv.Status = AGVTaskStatus.Complete1;
+                                                        //            agv.Station = dev.Entity.Code;
+                                                        //            db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                                        //            World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
+                                                        //            task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
+                                                        //            World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
+                                                        //            AgvApi.ContinueTask(agv.AgvID, agv.Station);
+                                                        //            World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
+                                                        //            return;
+                                                        //        }
+                                                        //    }
+                                                        //}
                                                         World.Log("可用站台均有货或有执行中任务");
                                                         return;
                                                         #endregion

+ 8 - 2
YWGC/FJK/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs

@@ -199,8 +199,14 @@ namespace WCS.WorkEngineering.Systems
                 if (goodsType == 18)
                 {
                     //判断这个垛型是否是到桁架区域进行码垛
-                    isTruss = db.Queryable<BillBomsetgrp>().First(x => x.BomCode.Contains(taskInfo.MatCode) && x.IsStop == 0).IsTruss;
-                    if (isTruss)
+                    var toTruss = db.Queryable<BillBomsetgrp>().First(x => x.BomCode.Contains(taskInfo.MatCode) && x.IsStop == 0);
+                    if (toTruss == null)
+                    {
+                        World.Log($"未找到任务{taskInfo.ID}对应垛型信息,请确认垛型是否停用", LogLevelEnum.Mid);
+                        return;
+                    }
+                    
+                    if (toTruss.IsTruss)
                     {
                         nextAdd = obj.Entity.Code switch
                         {

+ 1 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/重绕区/叫料生成AGV任务.cs

@@ -95,7 +95,7 @@ namespace WCS.WorkEngineering.Systems.重绕区
 
         public override bool Select(Device dev)
         {
-            return dev.Code is "9201" or "9202" or "9203" or "9204" or "9205" or "9206" or "9207" or "9208" or "9209";
+            return dev.HasFlag(DeviceFlags.重绕区叫料工位);
         }
     }
 }

+ 3 - 2
YWGC/FJK/WCS.WorkEngineering/Systems/重绕区/组盘缓存生成AGV任务.cs

@@ -80,7 +80,8 @@ namespace WCS.WorkEngineering.Systems.重绕区
                     return;
                 }
                 //分配缓存货位 暂时先根据光电判断
-                List<string> cacheWells = new List<string> { "9201", "9202", "9203", "9204", "9205", "9206", "9207", "9208", "9209" };
+                List<string> cacheWells = new List<string> { "9201", "9202", "9203", "9204", "9205", "9206", "9207", "9208", "9209","9210","9211","9212",
+                                                                "9213","9214"/*,"9215","9216","9217","9218","9219","9220","9221","9222","9223","9224"*/};
                 var devs = Device.All.Where(x => cacheWells.Contains(x.Code)).Select(x =>
                                                     new Device<IStation520, IStation521, IStation523>(x, World));
                 if (!devs.Any()) return;
@@ -130,7 +131,7 @@ namespace WCS.WorkEngineering.Systems.重绕区
 
         public override bool Select(Device dev)
         {
-            return dev.Code is "9126" or "9137";
+            return dev.Code is "9126";
         }
     }
 }

+ 3 - 1
YWGC/FJK/WCS.WorkEngineering/WorkStart.cs

@@ -1906,7 +1906,9 @@ namespace WCS.WorkEngineering
                      { DeviceFlags.AGV取货站台口, new List<string>(){ /*"2533",*/ "2534", "2734", "2733"} },
                      { DeviceFlags.Robot, new List<string>(){ "Robot1", "Robot2" } },
                      {DeviceFlags.二次码垛RGV取货口, new List<string>(){ "1606", "1616"}},
-                     {DeviceFlags.重绕区叫料工位, new List<string>(){ "9201", "9202","9203", "9204","9205", "9206","9207", "9208","9209"}}
+                     {DeviceFlags.重绕区叫料工位, new List<string>(){ "9201", "9202","9203", "9204","9205", "9206","9207", "9208","9209",
+                                                                "9210", "9211","9212", "9213","9214",/* "9215","9216", "9217","9218","9219",
+                                                                 "9220","9221","9222","9223","9224"*/}}
 
                  };
                 Parallel.ForEach(devices, device =>