跳到主要内容

Modbus

定义

程序集:ThingsGateway.Foundation.Modbus

一、说明

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

支持Tcp/Rtu格式

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

支持Dtu

二、Modbus主站

1、创建ModbusMaster

        /// <summary>
/// 新建链路
/// </summary>
/// <returns></returns>
public IChannel GetChannel()
{
TouchSocketConfig touchSocketConfig = new TouchSocketConfig();
return touchSocketConfig.GetSerialPortWithOption(new("COM1")); //直接获取串口对象
//return touchSocketConfig.GetChannel(ChannelTypeEnum.SerialPortClient, null, null, new("COM1"));//通过链路枚举获取对象
}

/// <summary>
/// 新建协议对象
/// </summary>
/// <param name="channel"></param>
/// <returns></returns>
public IProtocol GetProtocol(IChannel channel)
{
var client = new ModbusMaster(channel);
return client;
}

2、读写操作

            ModbusMaster modbusMasterTest = new ModbusMaster();
var channel = modbusMasterTest.GetChannel();
var protocol = modbusMasterTest.GetProtocol(channel);
var data = await protocol.ReadDoubleAsync("400001"); //读取保持寄存器地址0

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格式

三、Modbus从站