阡陌 发表于 2023-12-31 00:02:53

Modbus 通信协议


Modbus 是一个请求/应答协议,是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。


Modbus 采用主站询问或命令的方式通信,从站不能主动上报。只能通过增大主站轮询频率的办法增强实时性。

Modbus 的传送有 3 种模式:Modbus ASCII、Modbus RTU、Modbus TCP。

## Modbus ASCII
用 Hex 字符表示值,例如要传送一个字节值 0x2A 则发送两个字节字符 "2A"。

帧格式:

![](https://file.mculoop.com/images/2023/12/30/202312302332829.png)

## Modbus RTU
帧格式:

![](https://file.mculoop.com/images/2023/12/30/202312302333083.png)

CRC 校验是 16 位的,低字节在前。

不同类型帧的数据域定义是不同的,几种情况:

1. 读寄存器时主机的数据域:

![](https://file.mculoop.com/images/2023/12/30/202312302334489.png)

寄存器地址、寄存器个数等数值按高字节在前方式传输。

2. 读寄存器时从机正确应答的数据域:

![](https://file.mculoop.com/images/2023/12/30/202312302335507.png)

寄存器是 16 位的,所以 数据字节数 = 寄存器个数 * 2

3. 从机异常应答的数据域:

![](https://file.mculoop.com/images/2023/12/30/202312302335241.png)

异常应答的功能码的最高位为1。

## Modbus TCP

由于 TCP 是可靠传输,所以相比 RTU 格式没有 CRC 校验域。

帧格式:

![](https://file.mculoop.com/images/2023/12/30/202312302336361.png)

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

## Modbus RTU 与 Modbus TCP 的区别

![](https://file.mculoop.com/images/2023/12/30/202312302338407.png)


页: [1]
查看完整版本: Modbus 通信协议