| | |
| | | |
| | | using Dm.filter; |
| | | using DocumentFormat.OpenXml.Bibliography; |
| | | using DocumentFormat.OpenXml.Drawing.Charts; |
| | | using Elastic.Clients.Elasticsearch.Tasks; |
| | | using Furion.Logging; |
| | | using IoTClient; |
| | |
| | | using System.Reflection.Emit; |
| | | using WCS.Application.Entity; |
| | | using WCS.Application.Util; |
| | | using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressIntracityUpdateStoreRequest.Types; |
| | | using static SKIT.FlurlHttpClient.Wechat.Api.Models.NontaxInsertBillRequest.Types.CardExtra.Types.BillCard.Types; |
| | | |
| | | namespace WCS.Application; |
| | | public static class PLCService |
| | | { |
| | | |
| | | private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); |
| | | |
| | | public static void OnChangeEvent(object sender, EventArgs e) |
| | |
| | | private static void StackingMachine(WcsDeviceDto modDevice) |
| | | { |
| | | var plcConn = modDevice.PLCUtil; |
| | | string ledText = ""; |
| | | switch (modDevice.Value.ToString()) |
| | | { |
| | | case "820": |
| | |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | //修改led屏信息 |
| | | //LedDisplay(modDevice.LedIP, "工位:" + modTask.EndLocate, "出库中 " + $"储位地址:{modTask.StartLocate}", "托盘号:" + modTask.PalletNo); |
| | | var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == taskInfo.EndStation && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); |
| | | ledText += $"任务类型:{modTask.TaskType.GetDescription()}\n\n"; |
| | | ledText += $"任务号:{modTask.TaskNo}\n"; |
| | | ledText += $"托盘号:{modTask.PalletNo}\n\n"; |
| | | ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; |
| | | ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}"; |
| | | LedDisplay(ledDevice.LedIP, ledText); |
| | | } |
| | | } |
| | | break; |
| | |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | |
| | | //修改led屏信息 |
| | | //LedDisplay(modDevice.LedIP, "工位:" + modTask.EndLocate, "出库中 " + $"储位地址:{modTask.StartLocate}", "托盘号:" + modTask.PalletNo); |
| | | } |
| | | } |
| | | break; |
| | |
| | | { |
| | | string tasknoVal = val.ToString(); |
| | | var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false); |
| | | if (modTask == null) |
| | | if (modTask == null) |
| | | { |
| | | Log.Error(string.Format("跺机控制字860:未找到对应的任务。")); |
| | | break; |
| | |
| | | HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | // led显示内容 |
| | | LedDisplay(modDevice.LedIP, "工位:" + modTask.StartLocate, "入库完成 " + $"任务完成:{modTask.TaskNo}", "托盘号:" + modTask.PalletNo); |
| | | var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.StartLocate && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); |
| | | ledText += $"入库完成\n\n"; |
| | | |
| | | ledText += $"任务号:{modTask.TaskNo}\n"; |
| | | ledText += $"托盘号:{modTask.PalletNo}\n\n"; |
| | | |
| | | ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; |
| | | ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}"; |
| | | |
| | | LedDisplay(ledDevice.LedIP, ledText); |
| | | // 此处添加不空跑业务 |
| | | } |
| | | break; |
| | |
| | | _db.Insertable(modcTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | // 根据任务号获取起始工位地址,根据起始工位地址获取LEDIP 推送到LED屏幕。 |
| | | var taskModel = _db.Queryable<WcsTask>().First(w => w.TaskNo == modTask.TaskNo); |
| | | modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskModel.EndLocate).Select(s => s.LedIP).First(); |
| | | |
| | | // led显示内容 |
| | | LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "出库中 ", "托盘号:" + modTask.PalletNo); |
| | | |
| | | break; |
| | | } |
| | |
| | | { |
| | | return; |
| | | } |
| | | var ledText = ""; |
| | | switch (modDevice.Value.ToString()) |
| | | { |
| | | case "320": |
| | |
| | | var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); |
| | | if (res350.IsSucceed && palletVal350 != "350") |
| | | { |
| | | LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"入库任务已锁定,请解锁后重试", "托盘号:" + palletVal); |
| | | ledText += $"申请入库失败\n\n"; |
| | | ledText += $"托盘号:{palletVal}\n"; |
| | | ledText += $"入库任务已锁定,请解锁后重试!\n"; |
| | | LedDisplay(modDevice.LedIP, ledText); |
| | | } |
| | | |
| | | // 写入输送线退回指令 |
| | |
| | | var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); |
| | | if (res350.IsSucceed && palletVal350 != "350") |
| | | { |
| | | LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"扫描托盘号失败!", "托盘号:" + palletVal); |
| | | ledText += $"申请入库失败\n\n"; |
| | | ledText += $"托盘号:{palletVal}\n"; |
| | | ledText += $"扫描托盘号失败!\n"; |
| | | LedDisplay(modDevice.LedIP, ledText); |
| | | } |
| | | |
| | | // 写入输送线退回指令 |
| | |
| | | // led显示内容 |
| | | try |
| | | { |
| | | LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"目标巷道:{taskInfo.EndRoadway}取货工位:{EndLocate}", "托盘号:" + palletVal); |
| | | ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n"; |
| | | |
| | | ledText += $"任务号:{taskInfo.TaskNo}\n"; |
| | | ledText += $"托盘号:{taskInfo.PalletNo}\n\n"; |
| | | |
| | | ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; |
| | | ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; |
| | | LedDisplay(modDevice.LedIP, ledText); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); |
| | | if (res350.IsSucceed && palletVal350 != "350") |
| | | { |
| | | LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"申请巷道失败:{strMsg}", "托盘号:" + palletVal); |
| | | ledText += $"申请入库失败\n\n"; |
| | | ledText += $"托盘号:{palletVal}\n"; |
| | | ledText += $"{strMsg}\n"; |
| | | LedDisplay(modDevice.LedIP, ledText); |
| | | } |
| | | |
| | | // 写入输送线退回指令 |
| | |
| | | { |
| | | plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); |
| | | } |
| | | |
| | | // 申请巷道失败! |
| | | Log.Error(string.Format($"申请巷道失败:{strMsg},读写plc错误")); |
| | | } |
| | | } |
| | | break; |
| | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | // led显示内容 |
| | | LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"目标巷道:{modTask.EndRoadway}取货工位:{endLocatVlue}", "托盘号:" + palletVal); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | // led显示内容 |
| | | LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "入库中 " + $"申请储位地址:{strMsg}", "托盘号:" + palletVal); |
| | | |
| | | var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); |
| | | ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n"; |
| | | ledText += $"任务号:{taskInfo.TaskNo}\n"; |
| | | ledText += $"托盘号:{taskInfo.PalletNo}\n\n"; |
| | | ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; |
| | | ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; |
| | | LedDisplay(modDevice.LedIP, ledText); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 申请储位失败!LED显示 |
| | | Log.Error(string.Format($"申请储位失败:{strMsg},读写plc错误")); |
| | | // led显示内容 |
| | | var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); |
| | | ledText += $"申请入库失败\n\n"; |
| | | ledText += $"{strMsg}\n"; |
| | | LedDisplay(modDevice.LedIP, ledText); |
| | | } |
| | | |
| | | } |
| | |
| | | break; |
| | | } |
| | | |
| | | // 转换目标工位排列层 |
| | | // 转换目标工位排列层 03010301 |
| | | var paiVal = PLCCommon.GetDjAdress(modTask.EndRoadway.Substring(1, 2), endLocate.Substring(0, 2), endLocate.Substring(6, 2)); |
| | | string pai = paiVal.ToString(); |
| | | string lie = int.Parse(endLocate.Substring(2, 2)).ToString(); |
| | |
| | | modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.EndLocate).Select(s => s.LedIP).First(); |
| | | |
| | | // led显示内容 |
| | | LedDisplay(modDevice.LedIP, "到达工位:" + modDevice.StationNum, "出库完成 " + $"储位地址:{modInsertTaskMonitor.StartLocat}", "托盘号:" + palletVal); |
| | | // 根据目标工位号获取对应的LEDIP地址 |
| | | var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId); |
| | | |
| | | ledText += $"出库完成\n\n"; |
| | | ledText += $"任务号:{taskInfo.TaskNo}\n"; |
| | | ledText += $"托盘号:{taskInfo.PalletNo}\n\n"; |
| | | ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; |
| | | ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; |
| | | LedDisplay(ledDevice.LedIP, ledText); |
| | | } |
| | | // 反馈WMS出库完成 |
| | | //TaskReques taskReques = new TaskReques(); |
| | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | // led显示内容 |
| | | modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == modTask.EndLocate).Select(s => s.LedIP).First(); |
| | | LedDisplay(modDevice.LedIP, "工位:" + modTask.StartLocate, $"拣选完成,托盘离开工位", "托盘号:" + modTask.PalletNo); |
| | | var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId); |
| | | |
| | | ledText += $"拣选完成,托盘离开工位\n\n"; |
| | | ledText += $"任务号:{modTask.TaskNo}\n"; |
| | | ledText += $"托盘号:{modTask.PalletNo}\n\n"; |
| | | ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; |
| | | ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}"; |
| | | LedDisplay(ledDevice.LedIP, ledText); |
| | | } |
| | | #endregion |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private static void LedDisplay(string ip,string text) |
| | | { |
| | | try |
| | | { |
| | | LedDll Led = new LedDll(); |
| | | Led.ConsoleLeds(ip, text); |
| | | // 设置实例 |
| | | //Led.ConsoleLeds("10.18.51.238", $"任务类型:{TaskTypeEnum.Move.GetDescription()}\n\n任务号:TK2024102100001\n托盘号:LN000145\n\n起始位:033\n目标位:R01-02010102"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | private static void Test(WcsDeviceDto modDevice) |
| | | { |
| | | //写死测试读string |