From a667eea55b5676fbecdc2196f99ec57b439a0d0b Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Thu, 21 Dec 2017 15:25:20 +0800 Subject: [PATCH] 2017-12-21 Update 1 Serial Port Single Station --- Modbus.Net/Modbus.Net.Core/App.config | 15 -- .../Modbus.Net.Core/Modbus.Net.Core.csproj | 72 ----- .../Modbus.Net.Modbus.Core.csproj | 59 ---- .../AddressFormaterModbus.cs | 0 .../AddressTranslatorModbus.cs | 0 .../Modbus.Net.Modbus.csproj | 27 +- .../ModbusAsciiInTcpProtocal.cs | 0 .../ModbusAsciiInTcpProtocalLinker.cs | 1 + .../ModbusAsciiProtocal.cs | 0 .../ModbusAsciiProtocalLinker.cs | 1 + .../ModbusMachine.cs | 0 .../ModbusProtocal.cs | 0 .../ModbusProtocalLinkerBytesExtend.cs | 0 .../ModbusRtuInTcpProtocal.cs | 0 .../ModbusRtuInTcpProtocalLinker.cs | 1 + .../ModbusRtuProtocal.cs | 0 .../ModbusRtuProtocalLinker.cs | 1 + .../ModbusTcpProtocal.cs | 0 .../ModbusTcpProtocalLinker.cs | 0 .../ModbusUtility.cs | 8 +- .../Modbus.Net.Siemens.Core.csproj | 51 ---- .../AddressFormaterSiemens.cs | 0 .../AddressTranslatorSiemens.cs | 0 .../Modbus.Net.Siemens.csproj | 19 +- .../SiemensMachine.cs | 0 .../SiemensPpiProtocal.cs | 9 - .../SiemensPpiProtocalLinker.cs | 1 + .../SiemensProtocal.cs | 0 .../SiemensProtocalLinkerBytesExtend.cs | 0 .../SiemensStructDefinition.cs | 0 .../SiemensTcpProtocal.cs | 0 .../SiemensTcpProtocalLinker.cs | 0 .../SiemensUtility.cs | 6 +- Modbus.Net/Modbus.Net.sln | 20 +- .../AddressCombiner.cs | 0 .../AddressFormater.cs | 0 .../AddressHelper.cs | 0 .../AddressTranslator.cs | 0 .../Base.Common => Modbus.Net}/AsyncHelper.cs | 0 .../BaseConnector.cs | 0 .../BaseController.cs | 1 - .../Base.Common => Modbus.Net}/BaseMachine.cs | 0 .../BaseMachineExtend.cs | 0 .../BaseProtocal.cs | 0 .../Base.Common => Modbus.Net}/BaseUtility.cs | 0 .../{src/Base.Common => Modbus.Net}/CRC16.cs | 0 .../ComConnector.cs | 252 +++++++++--------- .../ComProtocalLinker.cs | 0 .../Base.Common => Modbus.Net}/IConnector.cs | 0 .../Base.Common => Modbus.Net}/IController.cs | 0 .../IMachineMethod.cs | 0 .../Base.Common => Modbus.Net}/IProtocal.cs | 0 .../IProtocalFormatting.cs | 0 .../IProtocalLinker.cs | 0 .../IProtocalLinkerBytesExtend.cs | 0 .../IUtilityMethod.cs | 0 Modbus.Net/Modbus.Net/Modbus.Net.csproj | 52 ++-- .../Base.Common => Modbus.Net}/PipeUnit.cs | 0 .../ProtocalLinker.cs | 0 .../ProtocalUnit.cs | 0 Modbus.Net/Modbus.Net/SerialPortHelper.cs | 74 +++++ .../Base.Common => Modbus.Net}/TaskManager.cs | 0 .../TcpConnector.cs | 1 + .../TcpProtocalLinker.cs | 0 .../TypeExtensions.cs | 0 .../Base.Common => Modbus.Net}/ValueHelper.cs | 0 Modbus.Net/src/Base.Common/Modbus.Net.csproj | 105 -------- Tests/Modbus.Net.Tests/ModbusTest.cs | 24 +- 68 files changed, 241 insertions(+), 559 deletions(-) delete mode 100644 Modbus.Net/Modbus.Net.Core/App.config delete mode 100644 Modbus.Net/Modbus.Net.Core/Modbus.Net.Core.csproj delete mode 100644 Modbus.Net/Modbus.Net.Modbus.Core/Modbus.Net.Modbus.Core.csproj rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/AddressFormaterModbus.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/AddressTranslatorModbus.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusAsciiInTcpProtocal.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusAsciiInTcpProtocalLinker.cs (95%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusAsciiProtocal.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusAsciiProtocalLinker.cs (94%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusMachine.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusProtocal.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusProtocalLinkerBytesExtend.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusRtuInTcpProtocal.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusRtuInTcpProtocalLinker.cs (94%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusRtuProtocal.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusRtuProtocalLinker.cs (93%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusTcpProtocal.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusTcpProtocalLinker.cs (100%) rename Modbus.Net/{src/Modbus.Common => Modbus.Net.Modbus}/ModbusUtility.cs (98%) delete mode 100644 Modbus.Net/Modbus.Net.Siemens.Core/Modbus.Net.Siemens.Core.csproj rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/AddressFormaterSiemens.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/AddressTranslatorSiemens.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensMachine.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensPpiProtocal.cs (93%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensPpiProtocalLinker.cs (97%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensProtocal.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensProtocalLinkerBytesExtend.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensStructDefinition.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensTcpProtocal.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensTcpProtocalLinker.cs (100%) rename Modbus.Net/{src/Siemens.Common => Modbus.Net.Siemens}/SiemensUtility.cs (99%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/AddressCombiner.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/AddressFormater.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/AddressHelper.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/AddressTranslator.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/AsyncHelper.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/BaseConnector.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/BaseController.cs (99%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/BaseMachine.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/BaseMachineExtend.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/BaseProtocal.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/BaseUtility.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/CRC16.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/ComConnector.cs (74%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/ComProtocalLinker.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IConnector.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IController.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IMachineMethod.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IProtocal.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IProtocalFormatting.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IProtocalLinker.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IProtocalLinkerBytesExtend.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/IUtilityMethod.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/PipeUnit.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/ProtocalLinker.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/ProtocalUnit.cs (100%) create mode 100644 Modbus.Net/Modbus.Net/SerialPortHelper.cs rename Modbus.Net/{src/Base.Common => Modbus.Net}/TaskManager.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/TcpConnector.cs (99%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/TcpProtocalLinker.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/TypeExtensions.cs (100%) rename Modbus.Net/{src/Base.Common => Modbus.Net}/ValueHelper.cs (100%) delete mode 100644 Modbus.Net/src/Base.Common/Modbus.Net.csproj diff --git a/Modbus.Net/Modbus.Net.Core/App.config b/Modbus.Net/Modbus.Net.Core/App.config deleted file mode 100644 index 44dba52..0000000 --- a/Modbus.Net/Modbus.Net.Core/App.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net.Core/Modbus.Net.Core.csproj b/Modbus.Net/Modbus.Net.Core/Modbus.Net.Core.csproj deleted file mode 100644 index 60c2db4..0000000 --- a/Modbus.Net/Modbus.Net.Core/Modbus.Net.Core.csproj +++ /dev/null @@ -1,72 +0,0 @@ - - - - netstandard2.0 - Modbus.Net.Core - Modbus.Net - Modbus.Net.Core - 1.4.1 - 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 - https://github.com/parallelbgls/Modbus.Net/ - High extensible hardware communication implementation platform. - Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd. - hardware communicate protocal Delian - git - False - True - True - True - - - - bin\Debug\netstandard2.0\Modbus.Net.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ 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 deleted file mode 100644 index da30280..0000000 --- a/Modbus.Net/Modbus.Net.Modbus.Core/Modbus.Net.Modbus.Core.csproj +++ /dev/null @@ -1,59 +0,0 @@ - - - netstandard2.0 - Modbus.Net.Modbus.Core - Modbus.Net.Modbus - Modbus.Net.Modbus.Core - 1.4.1 - 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/src/Modbus.Common/AddressFormaterModbus.cs b/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/AddressFormaterModbus.cs rename to Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs diff --git a/Modbus.Net/src/Modbus.Common/AddressTranslatorModbus.cs b/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/AddressTranslatorModbus.cs rename to Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs diff --git a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj index 0a04c10..9069ff2 100644 --- a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj +++ b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj @@ -1,7 +1,7 @@  - net45 + net45;netstandard20 Modbus.Net.Modbus Modbus.Net.Modbus Modbus.Net.Modbus @@ -30,30 +30,7 @@ - - - - - - - - - - - - - - + diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocal.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocal.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocalLinker.cs similarity index 95% rename from Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocalLinker.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocalLinker.cs index a428838..1467900 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiInTcpProtocalLinker.cs @@ -25,6 +25,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiInTcpProtocalLinker(string ip, int port) : base(ip, port) { + ((BaseConnector)BaseConnector).AddController(new FIFOController(500)); } /// diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs similarity index 94% rename from Modbus.Net/src/Modbus.Common/ModbusAsciiProtocalLinker.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs index 1b45171..28a5028 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs @@ -16,6 +16,7 @@ namespace Modbus.Net.Modbus public ModbusAsciiProtocalLinker(string com, int slaveAddress) : base(com, 9600, Parity.None, StopBits.One, 8, slaveAddress) { + ((BaseConnector)BaseConnector).AddController(new FIFOController(500)); } /// diff --git a/Modbus.Net/src/Modbus.Common/ModbusMachine.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusMachine.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusProtocal.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusProtocalLinkerBytesExtend.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusProtocalLinkerBytesExtend.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocal.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocal.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocalLinker.cs similarity index 94% rename from Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocalLinker.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocalLinker.cs index 264e035..896178c 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocalLinker.cs @@ -24,6 +24,7 @@ namespace Modbus.Net.Modbus public ModbusRtuInTcpProtocalLinker(string ip, int port) : base(ip, port) { + ((BaseConnector)BaseConnector).AddController(new FIFOController(500)); } /// diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs similarity index 93% rename from Modbus.Net/src/Modbus.Common/ModbusRtuProtocalLinker.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs index 7c58088..06f71fb 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusRtuProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs @@ -15,6 +15,7 @@ namespace Modbus.Net.Modbus public ModbusRtuProtocalLinker(string com, int slaveAddress) : base(com, 9600, Parity.None, StopBits.One, 8, slaveAddress) { + ((BaseConnector)BaseConnector).AddController(new FIFOController(500)); } /// diff --git a/Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusTcpProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs similarity index 100% rename from Modbus.Net/src/Modbus.Common/ModbusTcpProtocalLinker.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs diff --git a/Modbus.Net/src/Modbus.Common/ModbusUtility.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs similarity index 98% rename from Modbus.Net/src/Modbus.Common/ModbusUtility.cs rename to Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs index 5434ce2..f00c194 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusUtility.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs @@ -142,13 +142,13 @@ namespace Modbus.Net.Modbus switch (_modbusType) { //Rtu协议 - /*case ModbusType.Rtu: + case ModbusType.Rtu: { Wrapper = ConnectionString == null ? new ModbusRtuProtocal(SlaveAddress, MasterAddress, Endian) : new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian); break; - }*/ + } //Tcp协议 case ModbusType.Tcp: { @@ -160,8 +160,7 @@ namespace Modbus.Net.Modbus MasterAddress, Endian)); break; } - //Ascii协议 - /* + //Ascii协议 case ModbusType.Ascii: { Wrapper = ConnectionString == null @@ -191,7 +190,6 @@ namespace Modbus.Net.Modbus MasterAddress, Endian)); break; } - */ } } } 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 deleted file mode 100644 index 33bbba5..0000000 --- a/Modbus.Net/Modbus.Net.Siemens.Core/Modbus.Net.Siemens.Core.csproj +++ /dev/null @@ -1,51 +0,0 @@ - - - - netstandard2.0 - Modbus.Net.Siemens.Core - Modbus.Net.Siemens - Modbus.Net.Siemens.Core - 1.4.1 - 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/src/Siemens.Common/AddressFormaterSiemens.cs b/Modbus.Net/Modbus.Net.Siemens/AddressFormaterSiemens.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/AddressFormaterSiemens.cs rename to Modbus.Net/Modbus.Net.Siemens/AddressFormaterSiemens.cs diff --git a/Modbus.Net/src/Siemens.Common/AddressTranslatorSiemens.cs b/Modbus.Net/Modbus.Net.Siemens/AddressTranslatorSiemens.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/AddressTranslatorSiemens.cs rename to Modbus.Net/Modbus.Net.Siemens/AddressTranslatorSiemens.cs diff --git a/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj b/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj index b906244..96b7930 100644 --- a/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj +++ b/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj @@ -1,7 +1,7 @@  - net45 + net45;netstandard20 Modbus.Net.Siemens Modbus.Net.Siemens Modbus.Net.Siemens @@ -25,26 +25,11 @@ bin\Debug\net45\Modbus.Net.Siemens.xml - - - - - - - - - - - - - + diff --git a/Modbus.Net/src/Siemens.Common/SiemensMachine.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/SiemensMachine.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs diff --git a/Modbus.Net/src/Siemens.Common/SiemensPpiProtocal.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocal.cs similarity index 93% rename from Modbus.Net/src/Siemens.Common/SiemensPpiProtocal.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocal.cs index fe51273..8311e38 100644 --- a/Modbus.Net/src/Siemens.Common/SiemensPpiProtocal.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocal.cs @@ -65,15 +65,6 @@ namespace Modbus.Net.Siemens return await base.SendReceiveAsync(unit, content); } - /// - /// 连接设备 - /// - /// 是否连接成功 - public override bool Connect() - { - return AsyncHelper.RunSync(ConnectAsync); - } - /// /// 连接设备 /// diff --git a/Modbus.Net/src/Siemens.Common/SiemensPpiProtocalLinker.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocalLinker.cs similarity index 97% rename from Modbus.Net/src/Siemens.Common/SiemensPpiProtocalLinker.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocalLinker.cs index 01a6ef2..5e04bd0 100644 --- a/Modbus.Net/src/Siemens.Common/SiemensPpiProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocalLinker.cs @@ -17,6 +17,7 @@ namespace Modbus.Net.Siemens public SiemensPpiProtocalLinker(string com, int slaveAddress) : base(com, 9600, Parity.Even, StopBits.One, 8, slaveAddress) { + ((BaseConnector)BaseConnector).AddController(new FIFOController(500)); } /// diff --git a/Modbus.Net/src/Siemens.Common/SiemensProtocal.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/SiemensProtocal.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs diff --git a/Modbus.Net/src/Siemens.Common/SiemensProtocalLinkerBytesExtend.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensProtocalLinkerBytesExtend.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/SiemensProtocalLinkerBytesExtend.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensProtocalLinkerBytesExtend.cs diff --git a/Modbus.Net/src/Siemens.Common/SiemensStructDefinition.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensStructDefinition.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/SiemensStructDefinition.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensStructDefinition.cs diff --git a/Modbus.Net/src/Siemens.Common/SiemensTcpProtocal.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocal.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/SiemensTcpProtocal.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocal.cs diff --git a/Modbus.Net/src/Siemens.Common/SiemensTcpProtocalLinker.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocalLinker.cs similarity index 100% rename from Modbus.Net/src/Siemens.Common/SiemensTcpProtocalLinker.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensTcpProtocalLinker.cs diff --git a/Modbus.Net/src/Siemens.Common/SiemensUtility.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs similarity index 99% rename from Modbus.Net/src/Siemens.Common/SiemensUtility.cs rename to Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs index 729c0a7..4daf5c3 100644 --- a/Modbus.Net/src/Siemens.Common/SiemensUtility.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs @@ -183,8 +183,7 @@ namespace Modbus.Net.Siemens _siemensType = value; switch (_siemensType) { - //PPI - /* + //PPI case SiemensType.Ppi: { Wrapper = ConnectionString == null @@ -196,8 +195,7 @@ namespace Modbus.Net.Siemens case SiemensType.Mpi: { throw new NotImplementedException(); - } - */ + } //Ethenet case SiemensType.Tcp: { diff --git a/Modbus.Net/Modbus.Net.sln b/Modbus.Net/Modbus.Net.sln index 039d138..94c1d72 100644 --- a/Modbus.Net/Modbus.Net.sln +++ b/Modbus.Net/Modbus.Net.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.16 +VisualStudioVersion = 15.0.27130.2010 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Modbus.Net", "Modbus.Net\Modbus.Net.csproj", "{124EBEF2-8960-4447-84CF-1D683B1EF7CC}" EndProject @@ -30,12 +30,6 @@ 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("{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 Debug|Any CPU = Debug|Any CPU @@ -78,18 +72,6 @@ Global {25FABD48-D82E-4E08-91A4-46F7057EC954}.Debug|Any CPU.Build.0 = Debug|Any CPU {25FABD48-D82E-4E08-91A4-46F7057EC954}.Release|Any CPU.ActiveCfg = Release|Any CPU {25FABD48-D82E-4E08-91A4-46F7057EC954}.Release|Any CPU.Build.0 = Release|Any CPU - {BBC091FC-A995-4C06-96F1-F91ECD70FA7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {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 diff --git a/Modbus.Net/src/Base.Common/AddressCombiner.cs b/Modbus.Net/Modbus.Net/AddressCombiner.cs similarity index 100% rename from Modbus.Net/src/Base.Common/AddressCombiner.cs rename to Modbus.Net/Modbus.Net/AddressCombiner.cs diff --git a/Modbus.Net/src/Base.Common/AddressFormater.cs b/Modbus.Net/Modbus.Net/AddressFormater.cs similarity index 100% rename from Modbus.Net/src/Base.Common/AddressFormater.cs rename to Modbus.Net/Modbus.Net/AddressFormater.cs diff --git a/Modbus.Net/src/Base.Common/AddressHelper.cs b/Modbus.Net/Modbus.Net/AddressHelper.cs similarity index 100% rename from Modbus.Net/src/Base.Common/AddressHelper.cs rename to Modbus.Net/Modbus.Net/AddressHelper.cs diff --git a/Modbus.Net/src/Base.Common/AddressTranslator.cs b/Modbus.Net/Modbus.Net/AddressTranslator.cs similarity index 100% rename from Modbus.Net/src/Base.Common/AddressTranslator.cs rename to Modbus.Net/Modbus.Net/AddressTranslator.cs diff --git a/Modbus.Net/src/Base.Common/AsyncHelper.cs b/Modbus.Net/Modbus.Net/AsyncHelper.cs similarity index 100% rename from Modbus.Net/src/Base.Common/AsyncHelper.cs rename to Modbus.Net/Modbus.Net/AsyncHelper.cs diff --git a/Modbus.Net/src/Base.Common/BaseConnector.cs b/Modbus.Net/Modbus.Net/BaseConnector.cs similarity index 100% rename from Modbus.Net/src/Base.Common/BaseConnector.cs rename to Modbus.Net/Modbus.Net/BaseConnector.cs diff --git a/Modbus.Net/src/Base.Common/BaseController.cs b/Modbus.Net/Modbus.Net/BaseController.cs similarity index 99% rename from Modbus.Net/src/Base.Common/BaseController.cs rename to Modbus.Net/Modbus.Net/BaseController.cs index bd44786..2b75d76 100644 --- a/Modbus.Net/src/Base.Common/BaseController.cs +++ b/Modbus.Net/Modbus.Net/BaseController.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Serilog; -using Serilog.Events; namespace Modbus.Net { diff --git a/Modbus.Net/src/Base.Common/BaseMachine.cs b/Modbus.Net/Modbus.Net/BaseMachine.cs similarity index 100% rename from Modbus.Net/src/Base.Common/BaseMachine.cs rename to Modbus.Net/Modbus.Net/BaseMachine.cs diff --git a/Modbus.Net/src/Base.Common/BaseMachineExtend.cs b/Modbus.Net/Modbus.Net/BaseMachineExtend.cs similarity index 100% rename from Modbus.Net/src/Base.Common/BaseMachineExtend.cs rename to Modbus.Net/Modbus.Net/BaseMachineExtend.cs diff --git a/Modbus.Net/src/Base.Common/BaseProtocal.cs b/Modbus.Net/Modbus.Net/BaseProtocal.cs similarity index 100% rename from Modbus.Net/src/Base.Common/BaseProtocal.cs rename to Modbus.Net/Modbus.Net/BaseProtocal.cs diff --git a/Modbus.Net/src/Base.Common/BaseUtility.cs b/Modbus.Net/Modbus.Net/BaseUtility.cs similarity index 100% rename from Modbus.Net/src/Base.Common/BaseUtility.cs rename to Modbus.Net/Modbus.Net/BaseUtility.cs diff --git a/Modbus.Net/src/Base.Common/CRC16.cs b/Modbus.Net/Modbus.Net/CRC16.cs similarity index 100% rename from Modbus.Net/src/Base.Common/CRC16.cs rename to Modbus.Net/Modbus.Net/CRC16.cs diff --git a/Modbus.Net/src/Base.Common/ComConnector.cs b/Modbus.Net/Modbus.Net/ComConnector.cs similarity index 74% rename from Modbus.Net/src/Base.Common/ComConnector.cs rename to Modbus.Net/Modbus.Net/ComConnector.cs index 32dc968..d419719 100644 --- a/Modbus.Net/src/Base.Common/ComConnector.cs +++ b/Modbus.Net/Modbus.Net/ComConnector.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using Nito.AsyncEx; using Serilog; namespace Modbus.Net @@ -18,7 +19,7 @@ namespace Modbus.Net /// /// 发送锁 /// - public object Lock { get; set; } = new object(); + public AsyncLock Lock { get; set; } = new AsyncLock(); } /// @@ -66,6 +67,9 @@ namespace Modbus.Net private int _sendCount; + private Task _receiveThread; + private bool _taskCancel = false; + /// /// Dispose是否执行 /// @@ -200,69 +204,6 @@ namespace Modbus.Net return nBytelen; } - - /// - /// 字符数组转字符串16进制 - /// - /// 二进制字节 - /// 类似"01 02 0F" - public static string ByteToString(byte[] inBytes) - { - var stringOut = ""; - foreach (var inByte in inBytes) - stringOut = stringOut + $"{inByte:X2}" + " "; - - return stringOut.Trim(); - } - - /// - /// strhex 转字节数组 - /// - /// 类似"01 02 0F" 用空格分开的 - /// - public static byte[] StringToByte(string inString) - { - var byteStrings = inString.Split(" ".ToCharArray()); - var byteOut = new byte[byteStrings.Length]; - for (var i = 0; i <= byteStrings.Length - 1; i++) - byteOut[i] = byte.Parse(byteStrings[i], NumberStyles.HexNumber); - return byteOut; - } - - /// - /// strhex 转字节数组 - /// - /// 类似"01 02 0F" 中间无空格 - /// - public static byte[] StringToByte_2(string inString) - { - inString = inString.Replace(" ", ""); - - var byteStrings = new string[inString.Length / 2]; - var j = 0; - for (var i = 0; i < byteStrings.Length; i++) - { - byteStrings[i] = inString.Substring(j, 2); - j += 2; - } - - var byteOut = new byte[byteStrings.Length]; - for (var i = 0; i <= byteStrings.Length - 1; i++) - byteOut[i] = byte.Parse(byteStrings[i], NumberStyles.HexNumber); - - return byteOut; - } - - /// - /// 字符串 转16进制字符串 - /// - /// unico - /// 类似“01 0f” - public static string Str_To_0X(string inString) - { - return ByteToString(Encoding.Default.GetBytes(inString)); - } - /// /// 虚方法,可供子类重写 /// @@ -346,7 +287,7 @@ namespace Modbus.Net /// 连接串口 /// /// 是否连接成功 - public override bool Connect() + protected bool Connect() { try { @@ -364,6 +305,8 @@ namespace Modbus.Net Linkers.Add(_slave, _com); SerialPort.Open(); Log.Information("Com client {ConnectionToken} connect success", ConnectionToken); + Controller.SendStart(); + ReceiveMsgThreadStart(); return true; } catch (Exception e) @@ -391,6 +334,8 @@ namespace Modbus.Net if (Linkers.ContainsKey(_slave) && Connectors.ContainsKey(_com)) try { + ReceiveMsgThreadStop(); + Controller.SendStop(); Dispose(); Log.Information("Com client {ConnectionToken} disconnect success", ConnectionToken); return true; @@ -412,101 +357,152 @@ namespace Modbus.Net /// 是否发送成功 public string SendMsg(string sendStr) { - var myByte = StringToByte_2(sendStr); + var myByte = sendStr.StringToByte_2(); var returnBytes = SendMsg(myByte); - return ByteToString(returnBytes); + return returnBytes.ByteToString(); + } + + protected void CheckOpen() + { + if (!SerialPort.IsOpen) + { + try + { + SerialPort.Open(); + } + catch (Exception err) + { + Log.Error(err, "Com client {ConnectionToken} open error", ConnectionToken); + Dispose(); + try + { + SerialPort.Open(); + } + catch (Exception err2) + { + Log.Error(err2, "Com client {ConnectionToken} open error", ConnectionToken); + Dispose(); + } + } + } } /// - /// 带返回发送数据 + /// 发送数据,需要返回 /// - /// 需要发送的数据 + /// 发送的数据 /// 是否发送成功 - public override byte[] SendMsg(byte[] sendbytes) + protected byte[] SendMsg(byte[] message) { - try + return AsyncHelper.RunSync(() => SendMsgAsync(message)); + } + + /// + /// 发送数据,需要返回 + /// + /// 发送的数据 + /// 是否发送成功 + public override async Task SendMsgAsync(byte[] message) + { + CheckOpen(); + var task = SendMsgInner(message).WithCancellation(new CancellationTokenSource(10000).Token); + var ans = await task; + if (task.IsCanceled) { - if (!SerialPort.IsOpen) - try - { - SerialPort.Open(); - } - catch (Exception err) - { - Log.Error(err, "Com client {ConnectionToken} open error", ConnectionToken); - Dispose(); - SerialPort.Open(); - } + Controller.ForceRemoveWaitingMessage(ans); + return null; + } + return ans.ReceiveMessage; + } - byte[] returnBytes; + private async Task SendMsgInner(byte[] message) + { + var messageSendingdef = Controller.AddMessage(message); + messageSendingdef.SendMutex.WaitOne(); + await SendMsgWithoutConfirm(message); + messageSendingdef.ReceiveMutex.WaitOne(); + return messageSendingdef; + } - lock (SerialPort.Lock) + protected override async Task SendMsgWithoutConfirm(byte[] message) + { + using (await SerialPort.Lock.LockAsync()) + { + try { - try - { - Log.Verbose("Com client {ConnectionToken} send msg length: {Length}", ConnectionToken, - sendbytes.Length); - Log.Verbose( - $"Com client {ConnectionToken} send msg: {String.Concat(sendbytes.Select(p => " " + p.ToString("X2")))}"); - SerialPort.Write(sendbytes, 0, sendbytes.Length); - } - catch (Exception err) - { - Log.Error(err, "Com client {ConnectionToken} send msg error", ConnectionToken); - return null; - } - RefreshSendCount(); + Log.Verbose("Com client {ConnectionToken} send msg length: {Length}", ConnectionToken, + message.Length); + Log.Verbose( + $"Com client {ConnectionToken} send msg: {String.Concat(message.Select(p => " " + p.ToString("X2")))}"); + await Task.Run(()=>SerialPort.Write(message, 0, message.Length)); + } + catch (Exception err) + { + Log.Error(err, "Com client {ConnectionToken} send msg error", ConnectionToken); + } + RefreshSendCount(); + } + } - try + protected override void ReceiveMsgThreadStart() + { + _receiveThread = Task.Run(()=>ReceiveMessage()); + } + + protected override void ReceiveMsgThreadStop() + { + _taskCancel = true; + } + + private void ReceiveMessage() + { + while (!_taskCancel) + { + try + { + var returnBytes = ReadMsg(); + if (returnBytes != null) { - returnBytes = ReadMsg(); Log.Verbose("Com client {ConnectionToken} receive msg length: {Length}", ConnectionToken, returnBytes.Length); Log.Verbose( $"Com client {ConnectionToken} receive msg: {String.Concat(returnBytes.Select(p => " " + p.ToString("X2")))}"); - } - catch (Exception e) - { - Log.Error(e, "Com client {ConnectionToken} read msg error", ConnectionToken); - return null; + + var isMessageConfirmed = Controller.ConfirmMessage(returnBytes); + if (isMessageConfirmed == false) + { + //主动传输事件 + } } RefreshReceiveCount(); - } - return returnBytes; - } - catch (Exception err) - { - Log.Error(err, "Com client {ConnectionToken} read error", ConnectionToken); - Dispose(); - return null; - } - } - /// - /// 带返回发送数据 - /// - /// 需要发送的数据 - /// 是否发送成功 - public override Task SendMsgAsync(byte[] message) - { - return Task.FromResult(SendMsg(message)); + Thread.Sleep(500); + } + catch (Exception e) + { + Log.Error(e, "Com client {ConnectionToken} read msg error", ConnectionToken); + } + } } private byte[] ReadMsg() { try { - if (!SerialPort.IsOpen) - SerialPort.Open(); + CheckOpen(); byte[] data; Thread.Sleep(100); var i = ReadComm(out data, 10, 5000, 1000); - var returndata = new byte[i]; - Array.Copy(data, 0, returndata, 0, i); - return returndata; + if (i > 0) + { + var returndata = new byte[i]; + Array.Copy(data, 0, returndata, 0, i); + return returndata; + } + return null; } catch (Exception e) { diff --git a/Modbus.Net/src/Base.Common/ComProtocalLinker.cs b/Modbus.Net/Modbus.Net/ComProtocalLinker.cs similarity index 100% rename from Modbus.Net/src/Base.Common/ComProtocalLinker.cs rename to Modbus.Net/Modbus.Net/ComProtocalLinker.cs diff --git a/Modbus.Net/src/Base.Common/IConnector.cs b/Modbus.Net/Modbus.Net/IConnector.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IConnector.cs rename to Modbus.Net/Modbus.Net/IConnector.cs diff --git a/Modbus.Net/src/Base.Common/IController.cs b/Modbus.Net/Modbus.Net/IController.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IController.cs rename to Modbus.Net/Modbus.Net/IController.cs diff --git a/Modbus.Net/src/Base.Common/IMachineMethod.cs b/Modbus.Net/Modbus.Net/IMachineMethod.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IMachineMethod.cs rename to Modbus.Net/Modbus.Net/IMachineMethod.cs diff --git a/Modbus.Net/src/Base.Common/IProtocal.cs b/Modbus.Net/Modbus.Net/IProtocal.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IProtocal.cs rename to Modbus.Net/Modbus.Net/IProtocal.cs diff --git a/Modbus.Net/src/Base.Common/IProtocalFormatting.cs b/Modbus.Net/Modbus.Net/IProtocalFormatting.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IProtocalFormatting.cs rename to Modbus.Net/Modbus.Net/IProtocalFormatting.cs diff --git a/Modbus.Net/src/Base.Common/IProtocalLinker.cs b/Modbus.Net/Modbus.Net/IProtocalLinker.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IProtocalLinker.cs rename to Modbus.Net/Modbus.Net/IProtocalLinker.cs diff --git a/Modbus.Net/src/Base.Common/IProtocalLinkerBytesExtend.cs b/Modbus.Net/Modbus.Net/IProtocalLinkerBytesExtend.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IProtocalLinkerBytesExtend.cs rename to Modbus.Net/Modbus.Net/IProtocalLinkerBytesExtend.cs diff --git a/Modbus.Net/src/Base.Common/IUtilityMethod.cs b/Modbus.Net/Modbus.Net/IUtilityMethod.cs similarity index 100% rename from Modbus.Net/src/Base.Common/IUtilityMethod.cs rename to Modbus.Net/Modbus.Net/IUtilityMethod.cs diff --git a/Modbus.Net/Modbus.Net/Modbus.Net.csproj b/Modbus.Net/Modbus.Net/Modbus.Net.csproj index 8a14256..489ea1f 100644 --- a/Modbus.Net/Modbus.Net/Modbus.Net.csproj +++ b/Modbus.Net/Modbus.Net/Modbus.Net.csproj @@ -1,7 +1,7 @@  - net45 + net45;netstandard20 Modbus.Net Modbus.Net Modbus.Net @@ -27,46 +27,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + + + + + + + + + + \ No newline at end of file diff --git a/Modbus.Net/src/Base.Common/PipeUnit.cs b/Modbus.Net/Modbus.Net/PipeUnit.cs similarity index 100% rename from Modbus.Net/src/Base.Common/PipeUnit.cs rename to Modbus.Net/Modbus.Net/PipeUnit.cs diff --git a/Modbus.Net/src/Base.Common/ProtocalLinker.cs b/Modbus.Net/Modbus.Net/ProtocalLinker.cs similarity index 100% rename from Modbus.Net/src/Base.Common/ProtocalLinker.cs rename to Modbus.Net/Modbus.Net/ProtocalLinker.cs diff --git a/Modbus.Net/src/Base.Common/ProtocalUnit.cs b/Modbus.Net/Modbus.Net/ProtocalUnit.cs similarity index 100% rename from Modbus.Net/src/Base.Common/ProtocalUnit.cs rename to Modbus.Net/Modbus.Net/ProtocalUnit.cs diff --git a/Modbus.Net/Modbus.Net/SerialPortHelper.cs b/Modbus.Net/Modbus.Net/SerialPortHelper.cs new file mode 100644 index 0000000..52938c9 --- /dev/null +++ b/Modbus.Net/Modbus.Net/SerialPortHelper.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Modbus.Net +{ + public static class SerialPortHelper + { + /// + /// 字符数组转字符串16进制 + /// + /// 二进制字节 + /// 类似"01 02 0F" + public static string ByteToString(this byte[] inBytes) + { + var stringOut = ""; + foreach (var inByte in inBytes) + stringOut = stringOut + $"{inByte:X2}" + " "; + + return stringOut.Trim(); + } + + /// + /// strhex 转字节数组 + /// + /// 类似"01 02 0F" 用空格分开的 + /// + public static byte[] StringToByte(this string inString) + { + var byteStrings = inString.Split(" ".ToCharArray()); + var byteOut = new byte[byteStrings.Length]; + for (var i = 0; i <= byteStrings.Length - 1; i++) + byteOut[i] = byte.Parse(byteStrings[i], NumberStyles.HexNumber); + return byteOut; + } + + /// + /// strhex 转字节数组 + /// + /// 类似"01 02 0F" 中间无空格 + /// + public static byte[] StringToByte_2(this string inString) + { + inString = inString.Replace(" ", ""); + + var byteStrings = new string[inString.Length / 2]; + var j = 0; + for (var i = 0; i < byteStrings.Length; i++) + { + byteStrings[i] = inString.Substring(j, 2); + j += 2; + } + + var byteOut = new byte[byteStrings.Length]; + for (var i = 0; i <= byteStrings.Length - 1; i++) + byteOut[i] = byte.Parse(byteStrings[i], NumberStyles.HexNumber); + + return byteOut; + } + + /// + /// 字符串 转16进制字符串 + /// + /// unico + /// 类似“01 0f” + public static string Str_To_0X(this string inString) + { + return ByteToString(Encoding.Default.GetBytes(inString)); + } + } +} diff --git a/Modbus.Net/src/Base.Common/TaskManager.cs b/Modbus.Net/Modbus.Net/TaskManager.cs similarity index 100% rename from Modbus.Net/src/Base.Common/TaskManager.cs rename to Modbus.Net/Modbus.Net/TaskManager.cs diff --git a/Modbus.Net/src/Base.Common/TcpConnector.cs b/Modbus.Net/Modbus.Net/TcpConnector.cs similarity index 99% rename from Modbus.Net/src/Base.Common/TcpConnector.cs rename to Modbus.Net/Modbus.Net/TcpConnector.cs index d12d3e8..147da72 100644 --- a/Modbus.Net/src/Base.Common/TcpConnector.cs +++ b/Modbus.Net/Modbus.Net/TcpConnector.cs @@ -196,6 +196,7 @@ namespace Modbus.Net try { Dispose(); + Controller.SendStop(); Log.Information("Tcp client {ConnectionToken} disconnected successfully", ConnectionToken); return true; } diff --git a/Modbus.Net/src/Base.Common/TcpProtocalLinker.cs b/Modbus.Net/Modbus.Net/TcpProtocalLinker.cs similarity index 100% rename from Modbus.Net/src/Base.Common/TcpProtocalLinker.cs rename to Modbus.Net/Modbus.Net/TcpProtocalLinker.cs diff --git a/Modbus.Net/src/Base.Common/TypeExtensions.cs b/Modbus.Net/Modbus.Net/TypeExtensions.cs similarity index 100% rename from Modbus.Net/src/Base.Common/TypeExtensions.cs rename to Modbus.Net/Modbus.Net/TypeExtensions.cs diff --git a/Modbus.Net/src/Base.Common/ValueHelper.cs b/Modbus.Net/Modbus.Net/ValueHelper.cs similarity index 100% rename from Modbus.Net/src/Base.Common/ValueHelper.cs rename to Modbus.Net/Modbus.Net/ValueHelper.cs diff --git a/Modbus.Net/src/Base.Common/Modbus.Net.csproj b/Modbus.Net/src/Base.Common/Modbus.Net.csproj deleted file mode 100644 index 584ec11..0000000 --- a/Modbus.Net/src/Base.Common/Modbus.Net.csproj +++ /dev/null @@ -1,105 +0,0 @@ - - - - - Debug - AnyCPU - {124EBEF2-8960-4447-84CF-1D683B1EF7CC} - Library - Properties - Modbus.Net - Modbus.Net - v4.5 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - ConfigurationManager.resx - - - - - - - - - - - - - Code - - - - - - - PublicResXFileCodeGenerator - ConfigurationManager.Designer.cs - - - - - Designer - - - - - - \ No newline at end of file diff --git a/Tests/Modbus.Net.Tests/ModbusTest.cs b/Tests/Modbus.Net.Tests/ModbusTest.cs index 2c2353c..388f358 100644 --- a/Tests/Modbus.Net.Tests/ModbusTest.cs +++ b/Tests/Modbus.Net.Tests/ModbusTest.cs @@ -18,9 +18,9 @@ namespace Modbus.Net.Tests [TestInitialize] public void Init() { - _modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, "192.168.3.10", null, true, 2, 0); + //_modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, "192.168.3.10", null, true, 2, 0); - //_modbusRtuMachine = new ModbusMachine("2", ModbusType.Rtu, "COM3", null, true, 2, 0); + _modbusRtuMachine = new ModbusMachine("2", ModbusType.Rtu, "COM5", null, true, 2, 0); //_modbusAsciiMachine = new ModbusMachine("3", ModbusType.Ascii, "COM5", null, true, 2, 0); } @@ -50,17 +50,17 @@ namespace Modbus.Net.Tests } }; - _modbusTcpMachine.GetAddresses = addresses; + //_modbusTcpMachine.GetAddresses = addresses; //_modbusAsciiMachine.GetAddresses = addresses; - //_modbusRtuMachine.GetAddresses = addresses; - await _modbusTcpMachine.SetDatasAsync(MachineSetDataType.Address, dic1); + _modbusRtuMachine.GetAddresses = addresses; + //await _modbusTcpMachine.SetDatasAsync(MachineSetDataType.Address, dic1); //await _modbusAsciiMachine.SetDatasAsync(MachineSetDataType.Address, dic1); - //await _modbusRtuMachine.SetDatasAsync(MachineSetDataType.Address, dic1); - var ans = await _modbusTcpMachine.GetDatasAsync(MachineGetDataType.Address); - //var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineGetDataType.Address); + await _modbusRtuMachine.SetDatasAsync(MachineSetDataType.Address, dic1); + //var ans = await _modbusTcpMachine.GetDatasAsync(MachineGetDataType.Address); + var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineGetDataType.Address); //var ans3 = await _modbusAsciiMachine.GetDatasAsync(MachineGetDataType.Address); - Assert.AreEqual(ans["0X 1.0"].PlcValue, dic1["0X 1.0"]); - //Assert.AreEqual(ans2["0X 1.0"].PlcValue, dic1["0X 1.0"]); + //Assert.AreEqual(ans["0X 1.0"].PlcValue, dic1["0X 1.0"]); + Assert.AreEqual(ans2["0X 1.0"].PlcValue, dic1["0X 1.0"]); //Assert.AreEqual(ans3["0X 1.0"].PlcValue, dic1["0X 1.0"]); } @@ -317,8 +317,8 @@ namespace Modbus.Net.Tests public void MachineClean() { //_modbusAsciiMachine.Disconnect(); - //_modbusRtuMachine.Disconnect(); - _modbusTcpMachine.Disconnect(); + _modbusRtuMachine.Disconnect(); + //_modbusTcpMachine.Disconnect(); } } }