|
@@ -31,160 +31,155 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
public override void Do(Device<IStation520> obj)
|
|
|
{
|
|
|
- var key = $"WCS:Lock:无交互系统{obj.Entity.Code}";
|
|
|
- RedisHub.Do(key, redis =>
|
|
|
+ RedisHub.Do(obj.Entity.Code, redis =>
|
|
|
{
|
|
|
- try
|
|
|
+ var taskInfos = new List<WCS_TaskInfo>();
|
|
|
+ SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
- List<WCS_TaskInfo> taskInfos = new List<WCS_TaskInfo>();
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
- {
|
|
|
- taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild && !(t.Type == TaskType.SetPlate && t.AddrFrom == "Robot")).ToList();
|
|
|
- });
|
|
|
- if (taskInfos.Any())
|
|
|
+ //获取所有的新建任务,组盘任务不需要
|
|
|
+ taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild && !(t.Type == TaskType.SetPlate && t.AddrFrom == "Robot")).ToList();
|
|
|
+ });
|
|
|
+ if (!taskInfos.Any()) return;
|
|
|
+ foreach (var item in taskInfos)
|
|
|
+ {
|
|
|
+ try
|
|
|
{
|
|
|
- foreach (var item in taskInfos)
|
|
|
+ SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
- try
|
|
|
+ var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item.ID).First() ?? throw new Exception($"未找到对应的WCS任务[{item.ID}]");
|
|
|
+ switch (task.Type)
|
|
|
{
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
- {
|
|
|
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item.ID).First() ?? throw new Exception($"未找到对应的WCS任务[{item.ID}]");
|
|
|
- switch (task.Type)
|
|
|
+ case TaskType.SetPlate:
|
|
|
+ if (task.AddrFrom != "Robot")
|
|
|
{
|
|
|
- case TaskType.SetPlate:
|
|
|
- if (task.AddrFrom != "Robot")
|
|
|
- {
|
|
|
- //更新任务状态
|
|
|
- task.Status = TaskStatus.WaitingToExecute;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
- }
|
|
|
+ //更新任务状态
|
|
|
+ task.Status = TaskStatus.WaitingToExecute;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case TaskType.EnterDepot:
|
|
|
+ //更新任务状态
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ switch (task.WarehouseCode)
|
|
|
+ {
|
|
|
+ case "1N":
|
|
|
+ task.Device = "SRM1";
|
|
|
break;
|
|
|
+ }
|
|
|
|
|
|
- case TaskType.EnterDepot:
|
|
|
- //更新任务状态
|
|
|
- task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- switch (task.WarehouseCode)
|
|
|
- {
|
|
|
- case "1N":
|
|
|
- task.Device = "SRM1";
|
|
|
- break;
|
|
|
- }
|
|
|
+ if (task.AddrFrom is "1666" or "1661")
|
|
|
+ {
|
|
|
+ task.Device = "SRM1";
|
|
|
+ }
|
|
|
|
|
|
- if (task.AddrFrom is "1666" or "1661")
|
|
|
- {
|
|
|
- task.Device = "SRM1";
|
|
|
- }
|
|
|
+ //计算下一个地址
|
|
|
+ var path1 = DevicePath.GetPath(task.AddrFrom, task.Device);
|
|
|
+ task.AddrNext = path1.Points[1].Code;
|
|
|
+ task.SrmStation = task.BarCode.Contains("TPA") || task.BarCode.Contains("TPB") ? task.AddrFrom : path1.Points[2].Code;
|
|
|
|
|
|
- //计算下一个地址
|
|
|
- var path1 = DevicePath.GetPath(task.AddrFrom, task.Device);
|
|
|
- task.AddrNext = path1.Points[1].Code;
|
|
|
- task.SrmStation = task.BarCode.Contains("TPA") || task.BarCode.Contains("TPB") ? task.AddrFrom : path1.Points[2].Code;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
+ break;
|
|
|
|
|
|
+ case TaskType.OutDepot:
|
|
|
+ {
|
|
|
+ if (task.Device.Contains("Robot"))
|
|
|
+ {
|
|
|
+ var pos = task.AddrFrom.Split("-");
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ task.Line = pos[0].ToShort();
|
|
|
+ task.Col = pos[1].ToShort();
|
|
|
+ task.Layer = pos[2].ToShort();
|
|
|
+ task.Depth = pos[3].ToShort();
|
|
|
db.Default.Updateable(task).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
- break;
|
|
|
-
|
|
|
- case TaskType.OutDepot:
|
|
|
+ task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (task.SrmStation == "1")
|
|
|
{
|
|
|
- if (task.Device.Contains("Robot"))
|
|
|
+ var srmStation = new string[2];
|
|
|
+ switch (task.Device)
|
|
|
{
|
|
|
- var pos = task.AddrFrom.Split("-");
|
|
|
- task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- task.Line = pos[0].ToShort();
|
|
|
- task.Col = pos[1].ToShort();
|
|
|
- task.Layer = pos[2].ToShort();
|
|
|
- task.Depth = pos[3].ToShort();
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ case "SRM1":
|
|
|
+ srmStation[0] = "2534";
|
|
|
+ srmStation[1] = "2533";
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "SRM2":
|
|
|
+ srmStation[0] = "";
|
|
|
+ srmStation[1] = "";
|
|
|
+ break;
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
-
|
|
|
|
|
|
- if (task.SrmStation == "1")
|
|
|
- {
|
|
|
- //var srmStation = new string[2];
|
|
|
- //switch (task.Device)
|
|
|
- //{
|
|
|
- // case "SRM1":
|
|
|
- // srmStation[0] = "2534";
|
|
|
- // srmStation[1] = "2533";
|
|
|
- // break;
|
|
|
- //}
|
|
|
- //task.SrmStation = "";
|
|
|
- //task.AddrTo = "2534";
|
|
|
-
|
|
|
- task.SrmStation = "";
|
|
|
- task.AddrTo = "2534";
|
|
|
- task.Device = "SRM" + task.WarehouseCode.Substring(0, 1);
|
|
|
- }
|
|
|
- if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
|
|
|
- {
|
|
|
- if (task.Device.IsNullOrEmpty())
|
|
|
- {
|
|
|
- task.Device = "SRM" + task.Tunnel.GetLastDigit();
|
|
|
- }
|
|
|
- //获取堆垛机到目标地址的路径信息
|
|
|
- var path = DevicePath.GetPath(task.Device, task.AddrTo);
|
|
|
- task.SrmStation = path.Points[1].Code;
|
|
|
- }
|
|
|
-
|
|
|
- var devs = Device.All.Where(x => x.HasFlag(DeviceFlags.AGV取货站台口)).Select(x => x.Code);
|
|
|
- if (devs.Contains(task.SrmStation))
|
|
|
- {
|
|
|
- //开始处理车间叫料AGV任务任务
|
|
|
- db.Default.Insertable(new WCS_AgvTaskInfo()
|
|
|
- {
|
|
|
- ID = db.GetAgvTaskId(),
|
|
|
- TaskType = AGVTaskType.CallMaterial,
|
|
|
- Status = AGVTaskStatus.NewBuild,
|
|
|
- TaskId = task.ID,
|
|
|
- Position = task.WorkBench,
|
|
|
- Station = task.SrmStation,
|
|
|
- AddWho = "WCS",
|
|
|
- AddTime = DateTime.Now
|
|
|
- }).SplitTable().ExecuteCommand();
|
|
|
-
|
|
|
- db.Default.Insertable(new WCS_AgvTaskInfo()
|
|
|
- {
|
|
|
- ID = db.GetAgvTaskId(),
|
|
|
- TaskType = AGVTaskType.EnterDepot,
|
|
|
- Status = AGVTaskStatus.NewBuild,
|
|
|
- TaskId = task.ID,
|
|
|
- Position = task.WorkBench,
|
|
|
- Station = "2501",
|
|
|
- AddWho = "WCS",
|
|
|
- AddTime = DateTime.Now
|
|
|
- }).SplitTable().ExecuteCommand();
|
|
|
- }
|
|
|
- //更新任务状态
|
|
|
- task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ //TODO:暂时不考虑入库卡控
|
|
|
+ //开始计算当前这个任务要从哪个站台出
|
|
|
+ //计算两个站台小于取货完成数量的AGV任务
|
|
|
+ var agv1 = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(x => x.Take(2)).Count(x => x.Status <= AGVTaskStatus.LeaveGet && x.Station == srmStation[0]);
|
|
|
+ var agv2 = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(x => x.Take(2)).Count(x => x.Status <= AGVTaskStatus.LeaveGet && x.Station == srmStation[1]);
|
|
|
+ task.SrmStation = "";
|
|
|
+ task.AddrTo = agv1 > agv2 ? srmStation[1] : srmStation[0];
|
|
|
+ }
|
|
|
+ if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
|
|
|
+ {
|
|
|
+ if (task.Device.IsNullOrEmpty())
|
|
|
+ {
|
|
|
+ task.Device = "SRM" + task.Tunnel.GetLastDigit();
|
|
|
}
|
|
|
- break;
|
|
|
+ //获取堆垛机到目标地址的路径信息
|
|
|
+ var path = DevicePath.GetPath(task.Device, task.AddrTo);
|
|
|
+ task.SrmStation = path.Points[1].Code;
|
|
|
}
|
|
|
- case TaskType.Delivery:
|
|
|
- break;
|
|
|
|
|
|
- case TaskType.EmptyInit:
|
|
|
- break;
|
|
|
+ var devs = Device.All.Where(x => x.HasFlag(DeviceFlags.AGV取货站台口)).Select(x => x.Code);
|
|
|
+ if (devs.Contains(task.SrmStation))
|
|
|
+ {
|
|
|
+ //开始处理车间叫料AGV任务任务
|
|
|
+ db.Default.Insertable(new WCS_AgvTaskInfo()
|
|
|
+ {
|
|
|
+ ID = db.GetAgvTaskId(),
|
|
|
+ TaskType = AGVTaskType.CallMaterial,
|
|
|
+ Status = AGVTaskStatus.NewBuild,
|
|
|
+ TaskId = task.ID,
|
|
|
+ Position = task.WorkBench,
|
|
|
+ Station = task.SrmStation,
|
|
|
+ AddWho = "WCS",
|
|
|
+ AddTime = DateTime.Now
|
|
|
+ }).SplitTable().ExecuteCommand();
|
|
|
+
|
|
|
+ db.Default.Insertable(new WCS_AgvTaskInfo()
|
|
|
+ {
|
|
|
+ ID = db.GetAgvTaskId(),
|
|
|
+ TaskType = AGVTaskType.EnterDepot,
|
|
|
+ Status = AGVTaskStatus.NewBuild,
|
|
|
+ TaskId = task.ID,
|
|
|
+ Position = task.WorkBench,
|
|
|
+ Station = "2501",
|
|
|
+ AddWho = "WCS",
|
|
|
+ AddTime = DateTime.Now
|
|
|
+ }).SplitTable().ExecuteCommand();
|
|
|
+ }
|
|
|
+ //更新任务状态
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
- });
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- World.Log(ex.Message, LogLevelEnum.Mid);
|
|
|
- continue;
|
|
|
+ case TaskType.Delivery:
|
|
|
+ break;
|
|
|
+
|
|
|
+ case TaskType.EmptyInit:
|
|
|
+ break;
|
|
|
}
|
|
|
- }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ World.Log(ex.Message, LogLevelEnum.Mid);
|
|
|
}
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- World.Log(ex.Message, LogLevelEnum.Mid);
|
|
|
}
|
|
|
});
|
|
|
}
|