| | |
| | | /// <param name="task">要下发的任务对象</param> |
| | | /// <param name="state">机器人当前状态</param> |
| | | /// <param name="isScanNG">是否扫码NG</param> |
| | | public async Task SendSocketRobotPickAsync(Dt_RobotTask task, RobotSocketState state, bool isScanNG) |
| | | public async Task SendSocketRobotPickAsync(Dt_RobotTask task, RobotSocketState state, bool isScanNG = false) |
| | | { |
| | | // 构建取货指令,格式:Pickbattery,{源地址} |
| | | string taskString = $"Pickbattery,{task.RobotSourceAddress}"; |
| | |
| | | { |
| | | _logger.LogError("下发批次取货指令失败,指令: {TaskString},设备: {DeviceName}", taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Error($"下发批次取货指令失败,指令: {taskString}", state.RobotCrane?.DeviceName); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 下发假电芯取货指令(带批次格式和总数) |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// 发送顺序: |
| | | /// 1. PickTotalNum,{N} -- 真实电芯总数 |
| | | /// 2. Pickbattery,5,{start}-{end} -- 批次取货指令(固定从5号位取) |
| | | /// |
| | | /// 下发成功后更新任务状态为"机器人执行中"。 |
| | | /// </remarks> |
| | | /// <param name="task">要下发的任务对象</param> |
| | | /// <param name="state">机器人当前状态</param> |
| | | /// <param name="batchStart">批次起始编号</param> |
| | | /// <param name="batchEnd">批次结束编号</param> |
| | | public async Task SendFakeBatteryPickWithBatchAsync(Dt_RobotTask task, RobotSocketState state, int batchStart, int batchEnd) |
| | | { |
| | | // 先发送总数指令 |
| | | string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}"; |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd); |
| | | |
| | | // 再发送批次取货指令(假电芯固定从5号位取) |
| | | string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}"; |
| | | string taskString = $"Pickbattery,5,{range}"; |
| | | |
| | | bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString); |
| | | |
| | | if (result) |
| | | { |
| | | _logger.LogInformation("下发假电芯批次取货指令成功,指令: {TaskString},批次: {Range},设备: {DeviceName}", |
| | | taskString, range, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Info($"下发假电芯批次取货指令成功,指令: {taskString},批次: {range}", state.RobotCrane?.DeviceName); |
| | | |
| | | task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode(); |
| | | state.CurrentTask = task; |
| | | |
| | | if (_stateManager.TryUpdateStateSafely(state.IPAddress, state)) |
| | | { |
| | | await _robotTaskService.UpdateRobotTaskAsync(task); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError("下发假电芯批次取货指令失败,指令: {TaskString},设备: {DeviceName}", taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Error($"下发假电芯批次取货指令失败,指令: {taskString}", state.RobotCrane?.DeviceName); |
| | | } |
| | | } |
| | | |
| | |
| | | Channel = x, |
| | | |
| | | // 电池条码:如果状态中有条码列表,取对应位置的条码;否则为空 |
| | | CellBarcode = state.CellBarcode?.Count > 0 ? state.CellBarcode[x - 1] : "" |
| | | //CellBarcode = state.CellBarcode?.Count > 0 ? state.CellBarcode[x - 1] : "" |
| | | CellBarcode = state.CellBarcode[idx].ToString() |
| | | }) |
| | | .ToList() |
| | | }; |
| | |
| | | /// 当拆盘任务全部取完时调用,一次性上传整个托盘的解绑数据到 MES。 |
| | | /// </remarks> |
| | | /// <param name="palletCode">源托盘号</param> |
| | | /// <param name="deviceName">设备名称,用于传递到 WMS</param> |
| | | /// <returns>HTTP 响应结果</returns> |
| | | public HttpResponseResult<WebResponseContent> PostSplitPalletConfirmAsync(string palletCode) |
| | | public HttpResponseResult<WebResponseContent> PostSplitPalletConfirmAsync(string palletCode, string deviceName) |
| | | { |
| | | var request = new { PalletCode = palletCode }; |
| | | var request = new { PalletCode = palletCode, DeviceName = deviceName }; |
| | | return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.SplitPalletConfirm), request.ToJson()); |
| | | } |
| | | |
| | |
| | | /// 当组盘任务全部放完时调用,一次性上传整个托盘的绑定数据到 MES。 |
| | | /// </remarks> |
| | | /// <param name="palletCode">目标托盘号</param> |
| | | /// <param name="deviceName">设备名称,用于传递到 WMS</param> |
| | | /// <returns>HTTP 响应结果</returns> |
| | | public HttpResponseResult<WebResponseContent> PostGroupPalletConfirmAsync(string palletCode) |
| | | public HttpResponseResult<WebResponseContent> PostGroupPalletConfirmAsync(string palletCode, string deviceName) |
| | | { |
| | | var request = new { PalletCode = palletCode }; |
| | | var request = new { PalletCode = palletCode, DeviceName = deviceName }; |
| | | return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.GroupPalletConfirm), request.ToJson()); |
| | | } |
| | | } |