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寄存器
| 地址 | 功能码 | 说明 |
|---|---|---|
| 4xxxxx | 03 | 读取03功能码 |
| 3xxxxx | 04 | 读取04功能码 |
| 1xxxxx | 02 | 读取02功能码 |
| 0xxxxx | 01 | 读取01功能码 |
-
站号(可选)
当需要指定站号地址时可使用,举例:
| 地址 | 说明 |
|---|---|
| s=2;10001 | 读取02功能码 ,设备地址为2 |
| s=11;40001 | 读取03功能码 ,设备地址为11 |
-
Dtu注册(可选)
当需要指定Dtu客户端可使用,举例:
| 地址 | 说明 |
|---|---|
| id=12;40001 | 读取03功能码 ,设备地址为默认,Dtu注册包为"12",注意是UTF8格式 |