From 8db348817b800a47f1951636290b3209b04f97e6 Mon Sep 17 00:00:00 2001 From: icewint Date: Wed, 24 Jul 2024 11:26:07 +0800 Subject: [PATCH] =?UTF-8?q?[important]=E6=B7=BB=E5=8A=A0=E6=96=99?= =?UTF-8?q?=E7=AE=B1=E5=88=B0=E8=BE=BE=E7=AB=99=E5=8F=B0=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CirculationTask/Convey/UploadBoxArrive.cs | 102 ++++++++++++++++++ .../EquipOperation/Convey/ConveyOperation.cs | 38 +++++++ 2 files changed, 140 insertions(+) create mode 100644 WcsMain/Business/CirculationTask/Convey/UploadBoxArrive.cs diff --git a/WcsMain/Business/CirculationTask/Convey/UploadBoxArrive.cs b/WcsMain/Business/CirculationTask/Convey/UploadBoxArrive.cs new file mode 100644 index 0000000..38157ee --- /dev/null +++ b/WcsMain/Business/CirculationTask/Convey/UploadBoxArrive.cs @@ -0,0 +1,102 @@ +using CirculateTool.Attribute; +using System.Text.RegularExpressions; +using WcsMain.ApiClient.DataEntity.WmsEntity; +using WcsMain.Common; +using WcsMain.DataBase.Dao; +using WcsMain.DataBase.TableEntity; +using WcsMain.DataService; +using WcsMain.Enum.Convey; +using WcsMain.EquipOperation.Convey; +using WcsMain.ExtendMethod; +using WcsMain.Plugins; + +namespace WcsMain.Business.CirculationTask.Convey; + + +[Circulation] +public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation conveyOperation, WmsWebApiPost wmsWebApiPost, AppConveyTaskDao conveyTaskDao) +{ + private static List? _pickStands; // 拣选站台 + + /// + /// 拣选台上报料箱 + /// + /// + [Circulation("拣选台上报料箱")] + public bool UploadInfo() + { + if (_pickStands == default) + { + _pickStands = conveyStandDao.Query(new AppConveyStand() { StandStatus = 1, StandType = (int)ConveyStandTypeEnum.pick }); + return true; + } + if (_pickStands.Count < 1) + { + ConsoleLog.Info($"【提示】无拣选站台信息,监控已经停止"); + return false; + } + List tasks = new(); + foreach (AppConveyStand stand in _pickStands) + { + Thread.Sleep(20); + Task task = new(() => + { + string code = conveyOperation.ReadStandCode(stand.Area!); + code = Regex.Replace(code, "\\W", ""); + if (string.IsNullOrEmpty(code)) + { + return; + } + ConsoleLog.Info($"【提示】料箱:{code} 已经到达拣选站台:{stand.Area}"); + conveyOperation.ClearStandCodeStatus(stand.Area!); + + // 查询 条码 对应的任务 + List? pickTasks = conveyTaskDao.Query(new AppConveyTask() + { + VehicleNo = code, + TaskType = (int)ConveyTaskTypeEnum.pick, + Location = stand.Area + }); + if (pickTasks == default || pickTasks.Count < 1) + { + ConsoleLog.Error($"【异常】拣选站台{stand.Area} 料箱:{code} 找不到对应任务"); + conveyOperation.ClearStandCodeStatus(stand.Area!); + return; + } + var pickTask = pickTasks[0]; // 拣选任务 + // 更新表内拣选时间和状态 + conveyTaskDao.Update(new AppConveyTask() + { + TaskId = pickTask.TaskId, + TaskStatus = (int)ConveyTaskStatusEnum.arrive, + CompleteTime = DateTime.Now, + Remark = "PLC上报料箱到达" + }); + // 发送wms料箱到达 + UploadPickStandRequest request = new UploadPickStandRequest() + { + PickStand = stand.Area, + VehicleNo = pickTask.VehicleNo, + Remark = "" + }; + + var responseEntity = wmsWebApiPost.HttpPost(request, + CommonData.AppApiBaseInfos.GetAddress("UploadBoxArrive") ?? "", 5000); + if (responseEntity.IsSend) // 发送失败不处理,下一次循环在发送 + { + // 只要发送成功则不再发送 + ConsoleLog.Info( + $"拣选站台{stand.Area} 获得对应料箱:{pickTask.VehicleNo} 上报成功,WMS返回:{responseEntity.ResponseMsg}"); + var result = responseEntity.ResponseEntity; + conveyOperation.ClearStandCodeStatus(stand.Area!); + } + }); + task.Start(); + tasks.Add(task); + } + Task.WaitAll(tasks.ToArray()); + return true; + } + + +} diff --git a/WcsMain/EquipOperation/Convey/ConveyOperation.cs b/WcsMain/EquipOperation/Convey/ConveyOperation.cs index e968620..36cdf62 100644 --- a/WcsMain/EquipOperation/Convey/ConveyOperation.cs +++ b/WcsMain/EquipOperation/Convey/ConveyOperation.cs @@ -113,6 +113,44 @@ public class ConveyOperation return string.Empty; } + + /// + /// 读取站台扫码点信息 + /// + /// + /// + public string ReadStandCode(string? standId) + { + if (!CommonData.IsConnectPlc || CommonTool.Siemens == default) return string.Empty; + var readResult = CommonTool.Siemens.ReadByteWithName($"站台条码读取{standId}", 22); + if (!readResult.Success || readResult.Value == default) return string.Empty;// 读取失败 + try + { + var readData = readResult.Value; + short status = Convert.ToInt16(CommonTool.Siemens.Trans(readData, 0)); // PLC 返回任务状态 + string code = Regex.Replace(Encoding.ASCII.GetString(readData, 2, 20), "\\W", ""); + return code; + } + catch (Exception ex) + { + _ = ex; + return string.Empty; + } + } + + /// + /// 清除站台扫码状态 + /// + /// + /// + public string ClearStandCodeStatus(string? standId) + { + if (!CommonData.IsConnectPlc || CommonTool.Siemens == default) return "PLC尚未连接。"; + var (writeResult, _) = CommonTool.Siemens.WritePlcWhithName($"站台条码读取{standId}", (short)0); + if (!writeResult.Success) return writeResult.Message ?? "写入失败"; + return string.Empty; + } + /// /// 写入箱式线任务 ///