在工业自动化项目中,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 通信中,每个从站通常需要配置独立的站号。
例如:
| 设备 | 从站地址 |
|---|---|
| 变频器1 | 1 |
| 变频器2 | 2 |
| 温控器 | 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。
正确方法是:
- 查阅设备通信手册。
- 确认寄存器的参考地址。
- 确认 PLC 通信指令要求的地址格式。
- 读取一个已知数值的寄存器进行验证。
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 的串口调试工具进行对比测试。
建议按照以下顺序:
- 核对设备通信参数。
- 确认站号和寄存器地址。
- 使用串口工具发送标准 Modbus RTU 请求。
- 观察设备是否返回响应。
- 检查返回数据是否符合设备手册。
- 再回到 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 程序设计或通信技术支持,可以通过网站联系我们。

发表回复