diff --git a/Modbus.Net/Modbus.Net.Core/App.config b/Modbus.Net/Modbus.Net.Core/App.config
new file mode 100644
index 0000000..44dba52
--- /dev/null
+++ b/Modbus.Net/Modbus.Net.Core/App.config
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Core/ConfigurationManager.cs b/Modbus.Net/Modbus.Net.Core/ConfigurationManager.cs
deleted file mode 100644
index 4891ce1..0000000
--- a/Modbus.Net/Modbus.Net.Core/ConfigurationManager.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System.IO;
-using Microsoft.Extensions.Configuration;
-
-namespace Modbus.Net
-{
- ///
- /// Simulate ConfigurationManager in System.Configuration
- ///
- public static class ConfigurationManager
- {
- ///
- /// Configuration Builder
- ///
- private static readonly IConfigurationBuilder Builder = new ConfigurationBuilder()
- .SetBasePath(RootPath ?? Directory.GetCurrentDirectory())
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
-
- ///
- /// RootPath of App.config and appsettings.json
- ///
- public static string RootPath { get; set; } = null;
-
- ///
- /// Configuration Root
- ///
- private static IConfigurationRoot Configuration => Builder.Build();
-
- ///
- /// AppSettings
- ///
- public static IConfigurationSection AppSettings => Configuration.GetSection("AppSettings");
-
- ///
- /// ConnectionStrings
- ///
- public static IConfigurationSection ConnectionStrings => Configuration.GetSection("ConnectionStrings");
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Core/appsettings.json b/Modbus.Net/Modbus.Net.Core/appsettings.json
deleted file mode 100644
index 12febb4..0000000
--- a/Modbus.Net/Modbus.Net.Core/appsettings.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "AppSettings": {
- "COM": "COM1",
- "IP": "192.168.1.1",
- "ComConnectionTimeout": "3000",
- "IPConnectionTimeout": "5000",
- "ModbusPort": "502",
- "SiemensPort": "102"
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Modbus.Core/Modbus.Net.Modbus.Core.csproj b/Modbus.Net/Modbus.Net.Modbus.Core/Modbus.Net.Modbus.Core.csproj
new file mode 100644
index 0000000..30ded4c
--- /dev/null
+++ b/Modbus.Net/Modbus.Net.Modbus.Core/Modbus.Net.Modbus.Core.csproj
@@ -0,0 +1,55 @@
+
+
+ netstandard2.0
+ Modbus.Net.Modbus.Core
+ Modbus.Net.Modbus
+ Modbus.Net.Modbus.Core
+ 1.3.10
+ Chris L.(Luo Sheng)
+ Hangzhou Delian IoT Science Technology Co.,Ltd.
+ Modbus.Net.Modbus
+ Modbus.Net Modbus Implementation
+ Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.
+ https://github.com/parallelbgls/Modbus.Net/blob/master/LICENSE.md
+ https://github.com/parallelbgls/Modbus.Net/tree/master/Modbus.Net/Modbus.Net.Modbus
+ https://github.com/parallelbgls/Modbus.Net
+ git
+ hardware communicate protocal modbus Delian
+ False
+ True
+ True
+ True
+
+
+
+ bin\Debug\netstandard2.0\Modbus.Net.Modbus.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Modbus.Net/Modbus.Net.Siemens.Core/Modbus.Net.Siemens.Core.csproj b/Modbus.Net/Modbus.Net.Siemens.Core/Modbus.Net.Siemens.Core.csproj
new file mode 100644
index 0000000..0cca534
--- /dev/null
+++ b/Modbus.Net/Modbus.Net.Siemens.Core/Modbus.Net.Siemens.Core.csproj
@@ -0,0 +1,49 @@
+
+
+
+ netstandard2.0
+ Modbus.Net.Siemens.Core
+ Modbus.Net.Siemens
+ Modbus.Net.Siemens.Core
+ 1.3.10
+ Chris L.(Luo Sheng)
+ Hangzhou Delian IoT Science Technology Co.,Ltd.
+ Modbus.Net Siemens Profinet Implementation
+ Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.
+ https://github.com/parallelbgls/Modbus.Net/blob/master/LICENSE.md
+ https://github.com/parallelbgls/Modbus.Net/tree/master/Modbus.Net/Modbus.Net.Siemens
+ https://github.com/parallelbgls/Modbus.Net
+ git
+ hardware communicate protocal Siemens profinet Delian
+ False
+ True
+ True
+ True
+
+
+
+ bin\Debug\netstandard2.0\Modbus.Net.Siemens.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Modbus.Net/Modbus.Net.sln b/Modbus.Net/Modbus.Net.sln
index 945766a..039d138 100644
--- a/Modbus.Net/Modbus.Net.sln
+++ b/Modbus.Net/Modbus.Net.sln
@@ -1,20 +1,20 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26430.6
+VisualStudioVersion = 15.0.26730.16
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net", "Modbus.Net\Modbus.Net.csproj", "{124EBEF2-8960-4447-84CF-1D683B1EF7CC}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net", "Modbus.Net\Modbus.Net.csproj", "{124EBEF2-8960-4447-84CF-1D683B1EF7CC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{64472271-8B95-4036-ACF9-C10941C1DB0A}"
ProjectSection(SolutionItems) = preProject
..\README.md = ..\README.md
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.Modbus", "Modbus.Net.Modbus\Modbus.Net.Modbus.csproj", "{FDCA72BA-6D06-4DE0-B873-C11C4AC853AD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.Modbus", "Modbus.Net.Modbus\Modbus.Net.Modbus.csproj", "{FDCA72BA-6D06-4DE0-B873-C11C4AC853AD}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.Siemens", "Modbus.Net.Siemens\Modbus.Net.Siemens.csproj", "{6258F9D9-0DF4-497F-9F3B-6D2F6F752A21}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.Siemens", "Modbus.Net.Siemens\Modbus.Net.Siemens.csproj", "{6258F9D9-0DF4-497F-9F3B-6D2F6F752A21}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.OPC", "Modbus.Net.OPC\Modbus.Net.OPC.csproj", "{97F5A329-357A-4813-BAAE-58E71CC6FA87}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.OPC", "Modbus.Net.OPC\Modbus.Net.OPC.csproj", "{97F5A329-357A-4813-BAAE-58E71CC6FA87}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{145DA93A-6768-4D98-8512-AB22339933F7}"
EndProject
@@ -30,7 +30,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrossLamp", "..\Samples\Cro
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnyType", "..\Samples\AnyType\AnyType.csproj", "{25FABD48-D82E-4E08-91A4-46F7057EC954}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.Core", "Modbus.Net.Core\Modbus.Net.Core.csproj", "{BBC091FC-A995-4C06-96F1-F91ECD70FA7E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net.Core", "Modbus.Net.Core\Modbus.Net.Core.csproj", "{BBC091FC-A995-4C06-96F1-F91ECD70FA7E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.Modbus.Core", "Modbus.Net.Modbus.Core\Modbus.Net.Modbus.Core.csproj", "{71BF9248-B261-4C93-A039-FFA4D55A4A26}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Modbus.Net.Siemens.Core", "Modbus.Net.Siemens.Core\Modbus.Net.Siemens.Core.csproj", "{84071437-A569-4AAE-BA44-732138AC010E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -78,6 +82,14 @@ Global
{BBC091FC-A995-4C06-96F1-F91ECD70FA7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BBC091FC-A995-4C06-96F1-F91ECD70FA7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BBC091FC-A995-4C06-96F1-F91ECD70FA7E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {71BF9248-B261-4C93-A039-FFA4D55A4A26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {71BF9248-B261-4C93-A039-FFA4D55A4A26}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {71BF9248-B261-4C93-A039-FFA4D55A4A26}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {71BF9248-B261-4C93-A039-FFA4D55A4A26}.Release|Any CPU.Build.0 = Release|Any CPU
+ {84071437-A569-4AAE-BA44-732138AC010E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {84071437-A569-4AAE-BA44-732138AC010E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {84071437-A569-4AAE-BA44-732138AC010E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {84071437-A569-4AAE-BA44-732138AC010E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -89,4 +101,7 @@ Global
{41F40C27-AB1A-4153-BBAD-BFC7BD57B380} = {145DA93A-6768-4D98-8512-AB22339933F7}
{25FABD48-D82E-4E08-91A4-46F7057EC954} = {145DA93A-6768-4D98-8512-AB22339933F7}
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {AF00D64E-3C70-474A-8A81-E9E48017C4B5}
+ EndGlobalSection
EndGlobal
diff --git a/Modbus.Net/src/Base.Common/BaseMachine.cs b/Modbus.Net/src/Base.Common/BaseMachine.cs
index 8d08945..84c52aa 100644
--- a/Modbus.Net/src/Base.Common/BaseMachine.cs
+++ b/Modbus.Net/src/Base.Common/BaseMachine.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Reflection;
using System.Threading.Tasks;
using Serilog;
diff --git a/Modbus.Net/Modbus.Net/ComConnector.cs b/Modbus.Net/src/Base.Common/ComConnector.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net/ComConnector.cs
rename to Modbus.Net/src/Base.Common/ComConnector.cs
diff --git a/Modbus.Net/Modbus.Net/ComProtocalLinker.cs b/Modbus.Net/src/Base.Common/ComProtocalLinker.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net/ComProtocalLinker.cs
rename to Modbus.Net/src/Base.Common/ComProtocalLinker.cs
diff --git a/Modbus.Net/src/Base.Common/ModBus.Net.nuspec b/Modbus.Net/src/Base.Common/ModBus.Net.nuspec
deleted file mode 100644
index e2680e0..0000000
--- a/Modbus.Net/src/Base.Common/ModBus.Net.nuspec
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- Modbus.Net
- 1.2.4
- Modbus.Net
- Chris L.(Luo Sheng)
- Hangzhou Delian IoT Science Technology Co.,Ltd.
- https://github.com/parallelbgls/Modbus.Net/blob/master/LICENSE.md
- https://github.com/parallelbgls/Modbus.Net/tree/master/Modbus.Net
- false
- High extensible hardware communication implementation platform
- Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.
- hardware communicate protocal Delian
-
-
-
-
-
\ No newline at end of file
diff --git a/Modbus.Net/src/Base.Common/TaskManager.cs b/Modbus.Net/src/Base.Common/TaskManager.cs
index 3ee6be2..d47a530 100644
--- a/Modbus.Net/src/Base.Common/TaskManager.cs
+++ b/Modbus.Net/src/Base.Common/TaskManager.cs
@@ -8,7 +8,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using Nito.AsyncEx;
using Serilog;
namespace Modbus.Net
@@ -108,11 +107,7 @@ namespace Modbus.Net
///
private void NotifyThreadPoolOfPendingWork()
{
-#if NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47
ThreadPool.UnsafeQueueUserWorkItem(_ =>
-#else
- ThreadPool.QueueUserWorkItem(_ =>
-#endif
{
// Note that the current thread is now processing work items.
// This is necessary to enable inlining of tasks into this thread.
diff --git a/Modbus.Net/src/Base.Common/TcpProtocalLinker.cs b/Modbus.Net/src/Base.Common/TcpProtocalLinker.cs
index 17b7c91..057895e 100644
--- a/Modbus.Net/src/Base.Common/TcpProtocalLinker.cs
+++ b/Modbus.Net/src/Base.Common/TcpProtocalLinker.cs
@@ -1,7 +1,4 @@
-#if NET40||NET45||NET451||NET452||NET46||NET461||NET462||NET47
-using System.Configuration;
-
-#endif
+using System.Configuration;
namespace Modbus.Net
{
diff --git a/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs b/Modbus.Net/src/Modbus.Common/AddressFormaterModbus.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs
rename to Modbus.Net/src/Modbus.Common/AddressFormaterModbus.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs b/Modbus.Net/src/Modbus.Common/AddressTranslatorModbus.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs
rename to Modbus.Net/src/Modbus.Common/AddressTranslatorModbus.cs
diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs
new file mode 100644
index 0000000..943a681
--- /dev/null
+++ b/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs
@@ -0,0 +1,48 @@
+using System.Configuration;
+
+namespace Modbus.Net.Modbus
+{
+ ///
+ /// Modbus/Ascii码协议
+ ///
+ public class ModbusAsciiInTcpProtocal : ModbusProtocal
+ {
+ ///
+ /// 构造函数
+ ///
+ /// 从站号
+ /// 主站号
+ /// 端格式
+ public ModbusAsciiInTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian)
+ : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian)
+ {
+ }
+
+ ///
+ /// 构造函数
+ ///
+ /// 串口地址
+ /// 从站号
+ /// 主站号
+ /// 端格式
+ public ModbusAsciiInTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian)
+ : base(slaveAddress, masterAddress, endian)
+ {
+ ProtocalLinker = new ModbusAsciiInTcpProtocalLinker(ip, slaveAddress);
+ }
+
+ ///
+ /// 构造函数
+ ///
+ /// ip地址
+ /// 端口
+ /// 从站号
+ /// 主站号
+ /// 端格式
+ public ModbusAsciiInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
+ : base(slaveAddress, masterAddress, endian)
+ {
+ ProtocalLinker = new ModbusTcpProtocalLinker(ip, port);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocalLinker.cs b/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocalLinker.cs
new file mode 100644
index 0000000..a428838
--- /dev/null
+++ b/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocalLinker.cs
@@ -0,0 +1,49 @@
+using System.Configuration;
+using System.Text;
+
+namespace Modbus.Net.Modbus
+{
+ ///
+ /// Modbus/Ascii码协议连接器Tcp透传
+ ///
+ public class ModbusAsciiInTcpProtocalLinker : TcpProtocalLinker
+ {
+ ///
+ /// 构造函数
+ ///
+ /// IP地址
+ public ModbusAsciiInTcpProtocalLinker(string ip)
+ : base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"))
+ {
+ }
+
+ ///
+ /// 构造函数
+ ///
+ /// ip地址
+ /// 端口号
+ public ModbusAsciiInTcpProtocalLinker(string ip, int port)
+ : base(ip, port)
+ {
+ }
+
+ ///
+ /// 校验返回数据是否正确
+ ///
+ /// 返回的数据
+ /// 校验是否正确
+ public override bool? CheckRight(byte[] content)
+ {
+ //ProtocalLinker不会返回null
+ if (!base.CheckRight(content).Value) return false;
+ //CRC校验失败
+ var contentString = Encoding.ASCII.GetString(content);
+ if (!Crc16.GetInstance().LrcEfficacy(contentString))
+ throw new ModbusProtocalErrorException(501);
+ //Modbus协议错误
+ if (byte.Parse(contentString.Substring(3, 2)) > 127)
+ throw new ModbusProtocalErrorException(byte.Parse(contentString.Substring(5, 2)));
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs
rename to Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs b/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocalLinker.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs
rename to Modbus.Net/src/Modbus.Common/ModbusAsciiProtocalLinker.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs b/Modbus.Net/src/Modbus.Common/ModbusMachine.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs
rename to Modbus.Net/src/Modbus.Common/ModbusMachine.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusProtocal.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs
rename to Modbus.Net/src/Modbus.Common/ModbusProtocal.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs b/Modbus.Net/src/Modbus.Common/ModbusProtocalLinkerBytesExtend.cs
similarity index 95%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs
rename to Modbus.Net/src/Modbus.Common/ModbusProtocalLinkerBytesExtend.cs
index 83a9cca..7796252 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs
+++ b/Modbus.Net/src/Modbus.Common/ModbusProtocalLinkerBytesExtend.cs
@@ -5,6 +5,16 @@ using System.Text;
namespace Modbus.Net.Modbus
{
+ public class ModbusRtuInTcpProtocalLinkerBytesExtend : ModbusRtuProtocalLinkerBytesExtend
+ {
+
+ }
+
+ public class ModbusAsciiInTcpProtocalLinkerBytesExtend : ModbusAsciiProtocalLinkerBytesExtend
+ {
+
+ }
+
///
/// Tcp协议字节伸缩
///
diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs
new file mode 100644
index 0000000..07cb907
--- /dev/null
+++ b/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs
@@ -0,0 +1,48 @@
+using System.Configuration;
+
+
+namespace Modbus.Net.Modbus
+{
+ ///
+ /// Modbus/Rtu协议tcp透传
+ ///
+ public class ModbusRtuInTcpProtocal : ModbusProtocal
+ {
+ ///
+ /// 构造函数
+ ///
+ /// 从站号
+ /// 主站号
+ /// 端格式
+ public ModbusRtuInTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian)
+ : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian)
+ {
+ }
+
+ ///
+ /// 构造函数
+ ///
+ /// ip地址
+ /// 从站号
+ /// 主站号
+ /// 端格式
+ public ModbusRtuInTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian)
+ : base(slaveAddress, masterAddress, endian)
+ {
+ ProtocalLinker = new ModbusTcpProtocalLinker(ip);
+ }
+
+ ///
+ /// 构造函数
+ ///
+ /// 串口
+ /// 从站号
+ /// 主站号
+ /// 端格式
+ public ModbusRtuInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
+ : base(slaveAddress, masterAddress, endian)
+ {
+ ProtocalLinker = new ModbusRtuInTcpProtocalLinker(ip, port);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocalLinker.cs b/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocalLinker.cs
new file mode 100644
index 0000000..264e035
--- /dev/null
+++ b/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocalLinker.cs
@@ -0,0 +1,47 @@
+using System.Configuration;
+
+namespace Modbus.Net.Modbus
+{
+ ///
+ /// Modbus/Rtu协议连接器
+ ///
+ public class ModbusRtuInTcpProtocalLinker : TcpProtocalLinker
+ {
+ ///
+ /// 构造函数
+ ///
+ /// IP地址
+ public ModbusRtuInTcpProtocalLinker(string ip)
+ : base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"))
+ {
+ }
+
+ ///
+ /// 构造函数
+ ///
+ /// IP地址
+ /// 端口号
+ public ModbusRtuInTcpProtocalLinker(string ip, int port)
+ : base(ip, port)
+ {
+ }
+
+ ///
+ /// 校验返回数据
+ ///
+ /// 设备返回的数据
+ /// 数据是否正确
+ public override bool? CheckRight(byte[] content)
+ {
+ //ProtocalLinker的CheckRight不会返回null
+ if (!base.CheckRight(content).Value) return false;
+ //CRC校验失败
+ if (!Crc16.GetInstance().CrcEfficacy(content))
+ throw new ModbusProtocalErrorException(501);
+ //Modbus协议错误
+ if (content[1] > 127)
+ throw new ModbusProtocalErrorException(content[2]);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs
rename to Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs b/Modbus.Net/src/Modbus.Common/ModbusRtuProtocalLinker.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs
rename to Modbus.Net/src/Modbus.Common/ModbusRtuProtocalLinker.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs
rename to Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs b/Modbus.Net/src/Modbus.Common/ModbusTcpProtocalLinker.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs
rename to Modbus.Net/src/Modbus.Common/ModbusTcpProtocalLinker.cs
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs b/Modbus.Net/src/Modbus.Common/ModbusUtility.cs
similarity index 87%
rename from Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
rename to Modbus.Net/src/Modbus.Common/ModbusUtility.cs
index 7180119..aaeb282 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
+++ b/Modbus.Net/src/Modbus.Common/ModbusUtility.cs
@@ -22,7 +22,17 @@ namespace Modbus.Net.Modbus
///
/// Ascii连接
///
- Ascii = 2
+ Ascii = 2,
+
+ ///
+ /// Rtu连接Tcp透传
+ ///
+ RtuInTcp = 3,
+
+ ///
+ /// Ascii连接Tcp透传
+ ///
+ AsciiInTcp = 4,
}
public interface IUtilityMethodWriteSingle : IUtilityMethod
@@ -158,6 +168,28 @@ namespace Modbus.Net.Modbus
: new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian);
break;
}
+ //Rtu协议
+ case ModbusType.RtuInTcp:
+ {
+ Wrapper = ConnectionString == null
+ ? new ModbusRtuInTcpProtocal(SlaveAddress, MasterAddress, Endian)
+ : (ConnectionStringPort == null
+ ? new ModbusRtuInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian)
+ : new ModbusRtuInTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
+ MasterAddress, Endian));
+ break;
+ }
+ //Ascii协议
+ case ModbusType.AsciiInTcp:
+ {
+ Wrapper = ConnectionString == null
+ ? new ModbusAsciiInTcpProtocal(SlaveAddress, MasterAddress, Endian)
+ : (ConnectionStringPort == null
+ ? new ModbusAsciiInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian)
+ : new ModbusAsciiInTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
+ MasterAddress, Endian));
+ break;
+ }
}
}
}
diff --git a/Modbus.Net/Modbus.Net.Siemens/AddressFormaterSiemens.cs b/Modbus.Net/src/Siemens.Common/AddressFormaterSiemens.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/AddressFormaterSiemens.cs
rename to Modbus.Net/src/Siemens.Common/AddressFormaterSiemens.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/AddressTranslatorSiemens.cs b/Modbus.Net/src/Siemens.Common/AddressTranslatorSiemens.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/AddressTranslatorSiemens.cs
rename to Modbus.Net/src/Siemens.Common/AddressTranslatorSiemens.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs b/Modbus.Net/src/Siemens.Common/SiemensMachine.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs
rename to Modbus.Net/src/Siemens.Common/SiemensMachine.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocal.cs b/Modbus.Net/src/Siemens.Common/SiemensPpiProtocal.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocal.cs
rename to Modbus.Net/src/Siemens.Common/SiemensPpiProtocal.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocalLinker.cs b/Modbus.Net/src/Siemens.Common/SiemensPpiProtocalLinker.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocalLinker.cs
rename to Modbus.Net/src/Siemens.Common/SiemensPpiProtocalLinker.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs b/Modbus.Net/src/Siemens.Common/SiemensProtocal.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs
rename to Modbus.Net/src/Siemens.Common/SiemensProtocal.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensProtocalLinkerBytesExtend.cs b/Modbus.Net/src/Siemens.Common/SiemensProtocalLinkerBytesExtend.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensProtocalLinkerBytesExtend.cs
rename to Modbus.Net/src/Siemens.Common/SiemensProtocalLinkerBytesExtend.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensStructDefinition.cs b/Modbus.Net/src/Siemens.Common/SiemensStructDefinition.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensStructDefinition.cs
rename to Modbus.Net/src/Siemens.Common/SiemensStructDefinition.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocal.cs b/Modbus.Net/src/Siemens.Common/SiemensTcpProtocal.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocal.cs
rename to Modbus.Net/src/Siemens.Common/SiemensTcpProtocal.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocalLinker.cs b/Modbus.Net/src/Siemens.Common/SiemensTcpProtocalLinker.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocalLinker.cs
rename to Modbus.Net/src/Siemens.Common/SiemensTcpProtocalLinker.cs
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs b/Modbus.Net/src/Siemens.Common/SiemensUtility.cs
similarity index 100%
rename from Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs
rename to Modbus.Net/src/Siemens.Common/SiemensUtility.cs
diff --git a/README.md b/README.md
index c73fbdd..c4f2119 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ Platform Supported
-------------------
* Visual Studio 2017
* .NET Framework 4.5
-* .NET Standard 1.3
+* .NET Standard 2.0
Thanks
-------------------
@@ -96,13 +96,17 @@ RoadMap
* Github wiki Document Chinese (Complete)
* Github wiki Document English (Complete)
+### Version 1.3.10
+* Update to .Net Standard 2.0 (Complete)
+
### Version 1.4.0
* New Protocal Pipeline System (Coding)
-* Update Protocol with Pipe (Coding)
### Version 1.4.1
* BaseController (In Road)
* New ComConnector (In Road)
+* New TcpConnector (In Road)
+* New UdpConnector (In Road)
* Serial Port Connection with Multiple Master Station (In Road)
### Version 1.4.2
@@ -114,9 +118,14 @@ RoadMap
* Unite TransServer.Net into Modbus.Net (In Road)
* Passive Connector and Controller (In Road)
* Architechture rebuild (In Road)
+
+### Version 1.6.X
* English comment (In Road)
+* ValueHelper remake to interface, users can add their own value translate function (In Road)
+* New Zoom (In Road)
### Version 2.0.0
-* Rename to Transport.Net (Undetermined)
-* Puzzle System (Undetermined)
+* Rename to Transport.Net (In Road)
+* Puzzle System (In Road)
+* Machine Builder (In Road)