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]