Test fix and tcp connector disconnect bug fix

This commit is contained in:
luosheng
2023-04-20 13:29:08 +08:00
parent b0998f6fb0
commit 2687cf7cce
15 changed files with 120 additions and 41 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -14,9 +14,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();
/// <summary>
@@ -108,9 +108,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();
public static IEnumerable<AddressUnit<string>> ReadAddresses(string addressMapName)

View File

@@ -44,7 +44,7 @@ namespace Modbus.Net
}
/// <inheritdoc />
public override string ConnectionToken => _host;
public override string ConnectionToken => _host + ":" + _port;
/// <inheritdoc />
protected override int TimeoutTime { get; set; }
@@ -145,7 +145,7 @@ namespace Modbus.Net
/// <inheritdoc />
public override bool Disconnect()
{
if (Channel.Open)
if (!(Channel?.Open == true))
return true;
try

View File

@@ -43,7 +43,7 @@ namespace Modbus.Net
}
/// <inheritdoc />
public override string ConnectionToken => _host;
public override string ConnectionToken => _host + ":" + _port;
/// <inheritdoc />
protected override int TimeoutTime { get; set; }

View File

@@ -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")!;

View File

@@ -9,7 +9,9 @@ namespace Modbus.Net.Tests
{
private List<AddressUnit<int>>? _addressUnits;
private BaseMachine<int, int>? _baseMachine2;
private BaseMachine<int, int>? _baseMachine;
private string _machineIp = "10.10.18.251";
[TestInitialize]
public void Init()
@@ -122,13 +124,13 @@ namespace Modbus.Net.Tests
},
};
_baseMachine2 = new SiemensMachine<int, int>(2, SiemensType.Tcp, "192.168.3.10", SiemensMachineModel.S7_1200, _addressUnits, true, 2, 0)
_baseMachine = new SiemensMachine<int, int>(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();
}
}
}

View File

