比较详细的解读什么是Modbus

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

比较详细的解读什么是Modbus缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 4种data type
  2. 2. 3种传输模式
  3. 3. 3类function code
  4. 4. data帧format
  5. 5. 两种Request模式
  6. 6. Modbus扩展版本
  7. 7. 官方标准DocumentDownload

Modbus是什么?

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

比较详细的解读什么是Modbus插图

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

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

比较详细的解读什么是Modbus插图1
Modbus网络体系

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

比较详细的解读什么是Modbus插图2
ISO/OSI模型

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

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

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

  • modbus_application_protocol_specification_v1.1b3.pdf
  • 基于Modbus协议的Automation网络规范 GB-T19582.1-2008.pdf

可以说90%的书籍和网络Resources都是翻译自这两篇Document,文末获取标准DocumentDownload方法

4种data type

Modbus协议规定,进行读写Operation的data type,按照读写属性和Type可分为以下4种:

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

3种传输模式

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

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

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

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

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

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

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

3类function code

Modbusfunction code,是写在主机Requestdata帧中的,决定主机进行读还是写Operation,是读线圈、离散量还是register,是写单个register还是多个register等等,决定主机Request什么Type的data。

主要包括3类function code:公共function code、用户定义function code和保留function code

比较详细的解读什么是Modbus插图5
Modbusfunction code

实际最常用的是公共function code中的4个function code:03/04/06/10

比较详细的解读什么是Modbus插图6
公共function code
  • 0x03:读多个保持register
  • 0x04:读输入register
  • 0x06:写单个保持register
  • 0x10:写多个保持register

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

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

data帧format

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

比较详细的解读什么是Modbus插图7
Modbusdata帧

主要包括:

  • address域:1byte,即从机Device address,通常1-247为effectiveaddress,0为广播address
  • function code:1byte,表明主机Requestdata的Type。
  • data:Nbyte,包含register address和register data等。
  • 差错Verification:对data进行冗余校验的结果,CRC或LRC

下面来详细介绍一下每种传输模式的data帧format。

Modbus-RTUdata帧

Modbus-RTUdata帧,帧Length最大为256byte,由以下4部分构成:

  1. 子节点address:1byte,范围0-247
  2. Function代码:1byte
  3. data块:0-252byte
  4. CRC check值:2byte,低8位在前
比较详细的解读什么是Modbus插图8
ModbusRTUdata帧format

Modbus-RTU帧间隔,Modbus-RTU要求两个RTUmessage帧间隔要大于3.5个bytetime:

比较详细的解读什么是Modbus插图9
ModbusRTU帧间隔

且每个message帧内byte间隔小于1.5个bytetime,否则会认为receive不完整。

比较详细的解读什么是Modbus插图10
ModbusRTU帧内字符间隔

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

实际Request/应答交互示例:

示例1:写单个register。向01address设备0x0105保持register写入1个data:0x0190

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

01表示从机address,06function code表示写单个保持register,0105表示register address,0190表示写入register的numerical value,99CB为CRC check值。可以看出,当写1个register data时,从机Response的data帧和主机send的data帧Complete一致。

示例2:写多个register。向01address设备0x0105、0x0106、0x0107address保持register,写入3个register data:0x1102, 0x0304, 0x0566

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

同理,01从机address,10function code表示写多个保持register,0105表示starting address,0003表示写3个register,06表示data量为6个byte,1102/0304/0566分别表示写入3个register的numerical value,4a12表示CRC checknumerical value。

可以看出,写多个register时使用10function code,从机回复data也比较精简。

示例3:读单个register。读01address设备0x0105保持register data。

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

03表示读多个register,0105表示starting address,0001表示读1个register

02表示2个byte,56 78表示register的data。

示例4:读多个register。读01address设备0x0105、0x0106、0x0107address保持register,共3个register data。

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

03表示读多个register,0105表示starting address,0003表示读3个register

06表示6个byte,11 22 33 44 55 66表示register的data。

Modbus-ASCIIdata帧

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

例如messagedata0x5B = "5" + "B" = 0X35 + 0X42

data帧format如下:

比较详细的解读什么是Modbus插图11
ModbusASCIImessage帧

从ASCIImessage帧可以看出,ASCII模式增加了帧start(“:”)和帧End标志(回车&换行),由于messagedata每个byte在ASCII模式下需要2个字符进行Coding,为了保证ASCII模式和RTU模式在应用级兼容,ASCII模式data块最大Length为252×2,所以可以计算出message帧最大Length为1+2+2+2×252+2+2=513字符,message帧内的字符间隔time可以达1秒钟。

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

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

例如Modbus-ASCII模式,主机sendRequest,向address为1的从设备的0x405address,写入numerical value0x1234,message如下:

:010604051234AA<CR><LF>

即:

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

可以看到01表示Device address,06表示写单个保持register。address为0x0405,data为0x1234,LRC verification值为0xAA。实际进行校验的data不包含帧头和帧尾。

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

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

手动LRC计算方法:

把raw data两个字符组成一个byte,并进行binary加法计算:01+06+04+05+12+34=0x56,计算binary补码:

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

Modbus-TCPdata帧

Modbus-TCP基于4种message type:

  • MODBUS Request是客户机在网络上send用来启动事务处理的message
  • MODBUS 证实是在客户端receive的Response信息
  • MODBUS 指示是服务端receive的Requestmessage
  • MODBUS Response是服务器send的Response信息

Modbus-TCPmessage帧:

比较详细的解读什么是Modbus插图13
ModbusTCPmessage帧

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

两种Request模式

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

单播模式

在单播模式下,从机address必须唯一,address范围1-247。主机以特定address访问指定的某个从机,发出一个Requestdata帧,这个data帧Function可以是读取或写入data,从机receive到并处理Complete后,会回报一个应答data帧,以表示读取或写入成功。

比较详细的解读什么是Modbus插图14
单播模式

广播模式

在广播模式下,主机向所有的从机发出Requestdata帧,所有的从机都会处理这条命令,对于广播Request,所有的从机无需做出应答Operation。一般address0表示广播address。

比较详细的解读什么是Modbus插图15
广播模式

但也有一些特殊equipment采用0xFE作为广播address,以一款气体传感器data手册为例,以0xFE作为广播address,来进行Device address修改:

比较详细的解读什么是Modbus插图16
某传感器广播address

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

ModbusaddressRules

比较详细的解读什么是Modbus插图17
addressRules

Modbus扩展版本

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

官方标准DocumentDownload

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

  1. Modbus组织2012年4月发布的:modbus_application_protocol_specification_v1.1b3.pdf
  2. 国家标准基于Modbus协议的Automation网络规范 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 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus ASCII使用ASCII字符传输的Modbus协议,以冒号开头、CR/LF结尾
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
CRC check循环冗余校验,用于检测data传输中的Error
PLC可编程逻辑控制器,Automation控制的核心设备
串口计算机与外部设备进行串行通信的物理接口
传感器将物理量转换为电信号的检测装置
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus protocol标准 字数 5382 字 · 阅读约 14 分钟 更新 2026-07-01 永久链接 https://www.modbus.cn/6714.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注