Modbus是对物理层RS485或者串口中对协议帧的规范。
有两种串行传输模式被定义: RTU 模式 和 ASCII 模式。其中ASCII使用的很少,因为传输效率很低,所以支持Modbus协议所有设备必须实现 RTU (Remote Terminal Unit)模式。ASCII 传输模式是选项。
地址范围
Modbus是通过地址信息呼叫从机,从机设备地址最多有247个(1-247),其中0为广播地址,(248-256为保留)
数据帧格式
字节格式:
RTU 模式每个字节 ( 11 位 ) 的格式为 :1 起始位, 8 数据位, 首先发送最低有效位 ,1 位奇偶校验 位,1个 停止位
偶校验是要求的, 其它模式 ( 奇校验, 无校验 ) 也可以使用。 为了保证与其它产品的最大兼容性, 同时支持无校验模式是建议的。默认校验模式模式 必须为偶校验。
注意:这里是每个字节的格式 一个字节是8bit+其他位(开始停止校验位等)
CRC:循环冗余校验 (CRC), 2 字节 出去CRC本身的校验位。
总帧格式:
帧间隔:
一般来说,我们需要在发送数据的时候开启定时器去判断这个帧间隔
异常处理:
假设主机给地址01发送命令01去读取地址04A1的一个数据需要发送
01 01 04 A1 00 01 AD 18 如果说从机没有这个地址它将返回
01 81 01 02 第一个01表示应答地址,第二个81是01|80= 0x81 因为错误码等于功能码|0x80,返回数据是0x02的错误