Browse Source

皮盘返空取消就近分配;机械臂出库增加当前设备判断

xu.lu 11 months ago
parent
commit
6584feadde

+ 64 - 62
YWGC/FJK/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -232,23 +232,23 @@ namespace WCS.WorkEngineering.Systems
 
                                                 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)}");
+                                                //World.Log($"agv可用巷道信息(所有):{JsonConvert.SerializeObject(endAllDev)}");
 
-                                                if (!endDev.Any() && !endAllDev.Any() && !endNearDev.Any())//没有可用放货站台
+                                                if (!endDev.Any()/* && !endAllDev.Any() && !endNearDev.Any()*/)//没有可用放货站台
                                                 {
                                                     var msg = "已无可用放货站台,任务正在执行中:";
                                                     foreach (var ag in agvs)
@@ -269,62 +269,64 @@ 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}无可用站台");
-                                                        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;
+                                                        #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;
+                                                        //        }
+                                                        //    }
+                                                        //}
+                                                        //World.Log("可用站台均有货或有执行中任务");
+                                                        //return;
+                                                        #endregion
                                                     }
                                                     World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devs.Select(x => x.Entity.Code).ToList())}");
                                                     agv.Status = AGVTaskStatus.Complete1;

+ 2 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -340,7 +340,8 @@ namespace WCS.WorkEngineering.Systems
                         v.Data4.Type
                     }).ToList();
                     //两个工位同时码垛,并不会一个执行一次,只有一个托盘任务全部执行完毕,才会继续执行下一个,先生成任务的码垛工位会优先执行
-                    var taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(v => (v.Status == Entity.TaskStatus.WaitingToExecute || v.Status == TaskStatus.ConveyorExecution) && v.Type == TaskType.OutDepot)
+                    var taskInfos = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(v => (v.Status == Entity.TaskStatus.WaitingToExecute || v.Status == TaskStatus.ConveyorExecution) && v.Type == TaskType.OutDepot
+                                                                                        && v.Device == obj.Entity.Code)
                         .ToList().Where(v => allOutCode.Any(x => v.SrmStation == x.Code && v.PalletType == x.Type)).ToList();
 
                     var deliveryTask = db.Default.Queryable<WCS_TaskInfo>().Where(x => x.Status > 0 && x.Type == TaskType.Delivery).ToList().Select(x => x.AddrTo);