From 06847a2426e65923761444b6aaa6f8580387dbb2 Mon Sep 17 00:00:00 2001 From: luosheng Date: Mon, 13 Feb 2023 12:49:10 +0800 Subject: [PATCH] Some Fix --- .../AddressFormaterNA200H.cs | 31 +++ .../AddressTranslatorNA200H.cs | 262 ++++++++++++++++++ .../Modbus.Net.Modbus.NA200H.csproj | 13 + .../AddressFormaterModbus.cs | 29 -- .../AddressTranslatorModbus.cs | 255 ----------------- .../ModbusAsciiInTcpProtocol.cs | 4 +- .../ModbusAsciiInTcpProtocolLinker.cs | 6 +- .../ModbusAsciiInUdpProtocol.cs | 9 +- .../ModbusAsciiInUdpProtocolLinker.cs | 10 +- .../Modbus.Net.Modbus/ModbusAsciiProtocol.cs | 4 +- .../ModbusAsciiProtocolLinker.cs | 6 +- .../Modbus.Net.Modbus/ModbusProtocol.cs | 2 +- .../ModbusRtuInTcpProtocol.cs | 5 +- .../ModbusRtuInTcpProtocolLinker.cs | 6 +- .../ModbusRtuInUdpProtocol.cs | 9 +- .../ModbusRtuInUdpProtocolLinker.cs | 11 +- .../Modbus.Net.Modbus/ModbusRtuProtocol.cs | 4 +- .../ModbusRtuProtocolLinker.cs | 6 +- .../Modbus.Net.Modbus/ModbusTcpProtocol.cs | 4 +- .../ModbusTcpProtocolLinker.cs | 8 +- .../Modbus.Net.Modbus/ModbusUdpProtocol.cs | 4 +- .../ModbusUdpProtocolLinker.cs | 8 +- .../Modbus.Net.Siemens/SiemensPpiProtocol.cs | 6 +- .../SiemensPpiProtocolLinker.cs | 4 +- .../Modbus.Net.Siemens/SiemensTcpProtocol.cs | 8 +- .../SiemensTcpProtocolLinker.cs | 9 +- Modbus.Net/Modbus.Net.sln | 6 + Modbus.Net/Modbus.Net/App.config | 16 -- .../Modbus.Net/Connector/BaseConnector.cs | 1 - .../Modbus.Net/Connector/MessageEventArgs.cs | 8 +- .../Controller/DuplicateWithCount.cs | 7 +- .../Controller/MatchDirectlySendController.cs | 7 +- Modbus.Net/Modbus.Net/Interface/IMachine.cs | 6 +- .../Modbus.Net/Interface/IMachineProperty.cs | 2 +- Modbus.Net/Modbus.Net/Interface/IUtility.cs | 8 +- .../Modbus.Net/Interface/IUtilityProperty.cs | 8 +- .../Job/JobChainingJobListenerWithDataMap.cs | 7 +- .../Modbus.Net/Job/MachineJobScheduler.cs | 31 ++- .../Modbus.Net/Linker/ComProtocolLinker.cs | 6 +- .../Modbus.Net/Linker/TcpProtocolLinker.cs | 7 +- .../Modbus.Net/Linker/UdpProtocolLinker.cs | 7 +- Modbus.Net/Modbus.Net/Machine/BaseMachine.cs | 1 - Modbus.Net/Modbus.Net/Modbus.Net.csproj | 2 +- .../Modbus.Net/Protocol/BaseProtocol.cs | 1 - Modbus.Net/Modbus.Net/Utility/BaseUtility.cs | 1 - Modbus.Net/Modbus.Net/appsettings.json | 11 + .../Modbus.Net.Modbus.Test/DatabaseWrite.cs | 36 +++ .../20230212103438_InitialCreate.Designer.cs | 71 +++++ .../20230212103438_InitialCreate.cs | 50 ++++ .../DatabaseWriteContextModelSnapshot.cs | 68 +++++ .../Modbus.Net.Modbus.Test.csproj | 18 ++ Samples/Modbus.Net.Modbus.Test/Program.cs | 28 +- .../Modbus.Net.Modbus.Test/appsettings.json | 8 + 53 files changed, 706 insertions(+), 439 deletions(-) create mode 100644 Modbus.Net/Modbus.Net.Modbus.NA200H/AddressFormaterNA200H.cs create mode 100644 Modbus.Net/Modbus.Net.Modbus.NA200H/AddressTranslatorNA200H.cs create mode 100644 Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj delete mode 100644 Modbus.Net/Modbus.Net/App.config create mode 100644 Modbus.Net/Modbus.Net/appsettings.json create mode 100644 Samples/Modbus.Net.Modbus.Test/DatabaseWrite.cs create mode 100644 Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.Designer.cs create mode 100644 Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.cs create mode 100644 Samples/Modbus.Net.Modbus.Test/Migrations/DatabaseWriteContextModelSnapshot.cs create mode 100644 Samples/Modbus.Net.Modbus.Test/appsettings.json diff --git a/Modbus.Net/Modbus.Net.Modbus.NA200H/AddressFormaterNA200H.cs b/Modbus.Net/Modbus.Net.Modbus.NA200H/AddressFormaterNA200H.cs new file mode 100644 index 0000000..21d8afe --- /dev/null +++ b/Modbus.Net/Modbus.Net.Modbus.NA200H/AddressFormaterNA200H.cs @@ -0,0 +1,31 @@ +namespace Modbus.Net.Modbus.NA200H +{ + /// + /// 南大奥拓NA200H专用AddressFormater + /// + public class AddressFormaterNA200H : AddressFormater + { + /// + /// 格式化地址 + /// + /// 地址区域 + /// 地址 + /// 格式化的地址字符串 + public override string FormatAddress(string area, int address) + { + return area + " " + address; + } + + /// + /// 格式化地址 + /// + /// 地址区域 + /// 地址 + /// 比特位地址 + /// 格式化的地址字符串 + public override string FormatAddress(string area, int address, int subAddress) + { + return area + " " + address + "." + subAddress; + } + } +} \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net.Modbus.NA200H/AddressTranslatorNA200H.cs b/Modbus.Net/Modbus.Net.Modbus.NA200H/AddressTranslatorNA200H.cs new file mode 100644 index 0000000..440571f --- /dev/null +++ b/Modbus.Net/Modbus.Net.Modbus.NA200H/AddressTranslatorNA200H.cs @@ -0,0 +1,262 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Modbus.Net.Modbus.NA200H +{ + /// + /// 南大奥拓NA200H数据单元翻译器 + /// + public class AddressTranslatorNA200H : ModbusTranslatorBase + { + /// + /// 读功能码 + /// + protected Dictionary ReadFunctionCodeDictionary; + + /// + /// 功能码翻译至标准Modbus地址位置 + /// + protected Dictionary TransDictionary; + + /// + /// 写功能码 + /// + protected Dictionary<(string, bool), AreaOutputDef> WriteFunctionCodeDictionary; + + /// + /// 构造器 + /// + public AddressTranslatorNA200H() + { + TransDictionary = new Dictionary + { + {"Q", 0}, + {"M", 10000}, + {"N", 30000}, + {"I", 0}, + {"S", 10000}, + {"IW", 0}, + {"SW", 5000}, + {"MW", 0}, + {"QW", 20000}, + {"NW", 21000} + }; + ReadFunctionCodeDictionary = new Dictionary + { + { + "Q", + new AreaOutputDef + { + Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus, + AreaWidth = 0.125 + } + }, + { + "M", + new AreaOutputDef + { + Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus, + AreaWidth = 0.125 + } + }, + { + "N", + new AreaOutputDef + { + Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus, + AreaWidth = 0.125 + } + }, + { + "I", + new AreaOutputDef + { + Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputStatus, + AreaWidth = 0.125 + } + }, + { + "S", + new AreaOutputDef + { + Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputStatus, + AreaWidth = 0.125 + } + }, + { + "IW", + new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputRegister, AreaWidth = 2} + }, + { + "SW", + new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputRegister, AreaWidth = 2} + }, + { + "MW", + new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2} + }, + { + "NW", + new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2} + }, + { + "QW", + new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2} + } + }; + WriteFunctionCodeDictionary = new Dictionary<(string, bool), AreaOutputDef> + { + { + ("Q", false), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil, + AreaWidth = 0.125 + } + }, + { + ("M", false), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil, + AreaWidth = 0.125 + } + }, + { + ("N", false), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil, + AreaWidth = 0.125 + } + }, + { + ("MW", false), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister, + AreaWidth = 2 + } + }, + { + ("NW", false), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister, + AreaWidth = 2 + } + }, + { + ("QW", false), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister, + AreaWidth = 2 + } + }, + { + ("Q", true), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil, + AreaWidth = 0.125 + } + }, + { + ("M", true), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil, + AreaWidth = 0.125 + } + }, + { + ("N", true), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil, + AreaWidth = 0.125 + } + }, + { + ("MW", true), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister, + AreaWidth = 2 + } + }, + { + ("NW", true), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister, + AreaWidth = 2 + } + }, + { + ("QW", true), + new AreaOutputDef + { + Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister, + AreaWidth = 2 + } + } + }; + } + + /// + /// 地址转换 + /// + /// 格式化的地址 + /// 是否为读取,是为读取,否为写入 + /// 是否只写入一个数据 + /// 翻译后的地址 + public override AddressDef AddressTranslate(string address, bool isRead, bool isSingle) + { + address = address.ToUpper(); + var splitString = address.Split(' '); + var head = splitString[0]; + var tail = splitString[1]; + string sub; + if (tail.Contains('.')) + { + var splitString2 = tail.Split('.'); + sub = splitString2[1]; + tail = splitString2[0]; + } + else + { + sub = "0"; + } + return isRead + ? new AddressDef + { + AreaString = head, + Area = ReadFunctionCodeDictionary[head].Code, + Address = TransDictionary[head] + int.Parse(tail) - 1, + SubAddress = int.Parse(sub) + } + : new AddressDef + { + AreaString = head, + Area = WriteFunctionCodeDictionary[(head, isSingle)].Code, + Address = TransDictionary[head] + int.Parse(tail) - 1, + SubAddress = int.Parse(sub) + }; + } + + /// + /// 获取区域中的单个地址占用的字节长度 + /// + /// 区域名称 + /// 字节长度 + public override double GetAreaByteLength(string area) + { + return ReadFunctionCodeDictionary[area].AreaWidth; + } + } +} diff --git a/Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj b/Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj new file mode 100644 index 0000000..6bbb0c0 --- /dev/null +++ b/Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs b/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs index 1de8840..06000c5 100644 --- a/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs +++ b/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs @@ -1,34 +1,5 @@ namespace Modbus.Net.Modbus { - /// - /// 南大奥拓NA200H专用AddressFormater - /// - public class AddressFormaterNA200H : AddressFormater - { - /// - /// 格式化地址 - /// - /// 地址区域 - /// 地址 - /// 格式化的地址字符串 - public override string FormatAddress(string area, int address) - { - return area + " " + address; - } - - /// - /// 格式化地址 - /// - /// 地址区域 - /// 地址 - /// 比特位地址 - /// 格式化的地址字符串 - public override string FormatAddress(string area, int address, int subAddress) - { - return area + " " + address + "." + subAddress; - } - } - /// /// Modbus标准AddressFormater /// diff --git a/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs b/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs index 87fd69e..e925fe5 100644 --- a/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs +++ b/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Linq; namespace Modbus.Net.Modbus { @@ -29,260 +28,6 @@ namespace Modbus.Net.Modbus } } - /// - /// 南大奥拓NA200H数据单元翻译器 - /// - public class AddressTranslatorNA200H : ModbusTranslatorBase - { - /// - /// 读功能码 - /// - protected Dictionary ReadFunctionCodeDictionary; - - /// - /// 功能码翻译至标准Modbus地址位置 - /// - protected Dictionary TransDictionary; - - /// - /// 写功能码 - /// - protected Dictionary<(string, bool), AreaOutputDef> WriteFunctionCodeDictionary; - - /// - /// 构造器 - /// - public AddressTranslatorNA200H() - { - TransDictionary = new Dictionary - { - {"Q", 0}, - {"M", 10000}, - {"N", 30000}, - {"I", 0}, - {"S", 10000}, - {"IW", 0}, - {"SW", 5000}, - {"MW", 0}, - {"QW", 20000}, - {"NW", 21000} - }; - ReadFunctionCodeDictionary = new Dictionary - { - { - "Q", - new AreaOutputDef - { - Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus, - AreaWidth = 0.125 - } - }, - { - "M", - new AreaOutputDef - { - Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus, - AreaWidth = 0.125 - } - }, - { - "N", - new AreaOutputDef - { - Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus, - AreaWidth = 0.125 - } - }, - { - "I", - new AreaOutputDef - { - Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputStatus, - AreaWidth = 0.125 - } - }, - { - "S", - new AreaOutputDef - { - Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputStatus, - AreaWidth = 0.125 - } - }, - { - "IW", - new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputRegister, AreaWidth = 2} - }, - { - "SW", - new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputRegister, AreaWidth = 2} - }, - { - "MW", - new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2} - }, - { - "NW", - new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2} - }, - { - "QW", - new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2} - } - }; - WriteFunctionCodeDictionary = new Dictionary<(string, bool), AreaOutputDef> - { - { - ("Q", false), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil, - AreaWidth = 0.125 - } - }, - { - ("M", false), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil, - AreaWidth = 0.125 - } - }, - { - ("N", false), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil, - AreaWidth = 0.125 - } - }, - { - ("MW", false), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister, - AreaWidth = 2 - } - }, - { - ("NW", false), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister, - AreaWidth = 2 - } - }, - { - ("QW", false), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister, - AreaWidth = 2 - } - }, - { - ("Q", true), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil, - AreaWidth = 0.125 - } - }, - { - ("M", true), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil, - AreaWidth = 0.125 - } - }, - { - ("N", true), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil, - AreaWidth = 0.125 - } - }, - { - ("MW", true), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister, - AreaWidth = 2 - } - }, - { - ("NW", true), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister, - AreaWidth = 2 - } - }, - { - ("QW", true), - new AreaOutputDef - { - Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister, - AreaWidth = 2 - } - } - }; - } - - /// - /// 地址转换 - /// - /// 格式化的地址 - /// 是否为读取,是为读取,否为写入 - /// 是否只写入一个数据 - /// 翻译后的地址 - public override AddressDef AddressTranslate(string address, bool isRead, bool isSingle) - { - address = address.ToUpper(); - var splitString = address.Split(' '); - var head = splitString[0]; - var tail = splitString[1]; - string sub; - if (tail.Contains('.')) - { - var splitString2 = tail.Split('.'); - sub = splitString2[1]; - tail = splitString2[0]; - } - else - { - sub = "0"; - } - return isRead - ? new AddressDef - { - AreaString = head, - Area = ReadFunctionCodeDictionary[head].Code, - Address = TransDictionary[head] + int.Parse(tail) - 1, - SubAddress = int.Parse(sub) - } - : new AddressDef - { - AreaString = head, - Area = WriteFunctionCodeDictionary[(head, isSingle)].Code, - Address = TransDictionary[head] + int.Parse(tail) - 1, - SubAddress = int.Parse(sub) - }; - } - - /// - /// 获取区域中的单个地址占用的字节长度 - /// - /// 区域名称 - /// 字节长度 - public override double GetAreaByteLength(string area) - { - return ReadFunctionCodeDictionary[area].AreaWidth; - } - } - /// /// Modbus数据单元翻译器 /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs index f6c555b..658c868 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocol.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusAsciiInTcpProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs index b50c6ed..1560508 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocolLinker.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; using System.Text; namespace Modbus.Net.Modbus @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// /// IP地址 public ModbusAsciiInTcpProtocolLinker(string ip) - : base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["ModbusPort"] ?? "502"), false) { } @@ -25,7 +25,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiInTcpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "100"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "100"))); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs index 9480f6c..6b3e343 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocol.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -18,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusAsciiInUdpProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs index 9b602f0..9cc11c6 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInUdpProtocolLinker.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Linq; +using Microsoft.Extensions.Configuration; using System.Text; -using System.Threading.Tasks; namespace Modbus.Net.Modbus { @@ -17,7 +13,7 @@ namespace Modbus.Net.Modbus /// /// IP地址 public ModbusAsciiInUdpProtocolLinker(string ip) - : base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["ModbusPort"] ?? "502"), false) { } @@ -29,7 +25,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiInUdpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"))); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs index 923ae0f..f207ad9 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocol.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusAsciiProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["COM"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs index 434ac2f..a5c3ca1 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using System.Configuration; +using Microsoft.Extensions.Configuration; +using System.Collections.Generic; using System.IO.Ports; using System.Text; @@ -18,7 +18,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiProtocolLinker(string com, int slaveAddress) : base(com, 9600, Parity.None, StopBits.One, 8, 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(ConfigurationManager.AppSettings["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(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"))); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs index 548d618..81b1cc5 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs @@ -65,7 +65,7 @@ namespace Modbus.Net.Modbus /// /// 跟写数据有关的功能码 /// - internal enum ModbusProtocolWriteDataFunctionCode : byte + public enum ModbusProtocolWriteDataFunctionCode : byte { /// /// 写单个线圈 diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs index a592cc8..22caa9d 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocol.cs @@ -1,5 +1,4 @@ -using System.Configuration; - +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -14,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusRtuInTcpProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs index 777b60e..8f32f65 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -12,7 +12,7 @@ namespace Modbus.Net.Modbus /// /// IP地址 public ModbusRtuInTcpProtocolLinker(string ip) - : base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["ModbusPort"] ?? "502"), false) { } @@ -24,7 +24,7 @@ namespace Modbus.Net.Modbus public ModbusRtuInTcpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"))); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs index c12a40f..fb19427 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocol.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -18,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusRtuInUdpProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs index ff8b13a..d809d7e 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -17,7 +12,7 @@ namespace Modbus.Net.Modbus /// /// IP地址 public ModbusRtuInUdpProtocolLinker(string ip) - : base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"), false) + : base(ip, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["ModbusPort"] ?? "502"), false) { } @@ -29,7 +24,7 @@ namespace Modbus.Net.Modbus public ModbusRtuInUdpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"))); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs index 37130fb..c70a46d 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocol.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusRtuProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["COM"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs index 502250e..0672669 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using System.Configuration; +using Microsoft.Extensions.Configuration; +using System.Collections.Generic; using System.IO.Ports; namespace Modbus.Net.Modbus @@ -17,7 +17,7 @@ namespace Modbus.Net.Modbus public ModbusRtuProtocolLinker(string com, int slaveAddress) : base(com, 9600, Parity.None, StopBits.One, 8, slaveAddress) { - ((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<(int,int)>[]{new List<(int,int)>{(0,0)}, new List<(int, int)>{(1,1)}}, int.Parse(ConfigurationManager.AppSettings["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(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"))); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs index 5af3452..283f823 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocol.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusTcpProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs index 2024b3e..4791e8a 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocolLinker.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using System.Configuration; +using Microsoft.Extensions.Configuration; +using System.Collections.Generic; namespace Modbus.Net.Modbus { @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// /// IP地址 public ModbusTcpProtocolLinker(string ip) - : this(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502")) + : this(ip, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["ModbusPort"] ?? "502")) { } @@ -24,7 +24,7 @@ namespace Modbus.Net.Modbus /// 端口 public ModbusTcpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "0"), true, DuplicateWithCount.GetDuplcateFunc(new List{4,5}, 6))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"), true, DuplicateWithCount.GetDuplcateFunc(new List{4,5}, 6))); } /// diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs index 720ed02..17b9c3a 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocol.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus { @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// 从站号 /// 主站号 public ModbusUdpProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs index d7ba341..5bddb7c 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using System.Configuration; +using Microsoft.Extensions.Configuration; +using System.Collections.Generic; namespace Modbus.Net.Modbus { @@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus /// /// IP地址 public ModbusUdpProtocolLinker(string ip) - : this(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502")) + : this(ip, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["ModbusPort"] ?? "502")) { } @@ -24,7 +24,7 @@ namespace Modbus.Net.Modbus /// 端口 public ModbusUdpProtocolLinker(string ip, int port) : base(ip, port) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "0"), true, DuplicateWithCount.GetDuplcateFunc(new List { 4, 5 }, 6))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"), true, DuplicateWithCount.GetDuplcateFunc(new List { 4, 5 }, 6))); } /// diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs index 0c275eb..6fb3bae 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocol.cs @@ -1,5 +1,5 @@ -using System.Configuration; -using System.Threading.Tasks; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; using Nito.AsyncEx; namespace Modbus.Net.Siemens @@ -18,7 +18,7 @@ namespace Modbus.Net.Siemens /// 从站号 /// 主站号 public SiemensPpiProtocol(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["COM"], slaveAddress, masterAddress) { } diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs index 48beaea..de2c518 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; using System.IO.Ports; using System.Threading; using System.Threading.Tasks; @@ -19,7 +19,7 @@ namespace Modbus.Net.Siemens public SiemensPpiProtocolLinker(string com, int slaveAddress) : base(com, 9600, Parity.Even, StopBits.One, 8, slaveAddress) { - ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "0"))); + ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["FetchSleepTime"] ?? "0"))); } /// diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs index f98974b..f986ddb 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocol.cs @@ -1,5 +1,5 @@ -using System.Configuration; -using System.Threading.Tasks; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; using Nito.AsyncEx; namespace Modbus.Net.Siemens @@ -31,7 +31,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, ConfigurationManager.AppSettings["IP"]) + : this(tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"]) { } @@ -49,7 +49,7 @@ namespace Modbus.Net.Siemens ushort maxPdu, string ip) : this( tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, ip, - int.Parse(ConfigurationManager.AppSettings["SiemensPort"] ?? "102")) + int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["SiemensPort"] ?? "102")) { } diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs index 7f10355..39c251b 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocolLinker.cs @@ -1,7 +1,6 @@ -using System; +using Microsoft.Extensions.Configuration; +using System; using System.Collections.Generic; -using System.Configuration; -using System.Linq; namespace Modbus.Net.Siemens { @@ -15,7 +14,7 @@ namespace Modbus.Net.Siemens /// /// IP地址 public SiemensTcpProtocolLinker(string ip) - : this(ip, int.Parse(ConfigurationManager.AppSettings["SiemensPort"] ?? "102")) + : this(ip, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["SiemensPort"] ?? "102")) { } @@ -27,7 +26,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) } }, int.Parse(ConfigurationManager.AppSettings["FetchSleepTime"] ?? "0"), DuplicateWithCount.GetDuplcateFunc(new List{2, 3}, 0))); + ((BaseConnector)BaseConnector).AddController(new MatchDirectlySendController(new ICollection<(int,int)>[] { new List<(int,int)> { (11,11), (12,12) } }, DuplicateWithCount.GetDuplcateFunc(new List{2, 3}, 0))); } /// diff --git a/Modbus.Net/Modbus.Net.sln b/Modbus.Net/Modbus.Net.sln index 26be6b5..95c2928 100644 --- a/Modbus.Net/Modbus.Net.sln +++ b/Modbus.Net/Modbus.Net.sln @@ -22,6 +22,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3597 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.Modbus.Test", "..\Samples\Modbus.Net.Modbus.Test\Modbus.Net.Modbus.Test.csproj", "{22A35CA8-CDCF-416D-BA84-08C933B4A3DE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.Modbus.NA200H", "Modbus.Net.Modbus.NA200H\Modbus.Net.Modbus.NA200H.csproj", "{D4AF0E1E-676E-43B6-BAA3-BFC329D68C80}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -48,6 +50,10 @@ Global {22A35CA8-CDCF-416D-BA84-08C933B4A3DE}.Debug|Any CPU.Build.0 = Debug|Any CPU {22A35CA8-CDCF-416D-BA84-08C933B4A3DE}.Release|Any CPU.ActiveCfg = Release|Any CPU {22A35CA8-CDCF-416D-BA84-08C933B4A3DE}.Release|Any CPU.Build.0 = Release|Any CPU + {D4AF0E1E-676E-43B6-BAA3-BFC329D68C80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {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 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Modbus.Net/Modbus.Net/App.config b/Modbus.Net/Modbus.Net/App.config deleted file mode 100644 index 9f5ff60..0000000 --- a/Modbus.Net/Modbus.Net/App.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs b/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs index b867cac..bc33512 100644 --- a/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs @@ -1,5 +1,4 @@ using System; -using System.Threading; using System.Threading.Tasks; using Nito.AsyncEx; using Serilog; diff --git a/Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs b/Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs index b82ba55..2abe6ee 100644 --- a/Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs +++ b/Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Modbus.Net +namespace Modbus.Net { /// /// 数据返回代理参数 diff --git a/Modbus.Net/Modbus.Net/Controller/DuplicateWithCount.cs b/Modbus.Net/Modbus.Net/Controller/DuplicateWithCount.cs index d90baf3..f68f757 100644 --- a/Modbus.Net/Modbus.Net/Controller/DuplicateWithCount.cs +++ b/Modbus.Net/Modbus.Net/Controller/DuplicateWithCount.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Modbus.Net { @@ -16,6 +13,8 @@ namespace Modbus.Net /// /// 收到的报文信息 /// 收到的断包长度查询位置 + /// 除掉长度查询信息外其它报文的长度 + /// 注意:该长度不包含CRC校验 /// 切分后的报文信息 private static ICollection DuplicateMessages(byte[] receiveMessage, ICollection packageCountPositions, int otherCount) { @@ -52,6 +51,8 @@ namespace Modbus.Net /// 获取按照长度断包的函数 /// /// 断包长度的位置信息 + /// 除掉长度查询信息外其它报文的长度 + /// 注意:该长度不包含CRC校验 /// 断包函数 public static Func> GetDuplcateFunc(ICollection packageCountPositions, int otherCount) { diff --git a/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs b/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs index f919007..098c3a0 100644 --- a/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs +++ b/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Modbus.Net { @@ -12,9 +9,9 @@ namespace Modbus.Net public class MatchDirectlySendController : MatchController { /// - public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches, int acquireTime, + public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches, Func> duplicateFunc = null) : base(keyMatches, - acquireTime, false, duplicateFunc) + 0, false, duplicateFunc) { } diff --git a/Modbus.Net/Modbus.Net/Interface/IMachine.cs b/Modbus.Net/Modbus.Net/Interface/IMachine.cs index cc77cf1..891b415 100644 --- a/Modbus.Net/Modbus.Net/Interface/IMachine.cs +++ b/Modbus.Net/Modbus.Net/Interface/IMachine.cs @@ -1,10 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace Modbus.Net.Interface +namespace Modbus.Net { public interface IMachine : IMachine { diff --git a/Modbus.Net/Modbus.Net/Interface/IMachineProperty.cs b/Modbus.Net/Modbus.Net/Interface/IMachineProperty.cs index 3254cbe..fc19386 100644 --- a/Modbus.Net/Modbus.Net/Interface/IMachineProperty.cs +++ b/Modbus.Net/Modbus.Net/Interface/IMachineProperty.cs @@ -1,7 +1,7 @@ using System; using System.Threading.Tasks; -namespace Modbus.Net.Interface +namespace Modbus.Net { /// /// 没有Id的设备属性 diff --git a/Modbus.Net/Modbus.Net/Interface/IUtility.cs b/Modbus.Net/Modbus.Net/Interface/IUtility.cs index 16d68ac..85a11eb 100644 --- a/Modbus.Net/Modbus.Net/Interface/IUtility.cs +++ b/Modbus.Net/Modbus.Net/Interface/IUtility.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Modbus.Net.Interface +namespace Modbus.Net { public interface IUtility : IUtilityProperty, IUtilityMethodData { diff --git a/Modbus.Net/Modbus.Net/Interface/IUtilityProperty.cs b/Modbus.Net/Modbus.Net/Interface/IUtilityProperty.cs index 3536846..2752f78 100644 --- a/Modbus.Net/Modbus.Net/Interface/IUtilityProperty.cs +++ b/Modbus.Net/Modbus.Net/Interface/IUtilityProperty.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Threading.Tasks; -namespace Modbus.Net.Interface +namespace Modbus.Net { /// /// Api入口的抽象 diff --git a/Modbus.Net/Modbus.Net/Job/JobChainingJobListenerWithDataMap.cs b/Modbus.Net/Modbus.Net/Job/JobChainingJobListenerWithDataMap.cs index 559b6f9..4b7af5a 100644 --- a/Modbus.Net/Modbus.Net/Job/JobChainingJobListenerWithDataMap.cs +++ b/Modbus.Net/Modbus.Net/Job/JobChainingJobListenerWithDataMap.cs @@ -1,14 +1,11 @@ using Quartz.Listener; using Quartz; using Serilog; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading; using System.Threading.Tasks; -namespace Modbus.Net.Job +namespace Modbus.Net { public class JobChainingJobListenerWithDataMap : JobListenerSupport { @@ -31,7 +28,7 @@ namespace Modbus.Net.Job /// /// a JobKey with the name and group of the first job /// a JobKey with the name and group of the follow-up job - public new void AddJobChainLink(JobKey firstJob, JobKey secondJob) + public void AddJobChainLink(JobKey firstJob, JobKey secondJob) { chainLinks.Add(firstJob, secondJob); } diff --git a/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs b/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs index 62c117c..cdfb6ba 100644 --- a/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs +++ b/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs @@ -1,29 +1,28 @@ -using Modbus.Net.Interface; -using Quartz; +using Quartz; using Quartz.Impl; using Quartz.Impl.Matchers; using System; using System.Collections.Generic; using System.Threading.Tasks; -namespace Modbus.Net.Job +namespace Modbus.Net { public sealed class MachineJobSchedulerCreator { - public static async Task CreateScheduler(int count, int interval) + public static async Task CreateScheduler(string triggerKey, int count, int interval) { IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler(); ITrigger trigger; if (count >= 0) trigger = TriggerBuilder.Create() - .WithIdentity("Modbus.Net.DataQuery.Trigger", "Modbus.Net.DataQuery.Group") + .WithIdentity("Modbus.Net.DataQuery.Trigger."+ triggerKey, "Modbus.Net.DataQuery.Group") .StartNow() .WithSimpleSchedule(b => b.WithIntervalInSeconds(interval).WithRepeatCount(count)) .Build(); else trigger = TriggerBuilder.Create() - .WithIdentity("Modbus.Net.DataQuery.Trigger", "Modbus.Net.DataQuery.Group") + .WithIdentity("Modbus.Net.DataQuery.Trigger."+ triggerKey, "Modbus.Net.DataQuery.Group") .StartNow() .WithSimpleSchedule(b => b.WithIntervalInSeconds(interval).RepeatForever()) .Build(); @@ -59,6 +58,26 @@ namespace Modbus.Net.Job return new MachineQueryJobScheduler(_scheduler, _trigger, jobKey); } + + public async Task To(string queryId, Dictionary values, IMachineMethodData machine, MachineDataType machineDataType) + { + JobKey jobKey = JobKey.Create("Modbus.Net.DataQuery.Job." + queryId, "Modbus.Net.DataQuery.Group"); + + IJobDetail job = JobBuilder.Create() + .WithIdentity(jobKey) + .Build(); + + job.JobDataMap.Put("DataType", machineDataType); + job.JobDataMap.Put("Machine", machine); + job.JobDataMap.Put("Value", values); + + await _scheduler.ScheduleJob(job, _trigger); + + JobChainingJobListenerWithDataMap listener = new JobChainingJobListenerWithDataMap("Modbus.Net.DataQuery.Chain", false); + _scheduler.ListenerManager.AddJobListener(listener, GroupMatcher.GroupEquals("Modbus.Net.DataQuery.Group")); + + return new MachineSetJobScheduler(_scheduler, _trigger, listener, jobKey); + } } public class MachineQueryJobScheduler diff --git a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs index d3d012f..dfebe1b 100644 --- a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs @@ -1,4 +1,4 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; using System.IO.Ports; namespace Modbus.Net @@ -17,7 +17,7 @@ namespace Modbus.Net /// 数据位 /// 从站地址 protected ComProtocolLinker(int baudRate, Parity parity, StopBits stopBits, int dataBits, int slaveAddress) - : this(ConfigurationManager.AppSettings["COM"], baudRate, parity, stopBits, dataBits, slaveAddress) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["COM"], baudRate, parity, stopBits, dataBits, slaveAddress) { } @@ -35,7 +35,7 @@ namespace Modbus.Net int slaveAddress, bool isFullDuplex = false) : this( com, baudRate, parity, stopBits, dataBits, - int.Parse(ConfigurationManager.AppSettings["ComConnectionTimeout"] ?? "-1"), slaveAddress, isFullDuplex) + int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["ComConnectionTimeout"] ?? "-1"), slaveAddress, isFullDuplex) { } diff --git a/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs index bfebe2b..dba17cc 100644 --- a/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net/Linker/TcpProtocolLinker.cs @@ -1,4 +1,5 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; + namespace Modbus.Net { @@ -11,7 +12,7 @@ namespace Modbus.Net /// 构造器 /// protected TcpProtocolLinker(int port) - : this(ConfigurationManager.AppSettings["IP"], port) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], port) { } @@ -22,7 +23,7 @@ namespace Modbus.Net /// 端口 /// 是否为全双工 protected TcpProtocolLinker(string ip, int port, bool isFullDuplex = true) - : this(ip, port, int.Parse(ConfigurationManager.AppSettings["IPConnectionTimeout"] ?? "-1"), isFullDuplex) + : this(ip, port, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IPConnectionTimeout"] ?? "-1"), isFullDuplex) { } diff --git a/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs index be52432..a94625e 100644 --- a/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net/Linker/UdpProtocolLinker.cs @@ -1,4 +1,5 @@ -using System.Configuration; +using Microsoft.Extensions.Configuration; + namespace Modbus.Net { @@ -11,7 +12,7 @@ namespace Modbus.Net /// 构造器 /// protected UdpProtocolLinker(int port) - : this(ConfigurationManager.AppSettings["IP"], port) + : this(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IP"], port) { } @@ -22,7 +23,7 @@ namespace Modbus.Net /// 端口 /// 是否为全双工 protected UdpProtocolLinker(string ip, int port, bool isFullDuplex = true) - : this(ip, port, int.Parse(ConfigurationManager.AppSettings["IPConnectionTimeout"] ?? "-1"), isFullDuplex) + : this(ip, port, int.Parse(new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetSection("Config")["IPConnectionTimeout"] ?? "-1"), isFullDuplex) { } diff --git a/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs b/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs index 8515809..a5ef938 100644 --- a/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs +++ b/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Modbus.Net.Interface; using Serilog; namespace Modbus.Net diff --git a/Modbus.Net/Modbus.Net/Modbus.Net.csproj b/Modbus.Net/Modbus.Net/Modbus.Net.csproj index b365d28..e357d74 100644 --- a/Modbus.Net/Modbus.Net/Modbus.Net.csproj +++ b/Modbus.Net/Modbus.Net/Modbus.Net.csproj @@ -27,11 +27,11 @@ + - diff --git a/Modbus.Net/Modbus.Net/Protocol/BaseProtocol.cs b/Modbus.Net/Modbus.Net/Protocol/BaseProtocol.cs index f12c44d..a24ae7d 100644 --- a/Modbus.Net/Modbus.Net/Protocol/BaseProtocol.cs +++ b/Modbus.Net/Modbus.Net/Protocol/BaseProtocol.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Reflection; using System.Threading.Tasks; diff --git a/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs b/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs index 984e120..30df334 100644 --- a/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs +++ b/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Serilog; -using Modbus.Net.Interface; /// /// 端格式 diff --git a/Modbus.Net/Modbus.Net/appsettings.json b/Modbus.Net/Modbus.Net/appsettings.json new file mode 100644 index 0000000..a836018 --- /dev/null +++ b/Modbus.Net/Modbus.Net/appsettings.json @@ -0,0 +1,11 @@ +{ + "Config": { + "COM": "COM1", + "IP": "192.168.1.1", + "ComConnectionTimeout": "3000", + "IPConnectionTimeout": "5000", + "ModbusPort": "502", + "SiemensPort": "102", + "FetchSleepTime": "100" + } +} \ No newline at end of file diff --git a/Samples/Modbus.Net.Modbus.Test/DatabaseWrite.cs b/Samples/Modbus.Net.Modbus.Test/DatabaseWrite.cs new file mode 100644 index 0000000..00a0fac --- /dev/null +++ b/Samples/Modbus.Net.Modbus.Test/DatabaseWrite.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using System.ComponentModel.DataAnnotations; + + +namespace Modbus.Net.Modbus.Test +{ + public class DatabaseWriteContext : DbContext + { + static readonly string connectionString = new ConfigurationBuilder().AddJsonFile($"appsettings.json").Build().GetConnectionString("DatabaseWriteConnectionString")!; + + public DbSet DatabaseWrites { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); + } + } + + public class DatabaseWriteEntity + { + [Key] + public int Id { get; set; } + public double? Value1 { get; set; } + public double? Value2 { get; set; } + public double? Value3 { get; set; } + public double? Value4 { get; set; } + public double? Value5 { get; set; } + public double? Value6 { get; set; } + public double? Value7 { get; set; } + public double? Value8 { get; set; } + public double? Value9 { get; set; } + public double? Value10 { get; set; } + public DateTime UpdateTime { get; set; } + } +} diff --git a/Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.Designer.cs b/Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.Designer.cs new file mode 100644 index 0000000..1244cd8 --- /dev/null +++ b/Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.Designer.cs @@ -0,0 +1,71 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Modbus.Net.Modbus.Test; + +#nullable disable + +namespace Modbus.Net.Modbus.Test.Migrations +{ + [DbContext(typeof(DatabaseWriteContext))] + [Migration("20230212103438_InitialCreate")] + partial class InitialCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Modbus.Net.Modbus.Test.DatabaseWriteEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime(6)"); + + b.Property("Value1") + .HasColumnType("double"); + + b.Property("Value10") + .HasColumnType("double"); + + b.Property("Value2") + .HasColumnType("double"); + + b.Property("Value3") + .HasColumnType("double"); + + b.Property("Value4") + .HasColumnType("double"); + + b.Property("Value5") + .HasColumnType("double"); + + b.Property("Value6") + .HasColumnType("double"); + + b.Property("Value7") + .HasColumnType("double"); + + b.Property("Value8") + .HasColumnType("double"); + + b.Property("Value9") + .HasColumnType("double"); + + b.HasKey("Id"); + + b.ToTable("DatabaseWrites"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.cs b/Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.cs new file mode 100644 index 0000000..8779fe4 --- /dev/null +++ b/Samples/Modbus.Net.Modbus.Test/Migrations/20230212103438_InitialCreate.cs @@ -0,0 +1,50 @@ +using System; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Modbus.Net.Modbus.Test.Migrations +{ + /// + public partial class InitialCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "DatabaseWrites", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Value1 = table.Column(type: "double", nullable: true), + Value2 = table.Column(type: "double", nullable: true), + Value3 = table.Column(type: "double", nullable: true), + Value4 = table.Column(type: "double", nullable: true), + Value5 = table.Column(type: "double", nullable: true), + Value6 = table.Column(type: "double", nullable: true), + Value7 = table.Column(type: "double", nullable: true), + Value8 = table.Column(type: "double", nullable: true), + Value9 = table.Column(type: "double", nullable: true), + Value10 = table.Column(type: "double", nullable: true), + UpdateTime = table.Column(type: "datetime(6)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_DatabaseWrites", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "DatabaseWrites"); + } + } +} diff --git a/Samples/Modbus.Net.Modbus.Test/Migrations/DatabaseWriteContextModelSnapshot.cs b/Samples/Modbus.Net.Modbus.Test/Migrations/DatabaseWriteContextModelSnapshot.cs new file mode 100644 index 0000000..2c2d313 --- /dev/null +++ b/Samples/Modbus.Net.Modbus.Test/Migrations/DatabaseWriteContextModelSnapshot.cs @@ -0,0 +1,68 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Modbus.Net.Modbus.Test; + +#nullable disable + +namespace Modbus.Net.Modbus.Test.Migrations +{ + [DbContext(typeof(DatabaseWriteContext))] + partial class DatabaseWriteContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Modbus.Net.Modbus.Test.DatabaseWriteEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime(6)"); + + b.Property("Value1") + .HasColumnType("double"); + + b.Property("Value10") + .HasColumnType("double"); + + b.Property("Value2") + .HasColumnType("double"); + + b.Property("Value3") + .HasColumnType("double"); + + b.Property("Value4") + .HasColumnType("double"); + + b.Property("Value5") + .HasColumnType("double"); + + b.Property("Value6") + .HasColumnType("double"); + + b.Property("Value7") + .HasColumnType("double"); + + b.Property("Value8") + .HasColumnType("double"); + + b.Property("Value9") + .HasColumnType("double"); + + b.HasKey("Id"); + + b.ToTable("DatabaseWrites"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Samples/Modbus.Net.Modbus.Test/Modbus.Net.Modbus.Test.csproj b/Samples/Modbus.Net.Modbus.Test/Modbus.Net.Modbus.Test.csproj index e20d8f4..4eecb07 100644 --- a/Samples/Modbus.Net.Modbus.Test/Modbus.Net.Modbus.Test.csproj +++ b/Samples/Modbus.Net.Modbus.Test/Modbus.Net.Modbus.Test.csproj @@ -7,6 +7,24 @@ enable + + + + + + + PreserveNewest + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + diff --git a/Samples/Modbus.Net.Modbus.Test/Program.cs b/Samples/Modbus.Net.Modbus.Test/Program.cs index 9e5108d..d6e66f3 100644 --- a/Samples/Modbus.Net.Modbus.Test/Program.cs +++ b/Samples/Modbus.Net.Modbus.Test/Program.cs @@ -1,8 +1,7 @@ // See https://aka.ms/new-console-template for more information using Modbus.Net; using Modbus.Net.Modbus; -using Modbus.Net.Interface; -using Modbus.Net.Job; +using Modbus.Net.Modbus.Test; List _addresses = new List { @@ -20,7 +19,7 @@ List _addresses = new List IMachine machine = new ModbusMachine("ModbusMachine1", ModbusType.Tcp, "192.168.0.172:502", _addresses, true, 1, 2, Endian.BigEndianLsb); -await MachineJobSchedulerCreator.CreateScheduler(-1, 5).Result.From(machine.Id, machine, MachineDataType.Name).Result.Query("ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Run(); +await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 5).Result.From(machine.Id, machine, MachineDataType.Name).Result.Query("ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Run(); Console.ReadLine(); @@ -29,6 +28,29 @@ Dictionary QueryConsole(Dictionary value foreach (var value in values) { Console.WriteLine(value.Key + " " + value.Value.DeviceValue); + } + + 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(); + } + + foreach (var value in values) + { value.Value.DeviceValue = new Random().Next(65536) - 32768; } diff --git a/Samples/Modbus.Net.Modbus.Test/appsettings.json b/Samples/Modbus.Net.Modbus.Test/appsettings.json new file mode 100644 index 0000000..b32f62f --- /dev/null +++ b/Samples/Modbus.Net.Modbus.Test/appsettings.json @@ -0,0 +1,8 @@ +{ + "ConnectionStrings": { + "DatabaseWriteConnectionString": "Server=localhost; User ID=root; Password=123456; Database=modbusnettest;" + }, + "Config": { + "FetchSleepTime": "100" + } +} \ No newline at end of file