Modbus 是一个请求/应答协议,是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。
Modbus 采用主站询问或命令的方式通信,从站不能主动上报。只能通过增大主站轮询频率的办法增强实时性。
Modbus 的传送有 3 种模式:Modbus ASCII、Modbus RTU、Modbus TCP。
Modbus ASCII
用 Hex 字符表示值,例如要传送一个字节值 0x2A 则发送两个字节字符 "2A"。
帧格式:

Modbus RTU
帧格式:

CRC 校验是 16 位的,低字节在前。
不同类型帧的数据域定义是不同的,几种情况:
- 读寄存器时主机的数据域:

寄存器地址、寄存器个数等数值按高字节在前方式传输。
- 读寄存器时从机正确应答的数据域:

寄存器是 16 位的,所以 数据字节数 = 寄存器个数 * 2
- 从机异常应答的数据域:

异常应答的功能码的最高位为1。
Modbus TCP
由于 TCP 是可靠传输,所以相比 RTU 格式没有 CRC 校验域。
帧格式:

传输标志:请求和响应传输过程中序列号
协议标志:默认为 0
长度:值为长度域后所有内容的字节数,同样地也是大端模式传输
单元标志:串行链路或其它总线上连接的远程从站识别码,通常是 0
Modbus RTU 与 Modbus TCP 的区别

|