MODBUS RTU协议实例数据帧详细分析

1.简介

Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。

2.ModbusRTU数据帧

2.1.地址域

  • Modbus地址规则
    Modbus寻址空间有256个不同地址。
01~247248~255
广播地址子节点单独地址保留
  • 在 Modbus 串行链路,地址域只含有子节点地址

合法的子节点地址为十进制 0–247。每个子设备被赋予1–247 范围中的地址。主节点通过将子节点的地址放到报文的地址域对子节点寻址。当子节点返回应答时, 它将自己的地址放到应答报文的地址域以让主节点知道哪个子节点在回答。

2.2.帧结构PDU

PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。

对象含义
线圈PLC的输出位,开关量,在Modbus中可读可写
离散量PLC的输入位,开关量,在Modbus中只读
输入寄存器PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读
保持寄存器PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写
根据对象的不同,Modbus的功能码有:
功能码含义
0x01读线圈
0x02读离散量输入
0x03读保持寄存器
0x04读输入寄存器
0x05写单个线圈
0x06写单个保持寄存器
0x0F写多个线圈
0x10写多个保持寄存器
说明更详细的表如下表所示
功能码中文含义解析
0x01读线圈状态
0x02读离散量输入状态
0x03读保持寄存器
0x04读输入寄存器
0x05写单个线圈
0x06写单个保持寄存器
0x0F写多个线圈
0x10写多个保持寄存器

3.ADU详细结构

3.1. 0x01:读线圈

在从站中读连续线圈状态,ON=1,OFF=0。

  • 请求:
从机地址功能码起始地址H起始地址L线圈数量H线圈数量LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节
  • 响应:
从机地址功能码线圈数据长度数据CRC校验HCRC校验L
1字节1字节1字节线圈数据长度个字节1字节1字节

注意:线圈数据长度=1+(线圈数-1)/8

如:在从站0x01中,读取开始地址为0x0000的线圈数据,读0x0008位。

  • 请求:
从机地址功能码起始地址H起始地址L线圈数量H线圈数量LCRC校验HCRC校验L
0101000000083DCC

如:数据长度为0x01个字节,数据为0x01,第一个线圈为ON,其余为OFF。

  • 响应:
从机地址功能码线圈数据长度数据CRC校验HCRC校验L
010101019048

3.2. 0x02:读离散量输入

在从站中读连续离散量输入状态,ON=1,OFF=0。

  • 请求:
从机地址功能码起始地址H起始地址L离散量输入数量H离散量输入数量LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节
  • 响应:
从机地址功能码离散量输入数据长度数据CRC校验HCRC校验L
1字节1字节1字节离散量输入数据长度个字节1字节1字节

注意:离散量输入数据长度=1+(离散量输入-1)/8

如:在从站0x01中,读取开始地址为0x0000的线圈数据,读0x0008位。

  • 请求:
从机地址功能码起始地址H起始地址L离散量输入数量H离散量输入数量LCRC校验HCRC校验L
01020000000879CC

如:在从站0x01中,读取开始地址为0x0000的离散量输入数据,读0x008位

  • 响应:
从机地址功能码离散量输入数据长度数据CRC校验HCRC校验L
010201016048

3.3. 0x03:读保持寄存器

在从站中读连续保持寄存器的值

  • 请求:
从机地址功能码起始地址H起始地址L寄存器数量H寄存器数量LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节
  • 响应:
从机地址功能码数据长度数据CRC校验HCRC校验L
1字节1字节1字节数据长度个字节1字节1字节

注意:保持寄存器数据长度=保持寄存器数*2

如:在从站0x01中,读取开始地址为0x0000的保持寄存器数据,读0x003个

  • 请求:
从机地址功能码起始地址H起始地址L寄存器数量H寄存器数量LCRC校验HCRC校验L
01030000000305CB

如:数据长度为0x06个字节,第1个寄存器的数据为0x21,其余为0x00。

  • 响应:
从机地址功能码数据长度数据CRC校验HCRC校验L
01030600 21 00 00 00 009D72

3.4. 0x04:读输入寄存器

在从站中读连续输入寄存器的值

  • 请求:
