From a49ea834ec8306bc4eb0fb82ea09d911aa1f2b9f Mon Sep 17 00:00:00 2001 From: sjalex Date: Sat, 28 Mar 2009 07:02:02 +0000 Subject: [PATCH] added some integration tests for enron extension --- NModbus/src/Modbus.Extensions/EnronModbus.cs | 27 ++++++++-- .../Modbus.IntegrationTests/EnronFixture.cs | 49 +++++++++++++++++++ .../Modbus.IntegrationTests.csproj | 5 ++ .../ModbusMasterFixture.cs | 6 +-- 4 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 NModbus/src/Modbus.IntegrationTests/EnronFixture.cs diff --git a/NModbus/src/Modbus.Extensions/EnronModbus.cs b/NModbus/src/Modbus.Extensions/EnronModbus.cs index 495bb38..6fb301f 100644 --- a/NModbus/src/Modbus.Extensions/EnronModbus.cs +++ b/NModbus/src/Modbus.Extensions/EnronModbus.cs @@ -22,10 +22,12 @@ public static class EnronModbus /// Holding registers status public static uint[] ReadHoldingRegisters32(this ModbusMaster master, byte slaveAddress, ushort startAddress, ushort numberOfPoints) { + if (master == null) + throw new ArgumentNullException("master"); ValidateNumberOfPoints(numberOfPoints, 62); // read 16 bit chunks and perform conversion - var rawRegisters = master.ReadHoldingRegisters(slaveAddress, startAddress, (ushort) (numberOfPoints * 2)); + var rawRegisters = master.ReadHoldingRegisters(slaveAddress, startAddress, (ushort) (numberOfPoints * 2)); return Convert(rawRegisters).ToArray(); } @@ -40,13 +42,30 @@ public static uint[] ReadHoldingRegisters32(this ModbusMaster master, byte slave /// Input registers status public static uint[] ReadInputRegisters32(this ModbusMaster master, byte slaveAddress, ushort startAddress, ushort numberOfPoints) { + if (master == null) + throw new ArgumentNullException("master"); ValidateNumberOfPoints(numberOfPoints, 62); var rawRegisters = master.ReadInputRegisters(slaveAddress, startAddress, (ushort) (numberOfPoints * 2)); return Convert(rawRegisters).ToArray(); } - + + /// + /// Write a single 16 bit holding register. + /// + /// The Modbus master. + /// Address of the device to write to. + /// Address to write. + /// Value to write. + public static void WriteSingleRegister32(this ModbusMaster master, byte slaveAddress, ushort registerAddress, uint value) + { + if (master == null) + throw new ArgumentNullException("master"); + + master.WriteMultipleRegisters32(slaveAddress, registerAddress, new[] { value }); + } + /// /// Write a block of contiguous 32 bit holding registers. /// @@ -56,12 +75,14 @@ public static uint[] ReadInputRegisters32(this ModbusMaster master, byte slaveAd /// Values to write. public static void WriteMultipleRegisters32(this ModbusMaster master, byte slaveAddress, ushort startAddress, uint[] data) { + if (master == null) + throw new ArgumentNullException("master"); if (data == null) throw new ArgumentNullException("data"); if (data.Length == 0 || data.Length > 61) { - throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, + throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The length of argument data must be between 1 and 61 inclusive.")); } diff --git a/NModbus/src/Modbus.IntegrationTests/EnronFixture.cs b/NModbus/src/Modbus.IntegrationTests/EnronFixture.cs new file mode 100644 index 0000000..6aabea2 --- /dev/null +++ b/NModbus/src/Modbus.IntegrationTests/EnronFixture.cs @@ -0,0 +1,49 @@ +using MbUnit.Framework; +using Modbus.Extensions.Enron; + +namespace Modbus.IntegrationTests +{ + [TestFixture] + public class EnronFixture : NModbusSerialRtuMasterDl06SlaveFixture + { + [Test] + public virtual void ReadHoldingRegisters32() + { + uint[] registers = Master.ReadHoldingRegisters32(SlaveAddress, 104, 2); + Assert.AreEqual(new uint[] { 0, 0 }, registers); + } + + [Test] + public virtual void ReadInputRegisters32() + { + uint[] registers = Master.ReadInputRegisters32(SlaveAddress, 104, 2); + Assert.AreEqual(new uint[] { 0, 0 }, registers); + } + + [Test] + public virtual void WriteSingleRegister32() + { + ushort testAddress = 200; + uint testValue = 350; + + uint originalValue = Master.ReadHoldingRegisters32(SlaveAddress, testAddress, 1)[0]; + Master.WriteSingleRegister32(SlaveAddress, testAddress, testValue); + Assert.AreEqual(testValue, Master.ReadHoldingRegisters32(SlaveAddress, testAddress, 1)[0]); + Master.WriteSingleRegister32(SlaveAddress, testAddress, originalValue); + Assert.AreEqual(originalValue, Master.ReadHoldingRegisters(SlaveAddress, testAddress, 1)[0]); + } + + [Test] + public virtual void WriteMultipleRegisters32() + { + ushort testAddress = 120; + uint[] testValues = new uint[] { 10, 20, 30, 40, 50 }; + + uint[] originalValues = Master.ReadHoldingRegisters32(SlaveAddress, testAddress, (ushort) testValues.Length); + Master.WriteMultipleRegisters32(SlaveAddress, testAddress, testValues); + uint[] newValues = Master.ReadHoldingRegisters32(SlaveAddress, testAddress, (ushort) testValues.Length); + Assert.AreEqual(testValues, newValues); + Master.WriteMultipleRegisters32(SlaveAddress, testAddress, originalValues); + } + } +} diff --git a/NModbus/src/Modbus.IntegrationTests/Modbus.IntegrationTests.csproj b/NModbus/src/Modbus.IntegrationTests/Modbus.IntegrationTests.csproj index 009ae04..8b36882 100644 --- a/NModbus/src/Modbus.IntegrationTests/Modbus.IntegrationTests.csproj +++ b/NModbus/src/Modbus.IntegrationTests/Modbus.IntegrationTests.csproj @@ -83,6 +83,7 @@ + @@ -109,6 +110,10 @@ {16FFB4F2-5556-439E-8729-92FB3425EF1F} FtdAdapter + + {667F4D2C-C9DF-4CC4-A1A6-768F6E879CE5} + Modbus.Extensions + {FF96B252-2B24-44A1-A09C-6401B5D7ED23} Modbus diff --git a/NModbus/src/Modbus.IntegrationTests/ModbusMasterFixture.cs b/NModbus/src/Modbus.IntegrationTests/ModbusMasterFixture.cs index 46b9327..c9332a6 100644 --- a/NModbus/src/Modbus.IntegrationTests/ModbusMasterFixture.cs +++ b/NModbus/src/Modbus.IntegrationTests/ModbusMasterFixture.cs @@ -142,7 +142,7 @@ public virtual void ReadHoldingRegisters() { ushort[] registers = Master.ReadHoldingRegisters(SlaveAddress, 104, 2); Assert.AreEqual(new ushort[] { 0, 0 }, registers); - } + } [Test] public virtual void ReadInputRegisters() @@ -150,7 +150,7 @@ public virtual void ReadInputRegisters() ushort[] registers = Master.ReadInputRegisters(SlaveAddress, 104, 2); Assert.AreEqual(new ushort[] { 0, 0 }, registers); } - + [Test] public virtual void WriteSingleCoil() { @@ -258,7 +258,7 @@ public virtual void ExecuteCustomMessage_WriteMultipleRegisters() Assert.AreEqual(testValues, newValues); writeRequest = new CustomWriteMultipleRegistersRequest(16, SlaveAddress, testAddress, new RegisterCollection(originalValues)); Master.ExecuteCustomMessage(writeRequest); - } + } /// /// Perform read registers command