From 3392d61d2ba25d16ca0ddbb85d5358781db0aaeb Mon Sep 17 00:00:00 2001 From: "liulb@mesnac.com" Date: Tue, 26 Dec 2023 18:08:47 +0800 Subject: [PATCH] new --- .../Jobs/Job_BoxFoamLastData_Quartz.cs | 414 ++++++++++++++++++ .../ViewModels/MainWindowViewModel.cs | 25 +- Aucma.Core.BoxFoam/Views/MainWindow.xaml | 7 + Aucma.Core.BoxFoam/appsettings.json | 20 +- Aucma.Core.HwPLc/Model/PlcModel.cs | 8 + Aucma.Core.RunPlc/RunPlcService.cs | 22 +- 6 files changed, 474 insertions(+), 22 deletions(-) create mode 100644 Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs diff --git a/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs new file mode 100644 index 00000000..f339d20b --- /dev/null +++ b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs @@ -0,0 +1,414 @@ +using Admin.Core.IService.ISys; +using Admin.Core.IService; +using Quartz; +using System; +using System.Threading.Tasks; +using log4net; +using Admin.Core.Model; +using System.Linq; +using Admin.Core.Model.Model_New; +using Aucma.Core.HwPLc; + +/// +/// 箱体发泡 最后一枪数据采集 +/// +namespace Admin.Core.Tasks +{ + public class Job_BoxFoamLastData_Quartz : JobBase, IJob + { + public delegate Task RefreshBoxFoamDataDelegate(); + public static event RefreshBoxFoamDataDelegate RefreshBoxFoamDataDelegateEvent; + private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(Job_BoxFoamData_Quartz)); + private readonly IBoxFoamDataServices _boxFoamDataServices; + private readonly IOldBoxFoamDataServices _oldBoxFoamDataServices; + + public Job_BoxFoamLastData_Quartz(ISysTasksQzService SysTasksQzService, ISysJobLogService sysJobLogService, + IBoxFoamDataServices boxFoamDataServices, IOldBoxFoamDataServices oldBoxFoamDataServices) + { + _SysTasksQzService = SysTasksQzService; + _boxFoamDataServices = boxFoamDataServices; + _oldBoxFoamDataServices = oldBoxFoamDataServices; + } + + public async Task Execute(IJobExecutionContext context) + { + await ExecuteJob(context, async () => await Run(context)); + await ExecuteJob(context, async () => await BoxFoamDataRun(context)); + } + + public async Task Run(IJobExecutionContext context) + { + await SaveData(); + } + + public async Task BoxFoamDataRun(IJobExecutionContext context) + { + await SaveOldBoxFoamData(); + } + + #region PLC 任务处理表 + /// + /// PLC 任务处理表 + /// + /// 仓库编码 + /// 物料编码 + /// + public async Task SaveData() + { + //扫描入库信号,入库完成 + try + { + var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("Plc")); + if (obj.plc.IsConnected) + { + var taskList = await _boxFoamDataServices.QueryAsync(); + foreach (var item in taskList) + { + await UpdateRealData(obj, item); + } + } + } + catch (Exception ex) + { + logHelper.Error($"入库数据处理异常:{ex.Message}"); + } + } + + private async Task UpdateRealData(PlcModel obj, BoxFoamData item) + { + + try + { + #region 更新PLC数据 + if (item.ObjId == 1) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW122.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW122.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD146"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD294"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD310"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD578"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 2) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX12.0"); + if (obj.plc.ReadInt16("DB8.DBW124.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW124.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD150"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD318"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD334"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD582"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 3) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW126.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW126.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD154"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD342"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD358"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD586"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 4) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW128.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW128.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD158"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD366"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD382"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD590"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 5) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW130.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW130.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD162"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD390"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD406"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD594"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 6) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW122.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW122.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD166"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD414"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD430"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD598"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 7) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW134.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW134.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD170"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD438"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD454"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD602"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 8) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW136.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW136.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD174"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD462"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD478"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD606"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 9) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW138.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW138.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD178"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD486"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD502"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD610"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 10) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW140.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW140.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD182"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD510"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD526"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD614"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 11) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DDB8.DBW142.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW142.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD186"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD534"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD550"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD622"); + item.UpdateTime = DateTime.Now; + } + if (item.ObjId == 12) + { + item.BoxFixturetype = obj.plc.ReadString("DB8.DBX2.0"); + if (obj.plc.ReadInt16("DB8.DBW144.0") == 1) item.BoxFixturestatus = 1; + if (obj.plc.ReadInt16("DB8.DBW144.1") == 1) item.BoxFixturestatus = 0; + item.BoxFixtureproduction = obj.plc.ReadInt16("DB8.DBD190"); + item.BoxFixturesideplate = obj.plc.ReadString("DB8.DBD558"); + item.BoxClosebetatemperature = obj.plc.ReadString("DB8.DBD574"); + item.BoxBeat = obj.plc.ReadInt16("DB8.DBD626"); + item.UpdateTime = DateTime.Now; + } + #endregion + bool result = await _boxFoamDataServices.UpdateAsync(item); + if (result) + { + RefreshBoxFoamDataDelegateEvent?.Invoke(); + } + else + { + // LogDelegateEvent?.Invoke($"物料[{planInfo.MaterialName}], 入库[{baseSpace.SpaceName}]失败,任务回滚!"); + } + } + catch (Exception ex) + { + logHelper.Error($"更新箱体发泡数据失败"); + } + + return await Task.FromResult(item); + } + #endregion + + #region PLC 任务处理表 + /// + /// PLC 任务处理表 + /// + /// 仓库编码 + /// 物料编码 + /// + public async Task SaveOldBoxFoamData() + { + try + { + var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("发泡Plc")); + if (obj.plc.IsConnected) + { + var taskList = await _oldBoxFoamDataServices.QueryAsync(); + foreach (var item in taskList) + { + await UpdateRealBoxFoamData(obj, item); + } + } + } + catch (Exception ex) + { + logHelper.Error($"入库数据处理异常:{ex.Message}"); + } + } + + private async Task UpdateRealBoxFoamData(PlcModel obj, OldBoxFoamData item) + { + try + { + #region 更新PLC数据 + if (item.ObjId == 1) + { + item.Fixtureboxtype = obj.plc.ReadString("D3140")+ obj.plc.ReadString("D3141"); + if (obj.plc.ReadInt16("Y0F0") == 1) + { + item.Fixturestatus = "手动"; + } + if (obj.plc.ReadInt16("Y0F1") == 1) + { + item.Fixturestatus = "自动"; + } + if (obj.plc.ReadInt16("Y110") == 1) + { + item.Fixturestatus = "停止"; + } + + item.Production = obj.plc.ReadInt16("D182"); + item.CuringTimeSettingValue = obj.plc.ReadString("D911"); + item.ActualValue = obj.plc.ReadString("T3"); + item.UpdatedTime = DateTime.Now; + } + if (item.ObjId == 2) + { + item.Fixtureboxtype = obj.plc.ReadString("D3142") + obj.plc.ReadString("D3143"); + if (obj.plc.ReadInt16("Y0F5") == 1) + { + item.Fixturestatus = "手动"; + } + if (obj.plc.ReadInt16("Y0F6") == 1) + { + item.Fixturestatus = "自动"; + } + if (obj.plc.ReadInt16("Y111") == 1) + { + item.Fixturestatus = "停止"; + } + + item.Production = obj.plc.ReadInt16("D183"); + item.CuringTimeSettingValue = obj.plc.ReadString("D911"); + item.ActualValue = obj.plc.ReadString("T13"); + item.UpdatedTime = DateTime.Now; + } + if (item.ObjId == 3) + { + item.Fixtureboxtype = obj.plc.ReadString("D3144") + obj.plc.ReadString("D3145"); + if (obj.plc.ReadInt16("Y0FA") == 1) + { + item.Fixturestatus = "手动"; + } + if (obj.plc.ReadInt16("Y0FB") == 1) + { + item.Fixturestatus = "自动"; + } + if (obj.plc.ReadInt16("Y112") == 1) + { + item.Fixturestatus = "停止"; + } + + item.Production = obj.plc.ReadInt16("D183"); + item.CuringTimeSettingValue = obj.plc.ReadString("D912"); + item.ActualValue = obj.plc.ReadString("T23"); + item.UpdatedTime = DateTime.Now; + } + if (item.ObjId == 4) + { + item.Fixtureboxtype = obj.plc.ReadString("D3148") + obj.plc.ReadString("D3149"); + if (obj.plc.ReadInt16("Y100 ") == 1) + { + item.Fixturestatus = "手动"; + } + if (obj.plc.ReadInt16("Y101") == 1) + { + item.Fixturestatus = "自动"; + } + if (obj.plc.ReadInt16("Y113") == 1) + { + item.Fixturestatus = "停止"; + } + + item.Production = obj.plc.ReadInt16("D184"); + item.CuringTimeSettingValue = obj.plc.ReadString("D913"); + item.ActualValue = obj.plc.ReadString("T33"); + item.UpdatedTime = DateTime.Now; + } + if (item.ObjId == 5) + { + item.Fixtureboxtype = obj.plc.ReadString("D3150") + obj.plc.ReadString("D3151"); + if (obj.plc.ReadInt16("Y105") == 1) + { + item.Fixturestatus = "手动"; + } + if (obj.plc.ReadInt16("Y106") == 1) + { + item.Fixturestatus = "自动"; + } + if (obj.plc.ReadInt16("Y114") == 1) + { + item.Fixturestatus = "停止"; + } + + item.Production = obj.plc.ReadInt16("D185"); + item.CuringTimeSettingValue = obj.plc.ReadString("D914"); + item.ActualValue = obj.plc.ReadString("T43"); + item.UpdatedTime = DateTime.Now; + } + if (item.ObjId == 6) + { + item.Fixtureboxtype = obj.plc.ReadString("D3152") + obj.plc.ReadString("D3143"); + if (obj.plc.ReadInt16("Y10A") == 1) + { + item.Fixturestatus = "手动"; + } + if (obj.plc.ReadInt16("Y10B") == 1) + { + item.Fixturestatus = "自动"; + } + if (obj.plc.ReadInt16("Y115") == 1) + { + item.Fixturestatus = "停止"; + } + + item.Production = obj.plc.ReadInt16("D186"); + item.CuringTimeSettingValue = obj.plc.ReadString("D915"); + item.ActualValue = obj.plc.ReadString("T53"); + item.UpdatedTime = DateTime.Now; + } + + #endregion + bool result = await _oldBoxFoamDataServices.UpdateAsync(item); + if (result) + { + //RefreshBoxFoamDataDelegateEvent?.Invoke(); + } + else + { + // LogDelegateEvent?.Invoke($"物料[{planInfo.MaterialName}], 入库[{baseSpace.SpaceName}]失败,任务回滚!"); + } + } + catch (Exception ex) + { + logHelper.Error($"更新老箱体发泡数据失败"); + } + + return await Task.FromResult(item); + } + #endregion + } +} diff --git a/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs b/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs index 6be3f4a0..347ea329 100644 --- a/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs +++ b/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs @@ -18,9 +18,7 @@ namespace Aucma.Core.BoxFoam.ViewModels { private static readonly log4net.ILog log = LogManager.GetLogger(typeof(MainWindowViewModel)); private IndexPageView firstPage = new IndexPageView();//首页 - - //OldBoxFoamPageView oldBoxFoamPage= new OldBoxFoamPageView(); - //OldWarehousePageView oldWarehousePage = new OldWarehousePageView(); + public MainWindowViewModel() { UserContent = firstPage; @@ -74,7 +72,7 @@ namespace Aucma.Core.BoxFoam.ViewModels /// public void RefreshPlc() { - var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("泡前库Plc")); + var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("SiemensHfPlc2")); if (obj != null) { if (obj.plc.IsConnected) @@ -222,12 +220,6 @@ namespace Aucma.Core.BoxFoam.ViewModels FoamMachinesPageView foamMachinesPageView = new FoamMachinesPageView(); UserContent = foamMachinesPageView; break; - //case "OldBoxFoamPage": - // UserContent = oldBoxFoamPage; - // break; - //case "OldWarehousePage": - // UserContent = oldWarehousePage; - // break; default: break; } @@ -298,6 +290,15 @@ namespace Aucma.Core.BoxFoam.ViewModels set => SetProperty(ref _plcUIStatusWb, value); } /// + ///方诺 UI plc 展示状态-文字 + /// + public string _fnPlcUIStatusWb; + public string FnPlcUIStatusWb + { + get => _plcUIStatusWb; + set => SetProperty(ref _plcUIStatusWb, value); + } + /// /// UI plc 展示状态-颜色 /// public string _plcUIColor; @@ -326,13 +327,13 @@ namespace Aucma.Core.BoxFoam.ViewModels { if (type) { - PlcUIStatusWb = "PLC"; + PlcUIStatusWb = "泡前库PLC"; PlcUIColor = "Green"; PlcUIIcon = "Assets/Images/Green.png"; } else { - PlcUIStatusWb = "PLC"; + PlcUIStatusWb = "泡前库PLC"; PlcUIColor = "Red"; PlcUIIcon = "Assets/Images/Red.png"; } diff --git a/Aucma.Core.BoxFoam/Views/MainWindow.xaml b/Aucma.Core.BoxFoam/Views/MainWindow.xaml index 8f7d2a18..4f8c88a8 100644 --- a/Aucma.Core.BoxFoam/Views/MainWindow.xaml +++ b/Aucma.Core.BoxFoam/Views/MainWindow.xaml @@ -88,7 +88,14 @@ + + + + + + + diff --git a/Aucma.Core.BoxFoam/appsettings.json b/Aucma.Core.BoxFoam/appsettings.json index 41f5a0a1..427dab17 100644 --- a/Aucma.Core.BoxFoam/appsettings.json +++ b/Aucma.Core.BoxFoam/appsettings.json @@ -171,14 +171,24 @@ } }, "PLCServer": [ - + { "Id": 1, - "EquipName": "OldTypePlc4", - "IP": "10.10.93.154", - "Port": 5002 + "PLcType": "Siemens", + "Enabled": true, + "EquipName": "SiemensHfPlc", + "IP": "10.10.93.180", + "Port": 102 + }, + { + "Id": 2, + "PLcType": "Siemens", + "Enabled": false, + "EquipName": "SiemensFnPlc", + "IP": "10.10.93.180", + "Port": 102, + "Remark": "泡前库" } - ], "StoreInfo": { "ShellInventoryStoreCode": "XKJCK-001", diff --git a/Aucma.Core.HwPLc/Model/PlcModel.cs b/Aucma.Core.HwPLc/Model/PlcModel.cs index 780cce12..8260c045 100644 --- a/Aucma.Core.HwPLc/Model/PlcModel.cs +++ b/Aucma.Core.HwPLc/Model/PlcModel.cs @@ -23,6 +23,14 @@ namespace Aucma.Core.HwPLc /// public int Port { get; set; } /// + /// PLC类型 + /// + public string PlcType { get; set; } + /// + /// PLC是否启动 + /// + public bool Enabled { get; set; } + /// /// 是否连接 /// public bool IsConnect { get; set; } diff --git a/Aucma.Core.RunPlc/RunPlcService.cs b/Aucma.Core.RunPlc/RunPlcService.cs index 1b642520..15c57f6f 100644 --- a/Aucma.Core.RunPlc/RunPlcService.cs +++ b/Aucma.Core.RunPlc/RunPlcService.cs @@ -18,7 +18,7 @@ namespace Aucma.Core.RunPlc Task.Run(async () => { await StartMelsecMcPlcServer();//三菱PLC - //StartSiemensPlcServer();//西门子 + await StartSiemensPlcServer();//西门子 }); } #endregion @@ -28,11 +28,16 @@ namespace Aucma.Core.RunPlc #region 心跳 public Task StartPlcAsync() { - //timer.Elapsed += new System.Timers.ElapsedEventHandler(ExecSiemensHeartTask); timer.Elapsed += new System.Timers.ElapsedEventHandler(ExecMelsecMcHeartTask); //到达时间的时候执行事件; timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); timer.Enabled = true;//需要调用 timer.Start()或者timer.Enabled = true来启动它, timer.Start();//timer.Start()的内部原理还是设置timer.Enabled = true; + + timer.Elapsed += new System.Timers.ElapsedEventHandler(ExecSiemensHeartTask); + timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); + timer.Enabled = true;//需要调用 timer.Start()或者timer.Enabled = true来启动它, + timer.Start();//timer.Start()的内部原理还是设置timer.Enabled = true; + return Task.CompletedTask; } @@ -40,13 +45,14 @@ namespace Aucma.Core.RunPlc { // string ip = Appsettings.app("Middleware", "Scanner1", "Ip"); var allPlcServices = Appsettings.app("PLCServer").ToList(); - foreach (var item in allPlcServices) + foreach (var item in allPlcServices.Where(d=>d.PlcType.Equals("Melsec")&&d.Enabled==true)) { PlcModel model = new PlcModel(); model.Id = item.Id; model.EquipName = item.EquipName; model.IP = item.IP; model.Port = item.Port; + model.PlcType = item.PlcType; model.plc = new MelsecPlc(item.IP, item.Port); PlcHelper.melsecList.Add(model); } @@ -56,13 +62,14 @@ namespace Aucma.Core.RunPlc private static Task StartSiemensPlcServer() { var allPlcServices = Appsettings.app("PLCServer").ToList(); - foreach (var item in allPlcServices) + foreach (var item in allPlcServices.Where(d => d.PlcType.Equals("Siemens") && d.Enabled == true)) { PlcModel model = new PlcModel(); model.Id = item.Id; model.EquipName = item.EquipName; model.IP = item.IP; model.Port = item.Port; + model.PlcType = item.PlcType; model.plc = new SiemensPlc(item.IP, item.Port); PlcHelper.siemensList.Add(model); } @@ -74,6 +81,7 @@ namespace Aucma.Core.RunPlc private async void ExecMelsecMcHeartTask(object? sender, ElapsedEventArgs e) { int num = PlcHelper.melsecList.Count; + if (num == 0) return; for (int i = 1; i <= num; i++) { var item = PlcHelper.melsecList.Where(c => c.Id == i).FirstOrDefault(); @@ -109,8 +117,12 @@ namespace Aucma.Core.RunPlc } private async void ExecSiemensHeartTask(object? sender, ElapsedEventArgs e) { - foreach (var item in PlcHelper.siemensList) + int num = PlcHelper.melsecList.Count; + if (num == 0) return; + for (int i = 1; i <= num; i++) { + var item = PlcHelper.melsecList.Where(c => c.Id == i).FirstOrDefault(); + if (item == null) continue; if (await item.plc.Read("M100")) { item.IsConnect = true;