| | |
| | | /// </remarks> |
| | | /// <param name="task">要下发的任务对象</param> |
| | | /// <param name="state">机器人当前状态</param> |
| | | public async Task SendSocketRobotPickAsync(Dt_RobotTask task, RobotSocketState state) |
| | | /// <param name="isScanNG">是否扫码NG</param> |
| | | public async Task SendSocketRobotPickAsync(Dt_RobotTask task, RobotSocketState state, bool isScanNG) |
| | | { |
| | | // 构建取货指令,格式:Pickbattery,{源地址} |
| | | string taskString = $"Pickbattery,{task.RobotSourceAddress}"; |
| | |
| | | |
| | | // 将任务关联到状态对象 |
| | | state.CurrentTask = task; |
| | | |
| | | if(isScanNG) |
| | | { |
| | | state.IsScanNG = true; |
| | | } |
| | | |
| | | // 保持原语义:仅在状态安全写入成功后再更新任务状态 |
| | | // 这样可以确保状态和任务记录的一致性 |
| | |
| | | } |
| | | |
| | | // 解析返回的任务信息 |
| | | var taskInfos = JsonConvert.DeserializeObject<List<Dt_Task>>(content.Data.ToJson() ?? string.Empty) ?? new List<Dt_Task>(); |
| | | var taskInfo = taskInfos.FirstOrDefault(); |
| | | //var taskInfos = JsonConvert.DeserializeObject<List<Dt_Task>>(content.Data.ToJson() ?? string.Empty) ?? new List<Dt_Task>(); |
| | | //var taskInfo = taskInfos.FirstOrDefault(); |
| | | |
| | | // 获取源地址 |
| | | string sourceAddress = taskDTO.SourceAddress; |
| | | //// 获取源地址 |
| | | //string sourceAddress = taskDTO.SourceAddress; |
| | | |
| | | // 查找源地址对应的输送线设备 |
| | | IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceAddress)); |
| | | //// 查找源地址对应的输送线设备 |
| | | //IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceAddress)); |
| | | |
| | | if (device != null) |
| | | { |
| | | // 将设备转换为输送线类型 |
| | | CommonConveyorLine conveyorLine = (CommonConveyorLine)device; |
| | | //if (device != null) |
| | | //{ |
| | | // // 将设备转换为输送线类型 |
| | | // CommonConveyorLine conveyorLine = (CommonConveyorLine)device; |
| | | |
| | | // 设置输送线的目标地址 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.Target, taskInfo.NextAddress, sourceAddress); |
| | | // // 设置输送线的目标地址 |
| | | // conveyorLine.SetValue(ConveyorLineDBNameNew.Target, taskInfo.NextAddress, sourceAddress); |
| | | |
| | | // 设置输送线的任务号 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, taskInfo.TaskNum, sourceAddress); |
| | | // // 设置输送线的任务号 |
| | | // conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, taskInfo.TaskNum, sourceAddress); |
| | | |
| | | // 触发输送线开始执行(写入 WCS_ACK = 1) |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, sourceAddress); |
| | | // // 触发输送线开始执行(写入 WCS_ACK = 1) |
| | | // conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, sourceAddress); |
| | | |
| | | // 更新任务状态到下一阶段 |
| | | if (_taskService.UpdateTaskStatusToNext(taskInfo).Status) |
| | | { |
| | | _logger.LogInformation("HandleInboundTaskAsync:入库任务处理成功,任务号: {TaskNum}", taskInfo.TaskNum); |
| | | QuartzLogger.Info($"HandleInboundTaskAsync:入库任务处理成功,任务号: {taskInfo.TaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return true; |
| | | } |
| | | } |
| | | // // 更新任务状态到下一阶段 |
| | | // if (_taskService.UpdateTaskStatusToNext(taskInfo).Status) |
| | | // { |
| | | // _logger.LogInformation("HandleInboundTaskAsync:入库任务处理成功,任务号: {TaskNum}", taskInfo.TaskNum); |
| | | // QuartzLogger.Info($"HandleInboundTaskAsync:入库任务处理成功,任务号: {taskInfo.TaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | // return true; |
| | | // } |
| | | //} |
| | | |
| | | return false; |
| | | } |
| | |
| | | { |
| | | return _httpClientHelper.Post<WebResponseContent>(configKey, stockDTO.ToJson()); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调用批量拆盘确认 API |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// 当拆盘任务全部取完时调用,一次性上传整个托盘的解绑数据到 MES。 |
| | | /// </remarks> |
| | | /// <param name="palletCode">源托盘号</param> |
| | | /// <returns>HTTP 响应结果</returns> |
| | | public HttpResponseResult<WebResponseContent> PostSplitPalletConfirmAsync(string palletCode) |
| | | { |
| | | var request = new { PalletCode = palletCode }; |
| | | return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.SplitPalletConfirm), request.ToJson()); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调用批量组盘确认 API |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// 当组盘任务全部放完时调用,一次性上传整个托盘的绑定数据到 MES。 |
| | | /// </remarks> |
| | | /// <param name="palletCode">目标托盘号</param> |
| | | /// <returns>HTTP 响应结果</returns> |
| | | public HttpResponseResult<WebResponseContent> PostGroupPalletConfirmAsync(string palletCode) |
| | | { |
| | | var request = new { PalletCode = palletCode }; |
| | | return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.GroupPalletConfirm), request.ToJson()); |
| | | } |
| | | } |
| | | } |