从机地址功能码起始地址H起始地址L寄存器数量H寄存器数量LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节
  • 响应:
从机地址功能码数据长度数据CRC校验HCRC校验L
1字节1字节1字节数据长度个字节1字节1字节

注意:输入寄存器数据长度=输入寄存器数*2

如:在从站0x01中,读取开始地址为0x0000的输入寄存器数据,读0x003个

  • 请求:
从机地址功能码起始地址H起始地址L寄存器数量H寄存器数量LCRC校验HCRC校验L
010400000003B00B

如:数据长度为0x06个字节,第1个寄存器的数据为0x21,其余为0x00。

  • 响应:
从机地址功能码数据长度数据CRC校验HCRC校验L
01040600 21 00 00 00 00DC94

3.5. 0x05:写单个线圈

将从站中的一个线圈输出写成ON或OFF,0xFF00请求输出为ON,0x000请求输出为OFF

  • 请求:
从机地址功能码线圈地址H线圈地址L输出值H输出值LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节
  • 响应:
从机地址功能码线圈地址H线圈地址L输出值H输出值LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节

如:在从站0x01中,将地址为0x0000的线圈设置为ON

  • 请求:
从机地址功能码线圈地址H线圈地址L输出值H输出值LCRC校验HCRC校验L
01050000FF008C3A
  • 响应:
从机地址功能码线圈地址H线圈地址L输出值H输出值LCRC校验HCRC校验L
01050000FF008C3A

3.6. 0x06:写单个保持寄存器

将从站中的一个保持寄存器设置

  • 请求:
从机地址功能码保持寄存器地址H保持寄存器地址L设置值H设置值LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节
  • 响应:
从机地址功能码保持寄存器地址H保持寄存器地址L设置值H设置值LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节

如:在从站0x01中,将地址为0x0000的保持寄存器设置为0x000A。

  • 请求:
从机地址功能码保持寄存器地址H保持寄存器地址L设置值H设置值LCRC校验HCRC校验L
01060000000A09CD
  • 响应:
从机地址功能码保持寄存器地址H保持寄存器地址L设置值H设置值LCRC校验HCRC校验L
01060000000A09CD

3.7. 0x0F:写多个线圈

将从站中的多个线圈输出写成ON或OFF,线圈输出值每1位“1”请求输出为ON,“0”请求输出为OFF

  • 请求:
从机地址功能码线圈起始地址H线圈起始地址L线圈数H线圈数L线圈输出字节长度线圈输出值CRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节1字节1字节

注意:线圈输出字节长度=1+(线圈数-1)/8

  • 响应:
从机地址功能码线圈起始地址H线圈起始地址L线圈数H线圈数LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节

如:在从站0x01中,将以地址0x0000开始连续的4个线圈设置为ON

  • 请求:
从机地址功能码线圈起始地址H线圈起始地址L线圈数H线圈数L线圈输出字节长度线圈输出值CRC校验HCRC校验L
010F00000004010F7E92
  • 响应:
从机地址功能码线圈起始地址H线圈起始地址L线圈数H线圈数LCRC校验HCRC校验L
010F000000045408

3.8. 0x10:写多个保持寄存器

写从站中的多个连续的寄存器。

  • 请求:
从机地址功能码寄存器起始地址H寄存器起始地址L寄存器数H寄存器数L寄存器数据字节长度寄存器数据CRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节1字节1字节

注意:寄存器数据字节长度=寄存器数量×2

  • 响应:
从机地址功能码寄存器起始地址H寄存器起始地址L寄存器数H寄存器数LCRC校验HCRC校验L
1字节1字节1字节1字节1字节1字节1字节1字节

如:在从站0x01中,向起始地址为0x0000,数量为0x0001的寄存器写入数据,数据长度为0x02,数据为0x000F。

  • 请求:
从机地址功能码寄存器起始地址H寄存器起始地址L寄存器数H寄存器数L寄存器数据字节长度寄存器数据CRC校验HCRC校验L
0110000000010200 0FE654
  • 响应:
从机地址功能码寄存器起始地址H寄存器起始地址L寄存器数H寄存器数LCRC校验HCRC校验L
01100000000101C9
  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪哥追求卓越

觉得有用就打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值