2. 串口通信基础

Modbus RTU 是工业自动化领域应用最广泛的串行通信协议之一,而串口通信的物理层与数据链路层参数,是决定 Modbus RTU 能否稳定运行的根本前提。许多工程师在调试 Modbus 设备时,遇到通信不稳定、数据乱码或设备无响应,往往首先怀疑协议栈或从站地址,但实际根因常常出在串口电气标准选型不当、波特率偏差累积、校验位配置不一致或流控握手冲突上。本章将系统梳理 RS232、RS485、RS422 三种电气接口的本质差异,并深入解析波特率、数据位、停止位、校验位与流控的工程配置方法,帮助你在实战中快速定位并解决物理层与参数层问题。

串口通信物理层与参数配置知识框架 电气接口标准 • RS232:单端、±12V、15m • RS485:差分、2线半双工、1200m • RS422:差分、4线全双工、1200m • 共模/差模、终端电阻、隔离 • 拓扑:点对点/总线型/星型 帧格式参数 • 波特率:300~115200 bps • 数据位:5/6/7/8(常用8) • 停止位:1/1.5/2 • 校验位:None/Even/Odd • 帧间隔:3.5字符时间 流控机制 • 无流控(Modbus RTU默认) • 硬件流控:RTS/CTS • 软件流控:XON/XOFF • 半双工方向切换 • 自动方向控制/DE信号 工程决策路径 ① 传输距离 <15m → RS232;② 多节点/远距离/抗干扰 → RS485;③ 全双工远距离 → RS422 ④ 波特率越高,传输距离越短,需权衡;⑤ 校验位必须主从一致,否则静默丢帧 ⑥ Modbus RTU 固定 8 数据位,停止位 1 或 2,无流控 ⑦ 总线两端加 120Ω 终端电阻,星型拓扑需改菊花链 ⑧ 隔离与共地:RS485 建议使用隔离收发器,避免地环路

上图给出了串口通信中电气标准、帧格式参数与流控机制的整体关系。在实际 Modbus RTU 组网中,这三者相互制约:RS485 的差分特性决定了其长距离与多节点能力,而帧格式参数则直接关系到 Modbus 报文能否被正确解析,流控则影响半双工总线上的收发时序。下面逐一展开。

3.1 电气接口标准:RS232、RS485、RS422 的选型与工程差异

核心原理

RS232 是最早的串行通信标准,采用单端信号传输,以电压值表示逻辑电平:逻辑 1 为 -3V ~ -15V,逻辑 0 为 +3V ~ +15V。其最大传输距离约 15 米,最高速率通常不超过 115200 bps,且只能实现点对点通信。RS232 的共地要求使得通信双方必须共享参考地,长距离或强干扰环境下容易因地电位差导致通信失败甚至烧毁接口。

RS485 采用差分信号传输,使用 A、B 两线之间的电压差表示逻辑状态:当 A-B 大于 +200mV 时为逻辑 1,小于 -200mV 时为逻辑 0。差分结构带来极强的共模抑制能力,传输距离可达 1200 米(在 9600 bps 下),且支持最多 32 个节点(标准负载)或更多(使用高阻抗收发器)。RS485 为半双工通信,即同一时刻只能发送或接收,需要方向控制。

RS422 与 RS485 电气特性类似,但采用 4 线制(发送对 T+/T-,接收对 R+/R-),实现全双工通信,即收发可同时进行。RS422 同样支持长距离传输,但通常用于点对点或少量设备连接,不适用于多节点总线。

判断方法或操作流程

在 Modbus RTU 项目中选择电气接口时,可按下述流程判断:

  1. 确认传输距离与节点数:若设备间距离小于 15 米且仅两个设备,优先考虑 RS232;若距离超过 15 米或需要挂接多个从站(如 2~32 个),则必须选用 RS485。
  2. 确认通信方向需求:若主站需要同时收发数据(如某些高速数据采集场景),且距离较远,可选用 RS422;但 Modbus RTU 本身是半双工协议,因此 RS422 在 Modbus 中并不常见,除非通过额外逻辑实现全双工轮询。
  3. 检查干扰环境:变频器、电机、大功率开关附近,RS232 极易受干扰,RS485 差分传输抗干扰能力更强,但需配合屏蔽双绞线,并确保屏蔽层单端接地。
  4. 确认终端电阻:RS485 总线两端必须各接一个 120Ω 终端电阻,以匹配传输线阻抗,防止信号反射。若总线上的设备支持内置终端电阻,应确保只有两端设备启用。

