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