HJ212 and Documents
This commit is contained in:
@@ -1,30 +1,43 @@
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Modbus.Net.Modbus;
|
||||
using Modbus.Net.Siemens;
|
||||
using AddressUnit = Modbus.Net.AddressUnit<int, int, int>;
|
||||
|
||||
namespace Modbus.Net.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// 基础测试类
|
||||
/// 提供通用的测试初始化和测试方法
|
||||
/// </summary>
|
||||
[TestClass]
|
||||
public class BaseTest
|
||||
{
|
||||
// 地址单元列表
|
||||
private List<AddressUnit>? _addressUnits;
|
||||
|
||||
// 基础机器实例
|
||||
private BaseMachine<int, int>? _baseMachine;
|
||||
|
||||
// 测试机器 IP 地址
|
||||
private string _machineIp = "10.10.18.251";
|
||||
|
||||
/// <summary>
|
||||
/// 测试初始化方法
|
||||
/// 在每个测试方法执行前运行
|
||||
/// </summary>
|
||||
[TestInitialize]
|
||||
public void Init()
|
||||
{
|
||||
// 初始化地址单元列表,定义要测试的地址
|
||||
_addressUnits = new List<AddressUnit>
|
||||
{
|
||||
// 输入寄存器位测试(3X 区)
|
||||
new AddressUnit
|
||||
{
|
||||
Id = 1,
|
||||
Area = "3X",
|
||||
Address = 1,
|
||||
SubAddress = 0,
|
||||
SubAddress = 0, // 第 0 位
|
||||
DataType = typeof(bool)
|
||||
},
|
||||
new AddressUnit
|
||||
@@ -32,7 +45,7 @@ namespace Modbus.Net.Tests
|
||||
Id = 2,
|
||||
Area = "3X",
|
||||
Address = 1,
|
||||
SubAddress = 1,
|
||||
SubAddress = 1, // 第 1 位
|
||||
DataType = typeof(bool)
|
||||
},
|
||||
new AddressUnit
|
||||
@@ -40,9 +53,10 @@ namespace Modbus.Net.Tests
|
||||
Id = 3,
|
||||
Area = "3X",
|
||||
Address = 1,
|
||||
SubAddress = 2,
|
||||
SubAddress = 2, // 第 2 位
|
||||
DataType = typeof(bool)
|
||||
},
|
||||
// 输入寄存器字节测试
|
||||
new AddressUnit
|
||||
{
|
||||
Id = 4,
|
||||
@@ -56,9 +70,10 @@ namespace Modbus.Net.Tests
|
||||
Id = 5,
|
||||
Area = "3X",
|
||||
Address = 2,
|
||||
SubAddress = 8,
|
||||
SubAddress = 8, // 下一个字节
|
||||
DataType = typeof(byte)
|
||||
},
|
||||
// 输入寄存器字测试
|
||||
new AddressUnit
|
||||
{
|
||||
Id = 6,
|
||||
@@ -107,6 +122,7 @@ namespace Modbus.Net.Tests
|
||||
SubAddress = 0,
|
||||
DataType = typeof(ushort)
|
||||
},
|
||||
// 保持寄存器测试(4X 区)
|
||||
new AddressUnit
|
||||
{
|
||||
Id = 12,
|
||||
@@ -125,178 +141,121 @@ namespace Modbus.Net.Tests
|
||||
},
|
||||
};
|
||||
|
||||
// 创建 Siemens S7-1200 机器实例
|
||||
// 参数:ID, 别名,连接类型,IP 地址,型号,地址列表,保持连接,从站地址,主站地址,src, dst
|
||||
_baseMachine = new SiemensMachine<int, int>(2, "", SiemensType.Tcp, _machineIp, SiemensMachineModel.S7_1200, _addressUnits, true, 2, 0, 1, 0)
|
||||
{
|
||||
ProjectName = "Project 1",
|
||||
MachineName = "Test 2"
|
||||
};
|
||||
|
||||
// 连接设备
|
||||
_baseMachine.ConnectAsync().Wait();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试连续地址组合器
|
||||
/// 验证地址组合器将连续地址合并为一个通信包的功能
|
||||
/// </summary>
|
||||
[TestMethod]
|
||||
public void AddressCombinerContinusTest()
|
||||
{
|
||||
// 创建连续地址组合器,最大长度 100000 字节
|
||||
var addressCombiner = new AddressCombinerContinus<int>(new AddressTranslatorModbus(), 100000);
|
||||
// 组合地址
|
||||
var combinedAddresses = addressCombiner.Combine(_addressUnits!).ToArray();
|
||||
|
||||
// 验证组合结果
|
||||
// 第 1 组:3X 区地址 1,3 个位
|
||||
Assert.AreEqual(combinedAddresses[0].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[0].Address, 1);
|
||||
Assert.AreEqual(combinedAddresses[0].GetCount, 1);
|
||||
|
||||
// 第 2 组:3X 区地址 2-3,6 个字节
|
||||
Assert.AreEqual(combinedAddresses[1].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[1].Address, 2);
|
||||
Assert.AreEqual(combinedAddresses[1].GetCount, 6);
|
||||
|
||||
// 第 3 组:3X 区地址 6-7,2 个寄存器
|
||||
Assert.AreEqual(combinedAddresses[2].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[2].Address, 6);
|
||||
Assert.AreEqual(combinedAddresses[2].GetCount, 2);
|
||||
|
||||
// 第 4 组:3X 区地址 9-10,4 个寄存器
|
||||
Assert.AreEqual(combinedAddresses[3].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[3].Address, 9);
|
||||
Assert.AreEqual(combinedAddresses[3].GetCount, 4);
|
||||
|
||||
// 第 5 组:3X 区地址 100-101,2 个寄存器
|
||||
Assert.AreEqual(combinedAddresses[4].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[4].Address, 100);
|
||||
Assert.AreEqual(combinedAddresses[4].GetCount, 2);
|
||||
|
||||
// 第 6 组:4X 区地址 1-4,4 个寄存器(包含 uint 和 ushort)
|
||||
Assert.AreEqual(combinedAddresses[5].Area, "4X");
|
||||
Assert.AreEqual(combinedAddresses[5].Address, 1);
|
||||
Assert.AreEqual(combinedAddresses[5].GetCount, 4);
|
||||
|
||||
// 第 7 组:4X 区地址 4,2 个寄存器
|
||||
Assert.AreEqual(combinedAddresses[6].Area, "4X");
|
||||
Assert.AreEqual(combinedAddresses[6].Address, 4);
|
||||
Assert.AreEqual(combinedAddresses[6].GetCount, 2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试连续地址组合器的长度限制
|
||||
/// 验证当组合长度超过限制时,地址会被分割
|
||||
/// </summary>
|
||||
[TestMethod]
|
||||
public void AddressCombinerContinusLimitTest()
|
||||
{
|
||||
// 创建连续地址组合器,最大长度 4 字节
|
||||
var addressCombiner = new AddressCombinerContinus<int>(new AddressTranslatorModbus(), 4);
|
||||
// 组合地址
|
||||
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, 4);
|
||||
|
||||
Assert.AreEqual(combinedAddresses[2].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[2].Address, 2);
|
||||
Assert.AreEqual(combinedAddresses[2].GetCount, 2);
|
||||
|
||||
Assert.AreEqual(combinedAddresses[3].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[3].Address, 6);
|
||||
Assert.AreEqual(combinedAddresses[3].GetCount, 2);
|
||||
|
||||
Assert.AreEqual(combinedAddresses[4].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[4].Address, 9);
|
||||
Assert.AreEqual(combinedAddresses[4].GetCount, 4);
|
||||
|
||||
Assert.AreEqual(combinedAddresses[5].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[5].Address, 100);
|
||||
Assert.AreEqual(combinedAddresses[5].GetCount, 2);
|
||||
|
||||
Assert.AreEqual(combinedAddresses[6].Area, "4X");
|
||||
Assert.AreEqual(combinedAddresses[6].Address, 1);
|
||||
Assert.AreEqual(combinedAddresses[6].GetCount, 4);
|
||||
|
||||
Assert.AreEqual(combinedAddresses[7].Area, "4X");
|
||||
Assert.AreEqual(combinedAddresses[7].Address, 4);
|
||||
Assert.AreEqual(combinedAddresses[7].GetCount, 2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试单个地址组合器
|
||||
/// 验证每个地址单独通信的组合器
|
||||
/// </summary>
|
||||
[TestMethod]
|
||||
public void AddressCombinerSingleTest()
|
||||
{
|
||||
// 创建单个地址组合器
|
||||
var addressCombiner = new AddressCombinerSingle<int, int, int>();
|
||||
// 组合地址
|
||||
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<int>(10, 100000, 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 AddressCombinerNumericJumpLimitTest()
|
||||
{
|
||||
var addressCombiner = new AddressCombinerNumericJump<int>(10, 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, 8);
|
||||
Assert.AreEqual(combinedAddresses[1].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[1].Address, 6);
|
||||
Assert.AreEqual(combinedAddresses[1].GetCount, 10);
|
||||
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);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void AddressCombinerPercentageJumpTest()
|
||||
{
|
||||
var addressCombiner = new AddressCombinerPercentageJump<int>(30.0, 100000, 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);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void AddressCombinerPercentageJumpLimitTest()
|
||||
{
|
||||
var addressCombiner = new AddressCombinerPercentageJump<int>(30.0, 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, 8);
|
||||
Assert.AreEqual(combinedAddresses[1].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[1].Address, 6);
|
||||
Assert.AreEqual(combinedAddresses[1].GetCount, 2);
|
||||
Assert.AreEqual(combinedAddresses[2].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[2].Address, 9);
|
||||
Assert.AreEqual(combinedAddresses[2].GetCount, 4);
|
||||
Assert.AreEqual(combinedAddresses[3].Area, "3X");
|
||||
Assert.AreEqual(combinedAddresses[3].Address, 100);
|
||||
Assert.AreEqual(combinedAddresses[3].GetCount, 2);
|
||||
Assert.AreEqual(combinedAddresses[4].Area, "4X");
|
||||
Assert.AreEqual(combinedAddresses[4].Address, 1);
|
||||
Assert.AreEqual(combinedAddresses[4].GetCount, 8);
|
||||
}
|
||||
|
||||
[TestCleanup]
|
||||
public void MachineClean()
|
||||
{
|
||||
_baseMachine?.Disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user