文章

工业互联网Modbus协议

工业互联网Modbus协议

工业互联网Modbus协议

Modbus简介

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。

Modbus三种连接方式

Modbus有下列三种通信方式:

  1. 以太网:对应的通信模式是Modbus TCP/IP
  2. 异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等):对应的通信模式是Modbus RTU或Modbus ASCII
  3. 高速令牌传递网络:对应的通信模式是Modbus PLUS

Modbus RTU和Modbus ASCII协议应用于串口链接(RS232、RS485、RS422),Modbus tcp/ip协议应用于以太网链接。

Modbus传输方式

控制器通信使用主/从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。

典型的主设备:主机和可编程仪表。 典型的从设备:可编程控制器。

主从模式

Modbus 报文格式

Modbus协议的报文(或帧)的基本格式是:

表头 + 功能码 + 数据区 + 校验码

  1. MODBUS-RTU报文模型 modbusRTU报文
  2. MODBUS-ASCII报文模型 modbusAscii报文
  3. MODBUS-TCP报文模型 modbusTCP报文

modbus 功能码 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 进行授权