diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs index fe3ecbb..8f7340e 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusAsciiInTcpProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusAsciiInTcpProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["IP"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("TCP:Modbus", "IP"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs index 60f6956..5491411 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs @@ -10,18 +10,12 @@ namespace Modbus.Net.Modbus /// public class ModbusAsciiInTcpProtocolLinker : TcpProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// IP地址 public ModbusAsciiInTcpProtocolLinker(string ip) - : base(ip, int.Parse(configuration.GetSection("Modbus.Net")["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(ConfigurationReader.GetValueDirect("TCP:" + ip, "ModbusPort") ?? ConfigurationReader.GetValueDirect("TCP:Modbus", "ModbusPort"))) { } @@ -33,7 +27,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiInTcpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "100"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs index 6c17258..3fbeb09 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusAsciiInUdpProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusAsciiInUdpProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["IP"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("UDP:Modbus","IP"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs index fa79aeb..587b237 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs @@ -10,18 +10,12 @@ namespace Modbus.Net.Modbus /// public class ModbusAsciiInUdpProtocolLinker : UdpProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// IP地址 public ModbusAsciiInUdpProtocolLinker(string ip) - : base(ip, int.Parse(configuration.GetSection("Modbus.Net")["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(ConfigurationReader.GetValueDirect("UDP:" + ip, "ModbusPort") ?? ConfigurationReader.GetValueDirect("UDP:Modbus", "ModbusPort"))) { } @@ -33,7 +27,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiInUdpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs index 04b0d3d..b32a93e 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusAsciiProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusAsciiProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["COM"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("COM:Modbus", "COM"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs index febb4ab..d4343bb 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs @@ -12,12 +12,6 @@ namespace Modbus.Net.Modbus /// public class ModbusAsciiProtocolLinker : ComProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// @@ -26,7 +20,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiProtocolLinker(string com, int slaveAddress) : base(com, slaveAddress) { - ((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<(int, int)>[] { new List<(int, int)> { (1, 1), (2, 2) }, new List<(int, int)> { (3, 3), (4, 4) } }, int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<(int, int)>[] { new List<(int, int)> { (1, 1), (2, 2) }, new List<(int, int)> { (3, 3), (4, 4) } }, int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs index 29793f7..ce6fb08 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusRtuInTcpProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusRtuInTcpProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["IP"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("TCP:Modbus", "IP"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs index 605db87..64bb229 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs @@ -9,18 +9,12 @@ namespace Modbus.Net.Modbus /// public class ModbusRtuInTcpProtocolLinker : TcpProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// IP地址 public ModbusRtuInTcpProtocolLinker(string ip) - : base(ip, int.Parse(configuration.GetSection("Modbus.Net")["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(ConfigurationReader.GetValueDirect("TCP:" + ip, "ModbusPort") ?? ConfigurationReader.GetValueDirect("TCP:Modbus", "ModbusPort"))) { } @@ -32,7 +26,7 @@ namespace Modbus.Net.Modbus public ModbusRtuInTcpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs index de076e9..fc68dd0 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusRtuInUdpProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusRtuInUdpProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["IP"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("UDP:Modbus", "IP"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs index f1a26f0..53d633e 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs @@ -9,18 +9,12 @@ namespace Modbus.Net.Modbus /// public class ModbusRtuInUdpProtocolLinker : UdpProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// IP地址 public ModbusRtuInUdpProtocolLinker(string ip) - : base(ip, int.Parse(configuration.GetSection("Modbus.Net")["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(ConfigurationReader.GetValueDirect("UDP:" + ip, "ModbusPort") ?? ConfigurationReader.GetValueDirect("UDP:Modbus", "ModbusPort"))) { } @@ -32,7 +26,7 @@ namespace Modbus.Net.Modbus public ModbusRtuInUdpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs index 9a0221c..913a90a 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusRtuProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - - /// + /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusRtuProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["COM"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("COM:Modbus", "COM"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs index 0ecace2..9476653 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs @@ -11,12 +11,6 @@ namespace Modbus.Net.Modbus /// public class ModbusRtuProtocolLinker : ComProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// @@ -25,7 +19,7 @@ namespace Modbus.Net.Modbus public ModbusRtuProtocolLinker(string com, int slaveAddress) : base(com, slaveAddress) { - ((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<(int, int)>[] { new List<(int, int)> { (0, 0) }, new List<(int, int)> { (1, 1) } }, int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<(int, int)>[] { new List<(int, int)> { (0, 0) }, new List<(int, int)> { (1, 1) } }, int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs index 9dce3ff..f01d360 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusTcpProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusTcpProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["IP"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("TCP:Modbus", "IP"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs index 47a9cff..45a5781 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs @@ -10,18 +10,12 @@ namespace Modbus.Net.Modbus /// public class ModbusTcpProtocolLinker : TcpProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// IP地址 public ModbusTcpProtocolLinker(string ip) - : this(ip, int.Parse(configuration.GetSection("Modbus.Net")["ModbusPort"] ?? "502")) + : this(ip, int.Parse(ConfigurationReader.GetValueDirect("TCP:" + ip, "ModbusPort") ?? ConfigurationReader.GetValueDirect("TCP:Modbus", "ModbusPort"))) { } @@ -32,7 +26,7 @@ namespace Modbus.Net.Modbus /// 端口 public ModbusTcpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"), true, DuplicateWithCount.GetDuplcateFunc(new List { 4, 5 }, 6))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs index 9b73606..c529858 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs @@ -9,19 +9,13 @@ namespace Modbus.Net.Modbus /// public class ModbusUdpProtocol : ModbusProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// 从站号 /// 主站号 public ModbusUdpProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["IP"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("UDP:Modbus", "IP"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs index 4169375..731e04e 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs @@ -10,18 +10,12 @@ namespace Modbus.Net.Modbus /// public class ModbusUdpProtocolLinker : UdpProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// IP地址 public ModbusUdpProtocolLinker(string ip) - : this(ip, int.Parse(configuration.GetSection("Modbus.Net")["ModbusPort"] ?? "502")) + : this(ip, int.Parse(ConfigurationReader.GetValue("UDP:" + ip, "ModbusPort"))) { } @@ -32,7 +26,7 @@ namespace Modbus.Net.Modbus /// 端口 public ModbusUdpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"), true, DuplicateWithCount.GetDuplcateFunc(new List { 4, 5 }, 6))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs index 0b57273..e6e7dae 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs @@ -11,12 +11,6 @@ namespace Modbus.Net.Siemens /// public class SiemensPpiProtocol : SiemensProtocol { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - private readonly string _com; private readonly AsyncLock _lock = new AsyncLock(); @@ -26,7 +20,7 @@ namespace Modbus.Net.Siemens /// 从站号 /// 主站号 public SiemensPpiProtocol(byte slaveAddress, byte masterAddress) - : this(configuration.GetSection("Modbus.Net")["COM"], slaveAddress, masterAddress) + : this(ConfigurationReader.GetValueDirect("COM:Siemens", "COM"), slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs index 6ba290c..d482f48 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs @@ -13,12 +13,6 @@ namespace Modbus.Net.Siemens /// public class SiemensPpiProtocolLinker : ComProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// @@ -27,7 +21,7 @@ namespace Modbus.Net.Siemens public SiemensPpiProtocolLinker(string com, int slaveAddress) : base(com, slaveAddress) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"), true, null, 100)); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")), waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs index a9be024..c9891fc 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs @@ -22,12 +22,6 @@ namespace Modbus.Net.Siemens private int _connectTryCount; private readonly AsyncLock _lock = new AsyncLock(); - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// @@ -39,7 +33,7 @@ namespace Modbus.Net.Siemens /// public SiemensTcpProtocol(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled, ushort maxPdu) - : this(tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, configuration.GetSection("Modbus.Net")["IP"]) + : this(tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, ConfigurationReader.GetValueDirect("TCP:Siemens", "IP")) { } @@ -57,7 +51,7 @@ namespace Modbus.Net.Siemens ushort maxPdu, string ip) : this( tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, ip, - int.Parse(configuration.GetSection("Modbus.Net")["SiemensPort"] ?? "102")) + int.Parse(ConfigurationReader.GetValueDirect("TCP:Siemens", "SiemensPort"))) { } diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs index 3d43c25..bdb88fc 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs @@ -10,18 +10,12 @@ namespace Modbus.Net.Siemens /// public class SiemensTcpProtocolLinker : TcpProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - /// /// 构造函数 /// /// IP地址 public SiemensTcpProtocolLinker(string ip) - : this(ip, int.Parse(configuration.GetSection("Modbus.Net")["SiemensPort"] ?? "102")) + : this(ip, int.Parse(ConfigurationReader.GetValueDirect("TCP:" + ip, "Siemens") ?? ConfigurationReader.GetValueDirect("TCP:Siemens", "SiemensPort"))) { } @@ -33,7 +27,7 @@ namespace Modbus.Net.Siemens public SiemensTcpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new MatchDirectlySendController(new ICollection<(int, int)>[] { new List<(int, int)> { (11, 11), (12, 12) } }, DuplicateWithCount.GetDuplcateFunc(new List { 2, 3 }, 0), 100)); + ((BaseConnector)BaseConnector).AddController(new MatchDirectlySendController(new ICollection<(int, int)>[] { new List<(int, int)> { (11, 11), (12, 12) } }, DuplicateWithCount.GetDuplcateFunc(new List { 2, 3 }, 0), waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) : null)); } /// diff --git a/Modbus.Net/Modbus.Net.sln b/Modbus.Net/Modbus.Net.sln index f9f7438..b1e9fb1 100644 --- a/Modbus.Net/Modbus.Net.sln +++ b/Modbus.Net/Modbus.Net.sln @@ -24,17 +24,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MachineJob", "..\Samples\Ma EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.Modbus.NA200H", "Modbus.Net.Modbus.NA200H\Modbus.Net.Modbus.NA200H.csproj", "{D4AF0E1E-676E-43B6-BAA3-BFC329D68C80}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.PersistedTests", "..\Tests\Modbus.Net.PersistedTests\Modbus.Net.PersistedTests.csproj", "{4B946C56-D09F-4EEB-BE88-4A2C97815A77}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AnyType", "..\Samples\AnyType\AnyType.csproj", "{1857DA63-3335-428F-84D8-1FA4F8178643}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.OPC", "Modbus.Net.OPC\Modbus.Net.OPC.csproj", "{C854A379-C5EA-4CAC-9C5F-7291372D1D3F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "h-opc", "..\Libraries\h-opc\h-opc.csproj", "{347D0027-45F6-48C9-A917-1B1DF6C66DC5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "h-opc", "..\Libraries\h-opc\h-opc.csproj", "{347D0027-45F6-48C9-A917-1B1DF6C66DC5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrossLamp", "..\Samples\CrossLamp\CrossLamp.csproj", "{AA3A42D2-0502-41D3-929A-BAB729DF07D6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CrossLamp", "..\Samples\CrossLamp\CrossLamp.csproj", "{AA3A42D2-0502-41D3-929A-BAB729DF07D6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TripleAdd", "..\Samples\TripleAdd\TripleAdd.csproj", "{414956B8-DBD4-414C-ABD3-565580739646}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TripleAdd", "..\Samples\TripleAdd\TripleAdd.csproj", "{414956B8-DBD4-414C-ABD3-565580739646}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -66,10 +64,6 @@ Global {D4AF0E1E-676E-43B6-BAA3-BFC329D68C80}.Debug|Any CPU.Build.0 = Debug|Any CPU {D4AF0E1E-676E-43B6-BAA3-BFC329D68C80}.Release|Any CPU.ActiveCfg = Release|Any CPU {D4AF0E1E-676E-43B6-BAA3-BFC329D68C80}.Release|Any CPU.Build.0 = Release|Any CPU - {4B946C56-D09F-4EEB-BE88-4A2C97815A77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4B946C56-D09F-4EEB-BE88-4A2C97815A77}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4B946C56-D09F-4EEB-BE88-4A2C97815A77}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4B946C56-D09F-4EEB-BE88-4A2C97815A77}.Release|Any CPU.Build.0 = Release|Any CPU {1857DA63-3335-428F-84D8-1FA4F8178643}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1857DA63-3335-428F-84D8-1FA4F8178643}.Debug|Any CPU.Build.0 = Debug|Any CPU {1857DA63-3335-428F-84D8-1FA4F8178643}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -97,7 +91,6 @@ Global GlobalSection(NestedProjects) = preSolution {3BB01E98-3D45-454A-A1BD-49D7B2C83B74} = {D8DD32FC-CF39-4A1A-8FBF-9E82C5278C34} {22A35CA8-CDCF-416D-BA84-08C933B4A3DE} = {3597B5C5-45B9-4ECB-92A3-D0FFBE47920A} - {4B946C56-D09F-4EEB-BE88-4A2C97815A77} = {D8DD32FC-CF39-4A1A-8FBF-9E82C5278C34} {1857DA63-3335-428F-84D8-1FA4F8178643} = {3597B5C5-45B9-4ECB-92A3-D0FFBE47920A} {AA3A42D2-0502-41D3-929A-BAB729DF07D6} = {3597B5C5-45B9-4ECB-92A3-D0FFBE47920A} {414956B8-DBD4-414C-ABD3-565580739646} = {3597B5C5-45B9-4ECB-92A3-D0FFBE47920A} diff --git a/Modbus.Net/Modbus.Net/Configuration/ConfigurationReader.cs b/Modbus.Net/Modbus.Net/Configuration/ConfigurationReader.cs new file mode 100644 index 0000000..72f79f3 --- /dev/null +++ b/Modbus.Net/Modbus.Net/Configuration/ConfigurationReader.cs @@ -0,0 +1,68 @@ +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Modbus.Net +{ + /// + /// Modbus.Net专用配置读取类 + /// + public static class ConfigurationReader + { + private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.default.json") + .AddJsonFile("appsettings.json") + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) + .Build(); + +#nullable enable + /// + /// 根据路径,依次查找路径与父路径上是否有该元素 + /// + /// 路径,冒号隔开 + /// 元素的键 + /// 元素的值 + public static string? GetValue(string path, string key) + { + var split = path.Split(":"); + string? ans = null; + while (split.Length > 0) + { + var root = configuration.GetSection("Modbus.Net"); + foreach (var entry in split) + { + root = root?.GetSection(entry); + } + ans = ans ?? root?[key]; + split = split.Take(split.Length - 1).ToArray(); + } + return ans; + } + + /// + /// 根据路径,直接查找路径上是否有该元素 + /// + /// 路径,冒号隔开 + /// 元素的键 + /// 元素的值 + public static string? GetValueDirect(string path, string key) + { + var root = configuration.GetSection("Modbus.Net"); + var firstColon = path.IndexOf(":"); + while (firstColon != -1) + { + root = root?.GetSection(path.Substring(0,firstColon)); + path = path.Substring(firstColon + 1); + firstColon = path.IndexOf(":"); + } + root = root?.GetSection(path); + return root?[key]; + } +#nullable disable + } +} diff --git a/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs b/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs index c0f3052..422ca34 100644 --- a/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs @@ -33,6 +33,7 @@ namespace Modbus.Net protected BaseConnector(int timeoutTime = 10000, bool isFullDuplex = true) { IsFullDuplex = isFullDuplex; + if (timeoutTime < -1) timeoutTime = -1; TimeoutTime = timeoutTime; } diff --git a/Modbus.Net/Modbus.Net/Controller/FifoController.cs b/Modbus.Net/Modbus.Net/Controller/FifoController.cs index c0b96c4..e6d30f0 100644 --- a/Modbus.Net/Modbus.Net/Controller/FifoController.cs +++ b/Modbus.Net/Modbus.Net/Controller/FifoController.cs @@ -13,12 +13,6 @@ namespace Modbus.Net /// public class FifoController : BaseController { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - private static readonly ILogger logger = LogProvider.CreateLogger(); private MessageWaitingDef _currentSendingPos; @@ -41,10 +35,10 @@ namespace Modbus.Net /// 是否开启信号量 /// 包切分函数 /// 包等待队列长度 - public FifoController(int acquireTime, bool activateSema = true, Func> duplicateFunc = null, int waitingListMaxCount = 100) + public FifoController(int acquireTime, bool activateSema = true, Func> duplicateFunc = null, int? waitingListMaxCount = null) : base(duplicateFunc) { - _waitingListMaxCount = int.Parse(configuration.GetSection("Modbus.Net")["WaitingListCount"] ?? waitingListMaxCount.ToString()); + _waitingListMaxCount = int.Parse(waitingListMaxCount != null ? waitingListMaxCount.ToString() : null ?? ConfigurationReader.GetValueDirect("Controller","WaitingListCount")); if (activateSema) { _taskCycleSema = new Semaphore(0, _waitingListMaxCount); diff --git a/Modbus.Net/Modbus.Net/Controller/MatchController.cs b/Modbus.Net/Modbus.Net/Controller/MatchController.cs index e9f9dc8..ceb6909 100644 --- a/Modbus.Net/Modbus.Net/Controller/MatchController.cs +++ b/Modbus.Net/Modbus.Net/Controller/MatchController.cs @@ -23,7 +23,7 @@ namespace Modbus.Net /// 包切分函数 /// 包等待队列长度 public MatchController(ICollection<(int, int)>[] keyMatches, int acquireTime, bool activateSema = true, - Func> duplicateFunc = null, int waitingListMaxCount = 100) : base(acquireTime, activateSema, duplicateFunc, waitingListMaxCount) + Func> duplicateFunc = null, int? waitingListMaxCount = null) : base(acquireTime, activateSema, duplicateFunc, waitingListMaxCount) { KeyMatches = keyMatches; } diff --git a/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs b/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs index 86ea490..e71e661 100644 --- a/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs +++ b/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs @@ -10,7 +10,7 @@ namespace Modbus.Net { /// public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches, - Func> duplicateFunc = null, int waitingListMaxCount = 100) : base(keyMatches, + Func> duplicateFunc = null, int? waitingListMaxCount = null) : base(keyMatches, 0, false, duplicateFunc, waitingListMaxCount) { } diff --git a/Modbus.Net/Modbus.Net/Job/MultipleMachinesJobSchedulerCreator.cs b/Modbus.Net/Modbus.Net/Job/MultipleMachinesJobSchedulerCreator.cs new file mode 100644 index 0000000..a565477 --- /dev/null +++ b/Modbus.Net/Modbus.Net/Job/MultipleMachinesJobSchedulerCreator.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace Modbus.Net +{ + /// + /// 豸 + /// + public sealed class MultipleMachinesJobScheduler + { + private static int _machineCount = 0; + + /// + /// 豸 + /// + /// 豸ļ + /// 豸ģ + /// ظΪѭ0Ϊִһ + /// + /// + public static ParallelLoopResult RunScheduler(IEnumerable> machines, Func, MachineGetJobScheduler, Task> machineJobTemplate, int count = 0, int intervalSecond = 1) where TKey: IEquatable + { + _machineCount = machines.Count(); + return Parallel.ForEach(machines, (machine, state, index) => + { + Task.Factory.StartNew(async () => + { + Thread.Sleep((int)(intervalSecond * 1000.0 / _machineCount * index)); + var getJobScheduler = await MachineJobSchedulerCreator.CreateScheduler("Trigger" + index, count, intervalSecond); + await machineJobTemplate(machine, getJobScheduler); + }); + }); + } + + /// + /// 豸 + /// + /// 豸ļ + /// 豸ģ + /// ظΪѭ0Ϊִһ + /// + /// + public static ParallelLoopResult RunScheduler(IEnumerable> machines, Func, MachineGetJobScheduler, Task> machineJobTemplate, int count = 0, int intervalSecond = 1) + { + return RunScheduler(machines, machineJobTemplate, count, intervalSecond); + } + + /// + /// ȡ + /// + /// + public static ParallelLoopResult CancelJob() + { + return Parallel.For(0, _machineCount, async index => + { + await MachineJobSchedulerCreator.CancelJob("Trigger" + index); + }); + } + } +} diff --git a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs index 6ff6eb1..5a76a0a 100644 --- a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs @@ -10,49 +10,6 @@ namespace Modbus.Net /// public abstract class ComProtocolLinker : ProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - - /// - /// 构造器 - /// - /// 从站地址 - protected ComProtocolLinker(int slaveAddress) - : this(configuration.GetSection("Modbus.Net")["COM"] ?? "COM1", slaveAddress) - { - } - - /// - /// 构造器 - /// - /// 串口端口号 - /// 从站地址 - protected ComProtocolLinker(string com, int slaveAddress) - : this(com, slaveAddress, int.Parse(configuration.GetSection("Modbus.Net")["ComBaudRate"] ?? "9600"), Enum.Parse(configuration.GetSection("Modbus.Net")["ComParity"] ?? "Parity.None"), Enum.Parse(configuration.GetSection("Modbus.Net")["ComStopBits"] ?? "StopBits.One"), int.Parse(configuration.GetSection("Modbus.Net")["ComDataBits"] ?? "8")) - { - } - - /// - /// 构造器 - /// - /// 串口端口号 - /// 波特率 - /// 校验位 - /// 停止位 - /// 数据位 - /// 从站地址 - /// 是否为全双工 - protected ComProtocolLinker(string com, int slaveAddress, int baudRate, Parity parity, StopBits stopBits, int dataBits, - bool isFullDuplex = false) - : this( - com, slaveAddress, baudRate, parity, stopBits, dataBits, - int.Parse(configuration.GetSection("Modbus.Net")["ComConnectionTimeout"] ?? "-1"), isFullDuplex) - { - } - /// /// 构造器 /// @@ -64,19 +21,16 @@ namespace Modbus.Net /// 超时时间 /// 从站地址 /// 是否为全双工 - protected ComProtocolLinker(string com, int slaveAddress, int baudRate, Parity parity, StopBits stopBits, int dataBits, - int connectionTimeout, bool isFullDuplex = false) + protected ComProtocolLinker(string com, int slaveAddress, int? baudRate = null, Parity? parity = null, StopBits? stopBits = null, int? dataBits = null, + int? connectionTimeout = null, bool? isFullDuplex = null) { - if (connectionTimeout == -1) - { - BaseConnector = new ComConnector(com + ":" + slaveAddress, baudRate, parity, stopBits, dataBits, isFullDuplex: isFullDuplex); - } - else - { - BaseConnector = new ComConnector(com + ":" + slaveAddress, baudRate, parity, stopBits, dataBits, - connectionTimeout, isFullDuplex: isFullDuplex); - } - + baudRate = int.Parse(baudRate != null ? baudRate.ToString() : null ?? ConfigurationReader.GetValue("COM:"+com, "BaudRate")); + parity = Enum.Parse(parity != null ? parity.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "Parity")); + stopBits = Enum.Parse(stopBits != null ? stopBits.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "StopBits")); + dataBits = int.Parse(dataBits != null ? dataBits.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "DataBits")); + connectionTimeout = int.Parse(connectionTimeout != null ? connectionTimeout.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "ConnectionTimeout")); + isFullDuplex = bool.Parse(isFullDuplex != null ? isFullDuplex.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "FullDuplex")); + BaseConnector = new ComConnector(com + ":" + slaveAddress, baudRate.Value, parity.Value, stopBits.Value, dataBits.Value, connectionTimeout.Value, isFullDuplex.Value); } } } \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs index e070dbd..2b6a6d7 100644 --- a/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Configuration; using System; +using System.Configuration; using System.IO; namespace Modbus.Net @@ -9,31 +10,6 @@ namespace Modbus.Net /// public abstract class TcpProtocolLinker : ProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - - /// - /// 构造器 - /// - protected TcpProtocolLinker(int port) - : this(configuration.GetSection("Modbus.Net")["IP"], port) - { - } - - /// - /// 构造器 - /// - /// Ip地址 - /// 端口 - /// 是否为全双工 - protected TcpProtocolLinker(string ip, int port, bool isFullDuplex = true) - : this(ip, port, int.Parse(configuration.GetSection("Modbus.Net")["IPConnectionTimeout"] ?? "-1"), isFullDuplex) - { - } - /// /// 构造器 /// @@ -41,18 +17,12 @@ namespace Modbus.Net /// 端口 /// 超时时间 /// 是否为全双工 - protected TcpProtocolLinker(string ip, int port, int connectionTimeout, bool isFullDuplex = true) + protected TcpProtocolLinker(string ip, int port, int? connectionTimeout = null, bool? isFullDuplex = null) { - if (connectionTimeout == -1) - { - //初始化连接对象 - BaseConnector = new TcpConnector(ip, port, isFullDuplex: isFullDuplex); - } - else - { - //初始化连接对象 - BaseConnector = new TcpConnector(ip, port, connectionTimeout, isFullDuplex: isFullDuplex); - } + connectionTimeout = int.Parse(connectionTimeout != null ? connectionTimeout.ToString() : null ?? ConfigurationReader.GetValue("TCP:"+ip+":"+port, "ConnectionTimeout")); + isFullDuplex = bool.Parse(isFullDuplex != null ? isFullDuplex.ToString() : null ?? ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FullDuplex")); + //初始化连接对象 + BaseConnector = new TcpConnector(ip, port, connectionTimeout.Value, isFullDuplex.Value); } } } \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs index 75dd8d7..7d7120b 100644 --- a/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs @@ -9,31 +9,6 @@ namespace Modbus.Net /// public abstract class UdpProtocolLinker : ProtocolLinker { - private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) - .Build(); - - /// - /// 构造器 - /// - protected UdpProtocolLinker(int port) - : this(configuration.GetSection("Modbus.Net")["IP"], port) - { - } - - /// - /// 构造器 - /// - /// Ip地址 - /// 端口 - /// 是否为全双工 - protected UdpProtocolLinker(string ip, int port, bool isFullDuplex = true) - : this(ip, port, int.Parse(configuration.GetSection("Modbus.Net")["IPConnectionTimeout"] ?? "-1"), isFullDuplex) - { - } - /// /// 构造器 /// @@ -41,18 +16,12 @@ namespace Modbus.Net /// 端口 /// 超时时间 /// 是否为全双工 - protected UdpProtocolLinker(string ip, int port, int connectionTimeout, bool isFullDuplex = true) + protected UdpProtocolLinker(string ip, int port, int? connectionTimeout = null, bool? isFullDuplex = null) { - if (connectionTimeout == -1) - { - //初始化连接对象 - BaseConnector = new UdpConnector(ip, port, isFullDuplex: isFullDuplex); - } - else - { - //初始化连接对象 - BaseConnector = new UdpConnector(ip, port, connectionTimeout, isFullDuplex: isFullDuplex); - } + connectionTimeout = int.Parse(connectionTimeout != null ? connectionTimeout.ToString() : null ?? ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "ConnectionTimeout")); + isFullDuplex = bool.Parse(isFullDuplex != null ? isFullDuplex.ToString() : null ?? ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FullDuplex")); + //初始化连接对象 + BaseConnector = new UdpConnector(ip, port, connectionTimeout.Value, isFullDuplex.Value); } } } \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net/appsettings.default.json b/Modbus.Net/Modbus.Net/appsettings.default.json new file mode 100644 index 0000000..1dd1341 --- /dev/null +++ b/Modbus.Net/Modbus.Net/appsettings.default.json @@ -0,0 +1,44 @@ +{ + "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": "9600", + "Parity": "Parity.None", + "StopBits": "StopBits.One", + "DataBits": "8", + "FullDuplex": "False", + "Modbus": { + "COM": "COM1" + }, + "Siemens": { + "COM": "COM2" + } + }, + "Controller": { + "WaitingListCount": "100" + } + } +} \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net/appsettings.json b/Modbus.Net/Modbus.Net/appsettings.json deleted file mode 100644 index be3471f..0000000 --- a/Modbus.Net/Modbus.Net/appsettings.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Modbus.Net": { - "COM": "COM1", - "IP": "192.168.1.1", - "ComConnectionTimeout": "3000", - "ComBaudRate": "9600", - "ComParity": "Parity.None", - "ComStopBits": "StopBits.One", - "ComDataBits": "8", - "IPConnectionTimeout": "5000", - "ModbusPort": "502", - "SiemensPort": "102", - "FetchSleepTime": "100", - "WaitingListCount": "100" - } -} \ No newline at end of file diff --git a/Samples/AnyType/AnyType.csproj b/Samples/AnyType/AnyType.csproj index b1a16c3..f78e501 100644 --- a/Samples/AnyType/AnyType.csproj +++ b/Samples/AnyType/AnyType.csproj @@ -1,4 +1,4 @@ - + net6.0 diff --git a/Samples/AnyType/appsettings.default.json b/Samples/AnyType/appsettings.default.json new file mode 100644 index 0000000..1dd1341 --- /dev/null +++ b/Samples/AnyType/appsettings.default.json @@ -0,0 +1,44 @@ +{ + "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": "9600", + "Parity": "Parity.None", + "StopBits": "StopBits.One", + "DataBits": "8", + "FullDuplex": "False", + "Modbus": { + "COM": "COM1" + }, + "Siemens": { + "COM": "COM2" + } + }, + "Controller": { + "WaitingListCount": "100" + } + } +} \ No newline at end of file diff --git a/Samples/AnyType/appsettings.json b/Samples/AnyType/appsettings.json index ae6e3a7..10f68b8 100644 --- a/Samples/AnyType/appsettings.json +++ b/Samples/AnyType/appsettings.json @@ -5,8 +5,5 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*", - "Modbus.Net": { - "ModbusPort": "502" - } + "AllowedHosts": "*" } diff --git a/Samples/CrossLamp/CrossLamp.csproj b/Samples/CrossLamp/CrossLamp.csproj index ae8d7a2..c56bc86 100644 --- a/Samples/CrossLamp/CrossLamp.csproj +++ b/Samples/CrossLamp/CrossLamp.csproj @@ -1,4 +1,4 @@ - + net6.0 diff --git a/Samples/CrossLamp/appsettings.default.json b/Samples/CrossLamp/appsettings.default.json new file mode 100644 index 0000000..1dd1341 --- /dev/null +++ b/Samples/CrossLamp/appsettings.default.json @@ -0,0 +1,44 @@ +{ + "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": "9600", + "Parity": "Parity.None", + "StopBits": "StopBits.One", + "DataBits": "8", + "FullDuplex": "False", + "Modbus": { + "COM": "COM1" + }, + "Siemens": { + "COM": "COM2" + } + }, + "Controller": { + "WaitingListCount": "100" + } + } +} \ No newline at end of file diff --git a/Samples/MachineJob/MachineJob.csproj b/Samples/MachineJob/MachineJob.csproj index 0bf9298..1719772 100644 --- a/Samples/MachineJob/MachineJob.csproj +++ b/Samples/MachineJob/MachineJob.csproj @@ -1,4 +1,4 @@ - + net6.0 diff --git a/Samples/MachineJob/Worker.cs b/Samples/MachineJob/Worker.cs index 4937d82..24c665f 100644 --- a/Samples/MachineJob/Worker.cs +++ b/Samples/MachineJob/Worker.cs @@ -13,7 +13,7 @@ namespace MachineJob.Service _logger = logger; } - protected override async Task ExecuteAsync(CancellationToken stoppingToken) + protected override Task ExecuteAsync(CancellationToken stoppingToken) { List _addresses = new List @@ -47,15 +47,16 @@ namespace MachineJob.Service IMachine machine = new ModbusMachine("ModbusMachine1", ModbusType.Tcp, null, _addresses, true, 1, 2, Endian.BigEndianLsb); IMachine machine2 = new SiemensMachine("SiemensMachine1", SiemensType.Tcp, null, SiemensMachineModel.S7_1200, _addresses2, true, 1, 2); - await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 10).Result.From(machine.Id, machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Deal(machine.Id + ".Deal", OnSuccess, OnFailure).Result.Run(); - Thread.Sleep(5000); - await MachineJobSchedulerCreator.CreateScheduler("Trigger2", -1, 10).Result.From(machine2.Id, machine2, MachineDataType.Name).Result.Query(machine2.Id + ".ConsoleQuery", QueryConsole).Result.To(machine2.Id + ".To", machine2).Result.Deal(machine2.Id + ".Deal", OnSuccess, OnFailure).Result.Run(); + var machines = new List>() { machine, machine2 }; + return Task.Run(() => MultipleMachinesJobScheduler.RunScheduler(machines, async (machine, scheduler) => + { + await scheduler.From(machine.Id, machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Deal(machine.Id + ".Deal", OnSuccess, OnFailure).Result.Run(); + }, -1, 10)); } - public override async Task StopAsync(CancellationToken cancellationToken) + public override Task StopAsync(CancellationToken cancellationToken) { - await MachineJobSchedulerCreator.CancelJob("Trigger1"); - await MachineJobSchedulerCreator.CancelJob("Trigger2"); + return Task.Run(()=>MultipleMachinesJobScheduler.CancelJob()); } public Task OnSuccess(string machineId) diff --git a/Samples/MachineJob/appsettings.default.json b/Samples/MachineJob/appsettings.default.json new file mode 100644 index 0000000..1dd1341 --- /dev/null +++ b/Samples/MachineJob/appsettings.default.json @@ -0,0 +1,44 @@ +{ + "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": "9600", + "Parity": "Parity.None", + "StopBits": "StopBits.One", + "DataBits": "8", + "FullDuplex": "False", + "Modbus": { + "COM": "COM1" + }, + "Siemens": { + "COM": "COM2" + } + }, + "Controller": { + "WaitingListCount": "100" + } + } +} \ No newline at end of file diff --git a/Samples/MachineJob/appsettings.json b/Samples/MachineJob/appsettings.json index 64cc3ff..676b0fd 100644 --- a/Samples/MachineJob/appsettings.json +++ b/Samples/MachineJob/appsettings.json @@ -9,13 +9,17 @@ } }, "ConnectionStrings": { - "DatabaseWriteConnectionString": "Server=localhost; User ID=root; Password=123456; Database=modbusnettest;" + "DatabaseWriteConnectionString": "Server=192.168.8.225; User ID=root; Password=123456; Database=modbusnettest;" }, + "Modbus.Net": { - "FetchSleepTime": "100", - "IP": "192.168.8.210", - "IPConnectionTimeout": "5000", - "ModbusPort": "502", - "SiemensPort": "102" + "TCP": { + "Modbus": { + "IP": "192.168.8.210" + }, + "Siemens": { + "IP": "192.168.8.210" + } + } } } diff --git a/Samples/TripleAdd/TripleAdd.csproj b/Samples/TripleAdd/TripleAdd.csproj index ae8d7a2..c56bc86 100644 --- a/Samples/TripleAdd/TripleAdd.csproj +++ b/Samples/TripleAdd/TripleAdd.csproj @@ -1,4 +1,4 @@ - + net6.0 diff --git a/Samples/TripleAdd/appsettings.default.json b/Samples/TripleAdd/appsettings.default.json new file mode 100644 index 0000000..1dd1341 --- /dev/null +++ b/Samples/TripleAdd/appsettings.default.json @@ -0,0 +1,44 @@ +{ + "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": "9600", + "Parity": "Parity.None", + "StopBits": "StopBits.One", + "DataBits": "8", + "FullDuplex": "False", + "Modbus": { + "COM": "COM1" + }, + "Siemens": { + "COM": "COM2" + } + }, + "Controller": { + "WaitingListCount": "100" + } + } +} \ No newline at end of file diff --git a/Tests/Modbus.Net.PersistedTests/Modbus.Net.PersistedTests.csproj b/Tests/Modbus.Net.PersistedTests/Modbus.Net.PersistedTests.csproj deleted file mode 100644 index dad71a6..0000000 --- a/Tests/Modbus.Net.PersistedTests/Modbus.Net.PersistedTests.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net6.0 - - - - - - - - - - - - - - - diff --git a/Tests/Modbus.Net.PersistedTests/Program.cs b/Tests/Modbus.Net.PersistedTests/Program.cs deleted file mode 100644 index 30d2c6e..0000000 --- a/Tests/Modbus.Net.PersistedTests/Program.cs +++ /dev/null @@ -1,141 +0,0 @@ -using Microsoft.Extensions.Logging; -using Modbus.Net; -using Modbus.Net.Modbus; -using Serilog; -using System; -using System.Collections.Generic; - -Log.Logger = new LoggerConfiguration() - .MinimumLevel.Information() - .WriteTo.Console() -.CreateLogger(); - -var loggerFactory = new LoggerFactory() - .AddSerilog(Log.Logger); -LogProvider.SetLogProvider(loggerFactory); - -ModbusMachine machine = new ModbusMachine(1, ModbusType.Rtu, "COM1", - new List() - { - new AddressUnit() - { - Id = "1", - Area = "4X", - Address = 1, - Name = "test 1", - DataType = typeof(ushort) - }, - new AddressUnit() - { - Id = "2", - Area = "4X", - Address = 2, - Name = "test 2", - DataType = typeof(ushort) - }, - new AddressUnit() - { - Id = "3", - Area = "4X", - Address = 3, - Name = "test 3", - DataType = typeof(ushort) - }, - }, true, 2, 1); -ModbusMachine machine2 = new ModbusMachine(2, ModbusType.Rtu, "COM1", - new List() - { - new AddressUnit() - { - Id = "1", - Area = "4X", - Address = 11, - Name = "test 1", - DataType = typeof(ushort) - }, - new AddressUnit() - { - Id = "2", - Area = "4X", - Address = 12, - Name = "test 2", - DataType = typeof(ushort) - }, - new AddressUnit() - { - Id = "3", - Area = "4X", - Address = 13, - Name = "test 3", - DataType = typeof(ushort) - }, - }, true, 3, 1); -ModbusMachine machine3 = new ModbusMachine(3, ModbusType.Rtu, "COM1", - new List() - { - new AddressUnit() - { - Id = "1", - Area = "4X", - Address = 21, - Name = "test 1", - DataType = typeof(ushort) - }, - new AddressUnit() - { - Id = "2", - Area = "4X", - Address = 22, - Name = "test 2", - DataType = typeof(ushort) - }, - new AddressUnit() - { - Id = "3", - Area = "4X", - Address = 23, - Name = "test 3", - DataType = typeof(ushort) - }, - }, true, 4, 1); -Random r = new Random(); -await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 10).Result.Apply(machine.Id + ".Apply", null, MachineDataType.Address).Result.Query(machine.Id + ".Query", returnDef => -{ - return new Dictionary() {{ - "4X 1.0", r.Next() % 65536 - }, - { - "4X 2.0", r.Next() % 65536 - }, - { - "4X 3.0", r.Next() % 65536 - } -}; -}).Result.To(machine.Id + ".To", machine).Result.Deal().Result.Run(); -await MachineJobSchedulerCreator.CreateScheduler("Trigger2", -1, 10).Result.Apply(machine2.Id + ".Apply", null, MachineDataType.Address).Result.Query(machine2.Id + ".Query", returnDef => -{ - return new Dictionary() {{ - "4X 1.0", r.Next() % 65536 - }, - { - "4X 2.0", r.Next() % 65536 - }, - { - "4X 3.0", r.Next() % 65536 - } -}; -}).Result.To(machine2.Id + ".To", machine2).Result.Deal().Result.Run(); -await MachineJobSchedulerCreator.CreateScheduler("Trigger3", -1, 10).Result.Apply(machine3.Id + ".Apply", null, MachineDataType.Address).Result.Query(machine3.Id + ".Query", returnDef => -{ - return new Dictionary() {{ - "4X 1.0", r.Next() % 65536 - }, - { - "4X 2.0", r.Next() % 65536 - }, - { - "4X 3.0", r.Next() % 65536 - } -}; -}).Result.To(machine3.Id + ".To", machine3).Result.Deal().Result.Run(); -Console.ReadLine(); \ No newline at end of file diff --git a/Tests/Modbus.Net.PersistedTests/Properties/launchSettings.json b/Tests/Modbus.Net.PersistedTests/Properties/launchSettings.json deleted file mode 100644 index 33504c9..0000000 --- a/Tests/Modbus.Net.PersistedTests/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "WSL": { - "commandName": "WSL2", - "distributionName": "" - } - } -} \ No newline at end of file diff --git a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj index aa5e78d..a10ac37 100644 --- a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj +++ b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj @@ -4,7 +4,6 @@ net6.0 enable enable - false