跳到主要内容

Modbus

定义

程序集:ThingsGateway.Foundation.Modbus

一、说明

ThingsGateway.Foundation.Modbus是对于Modbus协议的封装类库

支持Tcp/Rtu格式

支持多个通讯链路:Tcp/Udp/SerialPort

支持Dtu

二、Modbus主站

1、创建ModbusMaster

 /// <summary>
/// 新建协议对象
/// </summary>
/// <returns></returns>
public ModbusMaster GetDevice()
{
var clientConfig = new TouchSocket.Core.TouchSocketConfig();
var client = new ModbusMaster();
var clientChannel = client.CreateChannel(clientConfig, new ChannelOptions() { ChannelType = ChannelTypeEnum.SerialPort, PortName = "COM1" });
client.InitChannel(new(clientChannel));

client.Station = 1;

return client;
}

2、读写操作


public async Task Test()
{
var modbus = GetDevice();
{
var data = await modbus.ReadAsync("0;S=1;F=3", 1).ConfigureAwait(false); //读取保持寄存器地址0,长度1的值
if (data.IsSuccess)
{
var uint16 = modbus.BitConverter.ToUInt16(data.Content.Span, 0);//自行解析
}

var int32Result = await modbus.ReadInt32Async("0;S=1;F=3", 1).ConfigureAwait(false); //读取保持寄存器地址0,长度2个modbus寄存器的值



}
{
var data = await modbus.ReadAsync("0;S=1;F=3", 1).ConfigureAwait(false); //读取保持寄存器地址0,长度1的值
}
}

400001是PLC Modbus的地址表示方式,代表保持寄存器地址0

  • 基本地址

Modbus PLC寄存器

地址功能码说明
4xxxxx03读取03功能码
3xxxxx04读取04功能码
1xxxxx02读取02功能码
0xxxxx01读取01功能码
  • 站号(可选)

    当需要指定站号地址时可使用,举例:

地址说明
s=2;10001读取02功能码 ,设备地址为2
s=11;40001读取03功能码 ,设备地址为11
  • Dtu注册(可选)

    当需要指定Dtu客户端可使用,举例:

地址说明
id=12;40001读取03功能码 ,设备地址为默认,Dtu注册包为"12",注意是UTF8格式