比较详细的解读什么是Modbus

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

比较详细的解读什么是ModbusThumbnail
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 4种数据类型
  2. 2. 3种传输模式
  3. 3. 3类功能码
  4. 4. 数据帧格式
  5. 5. 两种请求模式
  6. 6. Modbus扩展版本
  7. 7. 官方标准文档下载

ModbusWhat is it?

ModbusProtocol,从字面理解它包括ModBus两部分,首先它是一种bus,即总线协议,和I2C、SPI类似,总线就意味着有主机,有从机,这些设备在同一条总线上。

比较详细的解读什么是ModbusFigure

Modbus支持单主机,多个从机,最多支持247个从机设备。关于Mod,因为这种协议最早被用在PLC控制器中,准确的说是Modicon公司的PLCController,这也是Mod-Bus名称的由来。

后来Modicon被施耐德(Schneider)收购,Modbus协议广泛应用在工业控制器、HMI和传感器上,逐渐被其他厂商所接受,成为了一种主流的通讯协议,用于和外围设备进行通讯。

比较详细的解读什么是ModbusFigure1
Modbus网络体系

Modbus在7层OSI参考模型中属于第七层应用层,数据链路层有两种:基于标准串口协议和TCPProtocol,物理层可使用3线232、2线485、4线422,或光纤、网线、无线等多种传输介质。

比较详细的解读什么是ModbusFigure2
ISO/OSI模型

Modbus协议是一种Request/应答方式的交互过程,主机主动发起通讯请求,从机响应主机的请求,从机在没有收到主机的请求时,不会主动发送数据,从机之间不会进行通讯。

就像是男生追女生一样,男生要主动出击,女生才会给你响应,不能等着女生主动搭讪你。

目前比较权威的Modbus官方标准文档有两个:

  • modbus_application_protocol_specification_v1.1b3.pdf
  • 基于Modbus协议的工业自动化网络规范 GB-T19582.1-2008.pdf

可以说90%的书籍和网络资料都是翻译自这两篇文档,文末获取标准文档下载方法

4种数据类型

Modbus协议规定,进行读写操作的数据类型,按照读写属性和类型可分为以下4种:

  • 离散量输入(Discretes Input  ):1位,只读
  • 线圈(Coils):1位,读写
  • 输入寄存器(Input Registers  ):16位,只读
  • 保持寄存器(Holding Registers):16位,读写
比较详细的解读什么是ModbusFigure3
Modbusdata type

3种传输模式

1979年,Modicon 首先推出了串行Modbus标准,后来由于网络的普及,需要更高的传输速度,1997年制定了基于TCP网络的Modbus标准。

所以总的可分为两个传输模式:基于串行链路的和基于EthernetTCP/IP的。但是我个人还是习惯分为3种传输模式:

  • 基于串口的Modbus-RTU数据按照标准串口协议进行编码,是使用最广泛的一种ModbusProtocol,采用CRC-16_Modbus校验算法。
  • 基于串口的Modbus-ASCII所有数据都是ASCIIformat,一个字节的原始数据需要两个字符来表示,效率低,采用LRC verification算法。
  • 基于网口的Modbus-TCPModbus-TCP基于TCP/IPProtocol,占用502端口,数据帧主要包括两部分:MBAP(message header)+PDU(帧结构),数据块与串行链路是一致的。

所以当我们提及Modbus协议时,要确定是哪种模式:RTU、ASCII或TCP,3种模式区别还是很大的。

比较详细的解读什么是ModbusFigure4
Modbus传输模式应用

有些设备支持多种Modbus mode,有些设备只支持其中一种,比如最常用的PLC S7-200只支持Modbus RTUProtocol,不支持Modbus ASCIIProtocol,Modbus总线上所有的设备传输模式必须相同

实际使用要根据设备使用手册来选择采用哪种模式。

3类功能码

Modbusfunction code,是写在主机请求数据帧中的,决定主机进行读还是写操作,是读线圈、离散量还是寄存器,是写单个寄存器还是多个寄存器等等,决定主机请求什么类型的数据。

主要包括3类功能码:公共功能码、用户定义功能码和保留功能码

比较详细的解读什么是ModbusFigure5
Modbusfunction code

实际最常用的是公共功能码中的4个功能码:03/04/06/10

比较详细的解读什么是ModbusFigure6
公共功能码
  • 0x03:读多个保持寄存器
  • 0x04:read input registers
  • 0x06:写单个保持寄存器
  • 0x10:写多个保持寄存器

因为PLC主要控制的是继电器触点,所以在PLC上还会经常对线圈(Coils)进行读写。

这里需要特别注意的一点是:写保持寄存器,需要区分0x06写单个寄存器和0x10写多个寄存器,而读保持寄存器不区分读单个和读多个,当需要读单个保持寄存器时,也是使用0x03指令,指定读取数量为1。

数据帧格式

无论是3种传输模式中的哪一种,Modbus帧格式都是一样的:

比较详细的解读什么是ModbusFigure7
Modbus数据帧

主要包括:

  • 地址域:1字节,即从机设备地址,通常1-247为有效地址,0为广播地址
  • function code:1字节,表明主机请求数据的类型。
  • data:Nbyte,包含寄存器地址和寄存器数据等。
  • 差错Verification:对数据进行冗余校验的结果,CRC或LRC

下面来详细介绍一下每种传输模式的数据帧格式。

Modbus-RTU数据帧

Modbus-RTU数据帧,帧长度最大为256字节,由以下4部分构成:

  1. 子节点地址:1字节,范围0-247
  2. 功能代码:1字节
  3. 数据块:0-252字节
  4. CRC check值:2字节,低8位在前
比较详细的解读什么是ModbusFigure8
ModbusRTU数据帧格式

Modbus-RTU帧间隔,Modbus-RTU要求两个RTU报文帧间隔要大于3.5个字节时间:

比较详细的解读什么是ModbusFigure9
ModbusRTU帧间隔

且每个报文帧内字节间隔小于1.5个字节时间,否则会认为接收不完整。

比较详细的解读什么是ModbusFigure10
ModbusRTU帧内字符间隔

Modbus-RTU采用循环冗余校验 (CRC – Cyclical Redundancy Checking) 算法对报文帧全部数据进行计算,得到的校验值附加在报文帧末尾,低位在前。CRC-16_Modbus计算方法可以参考:CRC-16_Modbus校验算法

实际请求/应答交互示例:

example1:write single register。向01地址设备0x0105保持寄存器写入1个数据:0x0190

主机发送: 01 06 01 05 01 90 99 CB
从机回复: 01 06 01 05 01 90 99 CB

01表示从机地址,06功能码表示写单个保持寄存器,0105表示寄存器地址,0190表示写入寄存器的数值,99CB为CRC check值。可以看出,当写1个寄存器数据时,从机响应的数据帧和主机发送的数据帧完成一致。

example2:write multiple registers。向01地址设备0x0105、0x0106、0x0107地址保持寄存器,写入3个寄存器数据:0x1102, 0x0304, 0x0566

主机发送:01 10 01 05 00 03 06 11 02 03 04 05 66 4a 12
从机回复:01 10 01 05 00 03 91 f5

同理,01从机地址,10功能码表示写多个保持寄存器,0105表示起始地址,0003表示写3个寄存器,06表示数据量为6个字节,1102/0304/0566分别表示写入3个寄存器的数值,4a12表示CRC checknumerical value。

可以看出,写多个寄存器时使用10功能码,从机回复数据也比较精简。

example3:读单个寄存器。读01地址设备0x0105保持寄存器数据。

主机发送:01 03 01 05 00 01 95 f7
从机回复:01 03 02 56 78 87 c6

03表示读多个寄存器,0105表示起始地址,0001表示读1个寄存器

02表示2个字节,56 78表示寄存器的数据。

example4:读多个寄存器。读01地址设备0x0105、0x0106、0x0107地址保持寄存器,共3个寄存器数据。

主机发送:01 03 01 05 00 03 14 36
从机回复:01 03 06 11 22 33 44 55 66 2a 18

03表示读多个寄存器,0105表示起始地址,0003表示读3个寄存器

06表示6个字节,11 22 33 44 55 66表示寄存器的数据。

Modbus-ASCII数据帧

Modbus-ASCII传输模式中,每个字节均以ASCIICoding,实际报文中1个字节会以两个ASCII字符发送,因此这种模式比Modbus-RTU模式效率要低。

例如报文数据0x5B = "5" + "B" = 0X35 + 0X42

数据帧格式如下:

比较详细的解读什么是ModbusFigure11
ModbusASCII报文帧

从ASCII报文帧可以看出,ASCII模式增加了帧起始(“:”)和帧结束标志(回车&换行),由于报文数据每个字节在ASCII模式下需要2个字符进行编码,为了保证ASCII模式和RTU模式在应用级兼容,ASCII模式数据块最大长度为252×2,所以可以计算出报文帧最大长度为1+2+2+2×252+2+2=513字符,报文帧内的字符间隔时间可以达1秒钟。

Modbus-ASCII模式校验方法采用的是纵向冗余校验 (LRC – Longitudinal Redundancy Checking) 算法,校验内容不包括帧起始和帧结束字符。

计算方法也比较简单,对校验内容进行累加和计算,忽略进位,并转换为二进制补码:

例如Modbus-ASCII模式,主机发送请求,向地址为1的从设备的0x405地址,in simulation...' : 'start simulation0x1234,报文如下:

:010604051234AA<CR><LF>

即:

: 01 06 04 05 12 34 AA <CR><LF>

可以看到01表示设备地址,06表示写单个保持寄存器。地址为0x0405,数据为0x1234,LRC verification值为0xAA。实际进行校验的数据不包含帧头和帧尾。

0xAA = LRC(01, 06, 04, 05, 12, 34)。

比较详细的解读什么是ModbusFigure12
LRC verification(纵向冗余校验)

手动LRC计算方法:

把原始数据两个字符组成一个字节,并进行二进制加法计算:01+06+04+05+12+34=0x56,计算二进制补码:

0x56 = 0101 0110
  取反:1010 1001
  加1: 1010 1010 = 0xAA
或者:0x100-0x56 = 0xAA

Modbus-TCP数据帧

Modbus-TCP基于4种报文类型:

  • MODBUS 请求是客户机在网络上发送用来启动事务处理的报文
  • MODBUS 证实是在客户端接收的响应信息
  • MODBUS 指示是服务端接收的请求报文
  • MODBUS 响应是服务器发送的响应信息

Modbus-TCPmessage frame:

比较详细的解读什么是ModbusFigure13
ModbusTCP报文帧

更多的细节内容,可以在国标《GB-T19582.1-2008 No.3部分:Modbus协议在TCP/IP上的实现指南》View。

两种请求模式

Modbus协议中主机可以以两种模式对从机设备发出请求:单播和广播。

单播模式

在单播模式下,从机地址必须唯一,地址范围1-247。主机以特定地址访问指定的某个从机,发出一个请求数据帧,这个数据帧功能可以是读取或写入数据,从机接收到并处理完成后,会回报一个应答数据帧,以表示读取或写入成功。

比较详细的解读什么是ModbusFigure14
单播模式

广播模式

在广播模式下,主机向所有的从机发出请求数据帧,所有的从机都会处理这条命令,对于广播请求,所有的从机无需做出应答操作。一般地址0表示广播地址。

比较详细的解读什么是ModbusFigure15
广播模式

但也有一些特殊的设备采用0xFE作为广播地址,以一款气体传感器数据手册为例,以0xFE作为广播地址,来进行设备地址修改:

比较详细的解读什么是ModbusFigure16
某传感器广播地址

所以要以实际设备的使用手册为准。

Modbus地址规则

比较详细的解读什么是ModbusFigure17
地址规则

Modbus扩展版本

Modbus 是使用异步传输的方式,速度较慢,应用上有其限制,尤其当两台 PLC 要互相交换资料,其传输资料量大,异步方式已经无法满足整体系统反应时间的要求。所以就有 Modbus Plus 出现,使用同步传输的技术,资料格式与 Modbus 一样,此协议是Modicon专有的,和Modbus不同,它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。它使用1Mbit/s的双绞线,并且每个节点都有转换隔离设备,是一种采用边沿触发而不是电平触发的设备。connectModbus Plus到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。

官方标准文档下载

目前比较权威主要有以下2个标准文档:

  1. Modbus组织2012年4月发布的:modbus_application_protocol_specification_v1.1b3.pdf
  2. 国家标准基于Modbus协议的工业自动化网络规范 GB-T19582.1-2008.pdf,主要包括3部分
  • GB-T19582.1-2008第1部分:Modbus应用协议
  • GB-T19582.1-2008第2部分:Modbus协议在串行链路上的实现指南
  • GB-T19582.1-2008第3部分:Modbus协议在TCP/IP上的实现指南
技术术语(共 10 个)—— Click to Expand
Modbus RTU基于串行链路的ModbusProtocol,使用二进制编码和CRC check
Modbus ASCII使用ASCII字符传输的ModbusProtocol,以冒号开头、CR/LF结尾
function codeModbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
registerModbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
CRC check循环冗余校验,用于检测数据传输中的错误
PLC可编程逻辑控制器,工业自动化控制的核心设备
serial port计算机与外部设备进行串行通信的物理接口
Sensors将物理量转换为电信号的检测装置
线圈Modbus位可读写数据,地址从00001开始
保持寄存器Modbus 16位可读写数据,地址从40001开始
来源/工具信息 —— Click to Expand
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbuscommunication protocol technical community Category Modbus protocol standard 字数 5382 字 · 阅读约 14 分钟 更新 2026-07-01 永久链接 https://www.modbus.cn/6714.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus debugging tool,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 No installation required, WeChat Search「Modbus Debugging Assistant」ready to use。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.