案例拆解:某工厂 8 台仪表 Modbus 组网改造

某水处理厂原有 8 台流量计,采用 RS232 点对点方式分别连接至中控室,布线距离约 80 米,运行中频繁出现数据丢包和乱码。工程师检查发现,RS232 在 80 米距离上信号衰减严重,且现场存在多台变频器,共模干扰明显。改造方案如下:

  • 将 8 台流量计的 RS232 接口更换为 RS485 接口(或加装 RS232-RS485 转换器),采用手拉手菊花链拓扑连接,总线总长约 200 米。
  • 在总线两端(中控室主站端和最远流量计端)各接入 120Ω 终端电阻。
  • 使用屏蔽双绞线,屏蔽层在 PLC 柜侧单端接地。
  • 将波特率从 19200 降至 9600,以提升抗干扰余量。

改造后,通信误码率从约 5% 降至 0.01% 以下,连续运行 72 小时无丢包。复盘经验:RS232 不适合长距离工业现场,RS485 的差分特性与终端匹配是解决干扰的关键;降低波特率牺牲了部分速度,但换来了稳定性,在工业现场是常见取舍。

常见误区与总结

误区1:认为 RS485 只需要两根线,不需要共地。实际上,RS485 虽然差分传输,但收发器仍需一个公共参考地(通常为信号地),否则共模电压超出 -7V~+12V 范围会损坏芯片。建议使用隔离型 RS485 收发器(如 ADM2483)彻底隔离地环路。
误区2:星型拓扑直接用于 RS485。RS485 总线要求是直线型(菊花链),星型拓扑会产生信号反射,导致通信不稳定。若必须星型,需在分支点加中继器或使用星型耦合器。

3.2 波特率、数据位、停止位、校验位:帧格式的精确配置

核心原理

串口通信的帧格式定义了每个字符的传输结构。Modbus RTU 规定数据帧必须采用 8 位数据位,停止位为 1 位或 2 位,校验位可选无校验、偶校验或奇校验。波特率表示每秒传输的比特数,常见值为 9600、19200、38400、57600、115200。波特率越高,每位时间越短,对时钟精度和线路质量要求越高。

数据位通常为 8 位,因为 Modbus RTU 的每个字节就是 8 位二进制数。停止位用于标识字符结束,至少为 1 位,某些设备支持 1.5 位或 2 位。校验位用于检测传输错误:偶校验保证一帧中 1 的个数为偶数,奇校验保证为奇数,无校验则不添加校验位。

判断方法或操作流程

配置 Modbus RTU 参数时,必须确保主站与所有从站完全一致,否则通信将失败。具体操作流程:

  1. 确定波特率:根据传输距离、线缆质量和从站响应时间要求选择。距离超过 500 米时建议不超过 9600 bps;距离在 100 米内且线缆质量好,可尝试 115200 bps。
  2. 固定数据位为 8:Modbus RTU 协议强制要求 8 数据位,不可更改。
  3. 选择停止位:通常选 1 位;若现场干扰严重或从站时钟偏差较大,可尝试 2 位以增加容错。
  4. 选择校验位:推荐使用无校验(None),因为 Modbus RTU 报文本身带有 CRC16 校验,额外的奇偶校验意义不大,且会增加帧长度。若从站要求偶校验,则主站必须同步配置。
  5. 验证帧间隔:Modbus RTU 规定帧内字符间隔不超过 1.5 个字符时间,帧间间隔不小于 3.5 个字符时间。波特率变化时,这些时间值需重新计算。

案例拆解:波特率不匹配导致的间歇性通信故障

某光伏电站数据采集器与逆变器通信,主站设置为 19200 bps,从站实际为 9600 bps。现象是通信偶尔成功,但大部分时间超时。分析原因:主站以 19200 发送,从站以 9600 接收,从站采样到的位序列完全错乱,CRC 校验几乎必然失败。但偶尔因噪声或时序巧合,从站可能误判出有效帧。解决方法是统一波特率为 9600,并检查从站拨码开关确认实际配置。此案例说明,串口参数必须逐项核对,不能仅凭默认值。

