author
Bobby Brown
更新 2025-02-08
Modbus是什么?Modbus RTU通讯协定一次搞懂

本文目录


一、通讯协定 Protocol 是什么?

通讯协定(Communication Protocol)也称为通信协议,用来规定工业自动化领域中,不同设备之间数据交换方式。简单来说,通讯协定就像成电子设备间沟通的语言,生活中沟通时,如果我们听不懂对方的语言,就无法理解对方在讲什么。工业电子设备也是一样,当它们之间的通讯协议不同时,就无法传递资讯。

二、Modbus 通讯协定是什么?

通讯协定有很多种,Modbus 是其中一种在工业自动化中相当普及的协定。好比一种共同语言,让不同的设备能够相互通信。
就像人类沟通不仅要语言来表达内容,还需要空气作为声音的传播媒介,电子设备之间除了需要通讯协定来规定数据的交换方式,还必须有通信标准 (Communication Standards)定义语法、语义及格式,才能有效地传输信号。
工业通讯常听到的RS232、RS485、RS422、乙太网路 (Ethernet)、rs232 等都属于实体层-“通信标准 (Communication Standards)”,而 modbus 是一种“通讯协定(Communication Protocol)”可以在不同的实体层上应用于不同场景,并依据需求,使用不同的通信协定来交换数据,本篇文章将进一步细说Modbus通讯协定。
 
[1]

三、Modbus 通讯协定种类

