diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 243eeef..e7e6557 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -60,6 +60,7 @@ namespace Khd.Core.Wcs StaticData.PlcDic.TryAdd(plcConfig.Code, plc); } } + //创建定时器 SystemTimer systemTimer = new SystemTimer(_host); systemTimer.Start(); //创建任务 diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs index 267364f..6bfda69 100644 --- a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -1,6 +1,7 @@ using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; +using Khd.Core.Library.Mapper; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; @@ -51,66 +52,67 @@ namespace Khd.Core.Wcs.Wcs var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress); if (rfid != null && isSignal != null) { - if (Convert.ToInt32(isSignal) == 1)//托盘到位 { - BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - var wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid && t.nextPointId == baseEquip.objid); - if (wcsTask != null)//如果不是null + WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 4).FirstOrDefault(); + if(wcsTask!= null) { - int? floor = 0; - var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.saleOrderId == wcsTask.orderId); - if (wmsProductOutstock != null) + if (wcsTask.taskStatus == 5)//提升机上来的 { - var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode); - if (endEquip != null) - { - floor = endEquip.floorNo; - } + dbContext.Remove(wcsTask); + dbContext.SaveChanges(); } - else + } + else + { + bool hasTask = dbContext.WcsTask.Where(t => t.currPointId == 4).Any(); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 4); + BaseEquip nextEquip = StaticData.BaseEquip.First(t=>t.objid==6); + if (!hasTask) { - var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTask.orderId); - if (wmsRawOutstock != null) + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault(); + if (mesBasePalletInfo != null) { - var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode); - if (endEquip != null) + var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == mesBasePalletInfo.materialId).FirstOrDefault()?.warehouseId; + if (warehouseId != null) { - floor = endEquip.floorNo; + var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault(); + if (TargetFloor != null) + { + var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault(); + if (dic != null) + { + var newTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + taskType = Convert.ToInt32(dic.dicValue), + taskStatus = 0, + containerNo = rfid, + materialBarcode = mesBasePalletInfo.materialBarcode, + materialId = mesBasePalletInfo.materialId, + qty = Convert.ToInt32(mesBasePalletInfo.bindAmount), + currPointId = lineEquip.objid, + currPointNo = lineEquip.equipNo, + nextPointId = nextEquip.objid, + nextPointNo = nextEquip.equipNo, + endPointId = warehouseId, + fromFloorNo = 4, + floorNo = TargetFloor.warehouseFloor, + useFlag = 1, + createBy = "一楼接驳位", + createTime = DateTime.Now, + remark = "一楼创建入库任务" + }; + dbContext.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } + } } } } - if (floor == 0) - { - Console.WriteLine($"{DateTime.Now}:4楼接驳位未找到目的地楼层"); - _logger.Info("4楼接驳位未找到目的地楼层"); - Thread.Sleep(1000); - continue; - } - BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机 - wcsTask.nextPointId = nextEquip.objid; - wcsTask.nextPointNo = nextEquip.equipNo; - wcsTask.currPointId = baseEquip.objid; - wcsTask.currPointNo = baseEquip.equipNo; - wcsTask.fromFloorNo = 4; - wcsTask.taskType = 6;//成品出库 - wcsTask.floorNo = floor;//出库到一楼 - wcsTask.taskStatus = 0; - wcsTask.updateTime = DateTime.Now; - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid) - .Update(t => new WcsTaskLog - { - nextPointId = nextEquip.objid, - nextPointNo = nextEquip.equipNo, - currPointId = baseEquip.objid, - currPointNo = baseEquip.equipNo, - fromFloorNo = 4, - floorNo = floor, - taskStatus = 0, - updateTime = DateTime.Now, - }); - dbContext.SaveChanges(); } } } diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index f2f5af0..0c09ce3 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -63,9 +63,50 @@ namespace Khd.Core.Wcs.Wcs IsBackground = true }; deleteTaskThread.Start(); + + var deleteLogsThread = new Thread(DeleteLogsLogic) + { + Name = "DeleteLogsThread", + IsBackground = true + }; + deleteLogsThread.Start(); Console.WriteLine($"{DateTime.Now}: SystemTimer started"); } + private void DeleteLogsLogic(object? obj) + { + while (true) + { + try + { + //获取当前程序运行目录下的logs文件夹 + string logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs"); + string[] strings = Directory.GetDirectories(logPath); + foreach (string s in strings) + { + string? dirName = Path.GetFileName(s); + if (dirName != null) + { + if (DateTime.TryParse(dirName, out DateTime dt)) + { + if (dt < DateTime.Now.AddDays(-5)) + { + Directory.Delete(s, true); + _logger.Info($"日志{dirName}已删除"); + } + } + } + } + + } + catch + { + + } + Thread.Sleep(1000 * 60 * 60 * 23); + } + } + private void DeleteTaskLogic(object? obj) { using var scope = host.Services.CreateScope(); diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index cae3873..ff7ee46 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -2323,11 +2323,9 @@ namespace Khd.Core.Wpf.Form { if (item.Value.IP == ex.Message) { + MessageBox.Show("PLC断开连接,正在重连!"); SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Slot, item.Value.Rack); SystemData.PlcDic[item.Key].Open(); - BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "canReceive"); - SystemData.PlcDic[1].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - MessageBox.Show("一键收料发送成功"); break; } } @@ -2399,6 +2397,7 @@ namespace Khd.Core.Wpf.Form { if (item.Value.IP == ex.Message) { + MessageBox.Show("PLC断开连接,正在重连!"); SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); SystemData.PlcDic[item.Key].Open(); } @@ -2439,6 +2438,7 @@ namespace Khd.Core.Wpf.Form { if (item.Value.IP == ex.Message) { + MessageBox.Show("PLC断开连接,正在重连!"); SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); SystemData.PlcDic[item.Key].Open(); } @@ -2485,6 +2485,7 @@ namespace Khd.Core.Wpf.Form { if (item.Value.IP == ex.Message) { + MessageBox.Show("PLC断开连接,正在重连!"); SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); SystemData.PlcDic[item.Key].Open(); } @@ -2526,6 +2527,7 @@ namespace Khd.Core.Wpf.Form { if (item.Value.IP == ex.Message) { + MessageBox.Show("PLC断开连接,正在重连!"); SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); SystemData.PlcDic[item.Key].Open(); } diff --git a/src/Khd.Core.Wpf/TaskForm/AddTask.xaml.cs b/src/Khd.Core.Wpf/TaskForm/AddTask.xaml.cs index f07559a..f7cb430 100644 --- a/src/Khd.Core.Wpf/TaskForm/AddTask.xaml.cs +++ b/src/Khd.Core.Wpf/TaskForm/AddTask.xaml.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; @@ -73,62 +74,61 @@ namespace Khd.Core.Wpf.TaskForm { using var scope = _host.Services.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService(); - if (StartPoint.SelectedItem is EquipMessage startEquip && EndPoint.SelectedItem is EquipMessage endEquip && !string.IsNullOrEmpty(EmptyCount.SelectedItem?.ToString())) + if (StartPoint.SelectedItem is EquipMessage startEquip && EndPoint.SelectedItem is EquipMessage endEquip) { if (startEquip.equipType == 1) { - BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"RFID00{startEquip.floorNo}"); - string? rfid = SystemData.PlcDic[0].ReadRFID(basePlcpoint.plcpointAddress); - - if (!string.IsNullOrEmpty(rfid)) + BasePlcpoint linesignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"linesignal0{startEquip.floorNo}"); + var linesignalValue = SystemData.PlcDic[0].Read(linesignal.plcpointAddress); + if (linesignalValue != null && Convert.ToInt32(linesignalValue) == 1) { + BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"RFID00{startEquip.floorNo}"); + string? rfid = SystemData.PlcDic[0].ReadRFID(basePlcpoint.plcpointAddress); MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault(); - if (mesBasePalletInfo != null) + WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid); + if (task == null) { - WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid); - if (task == null) + int qty = 1; + if (int.TryParse(EmptyCount.SelectedIndex.ToString(), out int emptyCount)) { - BaseEquip baseEquip = baseEquips.First(t => t.equipType == 2);//提升机 - WcsTask wcsTask = new() - { - objid = FormBoardT._jcSnowId.NextId(), - taskType = 99, - currPointId = startEquip.Id, - currPointNo = startEquip.equipNo, - nextPointId = baseEquip.objid, - nextPointNo = baseEquip.equipNo, - endPointId = endEquip.Id, - endPointNo = endEquip.equipNo, - fromFloorNo = startEquip.floorNo, - floorNo = endEquip.floorNo, - materialBarcode = mesBasePalletInfo.materialBarcode, - materialId = mesBasePalletInfo.materialId, - taskStatus = 0, - createBy = "人工", - createTime = DateTime.Now, - equipmentNo = startEquip.equipNo, - useFlag = 0, - qty = Convert.ToInt32(EmptyCount.SelectedIndex)+1, - isEmpty = "1" - }; - dbContext.Add(wcsTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); + qty = emptyCount + 1; } - else + BaseEquip baseEquip = baseEquips.First(t => t.equipType == 2);//提升机 + WcsTask wcsTask = new() { - MessageBox.Show("该RFID的任务已经存在!"); - } + objid = FormBoardT._jcSnowId.NextId(), + taskType = 99, + currPointId = startEquip.Id, + currPointNo = startEquip.equipNo, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.equipNo, + endPointId = endEquip.Id, + endPointNo = endEquip.equipNo, + fromFloorNo = startEquip.floorNo, + floorNo = endEquip.floorNo, + materialBarcode = mesBasePalletInfo?.materialBarcode, + materialId = mesBasePalletInfo?.materialId, + taskStatus = 0, + createBy = "人工", + createTime = DateTime.Now, + equipmentNo = startEquip.equipNo, + useFlag = 0, + qty = qty, + isEmpty = "1" + }; + dbContext.Add(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); } else { - MessageBox.Show("未找到该托盘信息!"); + MessageBox.Show("该RFID的任务已经存在!"); } } else { - MessageBox.Show("未读取到RFID"); + MessageBox.Show("未检测到起始地楼层的到位信号"); } } this.Close(); @@ -144,9 +144,12 @@ namespace Khd.Core.Wpf.TaskForm { try { - SystemData.PlcDic[0] = new Plc.S7.Plc(SystemData.PlcDic[0].CPU, SystemData.PlcDic[0].IP, SystemData.PlcDic[0].Port, SystemData.PlcDic[0].Rack, SystemData.PlcDic[0].Slot); - SystemData.PlcDic[0].Open(); - AddTaskBtn_Click(AddTaskBtn, null); + MessageBox.Show("PLC断开连接,正在重连"); + Task.Run(() => + { + SystemData.PlcDic[0] = new Plc.S7.Plc(SystemData.PlcDic[0].CPU, SystemData.PlcDic[0].IP, SystemData.PlcDic[0].Port, SystemData.PlcDic[0].Rack, SystemData.PlcDic[0].Slot); + SystemData.PlcDic[0].Open(); + }); } catch {