添加上升降机边调度逻辑
This commit is contained in:
@@ -68,6 +68,11 @@ namespace Tnb.WarehouseMgr.Entities.Consts
|
||||
/// </summary>
|
||||
public const string 下升降机当前码垛位 = "下升降机当前码垛位";
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public const string 上升降机条码 = "上升降机条码";
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,4 +84,15 @@ public partial class WmsEmptyOutstockH : BaseEntity<string>
|
||||
/// </summary>
|
||||
public DateTime? timestamp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 二楼机械臂剩余绑定料架数量
|
||||
/// </summary>
|
||||
public int? remainbindracknum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 二楼机械臂料箱绑定完成
|
||||
/// </summary>
|
||||
public string? bindrackcomplete { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 机械臂主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_mechanicalArm_d")]
|
||||
public partial class WmsMechanicalArmD : BaseEntity<string>
|
||||
{
|
||||
public WmsMechanicalArmD()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -7,11 +7,81 @@ namespace Tnb.WarehouseMgr.Entities;
|
||||
/// <summary>
|
||||
/// 机械臂主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_mechanicalArm_h")]
|
||||
[SugarTable("wms_mechanicalarm_h")]
|
||||
public partial class WmsMechanicalArmH : BaseEntity<string>
|
||||
{
|
||||
public WmsMechanicalArmH()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 说明
|
||||
/// </summary>
|
||||
public string? name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 码垛位
|
||||
/// </summary>
|
||||
public int? stackingposition { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 码垛计数
|
||||
/// </summary>
|
||||
public int? stackingcount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 料架上的条码
|
||||
/// </summary>
|
||||
public string? barcodes { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 料架最大盛放数量
|
||||
/// </summary>
|
||||
public int? maxracknum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出库单
|
||||
/// </summary>
|
||||
public string? outbill { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 满托数量
|
||||
/// </summary>
|
||||
public int? maxnum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否生成预任务
|
||||
/// </summary>
|
||||
public int? iscreatepretask { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 料架id
|
||||
/// </summary>
|
||||
public string? rackid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 料架编号
|
||||
/// </summary>
|
||||
public string? rackcode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 点位id
|
||||
/// </summary>
|
||||
public string? point_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 点位编号
|
||||
/// </summary>
|
||||
public string? point_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 取放货确认
|
||||
/// </summary>
|
||||
public int? agvconfirm { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 取放货确认
|
||||
/// </summary>
|
||||
public int? mechanicalconfirm { get; set; }
|
||||
}
|
||||
|
||||
@@ -77,5 +77,10 @@ namespace Tnb.WarehouseMgr.Interfaces
|
||||
Task SsxControl(WmsDistaskH disTask, string action);
|
||||
Func<string, int, Task> AddUnExecuteTask { get; set; }
|
||||
Task<bool> Check(string code, string action);
|
||||
/// <summary>
|
||||
/// // 二楼机械臂
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<bool> Floor2MechanicalComplete(WmsDistaskH disTask, string action);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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}");
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user