添加上升降机边调度逻辑

This commit is contained in:
2024-04-29 15:57:28 +08:00
parent 1e699fb7db
commit 18ff3b29ed
10 changed files with 695 additions and 69 deletions

View File

@@ -486,7 +486,7 @@ namespace Tnb.WarehouseMgr
}
else
{
Logger.Information($"【TaskCallback】sourceName不符合条件 {input.sourceName}");
//Logger.Information($"【TaskCallback】电梯sourceName不符合条件 {input.sourceName}");
}
@@ -505,6 +505,8 @@ namespace Tnb.WarehouseMgr
else
{
await _wareHouseService.SsxControl(disTask, "LOAD");
// 二楼机械臂
await _wareHouseService.Floor2MechanicalComplete(disTask, "LOAD");
}
}
else if (input.action == "UNLOAD")
@@ -517,6 +519,8 @@ namespace Tnb.WarehouseMgr
Logger.Information($"taskCompleUpInput json parameter:{JsonConvert.SerializeObject(taskCompleUpInput)}");
await _wareHouseService.TaskComplate(taskCompleUpInput);
await _wareHouseService.SsxControl(disTask, "UNLOAD");
// 二楼机械臂
await _wareHouseService.Floor2MechanicalComplete(disTask, "UNLOAD");
}
}
catch (Exception ex)

View File

@@ -201,6 +201,12 @@ namespace Tnb.WarehouseMgr
var eleStatusMap = await RedisHelper.HGetAllAsync(devName);
try
{
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await GetElevatorStatus(devName, CancellationToken.None);//elevator.elevator_code
Logger.Information($"【UnloadConfirm】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
//判断Agv电梯是否进入状态
if (agvStatus != (int)EnumAgvStatus.AGV运行状态)
_ = await WriteTagAsync(devName, ElevatorConsts.AGVControl, 1);
Logger.Information($"【SendOpenCloseCmd】 向系统发送开关门指令 {_elevatorCtlCfg.WriteTagUrl} {JsonConvert.SerializeObject(dicCommand)}");
var res = await HttpClientHelper.GetAsync(_elevatorCtlCfg.WriteTagUrl, pars: dicCommand);
Logger.Information($"【SendOpenCloseCmd】 向系统发送开关门指令 结果:{res}");

View File

@@ -434,6 +434,70 @@ namespace Tnb.WarehouseMgr
}
/// <summary>
/// // 二楼机械臂
/// </summary>
/// <returns></returns>
public async Task<bool> Floor2MechanicalComplete(WmsDistaskH disTask, string action)
{
if (disTask.area_code == "E")
{
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】收到到货完成信号 传入参数: {disTask.bill_code} {action}");
SqlSugarClient db = _db.CopyNew();
if (action == "UNLOAD")
{
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.endpoint_code);
if (WmsMechanicalArmHs.Count() == 0)
{
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行终点{disTask.endpoint_code} 与料架区的点位不匹配");
return false;
}
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
// 回写料架和AGV确认
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
{
agvconfirm = 1,
rackid = disTask.carry_id,
rackcode = disTask.carry_code
}).Where(r => r.id == target.id).ExecuteCommandAsync();
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV已到货");
}
else
{
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.startpoint_code);
if (WmsMechanicalArmHs.Count() == 0)
{
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行起点{disTask.endpoint_code} 与料架区的点位不匹配");
return false;
}
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
//回写出库单状态
await db.Updateable<WmsEmptyOutstockH>().SetColumns(r=>new WmsEmptyOutstockH
{
bindrackcomplete = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID
}).Where(r => r.bill_code == target.outbill).ExecuteCommandAsync();
// 重置料架区
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
{
stackingcount = 0,
barcodes = "",
outbill = "",
maxnum = 0,
iscreatepretask = 0,
rackcode = "",
rackid = "",
agvconfirm = 0,
mechanicalconfirm = 0
}).Where(r => r.id == target.id).ExecuteCommandAsync();
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV已到货");
}
}
return true;
}
/// <summary>
/// 生成任务执行
@@ -1223,7 +1287,7 @@ namespace Tnb.WarehouseMgr
{
tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
await Task.Delay(1000);
} while (tuple.sysStatus != 3 && tuple.runStatus != 0);
} while (tuple.sysStatus != 3 || tuple.runStatus != 0);
Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}");
@@ -1448,6 +1512,9 @@ namespace Tnb.WarehouseMgr
locIts.Add(loc);
}
Logger.Information($@"TaskComplate 更新carryIts: {JsonConvert.SerializeObject(carryIts)}");
Logger.Information($@"TaskComplate 更新carryCodeIts: {JsonConvert.SerializeObject(carryCodeIts)}");
_ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code }).ExecuteCommandAsync();
//更新条码的库位和仓库信息
_ = await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync();