工业互联网Modbus协议
工业互联网Modbus协议
工业互联网Modbus协议
Modbus简介
Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。
Modbus三种连接方式
Modbus有下列三种通信方式:
- 以太网:对应的通信模式是Modbus TCP/IP
- 异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等):对应的通信模式是Modbus RTU或Modbus ASCII
- 高速令牌传递网络:对应的通信模式是Modbus PLUS
Modbus RTU和Modbus ASCII协议应用于串口链接(RS232、RS485、RS422),Modbus tcp/ip协议应用于以太网链接。
Modbus传输方式
控制器通信使用主/从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。
典型的主设备:主机和可编程仪表。 典型的从设备:可编程控制器。
Modbus 报文格式
Modbus协议的报文(或帧)的基本格式是:
表头 + 功能码 + 数据区 + 校验码
Modbus 报文格式详解
(1)、0x01:读线圈
在从站中读1~2000个连续线圈状态,ON=1,OFF=0
1
2
3
4
请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)
响应:MBAP 功能码 数据长度 数据(一个地址的数据为1位)
如:在从站0x01中,读取开始地址为0x0002的线圈数据,读0x0008位 ------------------00 01 00 00 00 06 01 01 00 02 00 08
回:数据长度为0x01个字节,数据为0x01,第一个线圈为ON,其余为OFF------------00 01 00 00 00 04 01 01 01 01
(2)、0x02:读离散量输入
从一个从站中读1~2000个连续的离散量输入状态
1
2
3
4
请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)
响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8))
如:从地址0x0000开始读0x0012个离散量输入-------------------------------------------------------------------------------------------------00 01 00 00 00 06 01 02 00 00 00 12
回:数据长度为0x03个字节,数据为0x01 04 00,表示第一个离散量输入和第11个离散量输入为ON,其余为OFF----------00 01 00 00 00 06 01 02 03 01 04 00
(3)、0x02:读离散量输入
从一个从站中读1~2000个连续的离散量输入状态
1
2
3
4
5
请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)
响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8))
如:从地址0x0000开始读0x0012个离散量输入-------------------------------------------------------------------------------------------------00 01 00 00 00 06
01 02 00 00 00 12
回:数据长度为0x03个字节,数据为0x01 04 00,表示第一个离散量输入和第11个离散量输入为ON,其余为OFF----------00 01 00 00 00 06 01 02 03 01 04 0
(4)、0x03:读保持寄存器
从远程设备中读保持寄存器连续块的内容
1
2
3
4
请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)
如:起始地址是0x0000,寄存器数量是 0x0003----------------------------------00 01 00 00 00 06 01 03 00 00 00 03
回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00-----------00 01 00 00 00 09 01 03 06 00 21 00 00 00 00
(5)、0x06:写单个保持寄存器
在一个远程设备中写一个保持寄存器
1
2
3
4
请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)
响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)
如:向地址是0x0000的寄存器写入数据0x000A------------------00 01 00 00 00 06 01 06 00 00 00 0A
回:写入成功--------------------------------------------------------------00 01 00 00 00 06 01 06 00 00 00 0A
本文由作者按照 CC BY 4.0 进行授权