@@ -10,12 +10,14 @@ namespace Modbus.Net.Tests
private BaseMachine<string, string>? _modbusTcpMachine2;
private string _machineIp = "10.10.18.251";
[TestInitialize]
public void Init()
{
_modbusTcpMachine = new ModbusMachine<string, string>("1", ModbusType.Tcp, "127.0.0.1", null, true, 1, 0);
_modbusTcpMachine = new ModbusMachine<string, string>("1", ModbusType.Tcp, _machineIp, null, true, 1, 0, Endian.BigEndianLsb);
_modbusTcpMachine2 = new ModbusMachine<string, string>("2", ModbusType.Tcp, "127.0.0.1", null, true, 1, 0, Endian.LittleEndianLsb);
_modbusTcpMachine2 = new ModbusMachine<string, string>("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);

View File

@@ -7,32 +7,35 @@ namespace Modbus.Net.Tests
[TestClass]
public class MachineMethodTest
{
private string _machineIp = "10.10.18.251";
[TestMethod]
public void GetUtility()
{
BaseMachine<int, int> baseMachine = new ModbusMachine<int, int>(1, ModbusType.Tcp, "192.168.3.12", null, true, 2, 0);
BaseMachine<int, int> baseMachine = new ModbusMachine<int, int>(1, ModbusType.Tcp, _machineIp, null, true, 2, 0);
var utility = baseMachine.GetUtilityMethods<IUtilityMethodDatas>();
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<int, int> baseMachine = new ModbusMachine<int, int>(1, ModbusType.Tcp, "192.168.3.12", null, true, 2, 0);
var success = await baseMachine.BaseUtility.GetUtilityMethods<IUtilityMethodDatas>().SetDatasAsync("4X 1", new object[] { (byte)11 });
Assert.AreEqual(success, true);
BaseMachine<int, int> baseMachine = new ModbusMachine<int, int>(1, ModbusType.Tcp, _machineIp, null, true, 2, 0);
await baseMachine.BaseUtility.ConnectAsync();
var success = await baseMachine.BaseUtility.GetUtilityMethods<IUtilityMethodDatas>().SetDatasAsync("4X 1", new object[] { (ushort)11 });
Assert.AreEqual(success.IsSuccess, true);
var datas = await baseMachine.BaseUtility.GetUtilityMethods<IUtilityMethodDatas>().GetDatasAsync("4X 1", 1);
Assert.AreEqual(datas.Datas[0], 11);
Assert.AreEqual(datas.Datas[1], 11);
baseMachine.Disconnect();
}
[TestMethod]
public async Task InvokeMachine()
{
BaseMachine<int, int> baseMachine = new ModbusMachine<int, int>(1, ModbusType.Tcp, "192.168.3.10", new List<AddressUnit<int>>
BaseMachine<int, int> baseMachine = new ModbusMachine<int, int>(1, ModbusType.Tcp, _machineIp, new List<AddressUnit<int>>
{
new AddressUnit<int>
{
@@ -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<IMachineMethodDatas>().GetDatasAsync(MachineDataType.Address);
Assert.AreEqual(datas.Datas["0X 1.0"].DeviceValue, 1);
success = await baseMachine.GetMachineMethods<IMachineMethodDatas>().SetDatasAsync(
@@ -63,7 +66,7 @@ namespace Modbus.Net.Tests
"0X 1.0", 0
}
});
Assert.AreEqual(success, true);
Assert.AreEqual(success.IsSuccess, true);
baseMachine.Disconnect();
}
}

View File

@@ -7,6 +7,20 @@
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<None Remove="appsettings.default.json" />
<None Remove="appsettings.json" />
</ItemGroup>
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="appsettings.default.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.10" />

View File

@@ -10,11 +10,13 @@ namespace Modbus.Net.Tests
private BaseMachine<string, string>? _modbusRtuMachine2;
private string _machineCom = "COM1";
[TestInitialize]
public void Init()
{
_modbusRtuMachine1 = new ModbusMachine<string, string>("1", ModbusType.Rtu, "COM1", null, true, 1, 0);
_modbusRtuMachine2 = new ModbusMachine<string, string>("2", ModbusType.Rtu, "COM1", null, true, 2, 0);
_modbusRtuMachine1 = new ModbusMachine<string, string>("1", ModbusType.Rtu, _machineCom, null, true, 1, 0);
_modbusRtuMachine2 = new ModbusMachine<string, string>("2", ModbusType.Rtu, _machineCom, null, true, 2, 0);
}
[TestMethod]

View File

@@ -12,14 +12,18 @@ namespace Modbus.Net.Tests
private BaseMachine<string, string>? _modbusAsciiMachine;
private string _machineIp = "10.10.18.251";
private string _machineCom = "COM1";
[TestInitialize]
public void Init()
{
_modbusTcpMachine = new ModbusMachine<string, string>("1", ModbusType.Tcp, "192.168.3.10", null, true, 2, 0);
_modbusTcpMachine = new ModbusMachine<string, string>("1", ModbusType.Tcp, _machineIp, null, true, 2, 0);
_modbusRtuMachine = new ModbusMachine<string, string>("2", ModbusType.Rtu, "COM5", null, true, 2, 0);
_modbusRtuMachine = new ModbusMachine<string, string>("2", ModbusType.Rtu, _machineCom, null, true, 2, 0);
_modbusAsciiMachine = new ModbusMachine<string, string>("3", ModbusType.Ascii, "COM5", null, true, 2, 0);
_modbusAsciiMachine = new ModbusMachine<string, string>("3", ModbusType.Ascii, _machineCom, null, true, 2, 0);
}
[TestMethod]

View File

@@ -8,10 +8,12 @@ namespace Modbus.Net.Tests
{
private BaseMachine<string, string>? _siemensTcpMachine;
private string _machineIp = "10.10.18.251";
[TestInitialize]
public void Init()
{
_siemensTcpMachine = new SiemensMachine<string, string>("1", SiemensType.Tcp, "192.168.3.10", SiemensMachineModel.S7_1200, null, true, 2, 0);
_siemensTcpMachine = new SiemensMachine<string, string>("1", SiemensType.Tcp, _machineIp, SiemensMachineModel.S7_1200, null, true, 2, 0);
}
[TestMethod]

View File

@@ -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"
}
}
}

View File

@@ -0,0 +1,3 @@
{
}