Modbus RTU

Modbus 是一种广泛使用的通信协议,特别是在工业自动化和控制系统中。Modbus 支持多种通信方式,其中包括串行通信(如 RS-232 和 RS-485)。在串行链路上,Modbus 通信采用特定的报文格式。

Modbus 串行链路的通用报文格式
Modbus 串行报文由以下几个部分组成:

地址域(Slave Address):

1 字节:表示从站设备的地址。有效范围通常是 1 到 247(0 表示广播,248-255 保留)。
功能码(Function Code):

1 字节:指示请求的操作类型,例如读取或写入数据。常见的功能码包括:
0x01:读取线圈状态
0x02:读取离散输入状态
0x03:读取保持寄存器
0x04:读取输入寄存器
0x05:写单个线圈
0x06:写单个寄存器
0x0F:写多个线圈
0x10:写多个寄存器
数据域(Data):

可变长度:根据功能码的不同,数据域的内容和长度也不同。通常包括要读取或写入的寄存器地址、数量、值等信息。
错误检查(Error Check):

2 字节:用于数据完整性的校验,通常使用 CRC(循环冗余校验)来检测传输错误。
示例报文格式
假设我们要读取从站地址为 1 的设备的保持寄存器,报文格式如下:

+----------------+--------------+----------------+----------------+-----------------+
| Slave Address  | Function Code|    Data        |    Error Check  |
|     1 byte     |    1 byte   |   (N bytes)    |      2 bytes    |
+----------------+--------------+----------------+-----------------+
示例报文:
从站地址:0x01

功能码:0x03(读取保持寄存器)

数据:

起始寄存器地址:0x0000(0 字节表示)
寄存器数量:0x0002(读取 2 个寄存器)
CRC:计算得出的 CRC 值

最终的报文可能如下(假设 CRC 为 0xA1B2):

| 0x01 | 0x03 | 0x00 | 0x00 | 0x00 | 0x02 | 0xA1 | 0xB2 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值