|
@@ -8,6 +8,7 @@ using WCS.Core;
|
|
|
using WCS.Entity;
|
|
|
using WCS.Entity.Protocol.Station;
|
|
|
using WCS.WorkEngineering.Extensions;
|
|
|
+using WCS.WorkEngineering.WebApi.Controllers;
|
|
|
using WCS.WorkEngineering.WebApi.Models.WMS.Request;
|
|
|
using WCS.WorkEngineering.Worlds;
|
|
|
using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
|
|
@@ -102,7 +103,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID }).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化单独返皮盘任务");
|
|
|
}
|
|
|
- else if(task.BusType==TaskBusType.芯股用空托盘入库.GetDescription())
|
|
|
+ else if (task.BusType == TaskBusType.芯股用空托盘入库.GetDescription())
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
@@ -146,7 +147,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
case TaskType.OutDepot:
|
|
|
{
|
|
|
- if (task.Device.Contains("Robot"))
|
|
|
+ if (task.Device.Contains("Robot")) //机器人任务
|
|
|
{
|
|
|
var lastTask = db.Default.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.OutDepot && x.AddrTo == task.AddrTo && x.Status > TaskStatus.WaitingToExecute && x.Status < TaskStatus.Finish);
|
|
|
if (lastTask != null)
|
|
@@ -164,7 +165,123 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
isEnd = true;
|
|
|
}
|
|
|
- else
|
|
|
+ else if (task.Device == "FJXG") //芯股仓库的任务
|
|
|
+ {
|
|
|
+ if (task.LastInteractionPoint != "3") //车间叫料任务,此值为3时是单独取满任务
|
|
|
+ {
|
|
|
+ var sta = GetAgvStation(task, db); //芯股任务,取货站台就是芯股站台
|
|
|
+ var agv = new WCS_AgvTaskInfo()
|
|
|
+ {
|
|
|
+ ID = db.GetAgvTaskId(),
|
|
|
+ TaskType = AGVTaskType.EnterDepot,
|
|
|
+ Status = AGVTaskStatus.NewBuild,
|
|
|
+ TaskId = task.ID,
|
|
|
+ Position = task.WorkBench,
|
|
|
+ Station = sta,
|
|
|
+ AddWho = "WCS",
|
|
|
+ AddTime = DateTime.Now
|
|
|
+ };
|
|
|
+ db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ }
|
|
|
+ var agvId = DateTime.Now.GetFormat(GetFormatterEnum.only) + task.ID;
|
|
|
+ var agvTask = new WCS_AgvTaskInfo()
|
|
|
+ {
|
|
|
+ ID = db.GetAgvTaskId(),
|
|
|
+ TaskType = AGVTaskType.CallMaterial,
|
|
|
+ Status = AGVTaskStatus.NewBuild,
|
|
|
+ TaskId = task.ID,
|
|
|
+ Position = task.WorkBench,
|
|
|
+ Station = task.AddrFrom,
|
|
|
+ AddWho = "WCS",
|
|
|
+ AddTime = DateTime.Now,
|
|
|
+ AgvID = agvId
|
|
|
+ };
|
|
|
+ //开始处理车间叫料AGV任务任务
|
|
|
+ db.Default.InsertableRowLock(agvTask).SplitTable().ExecuteCommand();
|
|
|
+ agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().UpdLock().SplitTable(x => x.Take(2)).Single(x => x.TaskId == task.ID && x.TaskType == AGVTaskType.CallMaterial);
|
|
|
+ if (agvTask.Status != AGVTaskStatus.NewBuild)
|
|
|
+ {
|
|
|
+ World.Log($"AGV任务{agvTask.ID}状态不是新建", LogLevelEnum.High);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ agvId = agvTask.AgvID;
|
|
|
+ agvTask.Status = AGVTaskStatus.Confirm;
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.Confirm;
|
|
|
+ db.Default.UpdateableRowLock(agvTask).UpdateColumns(x => new { x.AgvID, x.Status, x.AgvStatus }).SplitTable(x => x.Take(2)).ExecuteCommand();
|
|
|
+ task.Status = TaskStatus.AGVExecution;
|
|
|
+ task.AgvTaskID = agvTask.ID;
|
|
|
+ task.EditTime = DateTime.Now;
|
|
|
+ task.EditWho = "WCS";
|
|
|
+ db.Default.Updateable(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.EditTime, x.EditWho }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db.Default, task.AddrFrom, "AGV", $"任务下发至AGV{agvId}");
|
|
|
+ var res = AgvApi.机台叫料(task.AddrFrom, task.WorkBench, agvId);
|
|
|
+
|
|
|
+ isEnd = true;
|
|
|
+ }
|
|
|
+ else if (task.BusType == TaskBusType.芯股站台送空托.GetDescription())
|
|
|
+ {
|
|
|
+ if (task.SrmStation == "1")
|
|
|
+ {
|
|
|
+ var srmStation = new string[2];
|
|
|
+ switch (task.Device)
|
|
|
+ {
|
|
|
+ case "SRM1":
|
|
|
+ srmStation[0] = "2534";
|
|
|
+ srmStation[1] = "2533";
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "SRM2":
|
|
|
+ srmStation[0] = "2734";
|
|
|
+ srmStation[1] = "2733";
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "SRM3":
|
|
|
+ srmStation[0] = "2934";
|
|
|
+ srmStation[1] = "2933";
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "SRM4":
|
|
|
+ srmStation[0] = "3134";
|
|
|
+ srmStation[1] = "3133";
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "SRM5":
|
|
|
+ srmStation[0] = "3334";
|
|
|
+ srmStation[1] = "3333";
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "SRM6":
|
|
|
+ srmStation[0] = "3534";
|
|
|
+ srmStation[1] = "3533";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ //开始计算当前这个任务要从哪个站台出
|
|
|
+ //计算两个站台小于取货完成数量的AGV任务
|
|
|
+ var agv1 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[0]).Count();
|
|
|
+ var agv2 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[1]).Count();
|
|
|
+ task.SrmStation = "";
|
|
|
+ task.AddrTo = agv1 > agv2 ? srmStation[1] : srmStation[0];
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新任务状态
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.SrmStation, x.AddrTo, x.Status }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ isEnd = true;
|
|
|
+ }
|
|
|
+ else //立库出库任务
|
|
|
{
|
|
|
if (task.SrmStation == "1")
|
|
|
{
|