1. 项目概述:工业场景下的Modbus通信实战
在工业自动化现场,PLC与温控器之间的数据交互堪称经典组合。三菱FX3U系列作为日系PLC的代表型号,通过485-ADP扩展模块实现Modbus RTU通信的场景,几乎出现在每一条产线控制柜里。但看似简单的通信配置背后,藏着无数工程师踩过的坑——从硬件接线时的相位混淆,到软件配置时的参数错位,任何一个细节失误都可能导致通信失败。
这次我们要实现的,是通过FX3U-485ADP模块与支持Modbus协议的温控器建立稳定通信,实时读取温度数据。这不仅是简单的技术对接,更涉及工业通信中的多项实用技巧:
- 硬件层面:正确连接485线路的A/B端子,处理终端电阻匹配问题
- 协议层面:构建符合Modbus RTU标准的请求帧,解析响应数据
- 异常处理:监控通信状态码,快速定位故障点
2. 硬件配置与电气连接
2.1 模块选型与安装要点
三菱FX3U系列PLC要实现RS485通信,必须搭配专用通信适配器。FX3U-485ADP作为官方扩展模块,直接插在PLC本体右侧的扩展槽上,无需额外供电。这个蓝色的小模块支持最大115.2kbps的通信速率,实际项目中9600bps是最稳定的选择。
关键提示:市场上有些兼容模块价格便宜30%,但在电磁干扰严重的环境中可能出现通信丢包,建议关键工位使用原厂模块。
2.2 接线规范与抗干扰设计
485通信线的连接有严格规范。将ADP模块的SDA端子(对应A+)与温控器的A端子相连,SDB端子(对应B-)接温控器B端子。常见的接线错误包括:
- 混淆A/B极性导致信号反相
- 未使用双绞线传输,引入电磁干扰
- 长距离通信时未启用终端电阻
对于10米以内的短距离通信,建议采用以下配置:
- 使用AWG22规格的屏蔽双绞线
- 仅在温控器端启用120Ω终端电阻
- PLC侧不接终端电阻(避免信号过阻尼)

3. PLC通信参数配置
3.1 特殊寄存器设置
FX3U通过D8120特殊寄存器配置通信参数。这个16位寄存器的每个bit都有特定含义:
- b0-b3:波特率选择(0=9600,1=19200,...)
- b4-b7:数据长度/校验设置(1100表示8位数据/无校验/1停止位)
示例代码设置9600bps/8N1参数:
stylus复制MOV H0C96 D8120 // 二进制0000110010010110
如果需要改为奇校验(8O1),需将b3置1:
stylus复制MOV H0CD6 D8120 // 二进制0000110011010110
3.2 通信超时控制
D8122寄存器设置接收超时时间(单位:ms)。对于响应速度较慢的温控器,建议设置为300-500ms:
stylus复制MOV K500 D8122 // 设置500ms超时
4. Modbus报文构建与发送
4.1 请求帧结构解析
读取温控器温度值的典型Modbus RTU请求包含:
- 设备地址(1字节)
- 功能码(1字节,03表示读保持寄存器)
- 起始地址(2字节,大端格式)
- 寄存器数量(2字节)
- CRC校验(2字节)
示例代码构建读取40001寄存器的请求:
stylus复制MOV H01 D100 // 站号1
MOV H03 D101 // 功能码03
MOV H0000 D102 // 地址高位(40001对应0000)
MOV H0000 D103 // 地址低位
MOV H0001 D104 // 读取数量高位
MOV H0001 D105 // 读取数量低位
4.2 CRC校验计算
三菱提供了专用的CRC指令,自动计算Modbus RTU要求的CRC-16校验值:
stylus复制CRC D100 K6 D200 // 对D100-D105计算CRC
计算结果自动存入D200(低字节)和D201(高字节),注意Modbus协议要求CRC低字节在前。
5. 数据收发与解析
5.1 RS指令的妙用
FX3U通过RS指令实现串口通信,参数配置需要特别注意:
stylus复制RS D100 K8 D500 K10 // 发送8字节,接收缓冲区从D500开始
关键参数说明:
- 发送起始地址:D100(包含完整Modbus帧)
- 发送字节数:K8(站号到CRC共8字节)
- 接收缓冲区:D500开始
- 最大接收数:K10(预留足够空间)
经验之谈:RS指令必须用脉冲触发,建议配合M8122使用:
stylus复制LD M8000 // 运行常ON
SET M8122 // 触发发送
RST M8122 // 立即复位
5.2 响应数据解析
正常响应报文格式示例(读取温度值30.0℃):
code复制01 03 02 01 2C CRC
解析步骤:
stylus复制MOV D501 D600 // 取数据高位(01h)
SHL D600 K8 // 左移8位→0100h
OR D600 D502 // 合并低位(2Ch)→012Ch
温度值处理(假设单位为0.1℃):
stylus复制DIV D600 K10 D601 // 012Ch=300→30.0℃
6. 故障排查与性能优化
6.1 错误代码速查表
通过D8031监控通信状态:
| 错误代码 | 含义 | 解决方案 |
|---|---|---|
| 0x0001 | 奇偶校验错误 | 检查D8120校验位设置 |
| 0x0002 | 帧错误 | 确认波特率与设备一致 |
| 0x0003 | 接收超时 | 增加D8122超时时间 |
| 0x0004 | CRC校验失败 | 检查CRC算法与设备一致性 |
6.2 通信稳定性技巧
- 延时策略:某些温控器需要50-100ms响应延时,可在RS指令前添加:
stylus复制MOV K100 D0
TIMER T0 D0
-
信号增强:长距离通信时,建议在总线的首尾两端各加120Ω终端电阻。
-
数据校验:重要数据建议读取两次,校验一致性后再使用。
-
接地处理:将屏蔽层单端接地(通常在PLC侧),避免地环路干扰。
7. 进阶应用:多设备轮询
通过站号切换实现多温控器监控:
stylus复制FOR K1 TO K5 // 轮询1-5号站
MOV Z D100 // 当前站号存入请求帧
RS D100 K8 D[Z+500] K10 // 接收缓冲区动态分配
NEXT
这种架构下,需要特别注意:
- 每个站点的响应超时单独处理
- 接收缓冲区按站号分区存储
- 增加站号离线检测机制
在某个汽车焊装车间的实际案例中,通过上述方案实现了32台温控器的稳定监控,通信成功率从最初的87%提升到99.6%。关键改进点包括:
- 将波特率从19200降为9600
- 增加50ms的站间切换延时
- 采用双重校验机制
工业通信就像精密舞蹈,每个步骤都需要严格同步。当看到D600寄存器里跳动的温度值终于与温控器显示一致时,那种成就感正是工控技术的魅力所在。