From 54aa0c5c23635b3e935702d0cbe2b5f3fae09861 Mon Sep 17 00:00:00 2001 From: luosheng Date: Fri, 17 Feb 2023 15:46:20 +0800 Subject: [PATCH] Fix a Scheduler bug --- .../Modbus.Net/Job/MachineJobScheduler.cs | 2 +- Samples/MachineJob/MachineJob.csproj | 23 +--- Samples/MachineJob/Program.cs | 113 +--------------- .../MachineJob/Properties/launchSettings.json | 11 ++ Samples/MachineJob/Worker.cs | 123 ++++++++++++++++++ .../MachineJob/appsettings.Development.json | 8 ++ Samples/MachineJob/appsettings.json | 10 +- 7 files changed, 163 insertions(+), 127 deletions(-) create mode 100644 Samples/MachineJob/Properties/launchSettings.json create mode 100644 Samples/MachineJob/Worker.cs create mode 100644 Samples/MachineJob/appsettings.Development.json diff --git a/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs b/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs index a14ff59..a5cdd4a 100644 --- a/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs +++ b/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs @@ -63,7 +63,7 @@ namespace Modbus.Net return new MachineGetJobScheduler(scheduler, trigger); } - public static async void CancelJob(string triggerKey) + public static async Task CancelJob(string triggerKey) { IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler(); var jobKeys = await scheduler.GetJobKeys(GroupMatcher.GroupEquals("Modbus.Net.DataQuery.Group." + triggerKey)); diff --git a/Samples/MachineJob/MachineJob.csproj b/Samples/MachineJob/MachineJob.csproj index 4eecb07..cc582e0 100644 --- a/Samples/MachineJob/MachineJob.csproj +++ b/Samples/MachineJob/MachineJob.csproj @@ -1,27 +1,15 @@ - + - Exe net6.0 - enable enable + enable + dotnet-MachineJob-3eab04d6-e138-4509-8015-d9999d9b2a21 - - - - - - PreserveNewest - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + + @@ -29,5 +17,4 @@ - diff --git a/Samples/MachineJob/Program.cs b/Samples/MachineJob/Program.cs index e17230b..ce2bb8e 100644 --- a/Samples/MachineJob/Program.cs +++ b/Samples/MachineJob/Program.cs @@ -1,109 +1,10 @@ -// See https://aka.ms/new-console-template for more information -using MachineJob; -using Modbus.Net; -using Modbus.Net.Modbus; +using MachineJob.Service; -List _addresses = new List -{ - new AddressUnit() { Area = "4X", Address = 1, DataType = typeof(short), Id = "1", Name = "Test1" }, - new AddressUnit() { Area = "4X", Address = 2, DataType = typeof(short), Id = "2", Name = "Test2" }, - new AddressUnit() { Area = "4X", Address = 3, DataType = typeof(short), Id = "3", Name = "Test3" }, - new AddressUnit() { Area = "4X", Address = 4, DataType = typeof(short), Id = "4", Name = "Test4" }, - new AddressUnit() { Area = "4X", Address = 5, DataType = typeof(short), Id = "5", Name = "Test5" }, - new AddressUnit() { Area = "4X", Address = 6, DataType = typeof(short), Id = "6", Name = "Test6" }, - new AddressUnit() { Area = "4X", Address = 7, DataType = typeof(short), Id = "7", Name = "Test7" }, - new AddressUnit() { Area = "4X", Address = 8, DataType = typeof(short), Id = "8", Name = "Test8" }, - new AddressUnit() { Area = "4X", Address = 9, DataType = typeof(short), Id = "9", Name = "Test9" }, - new AddressUnit() { Area = "4X", Address = 10, DataType = typeof(short), Id = "10", Name = "Test10" } -}; - -IMachine machine = new ModbusMachine("ModbusMachine1", ModbusType.Tcp, "192.168.0.172", _addresses, true, 1, 2, Endian.BigEndianLsb); -IMachine machine2 = new ModbusMachine("ModbusMachine2", ModbusType.Tcp, "192.168.0.172:503", _addresses, true, 3, 2, Endian.BigEndianLsb); - -await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 5).Result.From(machine.Id, machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.To(machine2.Id + ".To", machine2).Result.Run(); -//await MachineJobSchedulerCreator.CreateScheduler("Trigger2", -1, 5).Result.Apply(machine2.Id + ".Apply", null, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery2", QueryConsole2).Result.To(machine2.Id + ".To2", machine2).Result.From(machine2.Id, machine2, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.Run(); - -Console.ReadLine(); - -Dictionary QueryConsole(DataReturnDef dataReturnDef) -{ - var values = dataReturnDef.ReturnValues; - foreach (var value in values) +IHost host = Host.CreateDefaultBuilder(args) + .ConfigureServices(services => { - Console.WriteLine(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue); - } - - try - { - using (var context = new DatabaseWriteContext()) - { - context.DatabaseWrites.Add(new DatabaseWriteEntity - { - Value1 = values["Test1"].DeviceValue, - Value2 = values["Test2"].DeviceValue, - Value3 = values["Test3"].DeviceValue, - Value4 = values["Test4"].DeviceValue, - Value5 = values["Test5"].DeviceValue, - Value6 = values["Test6"].DeviceValue, - Value7 = values["Test7"].DeviceValue, - Value8 = values["Test8"].DeviceValue, - Value9 = values["Test9"].DeviceValue, - Value10 = values["Test10"].DeviceValue, - UpdateTime = DateTime.Now, - }); - context.SaveChanges(); - } - } - catch - { - //ignore - } - - Random r = new Random(); - foreach (var value in values) - { - value.Value.DeviceValue = r.Next(65536) - 32768; - } - - return values.MapGetValuesToSetValues(); -} - -Dictionary QueryConsole2(DataReturnDef dataReturnDef) -{ - Random r = new Random(); - var datas = new Dictionary() - { - { - "Test1", r.Next(65536) - 32768 - }, - { - "Test2", r.Next(65536) - 32768 - }, - { - "Test3", r.Next(65536) - 32768 - }, - { - "Test4", r.Next(65536) - 32768 - }, - { - "Test5", r.Next(65536) - 32768 - }, - { - "Test6", r.Next(65536) - 32768 - }, - { - "Test7", r.Next(65536) - 32768 - }, - { - "Test8", r.Next(65536) - 32768 - }, - { - "Test9", r.Next(65536) - 32768 - }, - { - "Test10", r.Next(65536) - 32768 - } - }; - return datas; -} + services.AddHostedService(); + }) + .Build(); +await host.RunAsync(); diff --git a/Samples/MachineJob/Properties/launchSettings.json b/Samples/MachineJob/Properties/launchSettings.json new file mode 100644 index 0000000..ddbc5fc --- /dev/null +++ b/Samples/MachineJob/Properties/launchSettings.json @@ -0,0 +1,11 @@ +{ + "profiles": { + "MachineJob": { + "commandName": "Project", + "dotnetRunMessages": true, + "environmentVariables": { + "DOTNET_ENVIRONMENT": "Development" + } + } + } +} diff --git a/Samples/MachineJob/Worker.cs b/Samples/MachineJob/Worker.cs new file mode 100644 index 0000000..f9c1105 --- /dev/null +++ b/Samples/MachineJob/Worker.cs @@ -0,0 +1,123 @@ +using Modbus.Net; +using Modbus.Net.Modbus; + +namespace MachineJob.Service +{ + public class Worker : BackgroundService + { + private readonly ILogger _logger; + + public Worker(ILogger logger) + { + _logger = logger; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + List _addresses = new List + { + new AddressUnit() { Area = "4X", Address = 1, DataType = typeof(short), Id = "1", Name = "Test1" }, + new AddressUnit() { Area = "4X", Address = 2, DataType = typeof(short), Id = "2", Name = "Test2" }, + new AddressUnit() { Area = "4X", Address = 3, DataType = typeof(short), Id = "3", Name = "Test3" }, + new AddressUnit() { Area = "4X", Address = 4, DataType = typeof(short), Id = "4", Name = "Test4" }, + new AddressUnit() { Area = "4X", Address = 5, DataType = typeof(short), Id = "5", Name = "Test5" }, + new AddressUnit() { Area = "4X", Address = 6, DataType = typeof(short), Id = "6", Name = "Test6" }, + new AddressUnit() { Area = "4X", Address = 7, DataType = typeof(short), Id = "7", Name = "Test7" }, + new AddressUnit() { Area = "4X", Address = 8, DataType = typeof(short), Id = "8", Name = "Test8" }, + new AddressUnit() { Area = "4X", Address = 9, DataType = typeof(short), Id = "9", Name = "Test9" }, + new AddressUnit() { Area = "4X", Address = 10, DataType = typeof(short), Id = "10", Name = "Test10" } + }; + + IMachine machine = new ModbusMachine("ModbusMachine1", ModbusType.Tcp, "192.168.0.161", _addresses, true, 1, 2, Endian.BigEndianLsb); + //IMachine machine2 = new ModbusMachine("ModbusMachine2", ModbusType.Tcp, "192.168.0.172", _addresses, true, 3, 2, Endian.BigEndianLsb); + + await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 5).Result.From(machine.Id, machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Run(); + //await MachineJobSchedulerCreator.CreateScheduler("Trigger2", -1, 5).Result.Apply(machine2.Id + ".Apply", null, MachineDataType.Name).Result.Query(machine2.Id + ".ConsoleQuery", QueryConsole2).Result.To(machine2.Id + ".To2", machine2).Result.From(machine2.Id, machine2, MachineDataType.Name).Result.Query(machine2.Id + ".ConsoleQuery2", QueryConsole).Result.Run(); + + Console.ReadLine(); + } + + private Dictionary QueryConsole(DataReturnDef dataReturnDef) + { + var values = dataReturnDef.ReturnValues; + foreach (var value in values) + { + Console.WriteLine(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue); + } + + try + { + using (var context = new DatabaseWriteContext()) + { + context.DatabaseWrites.Add(new DatabaseWriteEntity + { + Value1 = values["Test1"].DeviceValue, + Value2 = values["Test2"].DeviceValue, + Value3 = values["Test3"].DeviceValue, + Value4 = values["Test4"].DeviceValue, + Value5 = values["Test5"].DeviceValue, + Value6 = values["Test6"].DeviceValue, + Value7 = values["Test7"].DeviceValue, + Value8 = values["Test8"].DeviceValue, + Value9 = values["Test9"].DeviceValue, + Value10 = values["Test10"].DeviceValue, + UpdateTime = DateTime.Now, + }); + context.SaveChanges(); + } + } + catch + { + //ignore + } + + Random r = new Random(); + foreach (var value in values) + { + value.Value.DeviceValue = r.Next(65536) - 32768; + } + + return values.MapGetValuesToSetValues(); + } + + private Dictionary QueryConsole2(DataReturnDef dataReturnDef) + { + Random r = new Random(); + var datas = new Dictionary() + { + { + "Test1", r.Next(65536) - 32768 + }, + { + "Test2", r.Next(65536) - 32768 + }, + { + "Test3", r.Next(65536) - 32768 + }, + { + "Test4", r.Next(65536) - 32768 + }, + { + "Test5", r.Next(65536) - 32768 + }, + { + "Test6", r.Next(65536) - 32768 + }, + { + "Test7", r.Next(65536) - 32768 + }, + { + "Test8", r.Next(65536) - 32768 + }, + { + "Test9", r.Next(65536) - 32768 + }, + { + "Test10", r.Next(65536) - 32768 + } + }; + return datas; + } + + } +} \ No newline at end of file diff --git a/Samples/MachineJob/appsettings.Development.json b/Samples/MachineJob/appsettings.Development.json new file mode 100644 index 0000000..b2dcdb6 --- /dev/null +++ b/Samples/MachineJob/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/Samples/MachineJob/appsettings.json b/Samples/MachineJob/appsettings.json index b32f62f..3cacfdd 100644 --- a/Samples/MachineJob/appsettings.json +++ b/Samples/MachineJob/appsettings.json @@ -1,8 +1,14 @@ -{ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, "ConnectionStrings": { "DatabaseWriteConnectionString": "Server=localhost; User ID=root; Password=123456; Database=modbusnettest;" }, "Config": { "FetchSleepTime": "100" } -} \ No newline at end of file +}