4. Modbus RTU串行网络组态

Modbus RTU 是 Modicon 平台上最经典、也最容易被低估的一类现场总线。它跑在 RS-232 或 RS-485 物理层上,靠一根双绞线把 PLC、变频器、智能仪表、称重终端串成一条链路。Control Expert(原 Unity Pro)里配置 Modbus RTU,本质上不是“填几个参数”,而是把通信双方的物理层、链路层、应用层三组约定对齐:串行端口的电气与速率、主从角色与地址、帧格式与校验、以及超时与重试的容错边界。任何一项对不上,现象往往不是“报错”,而是“读回来全是 0”或“偶尔通一次”,排查成本很高。

一、先分清:串行端口配置与 Modbus 协议配置是两层

在 Control Expert 的项目浏览器中,串行通信的配置分两处落地。第一处是硬件/CPU 的串行端口属性,决定电气标准和物理参数;第二处是添加到该端口上的 Modbus 协议对象,决定主从、地址、帧格式和超时。很多初学者只配了其中一层,结果链路根本起不来。

以常见的 BMXP342020(M340 平台 CPU,带一个 RS-485 串口和一个可选 RS-232 口)为例,在“项目 → 配置 → CPU → 串行端口”中,需要先选定端口类型:RS-485 两线制还是 RS-232。RS-485 用于多点总线,RS-232 用于点对点短距离。选定后设置波特率、数据位、停止位、校验方式、流控。这些参数必须与从站设备说明书完全一致,例如 9600 bps、8 数据位、1 停止位、偶校验(8E1)是仪表类设备最常见的组合。

第二层是在“通信 → 网络”中新建一个 Modbus 网络,或在串行端口下直接添加 Modbus 协议。此时才出现主站/从站模式选择。M340 的串口既可以做 Modbus 主站(Master),也可以做从站(Slave),取决于它在网络中扮演的角色。一个 PLC 的同一个串口不能同时是主站和从站。

Control Expert 中 Modbus RTU 串行链路的两层配置与帧结构 第一层:串行端口属性(物理层) 端口类型:RS-485 两线制 / RS-232 波特率:9600 / 19200 / 38400 bps 数据位 / 停止位 / 校验:8 / 1 / Even 流控:无(RS-485 半双工) 终端电阻:总线两端 120 Ω 第二层:Modbus 协议对象(链路/应用层) 角色:Master(主站)/ Slave(从站) 从站地址:1 ~ 247(0 为广播) 帧格式:RTU(二进制 + CRC16) 响应超时:100 ~ 10000 ms 重试次数:0 ~ 15 次 叠加 Modbus RTU 帧结构(以读保持寄存器 0x03 为例) 从站地址 1 字节 功能码 0x03 起始地址 2 字节 寄存器数量 2 字节 CRC16 2 字节 ← 低字节在前 超时与重试的时序关系 主站发出请求 等待响应 超时 T 重试 1 重试 2 报错

二、主从模式与地址:谁说话、谁应答

Modbus RTU 是严格的主从协议。总线上只能有一个主站,主站发起请求,从站应答;从站之间不会互相通信。在 Control Expert 中把 PLC 配成主站时,需要为每个从站设备建立“请求”条目,指定从站地址、功能码、起始寄存器、长度和映射到的内部变量。把 PLC 配成从站时,则要设置本机从站地址,并定义可供主站访问的寄存器区。

从站地址范围是 1~247,其中 0 是广播地址(主站发、从站不回应)。实际工程中建议按设备类型分段编址,例如变频器用 1~10,仪表用 11~30,避免后期扩展时冲突。地址冲突的典型现象是:两个从站同时应答,主站收到乱码或 CRC 错误,表现为“通信时好时坏”。

三、帧格式:RTU 与 ASCII 不能混用

Modbus 有两种串行帧格式:RTU 和 ASCII。RTU 用二进制传输,效率高,是工业现场主流;ASCII 用可读字符,效率低但便于调试。Control Expert 的 Modbus 协议对象默认按 RTU 处理,配置时不需要单独勾选“RTU”,但必须保证波特率、数据位、停止位、校验与从站一致,否则帧边界识别会失败。

RTU 帧以至少 3.5 个字符时间的静默间隔作为帧起始和结束标志。以 9600 bps、8E1 为例,一个字符 11 位,3.5 字符约 4 ms。如果主站发送后从站响应延迟超过这个间隔,主站会认为帧已结束,后续字节被当作新帧,导致 CRC 校验失败。这也是为什么低波特率下要适当放宽超时时间。

四、超时与重试:容错参数怎么定

超时(Timeout)是主站等待从站响应的最长时间。设得太短,正常从站来不及应答就被判超时;设得太长,一个故障从站会拖慢整个轮询周期。经验做法是:先按从站响应时间估算,再留 2~3 倍余量。例如某仪表响应时间约 50 ms,波特率 9600,一帧请求加响应约 20 字节,传输时间约 23 ms,则超时可设 300~500 ms。

重试次数(Retry)是超时后重新发送请求的次数。重试能提高偶发干扰下的成功率,但会成倍延长故障时的轮询时间。一般设 2~3 次。若重试 3 次仍失败,Control Expert 会在通信功能块上置错误位,程序可据此报警或切换备用逻辑。

配置检查顺序:先确认物理层参数(波特率、数据位、停止位、校验)与从站一致,再确认主从角色和地址不冲突,最后调超时与重试。顺序颠倒会导致排查方向错误。

五、一个可参考的配置示例

假设用 M340 CPU 的 RS-485 口做主站,挂 3 台变频器(地址 1、2、3),读取运行频率(保持寄存器 40001,功能码 0x03)。配置如下:

串行端口:RS-485 两线制
波特率:19200 bps
数据位:8
停止位:1
校验:偶校验(Even)
流控:无

Modbus 协议对象:
角色:Master
从站地址:1 / 2 / 3
功能码:0x03(读保持寄存器)
起始地址:0(对应 40001)
寄存器数量:1
响应超时:500 ms
重试次数:3

配置完成后,把程序下载到 PLC,用 Control Expert 的“动画表”监视映射变量。若读回值在合理范围内(如 0~50.00 Hz 对应 0~5000),说明链路正常;若读回 0 或 65535,先检查从站地址和寄存器偏移,再检查校验方式。注意:不同厂商对“40001”的偏移定义不同,有的从 0 开始,有的从 1 开始,这是最常见的“地址对不上”原因。

常见陷阱:RS-485 总线两端必须接 120 Ω 终端电阻,中间节点不接。缺少终端电阻时,短距离可能正常,长距离或高波特率下会出现随机 CRC 错误。另外,屏蔽层应单端接地,避免地环流引入干扰。

最后要强调:Modbus RTU 的配置不是一次性的,而是随现场设备增减、线缆改动、干扰环境变化需要复核的。建议在项目文档中记录每个从站的地址、波特率、校验方式、寄存器映射和超时参数,作为后期排障的基线。只有把物理层、协议层和容错参数三者对齐,串行网络才能稳定运行。