Wms 预任务执行,新增Agv任务,呼梯任务,电梯任务条件过滤进行区分
This commit is contained in:
@@ -342,15 +342,21 @@ namespace Tnb.WarehouseMgr
|
||||
//呼梯操作
|
||||
//获取目标库位为电梯库位的任务
|
||||
|
||||
var endLocCodes = disTasks.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
var endLocCodes = disTasks
|
||||
.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
|
||||
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)
|
||||
).Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList();
|
||||
if (endLocCodes?.Count > 0)
|
||||
{
|
||||
await CallingLanding(endLocCodes);
|
||||
}
|
||||
//执行电梯任务
|
||||
var elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
Log.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
|
||||
Log.Information("准备执行电梯任务");
|
||||
if (elevatorTasks?.Count > 0)
|
||||
{
|
||||
Log.Information("执行电梯任务");
|
||||
foreach (var elevatorTask in elevatorTasks)
|
||||
{
|
||||
await ExecuteTargetFloorTask(elevatorTask);
|
||||
@@ -358,7 +364,11 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
}
|
||||
////调用AGV创建任务链接口
|
||||
await AgvDispatch(disTasks, agvCts.Token);
|
||||
var agvTasks = disTasks.Where(it => !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
if (agvTasks?.Count > 0)
|
||||
{
|
||||
await AgvDispatch(agvTasks, agvCts.Token);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -384,6 +394,7 @@ namespace Tnb.WarehouseMgr
|
||||
/// <returns></returns>
|
||||
private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, string floorNO)> endLocCodes)
|
||||
{
|
||||
Log.Information($"开始呼梯操作.............");
|
||||
try
|
||||
{
|
||||
var item = endLocCodes.FirstOrDefault();
|
||||
@@ -391,6 +402,8 @@ namespace Tnb.WarehouseMgr
|
||||
var devName = _eleCtlCfg.DevName;
|
||||
{
|
||||
var agvStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.AGVControl);
|
||||
Log.Information($"当前Agv状态:{agvStatus.ToEnum<EnumAgvStatus>().ToString()}");
|
||||
|
||||
//判断当前设备是否为运行状态,不是则进入Agv电梯控制状态
|
||||
if (agvStatus.ToEnum<EnumAgvStatus>() != EnumAgvStatus.AGV运行状态)
|
||||
{
|
||||
@@ -398,9 +411,16 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
{
|
||||
(int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None);
|
||||
|
||||
foreach (var (_, devId, disTaskId, floorNO) in endLocCodes)
|
||||
{
|
||||
Log.Information($"任务开始目标楼层为:{floorNO}");
|
||||
|
||||
var floorN = await GetRealFloor(floorNO.ParseToInt());
|
||||
|
||||
Log.Information($"实际目标楼层为:{floorN}");
|
||||
|
||||
WmsElevatorUnexecute elevatorQueueItem = new()
|
||||
{
|
||||
distask_id = disTaskId,
|
||||
@@ -412,11 +432,14 @@ namespace Tnb.WarehouseMgr
|
||||
create_time = DateTime.Now
|
||||
};
|
||||
var elevatorQueue = await _db.Queryable<WmsElevatorUnexecute>().Where(it => it.elevator_id == devId && it.task_status == "执行中").ToListAsync();
|
||||
if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1))
|
||||
if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1) && floorNO.ParseToInt() != curFloorNo)
|
||||
{
|
||||
elevatorQueueItem.task_status = "执行中";
|
||||
await _elevatorControlService.CallLift(devName, floorNO.ParseToInt(), CancellationToken.None);
|
||||
|
||||
elevatorQueueItem.task_status = "执行中";
|
||||
var callLiftRes = await _elevatorControlService.CallLift(devName, floorN, CancellationToken.None);
|
||||
string successful = "成功", fail = "失败";
|
||||
var callLiftResult = callLiftRes ? successful : fail;
|
||||
Log.Information($"呼梯结果:{callLiftResult}");
|
||||
}
|
||||
|
||||
//如果当前电梯有任务在做,将当前呼梯任务放入待执行队列
|
||||
@@ -461,21 +484,25 @@ namespace Tnb.WarehouseMgr
|
||||
private async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
|
||||
{
|
||||
//收到放货确认通知,向电梯发送到3楼的指令
|
||||
Log.Information($"开始执行电梯任务,任务ID:{disTask.id}");
|
||||
try
|
||||
{
|
||||
var elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTask.id == it.distask_id && it.task_status == "执行中");
|
||||
var elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => it.task_status == "执行中");
|
||||
if (elevatorQueueItem != null)
|
||||
{
|
||||
//var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id);
|
||||
//if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID)
|
||||
{
|
||||
var doorStatus = -1;
|
||||
await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
|
||||
var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
|
||||
Log.Information($"关门结果:{closeDoorRes}");
|
||||
do
|
||||
{
|
||||
doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus);
|
||||
} while (doorStatus != 4);
|
||||
var floor = await GetRealFloor(disTask.end_floor.ParseToInt());
|
||||
Log.Information($"目标楼层:{floor}");
|
||||
Log.Information($"当前门状态:{doorStatus}");
|
||||
//发送到目标楼的指令
|
||||
var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor);
|
||||
//电梯任务手动执行任务状态上报
|
||||
|
||||
Reference in New Issue
Block a user