From ad9465b41d01b2761f1daed02ec520559bcc2ecc Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Tue, 14 Feb 2017 14:08:26 +0800 Subject: [PATCH] 2017-02-14 update 2 Add AddressCombiner tests. --- .../ModbusTcpProtocalLinker.cs | 2 +- Tests/Modbus.Net.Tests/BaseTest.cs | 194 +++++++++++++++++- 2 files changed, 191 insertions(+), 5 deletions(-) diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs index 830e564..229bd68 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs @@ -24,7 +24,7 @@ //Modbus协议错误 if (content[7] > 127) { - throw new ModbusProtocalErrorException(content[8]); + throw new ModbusProtocalErrorException(content[2] > 0 ? content[2] : content[8]); } return true; } diff --git a/Tests/Modbus.Net.Tests/BaseTest.cs b/Tests/Modbus.Net.Tests/BaseTest.cs index 1cb450a..f09620f 100644 --- a/Tests/Modbus.Net.Tests/BaseTest.cs +++ b/Tests/Modbus.Net.Tests/BaseTest.cs @@ -1,15 +1,201 @@ -using System; +using Modbus.Net; +using System; +using System.Collections.Generic; +using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; +using Modbus.Net.Modbus; namespace Modbus.Net.Tests { [TestClass] public class BaseTest { - /*[TestMethod] - public void TestMethod1() + private List _addressUnits; + + [TestInitialize] + public void Init() { + _addressUnits = new List + { + new AddressUnit + { + Area = "3X", + Address = 1, + SubAddress = 0, + DataType = typeof(bool) + }, + new AddressUnit + { + Area = "3X", + Address = 1, + SubAddress = 1, + DataType = typeof(bool) + }, + new AddressUnit + { + Area = "3X", + Address = 1, + SubAddress = 2, + DataType = typeof(bool) + }, + new AddressUnit + { + Area = "3X", + Address = 2, + SubAddress = 0, + DataType = typeof(byte) + }, + new AddressUnit + { + Area = "3X", + Address = 2, + SubAddress = 8, + DataType = typeof(byte) + }, + new AddressUnit + { + Area = "3X", + Address = 3, + SubAddress = 0, + DataType = typeof(ushort) + }, + new AddressUnit + { + Area = "3X", + Address = 4, + SubAddress = 0, + DataType = typeof(ushort) + }, + new AddressUnit + { + Area = "3X", + Address = 6, + SubAddress = 0, + DataType = typeof(ushort) + }, + new AddressUnit + { + Area = "3X", + Address = 9, + SubAddress = 0, + DataType = typeof(ushort) + }, + new AddressUnit + { + Area = "3X", + Address = 10, + SubAddress = 0, + DataType = typeof(ushort) + }, + new AddressUnit + { + Area = "3X", + Address = 100, + SubAddress = 0, + DataType = typeof(ushort) + }, + new AddressUnit + { + Area = "4X", + Address = 1, + SubAddress = 0, + DataType = typeof(uint) + }, + new AddressUnit + { + Area = "4X", + Address = 4, + SubAddress = 0, + DataType = typeof(ushort) + }, + }; + } + + [TestMethod] + public void AddressCombinerContinusTest() + { + var addressCombiner = new AddressCombinerContinus(new AddressTranslatorModbus()); + var combinedAddresses = addressCombiner.Combine(_addressUnits).ToArray(); + Assert.AreEqual(combinedAddresses[0].Area, "3X"); + Assert.AreEqual(combinedAddresses[0].Address, 1); + Assert.AreEqual(combinedAddresses[0].GetCount, 1); + Assert.AreEqual(combinedAddresses[1].Area, "3X"); + Assert.AreEqual(combinedAddresses[1].Address, 2); + Assert.AreEqual(combinedAddresses[1].GetCount, 6); + Assert.AreEqual(combinedAddresses[2].Area, "3X"); + Assert.AreEqual(combinedAddresses[2].Address, 6); + Assert.AreEqual(combinedAddresses[2].GetCount, 2); + Assert.AreEqual(combinedAddresses[3].Area, "3X"); + Assert.AreEqual(combinedAddresses[3].Address, 9); + Assert.AreEqual(combinedAddresses[3].GetCount, 4); + Assert.AreEqual(combinedAddresses[4].Area, "3X"); + Assert.AreEqual(combinedAddresses[4].Address, 100); + Assert.AreEqual(combinedAddresses[4].GetCount, 2); + Assert.AreEqual(combinedAddresses[5].Area, "4X"); + Assert.AreEqual(combinedAddresses[5].Address, 1); + Assert.AreEqual(combinedAddresses[5].GetCount, 4); + Assert.AreEqual(combinedAddresses[6].Area, "4X"); + Assert.AreEqual(combinedAddresses[6].Address, 4); + Assert.AreEqual(combinedAddresses[6].GetCount, 2); + } + + [TestMethod] + public void AddressCombinerSingleTest() + { + var addressCombiner = new AddressCombinerSingle(); + var combinedAddresses = addressCombiner.Combine(_addressUnits).ToArray(); + Assert.AreEqual(combinedAddresses[0].Area, "3X"); + Assert.AreEqual(combinedAddresses[0].Address, 1); + Assert.AreEqual(combinedAddresses[0].GetCount, 1); + Assert.AreEqual(combinedAddresses[1].Area, "3X"); + Assert.AreEqual(combinedAddresses[1].Address, 1); + Assert.AreEqual(combinedAddresses[1].SubAddress, 1); + Assert.AreEqual(combinedAddresses[1].GetCount, 1); + Assert.AreEqual(combinedAddresses[3].Area, "3X"); + Assert.AreEqual(combinedAddresses[3].Address, 2); + Assert.AreEqual(combinedAddresses[3].GetCount, 1); + Assert.AreEqual(combinedAddresses[4].Area, "3X"); + Assert.AreEqual(combinedAddresses[4].Address, 2); + Assert.AreEqual(combinedAddresses[4].SubAddress, 8); + Assert.AreEqual(combinedAddresses[4].GetCount, 1); + Assert.AreEqual(combinedAddresses[11].Area, "4X"); + Assert.AreEqual(combinedAddresses[11].Address, 1); + Assert.AreEqual(combinedAddresses[11].GetCount, 1); + } + + [TestMethod] + public void AddressCombinerNumericJumpTest() + { + var addressCombiner = new AddressCombinerNumericJump(10, new AddressTranslatorModbus()); + var combinedAddresses = addressCombiner.Combine(_addressUnits).ToArray(); + Assert.AreEqual(combinedAddresses[0].Area, "3X"); + Assert.AreEqual(combinedAddresses[0].Address, 1); + Assert.AreEqual(combinedAddresses[0].GetCount, 20); + Assert.AreEqual(combinedAddresses[1].Area, "3X"); + Assert.AreEqual(combinedAddresses[1].Address, 100); + Assert.AreEqual(combinedAddresses[1].GetCount, 2); + Assert.AreEqual(combinedAddresses[2].Area, "4X"); + Assert.AreEqual(combinedAddresses[2].Address, 1); + Assert.AreEqual(combinedAddresses[2].GetCount, 8); + } + + [TestMethod] + public void AddressCombinerPercentageJumpTest() + { + var addressCombiner = new AddressCombinerPercentageJump(30.0, new AddressTranslatorModbus()); + var combinedAddresses = addressCombiner.Combine(_addressUnits).ToArray(); + Assert.AreEqual(combinedAddresses[0].Area, "3X"); + Assert.AreEqual(combinedAddresses[0].Address, 1); + Assert.AreEqual(combinedAddresses[0].GetCount, 12); + Assert.AreEqual(combinedAddresses[1].Area, "3X"); + Assert.AreEqual(combinedAddresses[1].Address, 9); + Assert.AreEqual(combinedAddresses[1].GetCount, 4); + Assert.AreEqual(combinedAddresses[2].Area, "3X"); + Assert.AreEqual(combinedAddresses[2].Address, 100); + Assert.AreEqual(combinedAddresses[2].GetCount, 2); + Assert.AreEqual(combinedAddresses[3].Area, "4X"); + Assert.AreEqual(combinedAddresses[3].Address, 1); + Assert.AreEqual(combinedAddresses[3].GetCount, 8); } - */ } }