| | |
| | | // 将任务关联到状态对象 |
| | | state.CurrentTask = task; |
| | | |
| | | if(isScanNG) |
| | | if (isScanNG) |
| | | { |
| | | state.IsScanNG = true; |
| | | } |
| | |
| | | /// <param name="state">机器人当前状态</param> |
| | | /// <param name="useSourceAddress">是否使用源地址(true 表示拆盘/换盘场景,false 表示组盘/换盘场景)</param> |
| | | /// <returns>处理是否成功</returns> |
| | | public async Task<bool> HandleInboundTaskAsync(RobotSocketState state, bool useSourceAddress) |
| | | public async Task<bool> HandleInboundTaskAsync(RobotSocketState state, bool useSourceAddress, string isRoadway = null) |
| | | { |
| | | // 获取当前关联的任务 |
| | | var currentTask = state.CurrentTask; |
| | |
| | | } |
| | | |
| | | // 获取巷道代码 |
| | | string roadway = currentTask.RobotSourceAddressLineCode; |
| | | string roadway = string.Empty; |
| | | |
| | | // 根据巷道名称判断仓库 ID |
| | | // ZYRB1 -> 1, HPRB001 -> 2, 其他 -> 3 |
| | | int warehouseId = currentTask.RobotRoadway == "注液组盘机械手" ? 1 : currentTask.RobotRoadway == "HPRB001" ? 2 : 3; |
| | | |
| | | // 任务类型(0 表示未定义,稍后根据任务类型设置) |
| | | int taskType = 0; |
| | | int warehouseId = 0; |
| | | |
| | | // 源地址和目标地址(初始化) |
| | | string SourceAddress = currentTask.RobotTargetAddressLineCode; |
| | | string TargetAddress = currentTask.RobotSourceAddressLineCode; |
| | | |
| | | // 任务类型(0 表示未定义,稍后根据任务类型设置) |
| | | int taskType = 0; |
| | | |
| | | // 托盘代码(初始化为空) |
| | | string PalletCode = string.Empty; |
| | |
| | | switch (robotTaskType) |
| | | { |
| | | case RobotTaskTypeEnum.GroupPallet: |
| | | // 组盘任务不使用源地址,直接返回 false |
| | | _logger.LogDebug("HandleInboundTaskAsync:组盘任务不使用源地址"); |
| | | QuartzLogger.Debug($"HandleInboundTaskAsync:组盘任务不使用源地址", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | break; |
| | | |
| | | case RobotTaskTypeEnum.ChangePallet: |
| | | // 换盘/拆盘场景:托盘需要入库 |
| | | taskType = TaskTypeEnum.InEmpty.GetHashCode(); // 空托盘入库 |
| | | PalletCode = currentTask.RobotSourceAddressPalletCode; // 使用源地址的托盘码 |
| | | if (isRoadway == "HWSC1") |
| | | { |
| | | warehouseId = 2; |
| | | roadway = "HWSC1"; |
| | | } |
| | | else if (isRoadway == "GWSC1") |
| | | { |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | } |
| | | |
| | | break; |
| | | case RobotTaskTypeEnum.SplitPallet: |
| | | // 换盘/拆盘场景:托盘需要入库 |
| | | taskType = TaskTypeEnum.InEmpty.GetHashCode(); // 空托盘入库 |
| | | PalletCode = currentTask.RobotSourceAddressPalletCode; // 使用源地址的托盘码 |
| | | |
| | | warehouseId = 3; |
| | | roadway = "CWSC1"; |
| | | break; |
| | | } |
| | | } |
| | |
| | | switch (robotTaskType) |
| | | { |
| | | case RobotTaskTypeEnum.ChangePallet: |
| | | // 换盘/组盘场景:货物需要入库 |
| | | taskType = TaskTypeEnum.Inbound.GetHashCode(); // 成品入库 |
| | | PalletCode = currentTask.RobotTargetAddressPalletCode; // 使用目标地址的托盘码 |
| | | |
| | | if (isRoadway == "HWSC1") |
| | | { |
| | | warehouseId = 2; |
| | | roadway = "HWSC1"; |
| | | } |
| | | else if (isRoadway == "GWSC1") |
| | | { |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | } |
| | | |
| | | break; |
| | | case RobotTaskTypeEnum.GroupPallet: |
| | | // 换盘/组盘场景:货物需要入库 |
| | | taskType = TaskTypeEnum.Inbound.GetHashCode(); // 成品入库 |
| | | PalletCode = currentTask.RobotTargetAddressPalletCode; // 使用目标地址的托盘码 |
| | | |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | break; |
| | | |
| | | case RobotTaskTypeEnum.SplitPallet: |
| | | // 拆盘任务不使用目标地址 |
| | | _logger.LogDebug("HandleInboundTaskAsync:拆盘任务不使用目标地址"); |
| | | QuartzLogger.Debug($"HandleInboundTaskAsync:拆盘任务不使用目标地址", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return true; |
| | | |
| | | break; |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | PalletCode = PalletCode, // 托盘条码 |
| | | SourceAddress = SourceAddress ?? string.Empty, // 源地址 |
| | | TargetAddress = TargetAddress ?? string.Empty, // 目标地址 |
| | | Roadway = roadway, // 巷道 |
| | | TargetAddress = roadway ?? string.Empty, // 目标地址 |
| | | Roadway = roadway ?? string.Empty, // 巷道 |
| | | WarehouseId = warehouseId, // 仓库 ID |
| | | PalletType = 1, // 托盘类型(默认为1) |
| | | TaskType = taskType // 任务类型(入库/空托盘入库) |