
图片来源:Yaskawa
作者 | Lucas Paruch
Modbus协议与RS-485为工业物联网应用提供了简单、可靠、低成本的通信方案,并使工业过程高效运行。
从最初的物联网(IoT)发展到现在的工业4.0,在这个过程中,我们在工业物联网(IIoT)中增加了一个额外的“I”,并将大数据、人工智能和机器学习(AI/ML)的概念引入到自动化与控制领域。在这些闪亮的新技术背后,潜藏着一个低调的协议:Modbus。
Modbus通信协议是最初由Modicon公司(后来被施耐德电气收购)于1979年发布的,并迅速成为工业通信领域的业界标准。其成功得益于以下特性:简单、易于部署且开源;异步串行所需的处理资源最少;差分串行驱动,在恶劣环境中具有出色的抗噪性;以及支持长距离多点串行总线(1200米无需要中继器/交换机)。
经过四十多年的快速发展,工业网络的数据采集、通信和实时处理的规模已远超20世纪80年代的预期。然而,IIoT中仍存在大量几十年都未发生根本性变化的小型设备。广泛分布于系统中的边缘设备和传感器,需要一种可靠且低成本的方式向中央IIoT控制器传输数据。相比于部署加固型以太网方案仅传输少量字节,Modbus RTU提供了一种可靠的通信手段,甚至可通过简单的8位微控制器实现低成本部署。
01
Modbus协议概述和工作原理
Modbus采用客户端-服务器架构(此前称为主从模式)。在每个Modbus网络中,都会指定一个设备作为客户端。客户端是唯一可以主动发起通信的设备,而服务器(从设备)仅在收到客户端请求后作出响应。这种结构确保了通信的有序性和稳定性,适用于各种工业自动化应用。
Modbus RTU是目前最常见的Modbus串行通信实现方式。所有Modbus设备都必须支持 RTU 模式,而部分设备还兼容 ASCII 模式,以满足早期老旧应用(如调制解调器通信)的需求。为了简化讨论,本文中所有涉及串行 Modbus 的内容均默认基于 RTU 实现。
在 Modbus网络中,每个服务器设备都被分配一个唯一的地址,范围从1到247。客户端通过该地址,向特定服务器节点请求或发送数据,从而实现高效的数据交换和设备控制。Modbus将服务器数据分为四组:离散线圈、离散输入、输入寄存器和保持寄存器。
02
如何将Modbus与工业控制结合使用?
当使用工业控制设备,如PLC、人机界面(HMI)和变频器时,Modbus帧通常在后台处理,功能代码对工程师来说是透明的(工程师只需从下拉列表中选择“读取寄存器”)。然而,对于高级故障排除,尤其是在部署自定义嵌入式传感器或边缘控制器硬件时,了解Modbus帧的结构变得非常重要。通过在PC上使用串行总线监控软件,或使用具有协议解码功能的数字示波器,工程师可以识别并监控在Modbus串行网络上传输的每个请求和响应消息的内容。
读取数据的请求(由客户端发起)包含服务器设备的节点地址、读取功能代码、请求的数据地址以及要读取的连续16位寄存器的数量。例如,要从服务器节点09读取数据寄存器10和11,客户端会发送包含8个字节的请求。串行总线上的每个服务器都会接收到此消息,但只有节点09会确认它已收到命令。假设寄存器10的值为3243(0x0cab),寄存器11的值为4660(0x1234)。在这种情况下,服务器节点09将向客户端发送响应,总共9个字节。 服务器会验证响应是否来自预期的节点(09),确保该节点已对预期的功能代码做出响应,并检查响应的数据量是否符合要求。
每个串行帧以循环冗余校验(CRC)结尾。CRC算法通过一系列异或和移位操作来计算两字节值。在接收到串行传输时,接收端会重新计算CRC值。如果计算出的CRC值与传输中的值不匹配,则表明数据在传输过程中发生了损坏,此时请求将被忽略(通常会进行重试)。
向服务器节点写入数据的请求(由客户端发起)与读取请求非常相似。该请求包含服务器设备的节点地址、写功能代码、要写的第一个寄存器的数据地址、要写入的字节数以及要写入的数据。例如,要将值4和256分别写入设备节点09 上的数据寄存器10和11,客户端会发送请求。网络上的每台服务器都会收到该消息,但只有节点 09 会处理该请求。完成请求的任务(将4写入寄存器10,将256写入寄存器11)后,节点09将向客户端发送确认消息,表明任务已成功完成。服务器将再次验证是否完成了预期节点地址的写入。如果出现异常错误或请求超时,服务器可以选择重试操作或标记客户端节点为错误状态。
读取和写入其它数据类型(如线圈和输入)遵循类似格式。在所有情况下,客户端都会发起请求,而被请求的服务器节点则会确认任务的完成。
广播消息是这种请求/确认交换中的唯一例外。当网络中存在多个相同的服务器节点时,服务器可以向所有设备同时广播消息。客户端通过广播地址00而不是节点地址发起请求。所有服务器节点都能识别并响应该00请求,无论其节点地址如何。由于命令是同时发往所有节点,因此不会收到任何响应。当客户端需要同步所有连接的服务器节点上的日期或时间时,广播消息非常有用。广播还可以帮助在多个边缘节点中同步信号,而无需按顺序逐一向每个节点发送消息。
03
采用RS-485的五个原因
Modbus协议可以在各种不同的物理层上实现。传统的装置通常使用TIA-422(RS-422)标准,而TIA-232(RS-232)标准则可能用于一些特定的应用。然而,这两种标准在现代应用中并不常见。
EIA/TIA-485(RS-485)是当今最常见和最通用的串行接口。RS-485的五个关键特性使其非常适合工业控制通信应用:
1.差分信号具有出色的抗信号噪声性能;
2.多点线性总线拓扑允许连接多个节点;
3.无需额外硬件即可支持长达1200米的总线长度;
4.异步通信易于与低成本微控制器和工业无线发射机集成;
5.将收发器集成到嵌入式控制中的成本低廉。
04
Modbus中的信号传输机制
单端信号传输是数字信号从发射器传输到接收器的最简单方式(例如RS-232)。在单端网络中,发射器通过开关电压源来发送信号,接收器则将信号与公共参考进行比较,将电压脉冲转化为串行数据传输的1和0。然而,单端信号容易受到电磁干扰(EMI)的影响,因为所有设备共享相同的公共参考。当线路上引入噪声时,信号和参考之间的电压差可能变得难以区分,从而导致1和0的错误解读。
差分信号传输通过主动驱动两条传输线来传输数据(见图1)。这种方法具有优异的抗噪能力,因为接收器会比较非反相信号和反相信号。当线路上发生干扰时,由于信号在两条线路上的变化相同,接收器可以消除这种干扰,从而确保数据的准确传输。这种设计有效地避免了外部噪声的影响,提高了信号的可靠性。
▲图1:图中比较了Modbus应用中单端和差分信号的区别。
在多点线性串行总线上,所有设备通常都连接到相同的两条信号线。主母线电缆必须是线性的,这意味着所有设备都接入同一根总线电缆,而不是通过“Y”形或“星形”连接。为了确保总线的信号质量,设备的“分接”导体应该尽可能短,以确保总线看起来像单一线路。总线有两个明确的终点,不能更多也不能更少。线路终端位于线性总线的两端。客户端与服务器的物理位置或服务器节点地址的分配数量并不重要。图2所示的四个设备可以按任何顺序重新排列,而不会影响总线的操作或配置。
Modbus规范确保任何RS-485装置至少支持32个设备(包括客户端)。这些限制是由每个收发器对信号线施加的电压降和串行总线的最大允许长度决定的。值得注意的是,32个设备并不是硬性上限。如果节点收发器的规格不明确,则通常需要将设备数量限制为32个。然而,现代高阻抗RS-485收发器的负载额定值通常非常低。例如,如果所有节点都使用1/8单位负载收发器,那么允许的设备总数将增加到256个。
此外,信号中继器提供了一种经济高效的方式,以增加允许的节点数量。有源中继器能够将两个满载的总线段连接在一起,从而作为一个网络运行。在定制的IoT传感器网络中,如果需要,充当中继器的第二个收发器可以轻松且低成本地嵌入到设备控制设计中。
05
Modus的部署和网络规划
RS-485安装的最大总线长度(节点之间的所有电缆段的总和)通常限制为1200米。使用合适的电缆规格至关重要,因为不当的电缆是Modbus(RS-485)装置失败的主要原因之一。在RS-485之上的Modbus,要求使用屏蔽双绞线(STP)电缆,通常为24 AWG。然而,并非所有STP电缆的性能都相同。为了确保最佳性能,电缆需要具有120Ω的标称特性阻抗和较低的导体电容(小于15pf/ft)。百通 9841通常被认为是RS-485电缆的黄金标准。如果考虑使用替代电缆,请仔细比较规格。虽然在测试台上,其它电缆结构(如Cat5)可能工作正常,在现场也可能勉强运行数月,但它们无法提供专门设计的电缆那样的长期可靠性。
▲图2:该图展示了典型Modbus应用中的线性总线配置。
Modbus实施指南要求在RS-485网络上增加线路终端。在应用终端时,网络两端的终端必须始终一致。在实践中,与终端相关的权衡是不可避免的。终端的主要目的是抑制信号反射——防止信号从总线的终端反射并干扰后续的数据脉冲。每次信号到达总线终端时,都会发生反射并损失一部分能量。经过3到6次反射后,信号通常会衰减到足以不再对系统造成风险的程度。
影响终端的第二个变量是位宽。对于9600波特率,信号在采样之前有大约50微秒的时间来稳定,这为信号提供了更多的稳定时间。然而,在115k波特率下,信号仅有大约4微秒的时间来稳定,这使得信号更容易受到反射的干扰。随着波特率的增加,信号的稳定时间减少,因此信号反射的影响更为显著,进而增加了对终端的需求。
为简单起见,许多设备制造商建议在所有网络上使用120Ω终端,无论长度或比特率如何。然而,电阻终端在具有大量收发器装置负载的短网络上并不理想,因为电阻终端会在总线上引入电压降。随着电压降的增加,反相和非反相信号之间的电压差减小,使网络更容易受到干扰。很少有制造商实施推荐的电阻电容器(RC)终端(120Ω电阻与1nF电容器串联)。添加串联电容器消除了与通过终端电阻器的直流稳态电流相关的电压降,在不牺牲信号电压裕度的情况下,提供了所需的反射信号衰减。增加电容的唯一潜在缺点是引入RC延迟,这可能会影响需要非常高比特率的应用,超过Modbus RS-485应用中通常使用的比特率。
线极化不是必须的。 如果要实现,则它只能在网络上实现一次 (通常集成到客户端设备中)。极化电阻器的目的是在没有设备传输时将信号线“上拉”和“下拉”到已知状态。除非针对特定的应用情况,否则通常不会实施极化。
在网络规划过程中,需要重点考虑以下三个关键因素:所需传输的数据寄存器数量、数据传输所需的时间,以及数据查询的频率要求。为了最大限度地降低电磁干扰和信号反射的影响,同时确保系统可靠性,建议初始波特率选择9600或19200。只有在确实需要更高传输速率的情况下,才考虑采用更高的比特率设置。
Modbus(RS-485)能够实现长距离连接分布广泛的节点,而无需中继器和交换机,这对许多低带宽物联网监控应用非常有益。串行通信的异步特性和对延迟的容忍性,也使其易于创建混合无线网络。如果铺设1200米长的电缆不切实际,Modbus串行帧可以简单地封装在射频(RF)帧中,通过空中发送并由接收无线电转换回有线信号。使用这种方法,从有线到无线的切换,对网络上的设备是透明的。通过使用900mhz工业网状网络技术,Modbus设备的网络可以很容易地扩展到几平方英里,而不再局限于1200米的总线电缆距离。
06
Modbus何时适用于自动化应用?
Modbus的应用不仅局限于串行通信领域。Modbus-TCP作为一种广泛采用的实现方式,它保留了与Modbus-RTU相同的数据类型和功能代码体系,但通过将请求和响应封装在TCP/IP数据包中,实现了基于以太网的传输能力。
对于需要高速传输和大带宽的应用场景,TCP/IP无疑是理想的选择。然而,在许多数据采集应用中,基于RS-485的Modbus RTU仍然是一种极具吸引力且经济高效的替代方案。值得注意的是,这两种硬件实现方式并非相互排斥——在典型的控制器系统中,通常会根据具体的数据传输需求,同时管理TCP/IP和RS-485设备网络。Modbus在过去四十年中的发展细节似乎令人目不暇接,但就其核心而言,Modbus和RS-485提供了一种简单可靠的通信解决方案,可将构成工业物联网的众多 “物 ”连接起来,并使工业过程高效运行。
关键概念:
■ 基于RS-485的Modbus RTU是一种极具吸引力且经济高效的工业通信解决方案。
■ 在规划Modbus网络时,需要考虑传输的数据寄存器数量、传输所需数据所需的时间以及数据查询的频率。
思考一下:
为什么Modbus在工业自动化领域取得了成功?
- END -

▲本文来自于控制工程中文版杂志(CONTROL ENGINEERING China)2025年04月刊《技术文章》栏目:Modbus与RS-485如何实现经济高效的工业通信?

✦
推荐阅读
✦





