|
@@ -45,9 +45,21 @@ namespace WCS.Service.Works.Station
|
|
|
|
|
|
var infos = devs.GetWMSInTask();
|
|
|
if (!infos.Any()) throw new WarnException($"{obj.Entity.CODE}: WMS未返回结果");
|
|
|
+
|
|
|
+ WCS_AGVTask agvTask = null;
|
|
|
//创建对应的任务
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
+ if (obj.Entity.CODE == "G3052" && !obj.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.手动入库)))
|
|
|
+ {
|
|
|
+ agvTask = db.Default.Set<WCS_AGVTask>().FirstOrDefault(v => v.Status == AGVTaskStatus.完成 && (v.Station == "G3052" || v.Station == "3054")) ?? throw new WarnException("无完成AGV任务");
|
|
|
+ if (agvTask.Status != AGVTaskStatus.完成扫码)
|
|
|
+ {
|
|
|
+ agvTask.Status = AGVTaskStatus.完成扫码;
|
|
|
+ agvTask.UpdateTime = DateTime.Now;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
foreach (var item in devs)
|
|
|
{
|
|
|
var dev = item.Station;
|
|
@@ -99,179 +111,177 @@ namespace WCS.Service.Works.Station
|
|
|
InfoLog.INFO_TIMING($"{obj.Entity.CODE}--扫码入库,耗时{timer.ElapsedMilliseconds}");
|
|
|
}
|
|
|
});
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
/// <summary>
|
|
|
- /// 涂布入库AGV交互
|
|
|
+ /// 24车间入库
|
|
|
/// </summary>
|
|
|
- //[WorkTitle(typeof(ProductHandler), "连廊入库AGV交互")]
|
|
|
- //public class 连廊入库agv交互 : Work<StationDeviceGroup>
|
|
|
- //{
|
|
|
- // protected override void Do(StationDeviceGroup obj)
|
|
|
- // {
|
|
|
- // obj.EX(stationDeviceGroup =>
|
|
|
- // {
|
|
|
- // var station = stationDeviceGroup.Entity.CODE;
|
|
|
+ [WorkTitle(typeof(ProductHandler), "连廊入库AGV交互")]
|
|
|
+ public class 连廊入库agv交互 : Work<StationDeviceGroup>
|
|
|
+ {
|
|
|
+ protected override void Do(StationDeviceGroup obj)
|
|
|
+ {
|
|
|
+ obj.EX(stationDeviceGroup =>
|
|
|
+ {
|
|
|
+ var station = stationDeviceGroup.Entity.CODE;
|
|
|
|
|
|
- // #region 处理新增AGV任务
|
|
|
+ #region 处理新增AGV任务
|
|
|
|
|
|
- // DB.Do(db =>
|
|
|
- // {
|
|
|
- // //找到所有的AGV任务
|
|
|
- // var agvTasks = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库)
|
|
|
- // .Where(v => v.Status < AGVTaskStatus.完成).OrderByDescending(v => v.Status).ThenBy(v => v.CreateTime).ToArray();
|
|
|
+ DB.Do(db =>
|
|
|
+ {
|
|
|
+ //找到所有的AGV任务
|
|
|
+ var agvTasks = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库 && v.Workshop == 24)
|
|
|
+ .Where(v => v.Status < AGVTaskStatus.完成).OrderByDescending(v => v.Status).ThenBy(v => v.CreateTime).ToArray();
|
|
|
|
|
|
- // foreach (var tasking in agvTasks)
|
|
|
- // {
|
|
|
- // var position = tasking.Position;
|
|
|
- // if (!ProtocolProxy.AllDatas.ContainsKey(position))
|
|
|
- // ProtocolProxy.AllDatas[position] = new ProdLineData();
|
|
|
- // var pld = ProtocolProxy.AllDatas[position] as ProdLineData;
|
|
|
- // pld!.Frame = LogicHandler.Frame;
|
|
|
- // pld.Code = position;
|
|
|
- // pld.TaskList.Add(tasking);
|
|
|
+ foreach (var tasking in agvTasks)
|
|
|
+ {
|
|
|
+ var position = tasking.Position;
|
|
|
+ if (!ProtocolProxy.AllDatas.ContainsKey(position))
|
|
|
+ ProtocolProxy.AllDatas[position] = new ProdLineData();
|
|
|
+ var pld = ProtocolProxy.AllDatas[position] as ProdLineData;
|
|
|
+ pld!.Frame = LogicHandler.Frame;
|
|
|
+ pld.Code = position;
|
|
|
+ pld.TaskList.Add(tasking);
|
|
|
|
|
|
- // if (tasking.Status == AGVTaskStatus.新建)
|
|
|
- // {
|
|
|
- // tasking.Status = AGVTaskStatus.执行;
|
|
|
- // tasking.UpdateTime = DateTime.Now;
|
|
|
- // db.Default.SaveChanges();
|
|
|
- // tasking.AGVStatusChange(AGVTaskStatus.执行, "确认执行");
|
|
|
- // }
|
|
|
- // //agv到达指定位置给确认后分配站台
|
|
|
- // else if (tasking.Status == AGVTaskStatus.执行 && tasking.AGVStatus == AGVTaskStatus.确认 && string.IsNullOrEmpty(tasking.Station))
|
|
|
- // {
|
|
|
- // //判断提升机是否被禁用
|
|
|
- // if (!stationDeviceGroup.BcrStationIsForbid()) continue;
|
|
|
+ if (tasking.Status == AGVTaskStatus.新建)
|
|
|
+ {
|
|
|
+ tasking.Status = AGVTaskStatus.执行;
|
|
|
+ tasking.UpdateTime = DateTime.Now;
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ tasking.AGVStatusChange(AGVTaskStatus.执行, "确认执行");
|
|
|
+ }
|
|
|
+ #region 111
|
|
|
+ //agv到达指定位置给确认后分配站台
|
|
|
+ //else if (tasking.Status == AGVTaskStatus.执行 && tasking.AGVStatus == AGVTaskStatus.确认 && string.IsNullOrEmpty(tasking.Station))
|
|
|
+ //{
|
|
|
+ // //判断提升机是否被禁用
|
|
|
+ // if (!stationDeviceGroup.BcrStationIsForbid()) continue;
|
|
|
|
|
|
- // if (stationDeviceGroup.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.自动)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_INFO($"{station}手动状态");
|
|
|
- // continue;
|
|
|
- // }
|
|
|
+ // if (stationDeviceGroup.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.自动)))
|
|
|
+ // {
|
|
|
+ // InfoLog.INFO_INFO($"{station}手动状态");
|
|
|
+ // continue;
|
|
|
+ // }
|
|
|
|
|
|
- // var qty = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库 && v.Status > AGVTaskStatus.新建 && v.Status < AGVTaskStatus.完成);
|
|
|
- // if (qty.Any(v => v.Station == stationDeviceGroup.Entity.CODE) || agvTasks.Any(v => v.Station == stationDeviceGroup.Entity.CODE))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WARN($"已有到达{stationDeviceGroup.Entity.CODE}放货任务,暂停AGV站台分配");
|
|
|
- // continue;
|
|
|
- // }
|
|
|
+ // //var qty = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库 && v.Status > AGVTaskStatus.新建 && v.Status < AGVTaskStatus.完成);
|
|
|
+ // //if (qty.Any(v => v.Station == stationDeviceGroup.Entity.CODE) || agvTasks.Any(v => v.Station == stationDeviceGroup.Entity.CODE))
|
|
|
+ // //{
|
|
|
+ // // InfoLog.INFO_WARN($"已有到达{stationDeviceGroup.Entity.CODE}放货任务,暂停AGV站台分配");
|
|
|
+ // // continue;
|
|
|
+ // //}
|
|
|
|
|
|
- // tasking.Station = stationDeviceGroup.Entity.CODE;
|
|
|
- // tasking.Status = AGVTaskStatus.执行;
|
|
|
- // tasking.UpdateTime = DateTime.Now;
|
|
|
- // db.Default.SaveChanges();
|
|
|
- // tasking.AGVStatusChange(AGVTaskStatus.执行, "分配放货点");
|
|
|
- // }
|
|
|
- // else if (tasking.Status < tasking.AGVStatus)
|
|
|
- // {
|
|
|
- // if (tasking.Station != stationDeviceGroup.Entity.CODE)
|
|
|
- // {
|
|
|
- // InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}不是当前站台的AGV任务");
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (tasking.AGVStatus == AGVTaskStatus.请求_允许)
|
|
|
- // {
|
|
|
- // if (stationDeviceGroup.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.自动)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_INFO("不在自动状态");
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_INFO("设备运行中");
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (stationDeviceGroup.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.高位)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb("不在高位", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb("AGV请求放货,但有光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.AGV放货完成信号)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb("AGV放货完成信号未清除", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (stationDeviceGroup.Items.Any(v => v.Data2.Tasknum > 0))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb("已有WCS任务号", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
+ // tasking.Station = stationDeviceGroup.Entity.CODE;
|
|
|
+ // tasking.Status = AGVTaskStatus.执行;
|
|
|
+ // tasking.UpdateTime = DateTime.Now;
|
|
|
+ // db.Default.SaveChanges();
|
|
|
+ // tasking.AGVStatusChange(AGVTaskStatus.执行, "分配放货点");
|
|
|
+ //}
|
|
|
+ #endregion
|
|
|
+ else if (tasking.Status < tasking.AGVStatus)
|
|
|
+ {
|
|
|
+ if (tasking.AGVStatus == AGVTaskStatus.请求_允许)
|
|
|
+ {
|
|
|
+ if (stationDeviceGroup.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.自动)))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_INFO("不在自动状态");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位)))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_INFO("设备运行中");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (stationDeviceGroup.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.高位)))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb("不在高位", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态)))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb("AGV请求放货,但有光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.AGV放货完成信号)))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb("AGV放货完成信号未清除", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data2.Tasknum > 0))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb("已有WCS任务号", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- // if (db.Default.Set<WCS_AGVTask>().Any(v => v.Station == tasking.Station && v.Status >= AGVTaskStatus.请求_允许 && v.Status < AGVTaskStatus.完成扫码 && v.ID != tasking.ID)) //只能允许一个
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb("上一个允许放货的AGV任务未完成", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // tasking.Status = tasking.AGVStatus;
|
|
|
- // tasking.UpdateTime = DateTime.Now;
|
|
|
- // db.Default.SaveChanges();
|
|
|
- // tasking.AGVStatusChange(tasking.AGVStatus, "允许放货");
|
|
|
- // }
|
|
|
- // else if (tasking.AGVStatus == AGVTaskStatus.取放完成)
|
|
|
- // {
|
|
|
- // if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.AGV放货完成信号)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb("AGV放货完成信号未清楚", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (!stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态)))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb("放货完成无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
+ if (db.Default.Set<WCS_AGVTask>().Any(v => v.Station == tasking.Station && v.Status >= AGVTaskStatus.请求_允许 && v.Status < AGVTaskStatus.完成扫码 && v.ID != tasking.ID)) //只能允许一个
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb("上一个允许放货的AGV任务未完成", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ tasking.Status = tasking.AGVStatus;
|
|
|
+ tasking.UpdateTime = DateTime.Now;
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ tasking.AGVStatusChange(tasking.AGVStatus, "允许放货");
|
|
|
+ }
|
|
|
+ else if (tasking.AGVStatus == AGVTaskStatus.取放完成)
|
|
|
+ {
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.AGV放货完成信号)))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb("AGV放货完成信号未清楚", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态)))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb("放货完成无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- // tasking.Status = tasking.AGVStatus;
|
|
|
- // tasking.UpdateTime = DateTime.Now;
|
|
|
- // db.Default.SaveChanges();
|
|
|
- // foreach (var dev in stationDeviceGroup.Items)
|
|
|
- // {
|
|
|
- // if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
|
|
|
- // {
|
|
|
- // InfoLog.INFO_WarnDb($"AGV请求放货,但设备{dev.Entity.CODE}无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
- // continue;
|
|
|
- // }
|
|
|
+ tasking.Status = tasking.AGVStatus;
|
|
|
+ tasking.UpdateTime = DateTime.Now;
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ foreach (var dev in stationDeviceGroup.Items)
|
|
|
+ {
|
|
|
+ if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
|
|
|
+ {
|
|
|
+ InfoLog.INFO_WarnDb($"AGV请求放货,但设备{dev.Entity.CODE}无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- // dev.Data.Goodsnum = (short)tasking.Goodsnum;
|
|
|
- // dev.Data.Istation521Status = IstationStatus.AGV放货完成信号;
|
|
|
- // }
|
|
|
- // tasking.AGVStatusChange(tasking.AGVStatus, "允许设备顶升下降");
|
|
|
- // }
|
|
|
- // else if (Ltc.Do(tasking, v => v.AGVStatus == AGVTaskStatus.完成))
|
|
|
- // {
|
|
|
- // tasking.Status = tasking.AGVStatus;
|
|
|
- // tasking.UpdateTime = DateTime.Now;
|
|
|
- // db.Default.SaveChanges();
|
|
|
- // var devise = Device.Find(tasking.Station).Create<StationDeviceGroup>();
|
|
|
- // foreach (var dev in devise.Items)
|
|
|
- // {
|
|
|
- // dev.Data.Goodscode = tasking.ID;
|
|
|
- // }
|
|
|
- // tasking.AGVStatusChange(tasking.AGVStatus, "完成任务");
|
|
|
- // }
|
|
|
- // else if (Ltc.Do(tasking, v => v.AGVStatus == AGVTaskStatus.取消))
|
|
|
- // {
|
|
|
- // tasking.Status = tasking.AGVStatus;
|
|
|
- // tasking.UpdateTime = DateTime.Now;
|
|
|
- // db.Default.SaveChanges();
|
|
|
- // tasking.AGVStatusChange(tasking.AGVStatus, "取消任务");
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // });
|
|
|
+ dev.Data.Goodsnum = (short)tasking.Goodsnum;
|
|
|
+ dev.Data.Istation521Status = IstationStatus.AGV放货完成信号;
|
|
|
+ }
|
|
|
+ tasking.AGVStatusChange(tasking.AGVStatus, "允许设备顶升下降");
|
|
|
+ }
|
|
|
+ else if (Ltc.Do(tasking, v => v.AGVStatus == AGVTaskStatus.完成 && v.Status == AGVTaskStatus.取放完成))
|
|
|
+ {
|
|
|
+ tasking.Status = tasking.AGVStatus;
|
|
|
+ tasking.UpdateTime = DateTime.Now;
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ var devise = Device.Find("G3052").Create<StationDeviceGroup>();
|
|
|
+ foreach (var dev in devise.Items)
|
|
|
+ {
|
|
|
+ dev.Data.Goodscode = tasking.ID;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ tasking.AGVStatusChange(tasking.AGVStatus, "完成任务");
|
|
|
+ }
|
|
|
+ else if (Ltc.Do(tasking, v => v.AGVStatus == AGVTaskStatus.取消))
|
|
|
+ {
|
|
|
+ tasking.Status = tasking.AGVStatus;
|
|
|
+ tasking.UpdateTime = DateTime.Now;
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ tasking.AGVStatusChange(tasking.AGVStatus, "取消任务");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
- // #endregion 处理新增AGV任务
|
|
|
- // });
|
|
|
- // }
|
|
|
+ #endregion 处理新增AGV任务
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- // protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
- // {
|
|
|
- // return dev.CODE is "G3052";
|
|
|
- // }
|
|
|
- //}
|
|
|
+ protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
+ {
|
|
|
+ return dev.CODE is "G3052";
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|