Modbus通信协议
Modbus 是什么
一种串行通信协议,是Modicon公司(现在的施耐德电气)于1979年发表,用于PLC之间的通信,已成为工业领域通信协议事实上的业界标准,并且是现在工业电子设备之间常用的连接方式。
应用场景
广泛应用于PLC、传感器、继电器等设备之间的通信。
协议版本
Modbus是一种应用于总线网络的通信协议,支持单个Master,多个Slave,最多支持247个从机设备。Modbus属于应用层协议,链路层可以使用串口、以太网、蓝牙等各种通信技术。
Modbus TCP
使用以太网,接口用RJ45以太网口。
Modbus RTU
二进制传输,常用于RS232或者RS485/422串口通信。RTU 即 Remote Terminal Unit,远程终端单元。
Modbus ASCII
明文传输,常用于RS232或者RS485/422串口通信。
Modbus RTU over TCP
将 Modbus RTU 帧封装在 TCP/IP 报文中进行通信。
Modbus UDP
将 Modbus RTU 帧封装在 UDP/IP 报文中进行通信。常用于对速度要求较高的场景,如实时控制应用。
网络体系结构
Modbus 协议相关概念
Modbus 设备
Modbus设备或机器是使用Modbus协议进行通信的真实的物理设备。这些设备的范围广泛,包括从温度传感器到电机控制器的各种设备,并且可以分布在工厂车间或偏远油田等各种地方。
Modbus 主设备(Master)
主设备是发起Modbus事务的设备。它向Modbus从设备发送请求并等待响应。主设备具有于多个从设备通信的能力,并且可以向每个从设备请求不同类型的数据。
Modbus 从设备(Slave)
从设备是等待Modbus主动请求的设备。一旦收到请求,从设备将处理该请求并将响应发送回主设备。从设备不主动发起通信,它仅响应来自主设备的请求。
数据模型和寄存器
Modbus 数据模型基于一系列寄存器,这些寄存器是设备中存储数据的内存位置,它们代表设备内的存储区域。这些寄存器分为两种类型:
保持寄存器:可由Modbus主设备进行读取和写入操作。
输入寄存器:仅供主设备进行读取操作。
数据类型
类型 | 大小 | 访问类型 |
---|---|---|
离散输入 | 1 bit | 只读 |
线圈 | 1 bit | 读写 |
输入寄存器 | 16 bits / 2 bytes | 只读 |
保持寄存器 | 16 bits / 2 bytes | 读写 |
常见功能码
功能 | 编码(十六进制) |
---|---|
读离散输入 | 02 |
读线圈 | 01 |
写单个线圈 | 05 |
写多个线圈 | 0F |
读输入寄存器 | 04 |
读多个寄存器 | 03 |
写单个寄存器 | 06 |
写多个寄存器 | 10 |
Modbus 消息帧
Modbus 帧是Modbus 消息的结构。它由起始帧、功能吗、数据和结束帧组成。
Modbus ASCII 协议的帧结构:
开始 | 地址 | 功能 | 数据 | LRC | 结束 |
---|---|---|---|---|---|
: | 2个字符 | 2个字符 | N个字符 | 2个字符 | CRLF |
Modbus RTU 协议的帧结构:
地址码 | 功能码 | 数据码 | CRC校验码 |
---|---|---|---|
1字节 | 1字节 | N字节(0 ~ 252字节) | 2字节(CRC低 | CRC高) |
Modbus RTU帧最大256字节。
地址码是每个通讯信息帧的第一个字节,一般支持1到247,部分设备也支持0地址,用于接收主机的广播数据,每个从机在总线上地址必须唯一,只有与主机发送的地址码相符的从机才能响应返回数据。