|
@@ -152,79 +152,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//巷道分配
|
|
|
case AGVTaskStatus.RequestOrPermission1 when agv.Status != AGVTaskStatus.Complete1:
|
|
|
{
|
|
|
- //if (agv.TaskType == AGVTaskType.EnterDepot)
|
|
|
- //{
|
|
|
- // //找到对应WCS任务
|
|
|
- // var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == agv.TaskId);
|
|
|
- // if (task == null) throw new Exception($"AGV任务{agv.ID}未找到对应WCS任务");
|
|
|
- // //向WMS获取巷道优先级
|
|
|
- // var res = WmsApi.GetTunnelPriorityList(task.ID);
|
|
|
- // var tunnelNo = res.ResData.Split(",").Select(v => "SRM" + v).ToList();
|
|
|
|
|
|
- // //开始获取堆垛机与可用站台信息
|
|
|
- // SRM srm = null;
|
|
|
- // var stations = new List<Station>();
|
|
|
-
|
|
|
- // //一楼三个入库口
|
|
|
- // stations = devs.Where(v => v.Entity.Code is "1021" or "1023" or "1025").ToList();
|
|
|
- // //筛选出可用站台
|
|
|
- // stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StationStatus.Auto))
|
|
|
- // .Where(v => !v.Data3.Status.HasFlag(StationStatus.PH_Status) && !v.Data3.Status.HasFlag(StationStatus.OT_Status))
|
|
|
- // .Where(v => !v.Data3.Status.HasFlag(StationStatus.Run)).ToList(); // 筛选出可用站台
|
|
|
- // //可用堆垛机
|
|
|
- // srm = stations.Select(v => v.Entity.Sources).SelectMany(v => v).Where(v => v.IsTunnel()) //上一个地址是巷道的
|
|
|
- // .Select(v => v.Sources).SelectMany(v => v).Where(v => v.HasProtocol(typeof(ISRM520))) //筛选出堆垛机
|
|
|
- // .Select(v => new SRM(v, this.World)) //转换为SRM
|
|
|
- // .Where(v => !v.Data2.Status.HasFlag(SrmStatus.Alarm) && v.Data2.AutoStatus == SrmAutoStatus.Automatic) //筛选出可用堆垛机
|
|
|
- // .Where(v => tunnelNo.Contains(v.Entity.Code)) //筛选出巷道优先级最高的堆垛机
|
|
|
- // .MinBy(v => tunnelNo.IndexOf(v.Entity.Code));//按照巷道优先级排序
|
|
|
- // if (srm == null) throw new Exception($"agv任务{agv.ID}无可用堆垛机");
|
|
|
-
|
|
|
- // //筛选出堆垛机的放货站台
|
|
|
- // var nextPos = stations.FirstOrDefault(v => v.Entity.Sources.Where(t => t.IsTunnel()).Select(t => t.Sources).SelectMany(v => v) //获取所有巷道
|
|
|
- // .Where(t => t.HasProtocol(typeof(ISRM520)))//筛选出堆垛机
|
|
|
- // .SelectMany(v => v.Sources).Any(t => t.Code == srm.Entity.Parent.Code));
|
|
|
-
|
|
|
- // var flag = false;
|
|
|
- // if ((task.BusType is "二楼湿拉线退料回立库" or "二楼湿拉线余料回立库" && task.Floor == 2))
|
|
|
- // {
|
|
|
- // flag = true;
|
|
|
- // nextPos.Entity.Code = "1025";
|
|
|
- // }
|
|
|
- // var agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.Position == nextPos.Entity.Code).SplitTable(v => v.Take(2)).ToList();
|
|
|
- // if (agvs.Any())
|
|
|
- // {
|
|
|
- // var msg = agvs.Aggregate("已无可用放货站台,任务正在执行中:", (current, ag) => current + $"[任务号:{ag.ID},目标地址:{ag.Position}]");
|
|
|
- // throw new Exception(msg);
|
|
|
- // }
|
|
|
-
|
|
|
- // //更新AGV任务状态
|
|
|
- // agv.Status = AGVTaskStatus.Complete1;
|
|
|
- // agv.Position = flag == true ? "1025" : nextPos.Entity.Code;
|
|
|
- // db.Default.Updateable(agv).SplitTable().ExecuteCommand();
|
|
|
- // //更新WCS任务状态
|
|
|
- // if (flag)
|
|
|
- // {
|
|
|
- // srm.Entity.Code = "SRM3";
|
|
|
- // task.Device = srm.Entity.Code;
|
|
|
- // task.Tunnel = "3";
|
|
|
- // task.AddrNext = "1025";
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // task.Device = srm.Entity.Code;
|
|
|
- // task.Tunnel = task.Device.GetLastDigit().ToString();
|
|
|
- // task.AddrNext = agv.Position;
|
|
|
- // }
|
|
|
- // db.Default.Updateable(task).ExecuteCommand();
|
|
|
- // task.AddWCS_TASK_DTL(db.Default, "AGV巷道分配点", nextPos.Entity.Code, $"任务分配至堆垛机:{srm.Entity.Code}");
|
|
|
- // this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID}分配至堆垛机:{srm.Entity.Code}");
|
|
|
- // //调继续执行任务接口
|
|
|
- // AgvApi.ContinueTask(agv.AgvID, nextPos.Entity.Code);
|
|
|
- //}
|
|
|
- //else if (agv.TaskType == AGVTaskType.Transport)
|
|
|
- //{
|
|
|
- //更新AGV任务状态
|
|
|
agv.Status = AGVTaskStatus.Complete1;
|
|
|
agv.Position = "2501";
|
|
|
db.Default.Updateable(agv).SplitTable().ExecuteCommand();
|
|
@@ -237,24 +165,19 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//}
|
|
|
break;
|
|
|
}
|
|
|
- //放货站点安全交互
|
|
|
+ //取货站点安全交互
|
|
|
case AGVTaskStatus.RequestOrPermission2 when agv.Status != AGVTaskStatus.RequestOrPermission2:
|
|
|
{
|
|
|
if (agv.Position.IsNullOrEmpty()) throw new Exception($"无有效放货地址");
|
|
|
var dev = Device.All.First(x => x.Code == agv.Position);
|
|
|
-
|
|
|
- //if (dev.Data.VoucherNo != dev.Data2.VoucherNo) throw new Exception($"AGV请求放货,但{dev.Entity.Code}凭证号不一致");
|
|
|
- //if (!dev.Data3.Status.HasFlag(StationStatus.Auto)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}不在自动状态");
|
|
|
- //if (dev.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}光电有货");
|
|
|
- //if (dev.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}任务有货");
|
|
|
- //if (dev.Data3.Status.HasFlag(StationStatus.Run)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}在运行状态");
|
|
|
- //agv.Status = AGVTaskStatus.RequestOrPermission2;
|
|
|
- //db.Default.Updateable(agv).SplitTable().ExecuteCommand();
|
|
|
-
|
|
|
//调继续执行任务接口
|
|
|
AgvApi.ContinueTask(agv.AgvID, dev.Code);
|
|
|
break;
|
|
|
}
|
|
|
+ case AGVTaskStatus.LeaveGet when agv.Status != AGVTaskStatus.LeaveGet:
|
|
|
+ var devinfo = new Device<IStation520, IStation521>(Device.All.First(x => x.Code == agv.Position), World);
|
|
|
+ devinfo.Data.CmdType = StationCmd.Res3;
|
|
|
+ break;
|
|
|
//完成任务
|
|
|
case AGVTaskStatus.MissionCompleted when agv.Status != AGVTaskStatus.MissionCompleted:
|
|
|
if (agv.TaskType == AGVTaskType.EnterDepot)
|