123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- using PlcSiemens.Core.Extension;
- using ServiceCenter.Extensions;
- using ServiceCenter.Logs;
- using ServiceCenter.Redis;
- using ServiceCenter.SqlSugars;
- using System.ComponentModel;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol.Station;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.Worlds;
- using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
- using TaskStatus = WCS.Entity.TaskStatus;
- namespace WCS.WorkEngineering.Systems
- {
- /// <summary>
- /// 无交互系统
- /// </summary>
- [BelongTo(typeof(NoInteractionWorld))]
- [Description("无交互系统")]
- public class NoInteractionSystems : DeviceSystem<Device<IStation520>>
- {
- public NoInteractionSystems()
- {
- }
- protected override bool ParallelDo => true;
- protected override bool SaveLogsToFile => true;
- public override void Do(Device<IStation520> obj)
- {
- var key = $"WCS:Lock:无交互系统{obj.Entity.Code}";
- RedisHub.Do(key, redis =>
- {
- try
- {
- 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())
- {
- foreach (var item in taskInfos)
- {
- try
- {
- 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")
- {
- //更新任务状态
- 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;
- }
- if (task.AddrFrom is "1666")
- {
- 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;
- 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, $"初始化出库任务信息,放货站台:{task.SrmStation}");
- }
- else
- {
- if (task.SrmStation == "1")
- {
- 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}");
- }
- break;
- }
- case TaskType.Delivery:
- break;
- case TaskType.EmptyInit:
- break;
- }
- });
- }
- catch (Exception ex)
- {
- World.Log(ex.Message, LogLevelEnum.Mid);
- continue;
- }
- }
- }
- }
- catch (Exception ex)
- {
- World.Log(ex.Message, LogLevelEnum.Mid);
- }
- });
- }
- public override bool Select(Device dev)
- {
- return dev.Code == nameof(NoInteractionSystems);
- }
- }
- }
|