|
@@ -17,7 +17,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// <summary>
|
|
|
/// 机械臂
|
|
|
/// </summary>
|
|
|
- [BelongTo(typeof(MainWorld))]
|
|
|
+ [BelongTo(typeof(RingWorld))]
|
|
|
[Description("机械臂")]
|
|
|
public class 机械臂 : DeviceSystem<Device<IRobot520, IRobot521, IRobot522>>
|
|
|
{
|
|
@@ -45,7 +45,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
//取货设备
|
|
|
PickUpDevices.Add(roobot.Code, roobot.Sources.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => v).ToList());
|
|
|
- PutDevices.Add(roobot.Code, roobot.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Device<IStation520, IStation521, IStation523>(v, this.World)).ToList());
|
|
|
+ PutDevices.Add(roobot.Code, roobot.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Device<IStation520, IStation521, IStation523>(v, World)).ToList());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -148,18 +148,23 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
if (!arrIn.Any()) throw new KnownException($"[{obj.Entity.Code}]等待入库任务输送到位", LogLevelEnum.Mid);
|
|
|
//等待下发的任务信息
|
|
|
- List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>> taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
|
|
|
+ var taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
//跟据设备组中第一个设备任务号最小的一个先执行
|
|
|
var devGroup = arrIn.MinBy(x => x.Item2.OrderBy(o => o.Data2.TaskNumber));
|
|
|
- foreach (var dev in devGroup.Item2.OrderBy(x => x.Entity.Code.ToShort()).Take(2).OrderByDescending(x => x.Entity.Code.ToShort()))
|
|
|
+ foreach (var dev in devGroup.Item2.OrderBy(x => x.Entity.Code.ToShort()).Take(2)
|
|
|
+ )
|
|
|
{
|
|
|
var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.SetPlate && v.Status == Entity.TaskStatus.FinishOfShunt && dev.Data2.TaskNumber == v.ID);
|
|
|
if (task == null) continue;
|
|
|
var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, dev.Entity.Code, task.Height);
|
|
|
task.Status = Entity.TaskStatus.StackerExecution;
|
|
|
task.AddrTo = res.ResData.CellNo;
|
|
|
+ task.Line = res.ResData.Row;
|
|
|
+ task.Col = res.ResData.Colomn;
|
|
|
+ task.Layer = res.ResData.Layer;
|
|
|
+ task.Depth = res.ResData.Row;
|
|
|
task.LastInteractionPoint = dev.Entity.Code;
|
|
|
task.SrmStation = dev.Entity.Code;
|
|
|
task.EditWho = "WCS";
|
|
@@ -171,70 +176,71 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
if (!taskList.Any()) return;
|
|
|
|
|
|
- if (taskList.Count == 2)
|
|
|
+ switch (taskList.Count)
|
|
|
{
|
|
|
- //机械臂需要保证靠翻转机的设备(即设备号较大的设备)的取货任务一定是下发至一工位的,设备号较小的任务下发至二工位
|
|
|
- //下发任务一
|
|
|
- var taskInfo = taskList.MaxBy(x => x.Item2.Entity.Code.ToShort());
|
|
|
- var task = taskInfo.Item1;
|
|
|
- var dev = taskInfo.Item2;
|
|
|
- var addrTo = task.AddrTo.Split("-");
|
|
|
- obj.Data.TaskNumber1 = task.ID;
|
|
|
- obj.Data.SLine1 = dev.Entity.Code.ToShort();
|
|
|
- obj.Data.SCol1 = 0;
|
|
|
- obj.Data.SLayer1 = 0;
|
|
|
- obj.Data.SDepth1 = 0;
|
|
|
- obj.Data.ELine1 = addrTo[0].ToShort();
|
|
|
- obj.Data.ECol1 = addrTo[1].ToShort();
|
|
|
- obj.Data.ELayer1 = addrTo[2].ToShort();
|
|
|
- obj.Data.EDepth1 = addrTo[3].ToShort();
|
|
|
- //下发任务二
|
|
|
- taskInfo = taskList.MinBy(x => x.Item2.Entity.Code.ToShort());
|
|
|
- task = taskInfo.Item1;
|
|
|
- dev = taskInfo.Item2;
|
|
|
- addrTo = task.AddrTo.Split("-");
|
|
|
- obj.Data.TaskNumber2 = task.ID;
|
|
|
- obj.Data.SLine2 = dev.Entity.Code.ToShort();
|
|
|
- obj.Data.SCol2 = 0;
|
|
|
- obj.Data.SLayer2 = 0;
|
|
|
- obj.Data.SDepth2 = 0;
|
|
|
- obj.Data.ELine2 = addrTo[0].ToShort();
|
|
|
- obj.Data.ECol2 = addrTo[1].ToShort();
|
|
|
- obj.Data.ELayer2 = addrTo[2].ToShort();
|
|
|
- obj.Data.EDepth2 = addrTo[3].ToShort();
|
|
|
- obj.Data.TaskSum = taskList.Count.ToShort();
|
|
|
- obj.Data.GoodsType = 1;
|
|
|
- obj.Data.TaskType = 3;
|
|
|
- obj.Data.VoucherNo++;
|
|
|
- }
|
|
|
- else //如果只有一个任务,固定下发至一号工位
|
|
|
- {
|
|
|
- var task = taskList.FirstOrDefault().Item1;
|
|
|
- var dev = taskList.FirstOrDefault().Item2;
|
|
|
- var addrTo = task.AddrTo.Split("-");
|
|
|
- //下发任务
|
|
|
- obj.Data.TaskNumber1 = task.ID;
|
|
|
- obj.Data.SLine1 = dev.Entity.Code.ToShort();
|
|
|
- obj.Data.SCol1 = 0;
|
|
|
- obj.Data.SLayer1 = 0;
|
|
|
- obj.Data.SDepth1 = 0;
|
|
|
- obj.Data.ELine1 = addrTo[0].ToShort();
|
|
|
- obj.Data.ECol1 = addrTo[1].ToShort();
|
|
|
- obj.Data.ELayer1 = addrTo[2].ToShort();
|
|
|
- obj.Data.EDepth1 = addrTo[3].ToShort();
|
|
|
- obj.Data.TaskNumber2 = 0;
|
|
|
- obj.Data.SLine2 = 0;
|
|
|
- obj.Data.SCol2 = 0;
|
|
|
- obj.Data.SLayer2 = 0;
|
|
|
- obj.Data.SDepth2 = 0;
|
|
|
- obj.Data.ELine2 = 0;
|
|
|
- obj.Data.ECol2 = 0;
|
|
|
- obj.Data.ELayer2 = 0;
|
|
|
- obj.Data.EDepth2 = 0;
|
|
|
- obj.Data.TaskSum = taskList.Count.ToShort();
|
|
|
- obj.Data.GoodsType = 1;
|
|
|
- obj.Data.TaskType = 3;
|
|
|
- obj.Data.VoucherNo++;
|
|
|
+ case 1:
|
|
|
+ var task = taskList.FirstOrDefault().Item1;
|
|
|
+ var dev = taskList.FirstOrDefault().Item2;
|
|
|
+ //下发任务
|
|
|
+ obj.Data.TaskNumber1 = task.ID;
|
|
|
+ obj.Data.SLine1 = dev.Entity.Code.ToShort();
|
|
|
+ obj.Data.SCol1 = 0;
|
|
|
+ obj.Data.SLayer1 = 0;
|
|
|
+ obj.Data.SDepth1 = 0;
|
|
|
+ obj.Data.ELine1 = task.Line.ToShort();
|
|
|
+ obj.Data.ECol1 = task.Col.ToShort();
|
|
|
+ obj.Data.ELayer1 = task.Layer.ToShort();
|
|
|
+ obj.Data.EDepth1 = task.Depth.ToShort();
|
|
|
+ obj.Data.TaskNumber2 = 0;
|
|
|
+ obj.Data.SLine2 = 0;
|
|
|
+ obj.Data.SCol2 = 0;
|
|
|
+ obj.Data.SLayer2 = 0;
|
|
|
+ obj.Data.SDepth2 = 0;
|
|
|
+ obj.Data.ELine2 = 0;
|
|
|
+ obj.Data.ECol2 = 0;
|
|
|
+ obj.Data.ELayer2 = 0;
|
|
|
+ obj.Data.EDepth2 = 0;
|
|
|
+ obj.Data.TaskSum = taskList.Count.ToShort();
|
|
|
+ obj.Data.GoodsType = 1;
|
|
|
+ obj.Data.TaskType = 3;
|
|
|
+ obj.Data.VoucherNo++;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ //一工位取深度较大的任务
|
|
|
+ var taskInfo = taskList.MaxBy(x => x.Item1.Depth);
|
|
|
+ task = taskInfo.Item1;
|
|
|
+ dev = taskInfo.Item2;
|
|
|
+ obj.Data.TaskNumber1 = task.ID;
|
|
|
+ obj.Data.SLine1 = dev.Entity.Code.ToShort();
|
|
|
+ obj.Data.SCol1 = 0;
|
|
|
+ obj.Data.SLayer1 = 0;
|
|
|
+ obj.Data.SDepth1 = 0;
|
|
|
+ obj.Data.ELine1 = task.Line.ToShort();
|
|
|
+ obj.Data.ECol1 = task.Col.ToShort();
|
|
|
+ obj.Data.ELayer1 = task.Layer.ToShort();
|
|
|
+ obj.Data.EDepth1 = task.Depth.ToShort();
|
|
|
+ //二工位取深度较少的值
|
|
|
+ taskInfo = taskList.MinBy(x => x.Item1.Depth);
|
|
|
+ task = taskInfo.Item1;
|
|
|
+ dev = taskInfo.Item2;
|
|
|
+ obj.Data.TaskNumber2 = task.ID;
|
|
|
+ obj.Data.SLine2 = dev.Entity.Code.ToShort();
|
|
|
+ obj.Data.SCol2 = 0;
|
|
|
+ obj.Data.SLayer2 = 0;
|
|
|
+ obj.Data.SDepth2 = 0;
|
|
|
+ obj.Data.ELine2 = task.Line.ToShort();
|
|
|
+ obj.Data.ECol2 = task.Col.ToShort();
|
|
|
+ obj.Data.ELayer2 = task.Layer.ToShort();
|
|
|
+ obj.Data.EDepth2 = task.Depth.ToShort();
|
|
|
+ obj.Data.TaskSum = taskList.Count.ToShort();
|
|
|
+ obj.Data.GoodsType = 1;
|
|
|
+ obj.Data.TaskType = 3;
|
|
|
+ obj.Data.VoucherNo++;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
|
|
|
}
|
|
|
}
|
|
|
else if (!lastIsOut) //出库任务
|
|
@@ -261,11 +267,10 @@ namespace WCS.WorkEngineering.Systems
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
|
|
|
- //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
|
|
|
+
|
|
|
var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == Entity.TaskStatus.WaitingToExecute)
|
|
|
.Where(v => allOutCode.Contains(v.SrmStation))
|
|
|
.OrderByDescending(v => v.Priority)
|
|
|
- .OrderByDescending(v => v.Floor == floor ? 1 : 0)
|
|
|
.OrderBy(v => v.AddTime)
|
|
|
.First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
|
|
|
|