Modbus RTU 通讯正常却读不到数据?PLC 现场排查的 8 个关键点

在工业自动化项目中,Modbus RTU 是一种非常常见的通信协议。

PLC 经常需要通过 RS485 接口与变频器、温控器、压力变送器、智能仪表以及其他控制设备进行数据交换。

但在实际调试过程中,经常会遇到一些问题:

  • PLC 已经发送通信指令,但设备没有响应。
  • 通信指示灯正常闪烁,却读取不到有效数据。
  • 通讯偶尔成功,运行一段时间后出现超时。
  • 能够读取数据,但数值明显不正确。
  • 使用串口调试助手可以通信,PLC 却无法正常读取。

这些问题不一定是 PLC 程序错误,也可能与通信参数、接线方式、寄存器地址或数据格式有关。

下面从现场调试角度,介绍 8 个常见排查方向。

1. 首先确认串口通信参数

Modbus RTU 通信双方必须使用一致的串口参数。

常见参数包括:

参数常见设置
波特率9600、19200、38400
数据位8
校验位None、Even、Odd
停止位1 或 2
通信协议Modbus RTU

例如:

波特率:9600
数据位:8
校验位:None
停止位:1

这就是常说的 9600、8N1。

需要注意,不能只检查 PLC 端的参数,还需要核对从站设备的实际设置。

如果 PLC 设置为 9600、8N1,而变频器设置为 9600、8E1,双方就可能无法正常通信。

2. 检查 RS485 接线

RS485 通信通常采用差分信号传输。

常见接线形式:

PLC端从站设备
A / D+A / D+
B / D-B / D-
SG / COM按设备要求连接参考地

需要特别注意:

不同厂家对 A、B、D+、D- 的命名可能存在差异,不能仅凭字母判断信号极性。

现场排查时,可以核对双方说明书中的引脚定义。

此外,还需要检查:

  • 通信线是否存在断线或接触不良。
  • A、B 线是否接反。
  • 是否与动力电缆长距离平行敷设。
  • 屏蔽层是否按照现场接地设计处理。
  • 总线两端是否需要安装终端电阻。

对于较长的 RS485 总线,终端电阻、偏置电阻和布线拓扑都可能影响通信稳定性。

3. 检查从站地址是否正确

Modbus RTU 通信中,每个从站通常需要配置独立的站号。

例如:

设备从站地址
变频器11
变频器22
温控器3
智能仪表4

如果 PLC 发送的目标站号是 1,而实际设备设置为 2,那么设备通常不会按照该请求返回正常数据。

另外,需要注意:

Modbus RTU 中地址 0 通常用于广播请求,不能像普通单站请求一样期待从站返回响应。

4. 检查功能码是否使用正确

Modbus 常见功能码如下:

功能码功能说明
01读取线圈读取输出状态
02读取离散输入读取输入状态
03读取保持寄存器读取 Holding Register
04读取输入寄存器读取 Input Register
05写单个线圈修改单个线圈状态
06写单个寄存器修改单个寄存器
16写多个寄存器批量写入寄存器

例如,读取变频器运行频率时,需要查看设备通信手册,确认对应参数属于保持寄存器还是输入寄存器。

如果设备要求使用功能码 03,而 PLC 使用功能码 04,就可能无法获得预期数据。

5. 检查寄存器地址偏移

这是 Modbus 通信中非常容易出现的问题。

例如,设备手册给出的寄存器地址为:

40001
40002
40003

但 PLC 通信指令中可能需要填写:

0
1
2

原因在于:

一些设备手册使用 40001 这样的参考地址表示保持寄存器,而实际 Modbus 报文中的起始地址字段采用从 0 开始的偏移量。

不同 PLC 软件、通信库和设备手册的地址表示方式也可能不同。

因此,不能直接认为 40001 就一定要在 PLC 中填写 40001,也不能一概认为需要减去 40001。

