From 77ed289283b6d338cb01fbfe9329bbb22dd03aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Tue, 13 Aug 2024 10:47:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B0=8F=E8=BD=A6=E6=8A=A5?= =?UTF-8?q?=E8=AD=A6=E4=BB=A5=E5=8F=8APlc=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Models/DmsBaseAlarmRule.cs | 8 +- .../Models/DmsBaseDeviceLedger.cs | 9 +- .../Models/DmsRecordAlarmInfo.cs | 4 - .../Models/DmsRecordAlarmTime.cs | 4 - src/Khd.Core.Wcs/Global/StaticData.cs | 2 + src/Khd.Core.Wcs/MainCentralControl.cs | 4 +- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 2 +- src/Khd.Core.Wcs/Wcs/FirstFloor.cs | 5 +- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 5 +- src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs | 1 - src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 7 +- src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs | 4 +- src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs | 1 - src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 4 +- src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs | 4 +- src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs | 4 +- src/Khd.Core.Wcs/Wcs/SystemTimer.cs | 209 +++++++++++++++++- src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 4 +- src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs | 4 +- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 23 +- .../myConverter/TypeDataConverter.cs | 1 - 21 files changed, 243 insertions(+), 66 deletions(-) diff --git a/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs b/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs index ba4d73d..7a673af 100644 --- a/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs +++ b/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models { @@ -39,5 +34,6 @@ namespace Khd.Core.Domain.Models [Column("remark")] public string Remark { get; set; } + public string Status { get; set; } } } diff --git a/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs b/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs index ea4d5d3..9b47bee 100644 --- a/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs +++ b/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models { @@ -22,7 +17,7 @@ namespace Khd.Core.Domain.Models [Column("station_id")] public string StationId { get; set; } - [Column("asset_number")] + [Column("asset_number")] public string AssetNumber { get; set; } [Column("device_location")] diff --git a/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs b/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs index 9edddf2..671fb2b 100644 --- a/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs +++ b/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs @@ -1,9 +1,5 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Khd.Core.Domain.Models { diff --git a/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs b/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs index 697d2c7..ebcbc7a 100644 --- a/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs +++ b/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs @@ -1,9 +1,5 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Khd.Core.Domain.Models { diff --git a/src/Khd.Core.Wcs/Global/StaticData.cs b/src/Khd.Core.Wcs/Global/StaticData.cs index a47c554..5aaa5cf 100644 --- a/src/Khd.Core.Wcs/Global/StaticData.cs +++ b/src/Khd.Core.Wcs/Global/StaticData.cs @@ -64,6 +64,8 @@ namespace Khd.Core.Wcs.Global public static List basePlcs = new List(); public static List PlcConfigs { get; set; } public static int DeleteLogDay { get; internal set; } + public static List DmsBaseAlarmRuleList { get; set; } + public static List BigContainerCodes = new List() { "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004" }; public static Dictionary> PlcPoints = new Dictionary>(); diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 9895e88..acaa838 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -1,5 +1,4 @@ -using Khd.Core.Domain.Models; -using Khd.Core.EntityFramework; +using Khd.Core.EntityFramework; using Khd.Core.Library; using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Wcs; @@ -43,6 +42,7 @@ namespace Khd.Core.Wcs StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送 StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息 StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表,Agv任务模板 + StaticData.DmsBaseAlarmRuleList = dbContext.DmsBaseAlarmRule.ToList(); foreach (var plcConfig in StaticData.PlcConfigs) { if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code)) diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 3867fb6..100b8ad 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -1995,7 +1995,7 @@ namespace Khd.Core.Wcs.Wcs foreach (var task in tasks) { var wmsRawStock = rawStock.Where(t => t.palletInfoCode == task.containerNo && t.materialId == order.MaterialId && t.saleOrderId == order.SaleOrderId).ToList(); - decimal? total = wmsRawStock.Sum(t => t.totalAmount)- wmsRawStock.Sum(t => t.frozenAmount); + decimal? total = wmsRawStock.Sum(t => t.totalAmount) - wmsRawStock.Sum(t => t.frozenAmount); needNumber -= total; WmsBaseLocation wmsBaseLocation = AllWmsBaseLocations.Where(t => t.locationCode == task.currPointNo).First(); index = wmsBaseLocation.locRow; diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index cf96b8f..8143187 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -8,7 +8,6 @@ using Masuit.Tools; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { @@ -524,11 +523,11 @@ namespace Khd.Core.Wcs.Wcs if (Convert.ToInt32(equipstate06Value) == 0) { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01 && t.taskStatus<5).OrderBy(t => t.createTime).ToList(); + var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01 && t.taskStatus < 5).OrderBy(t => t.createTime).ToList(); foreach (var wcsTask in wcsTasks) { _logger.Info($"当前任务?{wcsTask.ToJsonString()}"); - bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == wcsTask.endPointId && t.objid != wcsTask.objid && t.nextPointId != 6).Any(); + bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == wcsTask.endPointId && t.objid != wcsTask.objid && t.nextPointId != 6).Any(); if (!hasTask) { wcsTask.serialNo ??= SystemData.GetSerialNo(dbContext); diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index 9f81051..b675c0a 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Dto.webapi; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; @@ -10,7 +11,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { @@ -694,7 +694,6 @@ namespace Khd.Core.Wcs.Wcs endTime = DateTime.Now, locationCode = wmsBaseLocation.locationCode, executeStatus = "2", - returnFlag = null, instockAmount = 1, instockType = "2", materialBatchCode = mesBaseBarcodeInfo.barcodeInfo, diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs index ed007bb..edcf08e 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs @@ -8,7 +8,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index da077b1..65edfb6 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Dto.webapi; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; @@ -10,7 +11,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { @@ -558,7 +558,8 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.SaveChanges(); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); - }catch (Exception ex) + } + catch (Exception ex) { _logger.Error($"入库异常捕捉:{ex.Message}"); } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index 77c8e02..8b8bddf 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; using Khd.Core.Library.Mapper; @@ -8,7 +9,6 @@ using Masuit.Tools; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs index b1c4703..ef560e5 100644 --- a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -7,7 +7,6 @@ using Khd.Core.Wcs.Global; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index e7e6a92..20321c1 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Dto.webapi; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; @@ -8,7 +9,6 @@ using Masuit.Tools; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; -using Khd.Core.Domain.Dto.TaskType; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index f233da1..b8723bf 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; using Khd.Core.Library.Mapper; @@ -7,7 +8,6 @@ using Khd.Core.Wcs.Global; using Masuit.Tools; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 8111e8c..94ff384 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; using Khd.Core.Library.Mapper; @@ -6,7 +7,6 @@ using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index c612819..b499983 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -2,13 +2,14 @@ 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; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; -using Khd.Core.Domain.Dto.TaskType; +using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs { @@ -75,19 +76,83 @@ namespace Khd.Core.Wcs.Wcs Console.WriteLine($"{DateTime.Now}: SystemTimer started"); } - private void AgvAlarmLogic(object? obj) + private void AgvAlarmLogic() { using var scope = host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); while (true) { + using var transaction = dbContext.Database.BeginTransaction(); try { - + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var dmsBaseDeviceLedgers = dbContext.DmsBaseDeviceLedger.ToList(); + var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList(); + var agvStatus = from a in dmsBaseDeviceLedgers + from b in wcsAgvStatuses + where a.DeviceCode == b.RobotCode + select new + { + a.DeviceId, + b.Online, + b.Status + }; + foreach (var item in agvStatus) + { + var dmsBaseAlarmRule = StaticData.DmsBaseAlarmRuleList.Where(t => t.Status == item.Status).FirstOrDefault(); + if (dmsBaseAlarmRule != null) + { + DmsRecordAlarmTime alarmTime = new DmsRecordAlarmTime + { + AlarmBeginTime = DateTime.Now, + AlarmReason = dmsBaseAlarmRule.AlarmReason, + HandleSuggest = dmsBaseAlarmRule.HandleSuggest, + AlarmRuleId = dmsBaseAlarmRule.AlarmRuleId, + ContinueTime = dmsBaseAlarmRule.ContinueTime, + CreateBy = "WCS", + CreateTime = DateTime.Now, + DeviceId = item.DeviceId, + }; + var dmsRecordAlarmInfo = CoreMapper.Map(alarmTime); + dmsRecordAlarmInfo.AlarmStatus = "0"; + dmsRecordAlarmInfo.NoticeStatus = "0"; + dbContext.Add(dmsRecordAlarmInfo); + dbContext.SaveChanges(); + transaction.Commit(); + } + else + { + var alarmTime = dbContext.DmsRecordAlarmTime + .Where(t => t.CreateBy == "WCS") + .Where(t => t.DeviceId == item.DeviceId) + .FirstOrDefault(); + if (alarmTime != null) + { + dbContext.Remove(alarmTime); + dbContext.DmsRecordAlarmInfo + .Where(t => t.AlarmId == alarmTime.AlarmId) + .Update(t => new DmsRecordAlarmInfo + { + AlarmEndTime = DateTime.Now, + UpdateBy = "WCS", + UpdateTime = DateTime.Now + }); + dbContext.SaveChanges(); + transaction.Commit(); + } + } + } } catch { + try + { + transaction.Rollback(); + } + catch + { + } } Thread.Sleep(3000); } @@ -217,14 +282,58 @@ namespace Khd.Core.Wcs.Wcs /// private void PlcHearBeat220Logic() { + using var scope = host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray"); int errorCount = 0; while (true) { try { + if (errorCount > 20) + { + _logger.Error($"Plc220短线重连失败超过{errorCount}次"); + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 15).FirstOrDefault(); + if (dmsRecordAlarmTime == null) + { + var alarmTime = new DmsRecordAlarmTime + { + DeviceId = 15, + AlarmBeginTime = DateTime.Now, + AlarmReason = "Plc220短线重连失败", + HandleSuggest = "检查Plc220网络连接", + AlarmRuleId = 4, + ContinueTime = 10000, + CreateBy = "WCS", + CreateTime = DateTime.Now, + }; + var dmsRecordAlarmInfo = CoreMapper.Map(alarmTime); + dmsRecordAlarmInfo.AlarmStatus = "0"; + dmsRecordAlarmInfo.NoticeStatus = "0"; + dbContext.Add(dmsRecordAlarmInfo); + dbContext.SaveChanges(); + } + } StaticData.PlcDic[2].Read(HeartBeat30.plcpointAddress); - errorCount = 0; + if (errorCount > 0) + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 15).FirstOrDefault(); + if (dmsRecordAlarmTime != null) + { + dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime); + dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo + { + AlarmEndTime = DateTime.Now, + AlarmStatus = "1", + UpdateBy = "WCS", + UpdateTime = DateTime.Now + }); + dbContext.SaveChanges(); + errorCount = 0; + } + } } catch { @@ -248,6 +357,8 @@ namespace Khd.Core.Wcs.Wcs /// private void PlcHeartBeat30Logic() { + using var scope = host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "HeartBeat30"); bool heartBeatCount = false; int errorCount = 0; @@ -255,9 +366,51 @@ namespace Khd.Core.Wcs.Wcs { try { + if (errorCount > 20) + { + _logger.Error($"Plc30短线重连失败超过{errorCount}次"); + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 13).FirstOrDefault(); + if (dmsRecordAlarmTime == null) + { + var alarmTime = new DmsRecordAlarmTime + { + DeviceId = 13, + AlarmBeginTime = DateTime.Now, + AlarmReason = "Plc30短线重连失败", + HandleSuggest = "检查Plc30网络连接", + AlarmRuleId = 4, + ContinueTime = 10000, + CreateBy = "WCS", + CreateTime = DateTime.Now, + }; + var dmsRecordAlarmInfo = CoreMapper.Map(alarmTime); + dmsRecordAlarmInfo.AlarmStatus = "0"; + dmsRecordAlarmInfo.NoticeStatus = "0"; + dbContext.Add(dmsRecordAlarmInfo); + dbContext.SaveChanges(); + } + } heartBeatCount = !heartBeatCount; StaticData.PlcDic[0].WriteToPoint(HeartBeat30.plcpointAddress, heartBeatCount, HeartBeat30.plcpointLength?.ToString()); - errorCount = 0; + if (errorCount > 0) + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 13).FirstOrDefault(); + if (dmsRecordAlarmTime != null) + { + dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime); + dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo + { + AlarmEndTime = DateTime.Now, + AlarmStatus = "1", + UpdateBy = "WCS", + UpdateTime = DateTime.Now + }); + dbContext.SaveChanges(); + errorCount = 0; + } + } } catch { @@ -281,6 +434,8 @@ namespace Khd.Core.Wcs.Wcs /// private void PlcHeartBeat31Logic() { + using var scope = host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); BasePlcpoint HeartBeat31 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CTUHeart"); bool heartBeatCount = false; int errorCount = 0; @@ -288,9 +443,51 @@ namespace Khd.Core.Wcs.Wcs { try { + if (errorCount > 20) + { + _logger.Error($"Plc31短线重连失败超过{errorCount}次"); + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 14).FirstOrDefault(); + if (dmsRecordAlarmTime == null) + { + var alarmTime = new DmsRecordAlarmTime + { + DeviceId = 14, + AlarmBeginTime = DateTime.Now, + AlarmReason = "Plc31短线重连失败", + HandleSuggest = "检查Plc31网络连接", + AlarmRuleId = 4, + ContinueTime = 10000, + CreateBy = "WCS", + CreateTime = DateTime.Now, + }; + var dmsRecordAlarmInfo = CoreMapper.Map(alarmTime); + dmsRecordAlarmInfo.AlarmStatus = "0"; + dmsRecordAlarmInfo.NoticeStatus = "0"; + dbContext.Add(dmsRecordAlarmInfo); + dbContext.SaveChanges(); + } + } heartBeatCount = !heartBeatCount; StaticData.PlcDic[1].WriteToPoint(HeartBeat31.plcpointAddress, heartBeatCount, HeartBeat31.plcpointLength?.ToString()); - errorCount = 0; + if (errorCount > 0) + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 14).FirstOrDefault(); + if (dmsRecordAlarmTime != null) + { + dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime); + dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo + { + AlarmEndTime = DateTime.Now, + AlarmStatus = "1", + UpdateBy = "WCS", + UpdateTime = DateTime.Now + }); + dbContext.SaveChanges(); + errorCount = 0; + } + } } catch (Exception ex) { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index 7bee580..30b7c08 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Dto.webapi; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; @@ -10,7 +11,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index 82ba5d7..b22963a 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Dto.TaskType; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; using Khd.Core.Library.Mapper; @@ -8,7 +9,6 @@ using Masuit.Tools; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Z.EntityFramework.Plus; -using Khd.Core.Domain.Dto.TaskType; namespace Khd.Core.Wcs.Wcs { diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index 036e912..8df8d76 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -26,7 +26,6 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; -using System.Windows.Media.Media3D; using System.Windows.Threading; using Z.EntityFramework.Plus; @@ -288,7 +287,7 @@ namespace Khd.Core.Wpf.Form } } - + private void ReturnOrderTimer(object? obj) { using var scope = _host.Services.CreateScope(); @@ -418,7 +417,7 @@ namespace Khd.Core.Wpf.Form // Step 3: 计算每个申请单物料在各个托盘中的数量 var palletMaterialSummary = wmsRawStocks - .GroupBy(t => new { t.materialId, t.palletInfoCode,t.saleOrderId }) + .GroupBy(t => new { t.materialId, t.palletInfoCode, t.saleOrderId }) .Select(g => new { MaterialId = g.Key.materialId, @@ -452,7 +451,7 @@ namespace Khd.Core.Wpf.Form var orderNumber = from r in result from m in mesBaseMaterialInfos - where r.MaterialId== m.MaterialId + where r.MaterialId == m.MaterialId select new { materiaName = m.MaterialName, @@ -479,8 +478,8 @@ namespace Khd.Core.Wpf.Form // thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount) // }); //List endStationCodeOutRaw = wmsRawOutstocks.Where(t => t.endStationCode == baseEquip.endStationCode).ToList(); - - + + //List materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList(); //List mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList(); //var bill = endStationCodeOutRaw.GroupBy(t => new { t.materialId, t.materialBatch, t.saleOrderId }) @@ -507,7 +506,7 @@ namespace Khd.Core.Wpf.Form // thisOutAmount = b.thisOutAmount, // isSendOver = a.outstockAmount <= (a.realOutstockAmount + b.thisOutAmount) ? "已出完" : "未出完" // }; - + Dispatcher.Invoke(() => { this.OutTaskNumber.ItemsSource = orderNumber; @@ -2125,7 +2124,7 @@ namespace Khd.Core.Wpf.Form try { string containerCode = txtOutBox.Text; - + if (containerCode.Length < 15) return; if (!string.IsNullOrEmpty(containerCode)) @@ -2159,7 +2158,7 @@ namespace Khd.Core.Wpf.Form { try { - outMaterialNameTxt.Text =""; + outMaterialNameTxt.Text = ""; outMaterialSpecTxt.Text = ""; string barCode = txtOutBarCode.Text; string containerCode = txtOutBox.Text; @@ -2368,7 +2367,7 @@ namespace Khd.Core.Wpf.Form HandyControl.Controls.MessageBox.Info("请先扫描容器号和条码!"); } } - catch(Exception ex) + catch (Exception ex) { MessageBox.Show(ex.Message); } @@ -3224,7 +3223,7 @@ namespace Khd.Core.Wpf.Form { BasePlcpoint trayStatus = SystemData.BasePlcpoints.First(t => t.plcpointNo == "trayStatus"); var trayStatusValue = SystemData.PlcDic[0].Read(trayStatus.plcpointAddress); - if(trayStatusValue == null || Convert.ToInt32(trayStatusValue) == 0) + if (trayStatusValue == null || Convert.ToInt32(trayStatusValue) == 0) { HandyControl.Controls.MessageBox.Error("托盘库开启自动状态!"); return; @@ -4157,7 +4156,7 @@ namespace Khd.Core.Wpf.Form // 触发按钮的点击事件 OutRaw(); } - + } } } diff --git a/src/Khd.Core.Wpf/myConverter/TypeDataConverter.cs b/src/Khd.Core.Wpf/myConverter/TypeDataConverter.cs index 216b00f..59a989a 100644 --- a/src/Khd.Core.Wpf/myConverter/TypeDataConverter.cs +++ b/src/Khd.Core.Wpf/myConverter/TypeDataConverter.cs @@ -1,7 +1,6 @@ using Khd.Core.Domain.Dto.TaskType; using System; using System.Globalization; -using System.Linq; using System.Windows.Data; namespace Khd.Core.Wpf.myConverter