| | |
| | | using Masuit.Tools;
|
| | | using Newtonsoft.Json; |
| | | using Serilog; |
| | | using WIDESEA_Core; |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary>
|
| | | /// <param name="robotCrane"></param>
|
| | | /// <returns></returns>
|
| | | public Dt_RobotTask? GetRobotTask(RobotCraneDevice robotCrane)
|
| | | {
|
| | | return _robotTaskService.Repository.QueryFirst(x => x.RobotRoadway == robotCrane.DeviceCode);
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 删除机器人任务 |
| | | /// </summary> |
| | | /// <remarks> |
| | |
| | | // 发送失败,记录 Error 日志 |
| | | QuartzLogHelper.LogError(_logger, $"下发取货指令失败,指令: {taskString},设备: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | } |
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | public async Task SendSocketRobotNumAsync(Dt_RobotTask task, RobotSocketState state, bool isPick = true)
|
| | | {
|
| | | string taskString = string.Empty;
|
| | |
|
| | | if (isPick)
|
| | | // 构建指令,格式:PickTotalNum,{数量}||PutTotalNum,{数量}
|
| | | taskString = $"PickTotalNum,{task.RobotTaskTotalNum + state.RobotTaskTotalNum}";
|
| | | else
|
| | | // 构建指令,格式:PutTotalNum,{数量}||PutTotalNum,{数量}
|
| | | taskString = $"PutTotalNum,{task.RobotTaskTotalNum + state.RobotTaskTotalNum}";
|
| | |
|
| | | // 通过 Socket 网关发送指令到机器人客户端
|
| | | bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
|
| | | if (result)
|
| | | {
|
| | | // 发送成功,记录 Info 日志
|
| | | QuartzLogHelper.LogInfo(_logger, $"下发总数指令成功,指令: {taskString},设备: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
|
| | | //await _robotTaskService.UpdateRobotTaskAsync(task);
|
| | | }
|
| | | else
|
| | | {
|
| | | // 发送失败,记录 Error 日志
|
| | | QuartzLogHelper.LogError(_logger, $"下发总数指令失败,指令: {taskString},设备: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
|
| | | } |
| | | } |
| | | |
| | |
| | | case RobotTaskTypeEnum.GroupPallet: |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | SourceAddress = currentTask.RobotSourceAddressLineCode;
|
| | | TargetAddress = currentTask.RobotTargetAddressLineCode;
|
| | | break; |
| | | |
| | | case RobotTaskTypeEnum.ChangePallet: |
| | | // 换盘/拆盘场景:托盘需要入库 |
| | | taskType = TaskTypeEnum.InEmpty.GetHashCode(); // 空托盘入库 |
| | | PalletCode = currentTask.RobotSourceAddressPalletCode; // 使用源地址的托盘码 |
| | | if (isRoadway == "HWSC1") |
| | | if (isRoadway == "HCSC1")
|
| | | { |
| | | warehouseId = 2; |
| | | roadway = "HWSC1"; |
| | | roadway = "HCSC1";
|
| | | } |
| | | else if (isRoadway == "GWSC1") |
| | | { |
| | |
| | | roadway = "GWSC1"; |
| | | } |
| | | |
| | | SourceAddress = currentTask.RobotSourceAddressLineCode;
|
| | | TargetAddress = currentTask.RobotTargetAddressLineCode;
|
| | | break; |
| | | case RobotTaskTypeEnum.SplitPallet: |
| | | // 换盘/拆盘场景:托盘需要入库 |
| | |
| | | |
| | | warehouseId = 3; |
| | | roadway = "CWSC1"; |
| | |
|
| | | SourceAddress = currentTask.RobotSourceAddressLineCode;
|
| | | TargetAddress = currentTask.RobotTargetAddressLineCode;
|
| | | break; |
| | | } |
| | | } |
| | |
| | | taskType = TaskTypeEnum.Inbound.GetHashCode(); // 成品入库 |
| | | PalletCode = currentTask.RobotTargetAddressPalletCode; // 使用目标地址的托盘码 |
| | | |
| | | if (isRoadway == "HWSC1") |
| | | if (isRoadway == "HCSC1")
|
| | | { |
| | | warehouseId = 2; |
| | | roadway = "HWSC1"; |
| | | roadway = "HCSC1";
|
| | | } |
| | | else if (isRoadway == "GWSC1") |
| | | { |
| | |
| | | |
| | | // 电池条码:如果状态中有条码列表,取对应位置的条码;否则为空 |
| | | //CellBarcode = state.CellBarcode?.Count > 0 ? state.CellBarcode[x - 1] : "" |
| | | CellBarcode = state.CellBarcode[idx].ToString() |
| | | CellBarcode = !state.CellBarcode.IsNullOrEmpty() ? state.CellBarcode[idx].ToString() ?? string.Empty : string.Empty
|
| | | }) |
| | | .ToList() |
| | | }; |