正确方法是:

  1. 查阅设备通信手册。
  2. 确认寄存器的参考地址。
  3. 确认 PLC 通信指令要求的地址格式。
  4. 读取一个已知数值的寄存器进行验证。

6. 检查数据类型和字节顺序

有时候 PLC 已经成功读取到数据,但显示结果却不正确。

这时需要检查数据格式。

常见数据类型:

  • UINT:16 位无符号整数。
  • INT:16 位有符号整数。
  • DINT:32 位有符号整数。
  • REAL:32 位浮点数。

Modbus 的单个寄存器为 16 位。

如果设备使用两个连续寄存器保存一个 REAL 浮点数,还需要确认:

  • 高低字节顺序。
  • 两个寄存器的字顺序。
  • 数据是否需要进行字交换。
  • 是否存在倍率,例如实际频率需要将读取值除以 100。

例如,设备返回数值 2535,实际参数可能表示 25.35 Hz。

具体倍率必须以设备通信手册为准。

7. 检查通信超时和轮询周期

如果多个设备同时接入 RS485 总线,还需要关注 PLC 的轮询逻辑。

例如:

读取1号变频器
       ↓
等待通信完成
       ↓
读取2号变频器
       ↓
等待通信完成
       ↓
读取3号变频器
       ↓
等待通信完成
       ↓
重新开始

不建议在没有考虑通信完成状态的情况下,连续发送大量请求。

PLC 程序需要合理处理:

  • 请求发送状态。
  • 通信完成状态。
  • 超时状态。
  • 错误状态。
  • 重试次数。
  • 设备离线处理。

如果从站没有响应,PLC 应该能够退出当前请求,避免整个通信轮询程序一直等待。

8. 使用串口调试工具区分硬件问题和程序问题

如果 PLC 一直无法正常通信,可以使用支持 RS485 的串口调试工具进行对比测试。

建议按照以下顺序:

  1. 核对设备通信参数。
  2. 确认站号和寄存器地址。
  3. 使用串口工具发送标准 Modbus RTU 请求。
  4. 观察设备是否返回响应。
  5. 检查返回数据是否符合设备手册。
  6. 再回到 PLC 程序中检查通信指令配置。

如果串口工具可以正常通信,而 PLC 无法通信,就需要重点检查 PLC 串口配置、通信程序以及接口接线。

如果串口工具也无法通信,则需要继续排查设备参数、物理线路和从站状态。

三、常见故障现象与排查方向

故障现象优先检查
完全没有响应站号、串口参数、接线
CRC 校验错误接线干扰、波特率、数据帧
偶尔通信成功布线、终端电阻、轮询周期
返回异常响应功能码、寄存器地址
数据数值不正确数据类型、倍率、字节顺序
多台设备通信异常站号冲突、总线拓扑、轮询逻辑

四、总结

Modbus RTU 通信故障并不一定是 PLC 程序本身的问题。

实际排查时,建议遵循以下顺序:

串口参数
    ↓
RS485接线
    ↓
从站地址
    ↓
功能码
    ↓
寄存器地址
    ↓
数据格式
    ↓
通信超时
    ↓
串口工具验证

按照这个顺序逐步排查,可以减少盲目修改 PLC 程序的情况。

对于设备调试人员来说,理解 Modbus RTU 的通信机制,比单纯修改通信指令更加重要。

五、PLC 技术服务

如果你在 PLC 项目中遇到 Modbus RTU 通信异常、变频器数据读取错误、PLC 与仪表通信不稳定等问题,可以根据 PLC 型号、设备型号和通信手册进行针对性分析。

提供的技术服务包括:

  • PLC Modbus RTU 通信程序设计。
  • PLC 与变频器、仪表通信调试。
  • 原有 PLC 通信程序修改与扩展。
  • PLC 程序故障分析及二次开发。
  • HMI 组态与设备数据交互。

需要 PLC 程序设计或通信技术支持,可以通过网站联系我们。

发表回复

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