Install-Package MiyaModbus.Core -Version 1.0.8
- 创建ModbusTcp设备
DeviceFactory.CreateModbusTcpDevice(1, "127.0.0.1", 502);
- 创建ModbusRtu设备
DeviceFactory.CreateModbusRtuDevice(0x01, "COM1", 9600, 8, StopBits.One, Parity.None);
- 创建使用TCP协议的ModbusRtu设备
DeviceFactory.CreateModbusRtuOverTcpDevice(1, "127.0.0.1", 502);
- 创建使用串口的文本通讯设备
DeviceFactory.CreateModbusRtuOverTcpDevice("COM1", 9600, 8, StopBits.One, Parity.None);
还有其他类似的设备创建方式 也可以直接指定设备类型、通道和网络来创建设备,这种创建方式 自由度更改,可以任意组合。
//创建设备
var device = DeviceFactory.CreateModbusRtuOverTcpDevice(1, "127.0.0.1", 502);
//启动设备
await device.StartAsync();
//写入短整型
await device.WriteShortAsync(0, d);
//读取短整型
var v = await device.ReadShortAsync(0);
//写入浮点数
await device.WriteFloatAsync(0, f);
//读取浮点数
var v = await device.ReadFloatAsync(0);
//写入无符号整数
await device.WriteUIntAsync(0, d);
//读取无符号整数
var v = await device.ReadUIntAsync(0);
//停止设备
await device.StopAsync();
1. 更改字节序
当前很多不同的PLC使用不同的字节序,MiyaModbus支持使用简单的设置的方式更改设备读写的字节序 以适应不同的设备
//短整型是否反序
device.Options.ShortReverse = true;
//浮点型数据字节序
device.Options.FloatOrder = ByteOrder.ABCD;
//双精度浮点型字节序
device.Options.DoubleOrder = LongByteOrder.ABCDEFGH;
//整型字节序
device.Options.IntOrder = ByteOrder.ABCD;
//长整型字节序
device.Options.LongOrder = LongByteOrder.ABCDEFGH;
2. 多个设备使用同一个网络通道
如果在一条串口线上连接了多个ModbusRtu设备,每个设备使用不同的站号来区分,那么 我们可以创建多个设备使用同一个网络,不同设备发送的数据在网络通道内会自动排序, 并且线程安全,但是多个设备使用同一个网络通道会导致通信速率下降。
var network = new SerialNetwork("COM1", 9600, 8, StopBits.One, Parity.None);
var channel = new DefaultChannel(network);
var device1 = new ModbusRtuDevice(channel,options=>
{
options.AddParams("stationid", 0x01);
});
var device2 = new ModbusRtuDevice(channel,options=>
{
options.AddParams("stationid", 0x02);
});
仅在使用DefaultChannel的情况下 此时deivce1和device2发送的数据都会经过同一个通道,并在通道内自动 按顺序发送并获取返回结果,两者互不干扰。 如果使用DirectChannel的情况下 两者之间是可能会互相干扰的,但是通讯速度更快,是DefaultChannel的 三倍以上。