常见误区与总结

经验提醒:在调试初期,建议先用串口调试助手分别以不同波特率扫描从站,找到能收到正确响应的参数组合。另外,使用示波器测量 TX 引脚波形,可直观看到波特率偏差——正常波形每位宽度应等于 1/波特率,偏差超过 ±2% 即可能导致通信失败。

3.3 流控:硬件流控、软件流控与 Modbus RTU 的特殊性

核心原理

流控用于协调发送方与接收方的数据处理速度,防止数据溢出。硬件流控使用 RTS(请求发送)和 CTS(清除发送)信号线,发送前检查 CTS 电平,接收方通过拉低 RTS 暂停对方发送。软件流控使用 XON/XOFF 字符(0x11/0x13)插入数据流中,接收方发送 XOFF 暂停对方,发送 XON 恢复。

Modbus RTU 协议本身不定义流控机制,且其报文是二进制数据,可能包含与 XON/XOFF 相同的字节(如 0x11、0x13),因此严禁在 Modbus RTU 中使用软件流控。硬件流控在 RS232 接口中偶尔使用,但在 RS485 半双工模式下,流控通常表现为方向切换控制(DE/RE 信号),由主站或从站的收发器自动管理。

判断方法或操作流程

在 Modbus RTU 系统中配置流控时,遵循以下原则:

  • 默认关闭所有流控(无流控),这是 Modbus RTU 的标准配置。
  • 若使用 RS232 且从站设备要求硬件流控,则主站必须启用 RTS/CTS,并正确接线(交叉连接 RTS-CTS)。
  • 若使用 RS485,需确保收发器方向控制引脚(DE/RE)正确连接至 UART 的 RTS 或由软件自动控制。许多 USB-RS485 转换器内置自动方向切换,无需外部控制。
  • 避免使用软件流控,因为 Modbus 数据帧中任意字节都可能出现 0x11/0x13,导致通信中断。

案例拆解:RS485 方向切换不当导致发送后立即收到自己数据

某工程师使用 STM32 的 USART 连接 RS485 收发器,将 DE/RE 引脚直接接高电平(始终发送模式),导致数据无法接收。后改为由 RTS 引脚控制 DE/RE,但未考虑发送完成后 RTS 拉低的延迟,导致最后一个字节被截断。解决方法是使用 USART 的发送完成中断(TC)或空闲中断来延迟切换方向,确保最后一个字节完全发送完毕后再拉低 DE。此案例说明,RS485 半双工的方向切换时序是工程实现中的关键细节。

常见误区与总结

风险提示:某些 RS485 转换器声称“自动方向切换”,但实际切换延迟可能高达数十微秒,在 115200 bps 下,一个字节约 87μs,若延迟过大,会丢失帧尾。建议在高速率下使用带硬件自动方向控制的专用芯片(如 MAX13487),或使用示波器验证切换时序。

3.4 参数配置综合对比表与工程复盘

参数项RS232RS485RS422Modbus RTU 推荐值
信号方式单端差分(2线)差分(4线)RS485 最常用
最大距离15m1200m1200m视现场而定
最大节点数232(标准)10(典型)32 以内
通信模式全双工半双工全双工半双工
波特率范围300~115200300~115200300~1152009600/19200
数据位5/6/7/85/6/7/85/6/7/8固定 8
停止位1/1.5/21/1.5/21/1.5/21 或 2
校验位None/Even/OddNone/Even/OddNone/Even/OddNone(推荐)
流控可选硬件/软件方向控制可选硬件无流控
终端电阻不需要两端 120Ω接收端 120Ω必须

在工程实践中,串口通信参数的配置看似简单,但每一个细节都可能成为系统稳定性的瓶颈。建议在项目初期就制定统一的通信参数规范,并在设备出厂前进行严格的联调测试。对于 Modbus RTU 网络,优先选择 RS485 电气接口,固定 8 数据位、1 停止位、无校验、无流控,波特率根据实际距离在 9600 至 38400 之间选择。同时,务必在总线两端安装终端电阻,并使用屏蔽双绞线。当遇到通信异常时,按照“先查电气连接,再查参数配置,最后查协议逻辑”的顺序排查,可快速定位问题。