电梯代码调整

This commit is contained in:
yang.lee
2023-12-15 09:50:54 +08:00
parent c23134729e
commit 838ad24660
5 changed files with 111 additions and 54 deletions

View File

@@ -45,7 +45,8 @@ namespace Tnb.WarehouseMgr
private readonly IElevatorControlService _elevatorControlService;
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
private readonly ILoggerFactory _loggerFactory;
private static bool unLoadComplete = true; //是否放货完成
@@ -67,6 +68,7 @@ namespace Tnb.WarehouseMgr
foreach (var (k, _) in s_elevatorMap)
{
s_eleUseStatusDic[k] = 0;
s_loadedStatusDic[k] = 0;
}
}
}
@@ -109,7 +111,7 @@ namespace Tnb.WarehouseMgr
.FirstAsync();*/
Logger.Information($"当前取货,子任务编号:{input.taskCode}");
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
ElevagorInfoQuery q = new() { taskCode = input.taskCode, sourceName = input.sourceName };
WmsElevatorH elevator = await FindElevatorFromPars(q);
if (elevator.IsNull())
{
@@ -121,7 +123,7 @@ namespace Tnb.WarehouseMgr
{
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
{
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.;
//s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
string devName = elevatorCode?.ToString();
Logger.Information($"获取设备:{devName},状态");
var tags = _eleCtlCfg.tags;
@@ -134,9 +136,9 @@ namespace Tnb.WarehouseMgr
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "完成" : "未完成";
Logger.Information($"{devName.Match(@"\d+")}#梯,取货-> {loadedStatus}");
*/
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus. && curFloor != floorNo)
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus. &&curFloor != floorNo)
{
_ = await _elevatorControlService.CallLift(devName, elevator.end_floor, CancellationToken.None);
_ = await _elevatorControlService.CallLift(devName, curFloor, CancellationToken.None);
}
if (curFloor != floorNo)
{
@@ -178,6 +180,7 @@ namespace Tnb.WarehouseMgr
{
Logger.Information("放货确认..................");
Logger.Information($"当前放货,任务编号:{input.taskCode}");
try
{
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
@@ -197,7 +200,7 @@ namespace Tnb.WarehouseMgr
device_id = a.elevator_id,
}, true)
.FirstAsync();*/
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
ElevagorInfoQuery q = new() { taskCode = input.taskCode, sourceName = input.sourceName };
WmsElevatorH elevator = await FindElevatorFromPars(q);
if (elevator.IsNull())
{
@@ -205,8 +208,14 @@ namespace Tnb.WarehouseMgr
}
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
{
string devName = elevatorCode?.ToString();
Logger.Information($"当前放货设备ID{elevator.device_id}");
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "占用" : "空闲";
Logger.Information($"{devName.Match(@"\d+")}#梯,状态-> {loadedStatus}");
Logger.Information($"获取设备:{devName},状态");
//await Task.Delay(3000);
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, _eleCtlCfg.tags, CancellationToken.None);//elevator.elevator_code
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
//判断Agv电梯是否进入状态
@@ -216,19 +225,22 @@ namespace Tnb.WarehouseMgr
}
var curFloor = await GetRealFloor(elevator.end_floor);
Logger.Information($"当前放货设备ID{elevator.device_id}");
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "占用" : "空闲";
Logger.Information($"{devName.Match(@"\d+")}#梯,状态-> {loadedStatus}");
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus. && curFloor != floorNo)
{
_ = await _elevatorControlService.CallLift(devName, elevator.end_floor, CancellationToken.None);
_ = await _elevatorControlService.CallLift(devName, curFloor, CancellationToken.None);
}
if (curFloor != floorNo)
{
return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
}
Logger.Information($"当前楼层:{curFloor},电梯所在楼层:{floorNo}");
if (doorStatus == (int)EnumDoorStatus. && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.)
{
Logger.Information($"{devName.Match(@"\d+")}#梯,任务未完成");
@@ -241,7 +253,7 @@ namespace Tnb.WarehouseMgr
}
if (sysStatus == (int)EnumSysStatus. && runStatus == (int)EnumRunStatus.
&& doorStatus == (int)EnumDoorStatus.)
&& doorStatus == (int)EnumDoorStatus. && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.)
{
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.;
Logger.Information($"当前电梯状态:{s_eleUseStatusDic[elevator.device_id].ToEnum<EnumElevatorUseStatus>().ToString()}");
@@ -298,7 +310,9 @@ namespace Tnb.WarehouseMgr
case "CANCELLED": break;
case "SUCCEED": break;
case "FAILURE": break;
case "FINISHED": break;
case "FINISHED":
break;
default: break;
}
@@ -351,7 +365,7 @@ namespace Tnb.WarehouseMgr
List<WmsDistaskH> disTasks = new() { disTask };
if (input.action == "LOAD")
{
unLoadComplete = true;
TaskExecuteAfterUpInput taskExecuteAfterUpInput = new()
{
disTaskIds = disTasks.Select(x => x.id).ToList()
@@ -360,27 +374,33 @@ namespace Tnb.WarehouseMgr
await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput);
Logger.Information($"Agv取货完成,任务编号:{string.Join(",", disTasks.Select(x => x.bill_code))}");
if (disTask != null && !disTask.startlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase))
{
return await ToApiResult(HttpStatusCode.OK, "成功");
}
//根据Agv传递的参数获取对应的电梯
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
WmsElevatorH elevator = await FindElevatorFromPars(q);
//s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
Logger.Information($"当前取货设备ID{elevator.device_id}");
//根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
var devName = s_elevatorMap[elevator.device_id]?.ToString();
Logger.Information($"{devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程");
int doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
Logger.Information($"设备:{devName},门状态:{doorStatus.ToEnum<EnumDoorStatus>().ToString()}");
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.
&& !disTask.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)
)
if(!input.sourceName.IsNullOrWhiteSpace() && input.sourceName.Contains("DT-R", StringComparison.OrdinalIgnoreCase))
{
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
if (!input.sourceName.IsNullOrEmpty())
{
q = new() { taskCode = input.taskCode, sourceName = input.sourceName };
}
WmsElevatorH elevator = await FindElevatorFromPars(q);
if (!elevator?.device_id.IsNullOrEmpty() ?? false)
{
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.;
// 根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
var devName = s_elevatorMap[elevator.device_id]?.ToString();
Logger.Information($"{devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程");
int doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
Logger.Information($"设备:{devName},门状态:{doorStatus.ToEnum<EnumDoorStatus>().ToString()}");
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.
)//&& !disTask.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)
{
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令
}
}
}
WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中");
if (elevatorQueueItem != null)
{