diff --git a/SharpModbus/ModbusTCPProtocol.cs b/SharpModbus/ModbusTCPProtocol.cs index 04ab12c..4ee1b6a 100644 --- a/SharpModbus/ModbusTCPProtocol.cs +++ b/SharpModbus/ModbusTCPProtocol.cs @@ -8,9 +8,16 @@ public class ModbusTCPProtocol : IModbusProtocol private int TransactionId { get { return transactionId; } } + private int NextTid() + { + var tid = transactionId++; + transactionId &= 0xFFFF; + return tid; + } + public IModbusWrapper Wrap(IModbusCommand wrapped) { - return new ModbusTCPWrapper(wrapped, transactionId++); + return new ModbusTCPWrapper(wrapped, NextTid()); } public IModbusWrapper Parse(byte[] request, int offset) diff --git a/SharpModbus/SharpModbus.csproj b/SharpModbus/SharpModbus.csproj index 532e287..6f00f84 100644 --- a/SharpModbus/SharpModbus.csproj +++ b/SharpModbus/SharpModbus.csproj @@ -3,7 +3,7 @@ net40;netstandard2.0 SharpModbus - 1.0.7.0 + 1.0.8.0 C# Modbus Tools Samuel Ventura https://github.com/samuelventura/SharpModbus diff --git a/SharpModbusTest/MasterSlaveTest.cs b/SharpModbusTest/MasterSlaveTest.cs index f00830e..fb3ca3f 100644 --- a/SharpModbusTest/MasterSlaveTest.cs +++ b/SharpModbusTest/MasterSlaveTest.cs @@ -23,7 +23,8 @@ public void TcpSlaveTest() var model = new ModbusModel(); var stream = new ModelStream(model, new ModbusTCPScanner()); var master = new ModbusMaster(stream, new ModbusTCPProtocol()); - Test(model, master); + //ensure TransactionId wraps around 0xFFFF + for(var i=0; i<=0xFFFF; i++) Test(model, master); } void Test(ModbusModel model, ModbusMaster master)