Skip to content

Commit

Permalink
added some integration tests for enron extension
Browse files Browse the repository at this point in the history
  • Loading branch information
sjalex committed Mar 28, 2009
1 parent 88ba70b commit a49ea83
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 6 deletions.
27 changes: 24 additions & 3 deletions NModbus/src/Modbus.Extensions/EnronModbus.cs
Expand Up @@ -22,10 +22,12 @@ public static class EnronModbus
/// <returns>Holding registers status</returns>
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();
}
Expand All @@ -40,13 +42,30 @@ public static uint[] ReadHoldingRegisters32(this ModbusMaster master, byte slave
/// <returns>Input registers status</returns>
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();
}


/// <summary>
/// Write a single 16 bit holding register.
/// </summary>
/// <param name="master">The Modbus master.</param>
/// <param name="slaveAddress">Address of the device to write to.</param>
/// <param name="registerAddress">Address to write.</param>
/// <param name="value">Value to write.</param>
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 });
}

/// <summary>
/// Write a block of contiguous 32 bit holding registers.
/// </summary>
Expand All @@ -56,12 +75,14 @@ public static uint[] ReadInputRegisters32(this ModbusMaster master, byte slaveAd
/// <param name="data">Values to write.</param>
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."));
}

Expand Down
49 changes: 49 additions & 0 deletions 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);
}
}
}
Expand Up @@ -83,6 +83,7 @@
<Compile Include="CustomMessages\CustomReadHoldingRegistersResponse.cs" />
<Compile Include="CustomMessages\CustomWriteMultipleRegistersRequest.cs" />
<Compile Include="CustomMessages\CustomWriteMultipleRegistersResponse.cs" />
<Compile Include="EnronFixture.cs" />
<Compile Include="FtdUsbPortAdapterFixture.cs" />
<Compile Include="NModbusUdpSlaveFixture.cs" />
<Compile Include="NModbusSerialAsciiMasterFixture.cs" />
Expand All @@ -109,6 +110,10 @@
<Project>{16FFB4F2-5556-439E-8729-92FB3425EF1F}</Project>
<Name>FtdAdapter</Name>
</ProjectReference>
<ProjectReference Include="..\Modbus.Extensions\Modbus.Extensions.csproj">
<Project>{667F4D2C-C9DF-4CC4-A1A6-768F6E879CE5}</Project>
<Name>Modbus.Extensions</Name>
</ProjectReference>
<ProjectReference Include="..\Modbus\Modbus.csproj">
<Project>{FF96B252-2B24-44A1-A09C-6401B5D7ED23}</Project>
<Name>Modbus</Name>
Expand Down
6 changes: 3 additions & 3 deletions NModbus/src/Modbus.IntegrationTests/ModbusMasterFixture.cs
Expand Up @@ -142,15 +142,15 @@ public virtual void ReadHoldingRegisters()
{
ushort[] registers = Master.ReadHoldingRegisters(SlaveAddress, 104, 2);
Assert.AreEqual(new ushort[] { 0, 0 }, registers);
}
}

[Test]
public virtual void ReadInputRegisters()
{
ushort[] registers = Master.ReadInputRegisters(SlaveAddress, 104, 2);
Assert.AreEqual(new ushort[] { 0, 0 }, registers);
}

[Test]
public virtual void WriteSingleCoil()
{
Expand Down Expand Up @@ -258,7 +258,7 @@ public virtual void ExecuteCustomMessage_WriteMultipleRegisters()
Assert.AreEqual(testValues, newValues);
writeRequest = new CustomWriteMultipleRegistersRequest(16, SlaveAddress, testAddress, new RegisterCollection(originalValues));
Master.ExecuteCustomMessage<CustomWriteMultipleRegistersResponse>(writeRequest);
}
}

/// <summary>
/// Perform read registers command
Expand Down

0 comments on commit a49ea83

Please sign in to comment.