From 2687cf7ccefc4ef0943672124e439fab55c708c7 Mon Sep 17 00:00:00 2001 From: luosheng Date: Thu, 20 Apr 2023 13:29:08 +0800 Subject: [PATCH] Test fix and tcp connector disconnect bug fix --- Modbus.Net/Modbus.Net.sln | 2 +- .../Configuration/ConfigurationReader.cs | 6 +-- .../Modbus.Net/Configuration/MachineReader.cs | 20 ++++----- .../Modbus.Net/Connector/TcpConnector.cs | 4 +- .../Modbus.Net/Connector/UdpConnector.cs | 2 +- Samples/MachineJob/DatabaseWrite.cs | 5 ++- Tests/Modbus.Net.Tests/BaseTest.cs | 10 +++-- Tests/Modbus.Net.Tests/EndianTest.cs | 7 ++- Tests/Modbus.Net.Tests/MachineMethodTest.cs | 23 +++++----- .../Modbus.Net.Tests/Modbus.Net.Tests.csproj | 14 ++++++ .../ModbusMultiStationTest.cs | 6 ++- Tests/Modbus.Net.Tests/ModbusTest.cs | 10 +++-- Tests/Modbus.Net.Tests/SiemensTest.cs | 4 +- .../Modbus.Net.Tests/appsettings.default.json | 45 +++++++++++++++++++ Tests/Modbus.Net.Tests/appsettings.json | 3 ++ 15 files changed, 120 insertions(+), 41 deletions(-) create mode 100644 Tests/Modbus.Net.Tests/appsettings.default.json create mode 100644 Tests/Modbus.Net.Tests/appsettings.json diff --git a/Modbus.Net/Modbus.Net.sln b/Modbus.Net/Modbus.Net.sln index 0e88db8..ee00ca8 100644 --- a/Modbus.Net/Modbus.Net.sln +++ b/Modbus.Net/Modbus.Net.sln @@ -34,7 +34,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CrossLamp", "..\Samples\Cro EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TripleAdd", "..\Samples\TripleAdd\TripleAdd.csproj", "{414956B8-DBD4-414C-ABD3-565580739646}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.Modbus.SelfDefinedSample", "Modbus.Net.Modbus.SelfDefinedSample\Modbus.Net.Modbus.SelfDefinedSample.csproj", "{C4FA55AF-80ED-4467-948F-8EF865C8A5A5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.Modbus.SelfDefinedSample", "Modbus.Net.Modbus.SelfDefinedSample\Modbus.Net.Modbus.SelfDefinedSample.csproj", "{C4FA55AF-80ED-4467-948F-8EF865C8A5A5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Modbus.Net/Modbus.Net/Configuration/ConfigurationReader.cs b/Modbus.Net/Modbus.Net/Configuration/ConfigurationReader.cs index 8cb0500..224d586 100644 --- a/Modbus.Net/Modbus.Net/Configuration/ConfigurationReader.cs +++ b/Modbus.Net/Modbus.Net/Configuration/ConfigurationReader.cs @@ -12,9 +12,9 @@ namespace Modbus.Net { private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.default.json") - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) + .AddJsonFile("appsettings.default.json", optional: false, reloadOnChange: true) + .AddJsonFile("appsettings.json", optional:false, reloadOnChange: true) + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true, reloadOnChange: true) .Build(); #nullable enable diff --git a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs index 774ac53..9e0de8e 100644 --- a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs +++ b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs @@ -13,11 +13,11 @@ namespace Modbus.Net public class MachineReader { private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.default.json") - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.default.json", optional: false, reloadOnChange: true) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true, reloadOnChange: true) + .Build(); /// /// 读取设备列表 @@ -107,11 +107,11 @@ namespace Modbus.Net class AddressReader { private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.default.json") - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.default.json", optional: false, reloadOnChange: true) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true, reloadOnChange: true) + .Build(); public static IEnumerable> ReadAddresses(string addressMapName) { diff --git a/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs b/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs index 11fcd91..b3946b8 100644 --- a/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs @@ -44,7 +44,7 @@ namespace Modbus.Net } /// - public override string ConnectionToken => _host; + public override string ConnectionToken => _host + ":" + _port; /// protected override int TimeoutTime { get; set; } @@ -145,7 +145,7 @@ namespace Modbus.Net /// public override bool Disconnect() { - if (Channel.Open) + if (!(Channel?.Open == true)) return true; try diff --git a/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs b/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs index 50e3d7a..7a58059 100644 --- a/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs @@ -43,7 +43,7 @@ namespace Modbus.Net } /// - public override string ConnectionToken => _host; + public override string ConnectionToken => _host + ":" + _port; /// protected override int TimeoutTime { get; set; } diff --git a/Samples/MachineJob/DatabaseWrite.cs b/Samples/MachineJob/DatabaseWrite.cs index 821467d..e40fac3 100644 --- a/Samples/MachineJob/DatabaseWrite.cs +++ b/Samples/MachineJob/DatabaseWrite.cs @@ -8,8 +8,9 @@ namespace MachineJob { private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) + .AddJsonFile("appsettings.default.json", optional: false, reloadOnChange: true) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true, reloadOnChange: true) .Build(); private static readonly string connectionString = configuration.GetConnectionString("DatabaseWriteConnectionString")!; diff --git a/Tests/Modbus.Net.Tests/BaseTest.cs b/Tests/Modbus.Net.Tests/BaseTest.cs index 1853732..9331c3a 100644 --- a/Tests/Modbus.Net.Tests/BaseTest.cs +++ b/Tests/Modbus.Net.Tests/BaseTest.cs @@ -9,7 +9,9 @@ namespace Modbus.Net.Tests { private List>? _addressUnits; - private BaseMachine? _baseMachine2; + private BaseMachine? _baseMachine; + + private string _machineIp = "10.10.18.251"; [TestInitialize] public void Init() @@ -122,13 +124,13 @@ namespace Modbus.Net.Tests }, }; - _baseMachine2 = new SiemensMachine(2, SiemensType.Tcp, "192.168.3.10", SiemensMachineModel.S7_1200, _addressUnits, true, 2, 0) + _baseMachine = new SiemensMachine(2, SiemensType.Tcp, _machineIp, SiemensMachineModel.S7_1200, _addressUnits, true, 2, 0, 1, 0) { ProjectName = "Project 1", MachineName = "Test 2" }; - _baseMachine2.ConnectAsync().Wait(); + _baseMachine.ConnectAsync().Wait(); } [TestMethod] @@ -293,7 +295,7 @@ namespace Modbus.Net.Tests [TestCleanup] public void MachineClean() { - _baseMachine2?.Disconnect(); + _baseMachine?.Disconnect(); } } } diff --git a/Tests/Modbus.Net.Tests/EndianTest.cs b/Tests/Modbus.Net.Tests/EndianTest.cs index 705070e..280544f 100644 --- a/Tests/Modbus.Net.Tests/EndianTest.cs +++ b/Tests/Modbus.Net.Tests/EndianTest.cs @@ -10,12 +10,14 @@ namespace Modbus.Net.Tests private BaseMachine? _modbusTcpMachine2; + private string _machineIp = "10.10.18.251"; + [TestInitialize] public void Init() { - _modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, "127.0.0.1", null, true, 1, 0); + _modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, _machineIp, null, true, 1, 0, Endian.BigEndianLsb); - _modbusTcpMachine2 = new ModbusMachine("2", ModbusType.Tcp, "127.0.0.1", null, true, 1, 0, Endian.LittleEndianLsb); + _modbusTcpMachine2 = new ModbusMachine("2", ModbusType.Tcp, _machineIp, null, true, 1, 0, Endian.LittleEndianLsb); } [TestMethod] @@ -47,6 +49,7 @@ namespace Modbus.Net.Tests _modbusTcpMachine2!.GetAddresses = addresses; await _modbusTcpMachine.SetDatasAsync(MachineDataType.Address, dic1); var ans = await _modbusTcpMachine.GetDatasAsync(MachineDataType.Address); + _modbusTcpMachine.Disconnect(); var ans2 = await _modbusTcpMachine2.GetDatasAsync(MachineDataType.Address); Assert.AreEqual(ans.Datas["4X 1.0"].DeviceValue, dic1["4X 1"]); Assert.AreEqual(ans2.Datas["4X 1.0"].DeviceValue, (ushort)dic1["4X 1"] % 256 * 256 + (ushort)dic1["4X 1"] / 256); diff --git a/Tests/Modbus.Net.Tests/MachineMethodTest.cs b/Tests/Modbus.Net.Tests/MachineMethodTest.cs index 99a4064..e14ec82 100644 --- a/Tests/Modbus.Net.Tests/MachineMethodTest.cs +++ b/Tests/Modbus.Net.Tests/MachineMethodTest.cs @@ -7,32 +7,35 @@ namespace Modbus.Net.Tests [TestClass] public class MachineMethodTest { + private string _machineIp = "10.10.18.251"; + [TestMethod] public void GetUtility() { - BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, "192.168.3.12", null, true, 2, 0); + BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, null, true, 2, 0); var utility = baseMachine.GetUtilityMethods(); var methods = utility.GetType().GetRuntimeMethods(); - Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "GetDataAsync") != null, true); - Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "SetDataAsync") != null, true); + Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "GetDatasAsync") != null, true); + Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "SetDatasAsync") != null, true); baseMachine.Disconnect(); } [TestMethod] public async Task InvokeUtility() { - BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, "192.168.3.12", null, true, 2, 0); - var success = await baseMachine.BaseUtility.GetUtilityMethods().SetDatasAsync("4X 1", new object[] { (byte)11 }); - Assert.AreEqual(success, true); + BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, null, true, 2, 0); + await baseMachine.BaseUtility.ConnectAsync(); + var success = await baseMachine.BaseUtility.GetUtilityMethods().SetDatasAsync("4X 1", new object[] { (ushort)11 }); + Assert.AreEqual(success.IsSuccess, true); var datas = await baseMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("4X 1", 1); - Assert.AreEqual(datas.Datas[0], 11); + Assert.AreEqual(datas.Datas[1], 11); baseMachine.Disconnect(); } [TestMethod] public async Task InvokeMachine() { - BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, "192.168.3.10", new List> + BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, new List> { new AddressUnit { @@ -52,7 +55,7 @@ namespace Modbus.Net.Tests "0X 1.0", 1 } }); - Assert.AreEqual(success, true); + Assert.AreEqual(success.IsSuccess, true); var datas = await baseMachine.GetMachineMethods().GetDatasAsync(MachineDataType.Address); Assert.AreEqual(datas.Datas["0X 1.0"].DeviceValue, 1); success = await baseMachine.GetMachineMethods().SetDatasAsync( @@ -63,7 +66,7 @@ namespace Modbus.Net.Tests "0X 1.0", 0 } }); - Assert.AreEqual(success, true); + Assert.AreEqual(success.IsSuccess, true); baseMachine.Disconnect(); } } diff --git a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj index a10ac37..0fe727b 100644 --- a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj +++ b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj @@ -7,6 +7,20 @@ false + + + + + + + + PreserveNewest + + + PreserveNewest + + + diff --git a/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs b/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs index ac6beb2..3b4c598 100644 --- a/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs +++ b/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs @@ -10,11 +10,13 @@ namespace Modbus.Net.Tests private BaseMachine? _modbusRtuMachine2; + private string _machineCom = "COM1"; + [TestInitialize] public void Init() { - _modbusRtuMachine1 = new ModbusMachine("1", ModbusType.Rtu, "COM1", null, true, 1, 0); - _modbusRtuMachine2 = new ModbusMachine("2", ModbusType.Rtu, "COM1", null, true, 2, 0); + _modbusRtuMachine1 = new ModbusMachine("1", ModbusType.Rtu, _machineCom, null, true, 1, 0); + _modbusRtuMachine2 = new ModbusMachine("2", ModbusType.Rtu, _machineCom, null, true, 2, 0); } [TestMethod] diff --git a/Tests/Modbus.Net.Tests/ModbusTest.cs b/Tests/Modbus.Net.Tests/ModbusTest.cs index 5400323..cd7f2c5 100644 --- a/Tests/Modbus.Net.Tests/ModbusTest.cs +++ b/Tests/Modbus.Net.Tests/ModbusTest.cs @@ -12,14 +12,18 @@ namespace Modbus.Net.Tests private BaseMachine? _modbusAsciiMachine; + private string _machineIp = "10.10.18.251"; + + private string _machineCom = "COM1"; + [TestInitialize] public void Init() { - _modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, "192.168.3.10", null, true, 2, 0); + _modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, _machineIp, null, true, 2, 0); - _modbusRtuMachine = new ModbusMachine("2", ModbusType.Rtu, "COM5", null, true, 2, 0); + _modbusRtuMachine = new ModbusMachine("2", ModbusType.Rtu, _machineCom, null, true, 2, 0); - _modbusAsciiMachine = new ModbusMachine("3", ModbusType.Ascii, "COM5", null, true, 2, 0); + _modbusAsciiMachine = new ModbusMachine("3", ModbusType.Ascii, _machineCom, null, true, 2, 0); } [TestMethod] diff --git a/Tests/Modbus.Net.Tests/SiemensTest.cs b/Tests/Modbus.Net.Tests/SiemensTest.cs index 89d47ad..4f4e6e3 100644 --- a/Tests/Modbus.Net.Tests/SiemensTest.cs +++ b/Tests/Modbus.Net.Tests/SiemensTest.cs @@ -8,10 +8,12 @@ namespace Modbus.Net.Tests { private BaseMachine? _siemensTcpMachine; + private string _machineIp = "10.10.18.251"; + [TestInitialize] public void Init() { - _siemensTcpMachine = new SiemensMachine("1", SiemensType.Tcp, "192.168.3.10", SiemensMachineModel.S7_1200, null, true, 2, 0); + _siemensTcpMachine = new SiemensMachine("1", SiemensType.Tcp, _machineIp, SiemensMachineModel.S7_1200, null, true, 2, 0); } [TestMethod] diff --git a/Tests/Modbus.Net.Tests/appsettings.default.json b/Tests/Modbus.Net.Tests/appsettings.default.json new file mode 100644 index 0000000..4676716 --- /dev/null +++ b/Tests/Modbus.Net.Tests/appsettings.default.json @@ -0,0 +1,45 @@ +{ + "Modbus.Net": { + "TCP": { + "ConnectionTimeout": "5000", + "FetchSleepTime": "100", + "FullDuplex": "False", + "Modbus": { + "ModbusPort": "502", + "IP": "192.168.1.1" + }, + "Siemens": { + "SiemensPort": "102", + "IP": "192.168.1.1" + } + }, + "UDP": { + "ConnectionTimeout": "5000", + "FetchSleepTime": "100", + "FullDuplex": "False", + "Modbus": { + "ModbusPort": "502", + "IP": "192.168.1.1" + } + }, + "COM": { + "FetchSleepTime": "100", + "ConnectionTimeout": "5000", + "BaudRate": "BaudRate9600", + "Parity": "None", + "StopBits": "One", + "DataBits": "Eight", + "Handshake": "None", + "FullDuplex": "False", + "Modbus": { + "COM": "COM1" + }, + "Siemens": { + "COM": "COM2" + } + }, + "Controller": { + "WaitingListCount": "100" + } + } +} \ No newline at end of file diff --git a/Tests/Modbus.Net.Tests/appsettings.json b/Tests/Modbus.Net.Tests/appsettings.json new file mode 100644 index 0000000..29091fa --- /dev/null +++ b/Tests/Modbus.Net.Tests/appsettings.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file