Modbus RTU vs Modbus TCP
Modbus 通讯协定根据使用的通信标准可分为串行通信和乙太网路通信两大类型。
串型通信也就是数据按位元逐一传输,包括Modbus RTU及Modbus ASCII两种协定:
1. Modbus RTU :通信标准为串行通信,使用二进位制编码进行数据传输,常搭配 RS232、RS485、RS422 电缆串行接口,适合短距离、多设备的应用,在目前业界较常见。(了解更多:什么是RS485
2. Modbus ASCII :通信标准为串行通信,使用美国标准通讯交换码 (ASCII) 进行数据编码,常搭配 RS232、RS485、RS422 电缆串行接口,。由于ASCII编码被广泛使用在电子系统中,且转换为人类可读取的文字方法单纯,易于手动检查,但需耗费较大储存空间。
3. Modbus TCP :通信标准为乙太网路通信,基于 TCP/IP 协定,通过网路电缆或无线网路来传输数据,常用于需要网路连接的自动化设备或远端监控系统。
Modbus RTU 和 Modbus ASCII 的实际传输速度并不一定是RTU比ASCII快,传输速度主要取决于所使用的串行接口(如RS232、RS485等)的波特率设置。Modbus RTU 的优势在于它使用的是二进制格式,编码更加紧凑,数据量较小,适合在带宽受限的环境中使用;而Modbus ASCII采用ASCII字符编码格式,每个字节被分为两个ASCII字符表示,导致信息量大,传输数据较慢。

[2][3]

四、为什么许多PLC选择使用 Modbus 协议?

许多厂商PLC 选择使用 Modbus 通讯协议,首先是因为Modbus 结构简单,且无需授权即能免费使用。
除了结构简单、免费授权,Modbus在实际应用上的一大优势,是它支援多种接口(如 RS232、RS485 和 TCP/IP),并适用于各种物理层传输方式(双绞线、光纤和无线等)。
第三章节有提到,Modbus协议有分不同种类,他们分别可以搭配不同网路,像是在现场总线方面,Modbus-RTU、Profibus、CC-Link和CAN主要透过RS485网络进行通信,可支援主从架构或控制器与设备、节点之间的连接。
而在以太网环境下,Modbus-TCP、PROFINET、EtherCAT和EtherNet/IP等协议则可以完成客户端与服务器,或控制器与设备之间的高效通信。
总体来说,Modbus对乙太网和RS485网络的兼容性很好,非常适合工业自动化系统的需求,也因此Modbus现在成为许多厂商 PLC 的首选通讯协议。
协议类型 协议名称 网路 角色
工业乙太网 Modbus-TCP 乙太网 客户端和服务器
ProfitNET 乙太网 控制器和设备
EtherCAT 乙太网 主站和从站
EtherNet/IP 乙太网 控制器和设备 
工业现场总线 Modbus-RTU RS485 主站和从站 
Profubus  RS485 主站和从站
 CC-Link RS485  主站和从站
 CAN RS485 控制器和节点 

*常见协议与其功能角色

[4]

五、Modbus RTU 运作原理?

Modbus RTU 通讯协定以“主从架构”定义交换数据的方式,也就是所有的数据交换和通信是由一个主设备(master)来控制和发起,并且有一个或多个从设备(slave)负责接收和回应主设备的指令。
当主设备(Master)向从设备(Slave)发送请求时,这个请求中会包含一个指定的从站位址。这个位址用来告诉所有的从站,这个指令是发给哪一台设备的,每台从站都会接收到请求,但只有指定位址的从站会回应。
比方说假设有三台从站,位址分别是 1、2 和 3:
  • 如果主设备发出请求给位址 2 的从站,那么位址 2 的从站会回应,其他位址的从站则不回应。
  • 如果使用广播模式(请求中的从站位址为 0 时),则所有的从站(1、2、3)都会执行这条指令,但都不会回应主设备。
  • Modbus RTU 主从架构

    5-1、Modbus 通讯封包

    在Modbus RTU通讯中,封包结构包含以下几个部分:
    • 地址:用于标识接收命令的从站地址。
    • 功能码:表示需要从站执行的操作,如读寄存器或写寄存器等。
    • 数据:包含与请求相关的数据,如需要读取或写入的寄存器地址和数量。
    • 错误校验码(CRC校验):用于确保数据在传输过程中没有被破坏。(Modbus TCP则使用类似的封包结构,但不使用CRC校验,而是依赖TCP/IP层的校验。)
    • *第六段将有实例解释。
    [5]

    5-2、Modbus 协议的数据暂存器类型

    (以下内容根据Modbus Tools, iT帮帮忙-Modbus RTU简介整理而成,更详细的暂存器类型、功能码说明,请参考资料来源)
    Modbus 协议将数据存储区分为四大类,根据功能码来管理不同类型的数据:
    • 离散输入(Discrete Inputs):只读的二进制输入数据,对应功能码 0x02,用于读取设备的状态。
    • 线圈(Coils):可读写的二进制输出数据,对应功能码 0x01,常用于控制设备开关。
    • 输入寄存器(Input Registers):只读的模拟输入数据,对应功能码 0x04,用于监控传感器或其他输入设备。
    • 保持寄存器(Holding Registers):可读写的模拟量数据,对应功能码 0x03 和 0x06,通常用来设置设备参数或状态。
     
    [6]

    5-3、Modbus 功能码 不同的功能码及其操作

    Modbus 协议定义了许多功能码,这些功能码控制着设备如何读取或写入数据。常见的功能码及其应用如下:
    1. 0x01 - 读线圈状态(Read Coils):读取设备的开关状态,常用于监控开关或继电器。
    2. 0x02 - 读离散输入状态(Read Discrete Inputs):监控设备的二进制输入,例如按钮或传感器状态。
    3. 0x03 - 读保持寄存器(Read Holding Registers):监控设备的运行参数或状态,常用于读取设备的设置或运行数据。
    4. 0x04 - 读输入寄存器(Read Input Registers):用于监控模拟量输入,例如温度、压力等传感器数据。
    5. 0x05 - 写单个线圈(Write Single Coil):控制单个设备的开关状态。
    6. 0x06 - 写单个保持寄存器(Write Single Holding Register):修改设备参数,例如速度或温度设定。
    7. 0x0F (15) - 写多个线圈(Write Multiple Coils):一次控制多个设备的开关状态。
    8. 0x10 (16) - 写多个保持寄存器(Write Multiple Holding Registers):同时设定多个设备的运行参数。
     

    5-4、什么是Modicom Format?

    Modicom Format 是规定 Modbus 的位址编号格式,Modicom Format 通过使用特定的位址编号范围,将不同的寄存器类型与功能码对应起来。
    这样设计的目的是:让操作人员只需输入位址,不必手动指定功能码,如此可以减少操作错误并让通讯更便捷。
     
    原始资料参考:Modicon Modbus Protocol Reference Guide

    5-5、Modbus功能码,位置加40001 / 30001是什么意思呢?

    根据Modicom Format,Modbus 透过不同的位址范围来标识不同类型的寄存器,例如范围30001-39999是输入寄存器(功能码04),40001-49999是保持寄存器(功能码03)。当使用者输入一串代码时,Modbus 的位址编码已经定义好了这些逻辑关系。

    +40001 什么意思?
    根据Modicom Format,我们知道40001-49999是Modbus功能码03 保持寄存器(Holding Registers)的地址范围。 功能码03的逻辑:将“40001”作为基底,读取时,从这里开始计数,40001 代表第 1 个寄存器,偏移量是0000,读取位置是0000。
    当使用者输入40005时,Modbus 会自动识别 40001 至 49999 的范围对应功能码 03 保持寄存器,并依照位置编码逻辑,辨别40005=0004+40001,读取功能码03的0004号位置。

    Modbus功能码
    [7]

    六、以PLC与流量计间使用RS485及Modbus RTU实施流量监测

    在Modbus协议中,每个数据字段都有特定的含义和位置,使用者需输入一串代码,分别表示:“从站地址、功能码 (读取输入寄存器)、寄存器地址、要读取的寄存器数量 、CRC 校验码”,Modbus主机在接收到这些数据后,会依照Modbus规范的格式逐一解析各个字段,以确认要对目标从站进行的操作,如读取或写入寄存器。以下以PLC与流量计间使用RS485及Modbus RTU实施流量监测作为施作范例:
    硬体设置:确保流量计和PLC 都具备 RS485 接口,并支持 Modbus RTU 通讯。将 PLC 和流量计通过 RS485 通讯线路连接在一起。
    Modbus RTU 设置与程序设计:设定流量计的 Modbus 位址(如从站地址)和波特率等参数,在 PLC 中设定相应的 Modbus 主站功能,并定义主站要读取的数据,确保 PLC 和流量计的通信参数(波特率、数据位、停止位、校验位)匹配。
     
    电脑操作示意图
    流量计通过 RS485 接口将数据传送到 PLC,PLC 使用 Modbus RTU 协议读取流量计的数据,并在电脑监控介面上,实时显示流量计传回的数据曲线。
    在 Modbus RTU 通讯中,Modbus 通讯封包包含地址域、功能码、数据域、错误校验码(CRC校验),TX 代表传输的请求讯号,RX 则是回传的讯号。
    请求讯号 TX 01 04 00 64 00 01 70 15
    01:从站地址 (slave address)。
    04:功能码 (读取输入寄存器)。
    00 64:寄存器地址 (位址 100)。
    00 01:要读取的寄存器register数量 (1 个)。
    70 15:CRC 校验码,用来检查数据正确性。
    回传信号 RX 01 04 02 04 00 BB F0
    01:从站地址,表示回应来自位址为 1 的设备。
    04:功能码,表示这是“读取输入寄存器”的回应。
    02:后面的数据长度,表示回传的数据有 2 个字节byte。
    00 BB:回传的数据值,16 位元的数据,十六进制表示为 00BB,转换为正十进制为 187。
    F0:CRC 校验码,检查封包的正确性。
    这些流量数据还可以透过闸道器转换成其他协定(如 Modbus TCP)或实体层(如wifi),通过乙太网路传输到远端伺服器,并储存在云端,远程监控生产状况,进行自动化数据报告。譬如说,当流量数据异常时,系统可以自动通过通知系统发送警报,如此便能进一步提升生产效率和便利管理。
    [8]

    参考资料

    1. ^ 带你认识物联网 Modbus 通讯协议-WARREN LO
    2. ^ Modbus协议的通信方式有几种 - 小头菜
    3. ^ Understanding Modbus Protocol - RTU vs TCP vs ASCII - OPS Telecom
    4. ^ Modbus RTU 通讯协定介绍 - 力诚科技
    5. ^ Modbus RTU简介(上) - iT 帮帮忙
    6. ^ Modbus协议数据类型只有这四种 - 小头菜
    7. ^ MODBUS 位址加40001 / 30001,为什么就可以不用输入功能码? - PLC
    你可能也会感兴趣
    相关文章
    Bobby Brown    2023-8-8
    Bobby Brown    2023-8-8
    Bobby Brown    2023-8-8

    联络我们