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 index 30ded4c..b544e3f 100644 --- a/Modbus.Net/Modbus.Net.Modbus.Core/Modbus.Net.Modbus.Core.csproj +++ b/Modbus.Net/Modbus.Net.Modbus.Core/Modbus.Net.Modbus.Core.csproj @@ -4,7 +4,7 @@ Modbus.Net.Modbus.Core Modbus.Net.Modbus Modbus.Net.Modbus.Core - 1.3.10 + 1.3.10.2 Chris L.(Luo Sheng) Hangzhou Delian IoT Science Technology Co.,Ltd. Modbus.Net.Modbus diff --git a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj index 7995b56..31f124e 100644 --- a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj +++ b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj @@ -5,7 +5,7 @@ Modbus.Net.Modbus Modbus.Net.Modbus Modbus.Net.Modbus - 1.3.10 + 1.3.10.2 Chris L.(Luo Sheng) Hangzhou Delian IoT Science Technology Co.,Ltd. Modbus.Net.Modbus diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs index 943a681..c3d8c3e 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs +++ b/Modbus.Net/src/Modbus.Common/ModbusAsciiInTcpProtocal.cs @@ -12,21 +12,19 @@ namespace Modbus.Net.Modbus /// /// 从站号 /// 主站号 - /// 端格式 - public ModbusAsciiInTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian) + public ModbusAsciiInTcpProtocal(byte slaveAddress, byte masterAddress) + : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) { } /// /// 构造函数 /// - /// 串口地址 + /// ip地址 /// 从站号 /// 主站号 - /// 端格式 - public ModbusAsciiInTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusAsciiInTcpProtocal(string ip, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusAsciiInTcpProtocalLinker(ip, slaveAddress); } @@ -38,9 +36,8 @@ namespace Modbus.Net.Modbus /// 端口 /// 从站号 /// 主站号 - /// 端格式 - public ModbusAsciiInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusAsciiInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusTcpProtocalLinker(ip, port); } diff --git a/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs index 22c5b58..064e8f2 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs +++ b/Modbus.Net/src/Modbus.Common/ModbusAsciiProtocal.cs @@ -12,9 +12,8 @@ namespace Modbus.Net.Modbus /// /// 从站号 /// 主站号 - /// 端格式 - public ModbusAsciiProtocal(byte slaveAddress, byte masterAddress, Endian endian) - : this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress, endian) + public ModbusAsciiProtocal(byte slaveAddress, byte masterAddress) + : this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress) { } @@ -24,9 +23,8 @@ namespace Modbus.Net.Modbus /// 串口地址 /// 从站号 /// 主站号 - /// 端格式 - public ModbusAsciiProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusAsciiProtocal(string com, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusAsciiProtocalLinker(com, slaveAddress); } diff --git a/Modbus.Net/src/Modbus.Common/ModbusProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusProtocal.cs index c6c3d52..062ffc6 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusProtocal.cs +++ b/Modbus.Net/src/Modbus.Common/ModbusProtocal.cs @@ -98,9 +98,8 @@ namespace Modbus.Net.Modbus /// /// 从站地址 /// 主站地址 - /// 端格式 - protected ModbusProtocal(byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + protected ModbusProtocal(byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress, Endian.BigEndianLsb) { } diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs index 07cb907..58e9638 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs +++ b/Modbus.Net/src/Modbus.Common/ModbusRtuInTcpProtocal.cs @@ -13,9 +13,8 @@ namespace Modbus.Net.Modbus /// /// 从站号 /// 主站号 - /// 端格式 - public ModbusRtuInTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian) + public ModbusRtuInTcpProtocal(byte slaveAddress, byte masterAddress) + : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) { } @@ -25,9 +24,8 @@ namespace Modbus.Net.Modbus /// ip地址 /// 从站号 /// 主站号 - /// 端格式 - public ModbusRtuInTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusRtuInTcpProtocal(string ip, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusTcpProtocalLinker(ip); } @@ -35,12 +33,12 @@ namespace Modbus.Net.Modbus /// /// 构造函数 /// - /// 串口 + /// ip地址 + /// 端口 /// 从站号 /// 主站号 - /// 端格式 - public ModbusRtuInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusRtuInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusRtuInTcpProtocalLinker(ip, port); } diff --git a/Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs index 46a7b17..987643c 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs +++ b/Modbus.Net/src/Modbus.Common/ModbusRtuProtocal.cs @@ -12,9 +12,8 @@ namespace Modbus.Net.Modbus /// /// 从站号 /// 主站号 - /// 端格式 - public ModbusRtuProtocal(byte slaveAddress, byte masterAddress, Endian endian) - : this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress, endian) + public ModbusRtuProtocal(byte slaveAddress, byte masterAddress) + : this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress) { } @@ -24,9 +23,8 @@ namespace Modbus.Net.Modbus /// 串口 /// 从站号 /// 主站号 - /// 端格式 - public ModbusRtuProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusRtuProtocal(string com, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusRtuProtocalLinker(com, slaveAddress); } diff --git a/Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs b/Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs index 2822c8f..85368a3 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs +++ b/Modbus.Net/src/Modbus.Common/ModbusTcpProtocal.cs @@ -12,9 +12,8 @@ namespace Modbus.Net.Modbus /// /// 从站号 /// 主站号 - /// 端格式 - public ModbusTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian) - : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian) + public ModbusTcpProtocal(byte slaveAddress, byte masterAddress) + : this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress) { } @@ -24,9 +23,8 @@ namespace Modbus.Net.Modbus /// ip地址 /// 从站号 /// 主站号 - /// 端格式 - public ModbusTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusTcpProtocal(string ip, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusTcpProtocalLinker(ip); } @@ -38,9 +36,8 @@ namespace Modbus.Net.Modbus /// 端口 /// 从站号 /// 主站号 - /// 端格式 - public ModbusTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian) - : base(slaveAddress, masterAddress, endian) + public ModbusTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress) + : base(slaveAddress, masterAddress) { ProtocalLinker = new ModbusTcpProtocalLinker(ip, port); } diff --git a/Modbus.Net/src/Modbus.Common/ModbusUtility.cs b/Modbus.Net/src/Modbus.Common/ModbusUtility.cs index aaeb282..10edafd 100644 --- a/Modbus.Net/src/Modbus.Common/ModbusUtility.cs +++ b/Modbus.Net/src/Modbus.Common/ModbusUtility.cs @@ -35,6 +35,9 @@ namespace Modbus.Net.Modbus AsciiInTcp = 4, } + /// + /// 写单个数据方法接口 + /// public interface IUtilityMethodWriteSingle : IUtilityMethod { /// @@ -145,49 +148,49 @@ namespace Modbus.Net.Modbus case ModbusType.Rtu: { Wrapper = ConnectionString == null - ? new ModbusRtuProtocal(SlaveAddress, MasterAddress, Endian) - : new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian); + ? new ModbusRtuProtocal(SlaveAddress, MasterAddress) + : new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress); break; } //Tcp协议 case ModbusType.Tcp: { Wrapper = ConnectionString == null - ? new ModbusTcpProtocal(SlaveAddress, MasterAddress, Endian) + ? new ModbusTcpProtocal(SlaveAddress, MasterAddress) : (ConnectionStringPort == null - ? new ModbusTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian) + ? new ModbusTcpProtocal(ConnectionString, SlaveAddress, MasterAddress) : new ModbusTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress, - MasterAddress, Endian)); + MasterAddress)); break; } //Ascii协议 case ModbusType.Ascii: { Wrapper = ConnectionString == null - ? new ModbusAsciiProtocal(SlaveAddress, MasterAddress, Endian) - : new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian); + ? new ModbusAsciiProtocal(SlaveAddress, MasterAddress) + : new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress); break; } //Rtu协议 case ModbusType.RtuInTcp: { Wrapper = ConnectionString == null - ? new ModbusRtuInTcpProtocal(SlaveAddress, MasterAddress, Endian) + ? new ModbusRtuInTcpProtocal(SlaveAddress, MasterAddress) : (ConnectionStringPort == null - ? new ModbusRtuInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian) + ? new ModbusRtuInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress) : new ModbusRtuInTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress, - MasterAddress, Endian)); + MasterAddress)); break; } //Ascii协议 case ModbusType.AsciiInTcp: { Wrapper = ConnectionString == null - ? new ModbusAsciiInTcpProtocal(SlaveAddress, MasterAddress, Endian) + ? new ModbusAsciiInTcpProtocal(SlaveAddress, MasterAddress) : (ConnectionStringPort == null - ? new ModbusAsciiInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian) + ? new ModbusAsciiInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress) : new ModbusAsciiInTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress, - MasterAddress, Endian)); + MasterAddress)); break; } } diff --git a/Tests/Modbus.Net.Tests/EndianTest.cs b/Tests/Modbus.Net.Tests/EndianTest.cs new file mode 100644 index 0000000..e026cf6 --- /dev/null +++ b/Tests/Modbus.Net.Tests/EndianTest.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Modbus.Net.Modbus; + +namespace Modbus.Net.Tests +{ + [TestClass] + public class EndianTest + { + private BaseMachine _modbusTcpMachine; + + private BaseMachine _modbusTcpMachine2; + + [TestInitialize] + public void Init() + { + _modbusTcpMachine = new ModbusMachine(ModbusType.Tcp, "127.0.0.1", null, true, 1, 0); + + _modbusTcpMachine2 = new ModbusMachine(ModbusType.Tcp, "127.0.0.1", null, true, 1, 0, Endian.LittleEndianLsb); + } + + [TestMethod] + public async Task ModbusEndianSingle() + { + Random r = new Random(); + + var addresses = new List + { + new AddressUnit + { + Id = "0", + Area = "4X", + Address = 1, + SubAddress = 0, + CommunicationTag = "A1", + DataType = typeof(ushort) + } + }; + + var dic1 = new Dictionary() + { + { + "4X 1", r.Next(0, UInt16.MaxValue) + } + }; + + _modbusTcpMachine.GetAddresses = addresses; + _modbusTcpMachine2.GetAddresses = addresses; + await _modbusTcpMachine.SetDatasAsync(MachineSetDataType.Address, dic1); + var ans = await _modbusTcpMachine.GetDatasAsync(MachineGetDataType.Address); + var ans2 = await _modbusTcpMachine2.GetDatasAsync(MachineGetDataType.Address); + Assert.AreEqual(ans["4X 1.0"].PlcValue, dic1["4X 1"]); + Assert.AreEqual(ans2["4X 1.0"].PlcValue, (ushort)dic1["4X 1"] % 256 * 256 + (ushort)dic1["4X 1"] / 256); + } + } +} diff --git a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj index 0d888dc..a10ed78 100644 --- a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj +++ b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj @@ -52,6 +52,7 @@ +