mirror of
https://github.com/zhaopeiym/IoTClient
synced 2025-10-19 22:14:31 +08:00
308 lines
14 KiB
C#
308 lines
14 KiB
C#
using IoTClient.Enums;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Diagnostics;
|
||
using System.Threading;
|
||
using Xunit;
|
||
|
||
namespace IoTClient.Extensions.Adapter.Tests
|
||
{
|
||
public class IoTClientFactory_Tests
|
||
{
|
||
private IIoTClientCommon client = null;
|
||
|
||
[Theory]
|
||
[InlineData(EthernetDeviceVersion.ModbusTcp, "127.0.0.1", 502)]
|
||
[InlineData(EthernetDeviceVersion.ModbusRtuOverTcp, "127.0.0.1", 503)]
|
||
[InlineData(EthernetDeviceVersion.Siemens_S7_1200, "127.0.0.1", 102)]
|
||
[InlineData(EthernetDeviceVersion.OmronFins, "127.0.0.1", 9601)]
|
||
[InlineData(EthernetDeviceVersion.Mitsubishi_Qna_3E, "127.0.0.1", 6000)]
|
||
[InlineData(EthernetDeviceVersion.AllenBradley, "127.0.0.1", 44818)]
|
||
public void EthernetDevice_Tests(EthernetDeviceVersion deviceVersion, string ip, int port)
|
||
{
|
||
client = IoTClientFactory.CreateClient2EthernetDevice(deviceVersion, ip, port);
|
||
Assert.True(client.Open().IsSucceed);
|
||
|
||
if (deviceVersion.ToString().StartsWith("Modbus"))
|
||
Modbus读写测试();
|
||
else if (deviceVersion.ToString().StartsWith("Siemens_S7_"))
|
||
Siemens读写测试();
|
||
else if (deviceVersion.ToString().StartsWith("OmronFins"))
|
||
OmronFins读写测试();
|
||
else if (deviceVersion.ToString().StartsWith("Mitsubishi"))
|
||
Mitsubishi读写测试();
|
||
else if (deviceVersion.ToString().StartsWith("AllenBradley"))
|
||
AllenBradley读写测试();
|
||
}
|
||
|
||
[Theory]
|
||
[InlineData("169.254.150.55", "5121")]
|
||
public void BACnet_Tests(string ip, string deviceId)
|
||
{
|
||
client = IoTClientFactory.CreateClient2BACnetDevice(ip, deviceId);
|
||
Assert.True(client.Open().IsSucceed);
|
||
|
||
Thread.Sleep(1000);//等待扫描
|
||
|
||
BACnet读写测试();
|
||
}
|
||
|
||
[Fact]
|
||
public void ModbusRtu_Test()
|
||
{
|
||
client = IoTClientFactory.CreateClient2SerialDevice(SerialDeviceVersion.ModbusRtu, "COM2", 9600, 8, System.IO.Ports.StopBits.One, System.IO.Ports.Parity.None);
|
||
Assert.True(client.Open().IsSucceed);
|
||
|
||
Modbus读写测试();
|
||
}
|
||
|
||
private void Modbus读写测试()
|
||
{
|
||
byte stationNumber = 1;//站号
|
||
|
||
Random rnd = new Random((int)Stopwatch.GetTimestamp());
|
||
for (int i = 0; i < 10; i++)
|
||
{
|
||
#region 生产随机数
|
||
short short_number = (short)rnd.Next(short.MinValue, short.MaxValue);
|
||
ushort ushort_number = (ushort)rnd.Next(ushort.MinValue, ushort.MaxValue);
|
||
int int_number = rnd.Next(int.MinValue, int.MaxValue);
|
||
uint uint_number = (uint)Math.Abs(rnd.Next(int.MinValue, int.MaxValue));
|
||
long long_number = rnd.Next(int.MinValue, int.MaxValue);
|
||
ulong ulong_number = (ulong)Math.Abs(rnd.Next(int.MinValue, int.MaxValue));
|
||
float float_number = rnd.Next(int.MinValue, int.MaxValue) / 100;
|
||
double double_number = (double)rnd.Next(int.MinValue, int.MaxValue) / 100;
|
||
bool coil = int_number % 2 == 0;
|
||
#endregion
|
||
|
||
//写入地址:0 值为:short_number 站号:stationNumber 功能码:默认16(也可以自己传入对应的功能码)
|
||
client.Write($"{stationNumber},0,16", short_number, DataTypeEnum.Int16);
|
||
client.Write($"{stationNumber},4,16", ushort_number, DataTypeEnum.UInt16);
|
||
client.Write($"{stationNumber},8,16", int_number, DataTypeEnum.Int32);
|
||
client.Write($"{stationNumber},12,16", uint_number, DataTypeEnum.UInt32);
|
||
client.Write($"{stationNumber},16,16", long_number, DataTypeEnum.Int64);
|
||
client.Write($"{stationNumber},20,16", ulong_number, DataTypeEnum.UInt64);
|
||
client.Write($"{stationNumber},24,16", float_number, DataTypeEnum.Float);
|
||
client.Write($"{stationNumber},28,16", double_number, DataTypeEnum.Double);
|
||
//如果是modbus slave 模拟,需要开一个function 01 coil的窗体
|
||
client.Write($"{stationNumber},32,5", coil, DataTypeEnum.Bool);
|
||
|
||
|
||
//写入可能有一定的延时,100毫秒后检验
|
||
//Thread.SpinWait(100);
|
||
|
||
//读取地址:0 站号:stationNumber 功能码:默认16(也可以自己传入对应的功能码)
|
||
var read_short_number = client.ReadInt16($"{stationNumber},0, 3").Value;
|
||
Assert.True(read_short_number == short_number);
|
||
Assert.True(client.ReadUInt16($"{stationNumber},4, 3").Value == ushort_number);
|
||
Assert.True(client.ReadInt32($"{stationNumber},8, 3").Value == int_number);
|
||
Assert.True(client.ReadUInt32($"{stationNumber},12, 3").Value == uint_number);
|
||
Assert.True(client.ReadInt64($"{stationNumber},16, 3").Value == long_number);
|
||
Assert.True(client.ReadUInt64($"{stationNumber},20, 3").Value == ulong_number);
|
||
Assert.True(client.ReadFloat($"{stationNumber},24, 3").Value == float_number);
|
||
Assert.True(client.ReadDouble($"{stationNumber},28, 3").Value == double_number);
|
||
|
||
Assert.True(client.ReadBoolean($"{stationNumber},32, 1").Value == coil);
|
||
}
|
||
|
||
var list = new Dictionary<string, DataTypeEnum>();
|
||
list.Add($"1,2,3", DataTypeEnum.Int16);
|
||
list.Add($"1,2,4", DataTypeEnum.Int16);
|
||
list.Add($"1,5,3", DataTypeEnum.Int16);
|
||
list.Add($"1,199,3", DataTypeEnum.Int16);
|
||
list.Add($"1,200,2", DataTypeEnum.Bool);
|
||
list.Add($"1,201,2", DataTypeEnum.Bool);
|
||
list.Add($"1,202,2", DataTypeEnum.Bool);
|
||
list.Add($"1,203,2", DataTypeEnum.Bool);
|
||
list.Add($"1,204,2", DataTypeEnum.Bool);
|
||
list.Add($"1,205,2", DataTypeEnum.Bool);
|
||
list.Add($"1,206,2", DataTypeEnum.Bool);
|
||
var result = client.BatchRead(list, 10);
|
||
}
|
||
|
||
private void Siemens读写测试()
|
||
{
|
||
Random rnd = new Random((int)Stopwatch.GetTimestamp());
|
||
for (int i = 0; i < 100; i++)
|
||
{
|
||
short short_number = (short)rnd.Next(short.MinValue, short.MaxValue);
|
||
ushort short_number_1 = (ushort)rnd.Next(ushort.MinValue, ushort.MaxValue);
|
||
|
||
int int_number = rnd.Next(int.MinValue, int.MaxValue);
|
||
uint int_number_1 = (uint)rnd.Next(0, int.MaxValue);
|
||
|
||
float float_number = int_number / 100;
|
||
var bool_value = short_number % 2 == 1;
|
||
|
||
string value_string = "BennyZhao" + float_number;
|
||
|
||
client.Write("Q1.3", bool_value);
|
||
Assert.True(client.ReadBoolean("Q1.3").Value == bool_value);
|
||
client.Write("Q1.4", bool_value);
|
||
Assert.True(client.ReadBoolean("Q1.4").Value == bool_value);
|
||
client.Write("Q1.5", !bool_value);
|
||
Assert.True(client.ReadBoolean("Q1.5").Value == !bool_value);
|
||
|
||
client.Write("V100", short_number);
|
||
Assert.True(client.ReadInt16("V100").Value == short_number);
|
||
client.Write("V100", short_number_1);
|
||
Assert.True(client.ReadUInt16("V100").Value == short_number_1);
|
||
|
||
client.Write("V100", int_number);
|
||
Assert.True(client.ReadInt32("V100").Value == int_number);
|
||
client.Write("V100", int_number_1);
|
||
Assert.True(client.ReadUInt32("V100").Value == int_number_1);
|
||
|
||
client.Write("V100", Convert.ToInt64(int_number));
|
||
Assert.True(client.ReadInt64("V100").Value == Convert.ToInt64(int_number));
|
||
client.Write("V100", Convert.ToUInt64(int_number_1));
|
||
Assert.True(client.ReadUInt64("V100").Value == Convert.ToUInt64(int_number_1));
|
||
|
||
client.Write("V200", float_number);
|
||
Assert.True(client.ReadFloat("V200").Value == float_number);
|
||
client.Write("V300", Convert.ToDouble(float_number));
|
||
Assert.True(client.ReadDouble("V300").Value == Convert.ToDouble(float_number));
|
||
|
||
}
|
||
}
|
||
|
||
private void OmronFins读写测试()
|
||
{
|
||
Random rnd = new Random((int)Stopwatch.GetTimestamp());
|
||
for (int i = 0; i < 100; i++)
|
||
{
|
||
short short_number = (short)rnd.Next(short.MinValue, short.MaxValue);
|
||
ushort short_number_1 = (ushort)rnd.Next(ushort.MinValue, ushort.MaxValue);
|
||
|
||
int int_number = rnd.Next(int.MinValue, int.MaxValue);
|
||
uint int_number_1 = (uint)rnd.Next(0, int.MaxValue);
|
||
|
||
float float_number = int_number / 100;
|
||
var bool_value = short_number % 2 == 1;
|
||
|
||
client.Write("D100", bool_value);
|
||
Assert.True(client.ReadBoolean("D100").Value == bool_value);
|
||
client.Write("D101", bool_value);
|
||
Assert.True(client.ReadBoolean("D101").Value == bool_value);
|
||
client.Write("D102", !bool_value);
|
||
Assert.True(client.ReadBoolean("D102").Value == !bool_value);
|
||
|
||
client.Write("D100", short_number);
|
||
Assert.True(client.ReadInt16("D100").Value == short_number);
|
||
client.Write("D100", short_number_1);
|
||
Assert.True(client.ReadUInt16("D100").Value == short_number_1);
|
||
|
||
client.Write("D100", int_number);
|
||
Assert.True(client.ReadInt32("D100").Value == int_number);
|
||
client.Write("D100", int_number_1);
|
||
Assert.True(client.ReadUInt32("D100").Value == int_number_1);
|
||
|
||
client.Write("D100", Convert.ToInt64(int_number));
|
||
Assert.True(client.ReadInt64("D100").Value == Convert.ToInt64(int_number));
|
||
client.Write("D100", Convert.ToUInt64(int_number_1));
|
||
Assert.True(client.ReadUInt64("D100").Value == Convert.ToUInt64(int_number_1));
|
||
|
||
client.Write("D200", float_number);
|
||
Assert.True(client.ReadFloat("D200").Value == float_number);
|
||
client.Write("D300", Convert.ToDouble(float_number));
|
||
Assert.True(client.ReadDouble("D300").Value == Convert.ToDouble(float_number));
|
||
}
|
||
|
||
client.Close();
|
||
}
|
||
|
||
private void Mitsubishi读写测试()
|
||
{
|
||
Random rnd = new Random((int)Stopwatch.GetTimestamp());
|
||
for (int i = 0; i < 10; i++)
|
||
{
|
||
short short_number = (short)rnd.Next(short.MinValue, short.MaxValue);
|
||
int int_number = rnd.Next(int.MinValue, int.MaxValue);
|
||
float float_number = int_number / 100;
|
||
var bool_value = short_number % 2 == 1;
|
||
client.Write("X100", bool_value);
|
||
Assert.True(client.ReadBoolean("X100").Value == bool_value);
|
||
client.Write("Y100", !bool_value);
|
||
Assert.True(client.ReadBoolean("Y100").Value == !bool_value);
|
||
client.Write("M100", !bool_value);
|
||
Assert.True(client.ReadBoolean("M100").Value == !bool_value);
|
||
client.Write("M101", bool_value);
|
||
Assert.True(client.ReadBoolean("M101").Value == bool_value);
|
||
client.Write("M102", bool_value);
|
||
Assert.True(client.ReadBoolean("M102").Value == bool_value);
|
||
client.Write("M103", !bool_value);
|
||
Assert.True(client.ReadBoolean("M103").Value == !bool_value);
|
||
client.Write("M104", bool_value);
|
||
Assert.True(client.ReadBoolean("M104").Value == bool_value);
|
||
|
||
|
||
client.Write("D200", short_number);
|
||
Assert.True(client.ReadInt16("D200").Value == short_number);
|
||
|
||
client.Write("D200", int_number);
|
||
Assert.True(client.ReadInt32("D200").Value == int_number);
|
||
|
||
client.Write("D200", Convert.ToInt64(int_number));
|
||
Assert.True(client.ReadInt64("D200").Value == Convert.ToInt64(int_number));
|
||
|
||
client.Write("D200", float_number);
|
||
Assert.True(client.ReadFloat("D200").Value == float_number);
|
||
|
||
client.Write("D200", Convert.ToDouble(float_number));
|
||
Assert.True(client.ReadDouble("D200").Value == Convert.ToDouble(float_number));
|
||
|
||
Debug.WriteLine(short_number);
|
||
}
|
||
}
|
||
|
||
private void AllenBradley读写测试()
|
||
{
|
||
Random rnd = new Random((int)Stopwatch.GetTimestamp());
|
||
for (int i = 0; i < 100; i++)
|
||
{
|
||
short short_number = (short)rnd.Next(short.MinValue, short.MaxValue);
|
||
ushort short_number_1 = (ushort)rnd.Next(ushort.MinValue, ushort.MaxValue);
|
||
|
||
int int_number = rnd.Next(int.MinValue, int.MaxValue);
|
||
uint int_number_1 = (uint)rnd.Next(0, int.MaxValue);
|
||
|
||
float float_number = rnd.Next(-100000, 100000) / 100;
|
||
|
||
var bool_value = short_number % 2 == 1;
|
||
|
||
client.Write("A1", bool_value);
|
||
Assert.True(client.ReadBoolean("A1").Value == bool_value);
|
||
client.Write("A1", !bool_value);
|
||
Assert.True(client.ReadBoolean("A1").Value == !bool_value);
|
||
|
||
client.Write("A1", short_number);
|
||
Assert.True(client.ReadInt16("A1").Value == short_number);
|
||
client.Write("A1", short_number_1);
|
||
Assert.True(client.ReadUInt16("A1").Value == short_number_1);
|
||
|
||
client.Write("A1", int_number);
|
||
Assert.True(client.ReadInt32("A1").Value == int_number);
|
||
client.Write("A1", int_number_1);
|
||
Assert.True(client.ReadUInt32("A1").Value == int_number_1);
|
||
|
||
client.Write("A1", Convert.ToSingle(float_number));
|
||
Assert.True(client.ReadFloat("A1").Value == Convert.ToSingle(float_number));
|
||
|
||
}
|
||
}
|
||
|
||
private void BACnet读写测试()
|
||
{
|
||
Random rnd = new Random((int)Stopwatch.GetTimestamp());
|
||
|
||
for (int i = 0; i < 100; i++)
|
||
{
|
||
int int_number = rnd.Next(int.MinValue, int.MaxValue);
|
||
client.Write("1_40", int_number);
|
||
|
||
Assert.True(client.ReadInt32("1_40").Value == int_number);
|
||
}
|
||
}
|
||
}
|
||
}
|