本文面向有PLC基础的读者,系统讲解三菱FX5U如何通过Modbus RTU/TCP与变频器、仪表等设备通讯。配完整案例,从硬件接线到手把手代码,适合收藏备用。
一、为什么Modbus是工控通讯的"普通话"
工业现场,设备之间需要"说话"。
PLC要和变频器通讯,要和温控器通讯,要和电力仪表通讯——每家的设备都有自己的协议,互不兼容。
Modbus是工业通讯的事实标准。它的优势在于:
- 简单:帧结构只有几种,容易实现
- 通用:西门子/三菱/ABB/施耐德……几乎所有工控设备都支持
- 开放:不需要授权费,免费使用
学会Modbus,你就拥有了和80%以上工业设备"对话"的能力。
二、Modbus通讯基础概念
2.1 两种常用形式
| 类型 | 传输介质 | 特点 | 适用场景 |
|---|---|---|---|
| Modbus RTU | RS485串口 | 二进制传输,抗干扰强 | 短距离、一对一 |
| Modbus TCP | 以太网 | 速度快,可多设备 | 长距离、一对多 |
2.2 核心术语
- 从站地址(Slave ID):每个设备的"门牌号",范围1-247
- 功能码:告诉设备要干什么
0x03:读保持寄存器0x06:写单个寄存器0x10:写多个寄存器
- 寄存器地址:设备内部存储器的门牌号
4xxxx:保持寄存器(可读写)3xxxx:输入寄存器(只读)
- 波特率:RS485通讯速率,常用9600/19200/115200
2.3 数据格式
Modbus RTU帧结构:
code复制
[从站地址(1B)][功能码(1B)][数据(N字节)][CRC校验(2B)]例如,读取1号变频器从0000开始的2个保持寄存器:
code复制
01 03 00 00 00 02 C4 0B三、硬件准备与接线
3.1 所需设备
- 三菱FX5U-32MT/ES(自带RS485接口)
- 变频器(汇川MD580 / 三菱E800 / 台达VFD-M均可)
- RS485通讯线(或自制:两芯屏蔽线)
- GX Works3编程软件
3.2 FX5U RS485接口定义
FX5U的RS485接口在CN3端子台上:
| 端子 | 定义 | 说明 |
|---|---|---|
| SDA | RS485A+ | 数据A(正) |
| SDB | RS485B- | 数据B(负) |
| RDA | RS485A+(接收) | 接收正 |
| RDB | RS485B-(接收) | 接收负 |
| SDA | RS485A+(发送) | 发送正 |
| SDB | RS485B-(发送) | 发送负 |
| SG | 信号地 | 屏蔽接地 |
注意:FX5U的RDA/RDB和SDA/SDB内部已短接,只需接SDA/SDB。
3.3 接线图(FX5U ↔ 变频器)
code复制
FX5U CN3端子 变频器通讯端子 ┌──────────────┐ ┌──────────────┐ │ SDA ────────│───────│─── RDA/A+ │ │ SDB ────────│───────│─── RDB/B- │ │ SG ────────│───────│─── SG │ └──────────────┘ └──────────────┘关键点:
- A+接A+,B-接B-(极性不能反)
- 屏蔽线单端接地(变频器端)
- 通讯距离超过20米时,建议加终端电阻(120Ω)
四、GX Works3通讯参数配置
4.1 新建工程
- 打开GX Works3 → 新建工程
- 选择CPU类型:
FX5U - 工程类型:
简单工程 - 语言:
梯形图
4.2 模块配置
展开左侧导航树 → 点击"参数" →FX5UCPU→模块参数→485串口
设置如下:
| 参数项 | 设置值 | 说明 |
|---|---|---|
| 协议 | Modbus RTU | 选择Modbus通讯协议 |
| 通讯速率 | 19200 | 与变频器保持一致 |
| 数据长度 | 8位 | 标准Modbus设置 |
| 奇偶校验 | 偶校验 | 常用设置 |
| 停止位 | 1位 | 标准设置 |
| Header | 无 | 无起始符 |
| Terminator | 无 | 无终止符 |
点击"应用"保存配置。
4.3 变频器侧参数设置
以汇川MD580为例,设置以下通讯参数:
| 参数 | 设定值 | 说明 |
|---|---|---|
| P00.01 | 2 | 频率指令来源=通讯给定 |
| P00.02 | 2 | 运行指令来源=通讯给定 |
| P14.00 | 1 | 通讯地址=1 |
| P14.01 | 19200 | 波特率=19200 |
| P14.02 | 3-0-1 | 8N2(8数据位/无校验/2停止位) |
注意:变频器波特率/数据位必须与PLC完全一致。
五、Modbus通讯程序开发
5.1 通讯指令
GX Works3提供的Modbus RTU专用指令:
| 指令 | 功能 | 适用场景 |
|---|---|---|
ADPRW | 单字读写 | 读写单个寄存器 |
ADPRW+ 批量模式 | 多字读写 | 批量数据交换 |
5.2 ADPRW指令详解
code复制
ADPRW(Un) Sm Cn Dn Rd n D参数说明:
| 参数 | 说明 | 范围 |
|---|---|---|
| Un | 模块编号 | K1(CH1)/ K2(CH2) |
| Sm | 从站地址 | K1~K247 |
| Cn | 功能码 | H0003(读)/H0006(写单)/H0010(写多) |
| Dn | 寄存器地址 | H0000~HFFFF |
| Rd | 读写字节数 | K1~K32 |
| n | 数据存储地址 | D/SD/R/ZR |
| D | 执行标志 | 位软元件 |
5.3 案例:读取变频器运行频率
目标:读取1号变频器H2000(运行频率)寄存器的值,存入D100
梯形图程序:
code复制
M0 ADPRW K1 K1 H0003 H2000 K1 D100 M10 --| |-------------------------------------------------------------(P)---通讯帧解析:
code复制
发送:01 03 20 00 00 01 85 DD (读取1号从站H2000,1个字) 接收:01 03 02 12 34 XX XX (返回频率值0x1234=4660,对应46.60Hz)5.4 案例:写入变频器频率设定值
目标:向1号变频器H1000(频率设定)写入频率50.00Hz
计算:5000(50.00Hz × 100) → 十六进制0x1388
梯形图程序:
code复制
M1 ADPRW K1 K1 H0006 H1000 K1 K5000 M20 --| |-----------------------------------------------------------(P)---通讯帧解析:
code复制
发送:01 06 10 00 13 88 9A 5F (向1号从站H1000写入0x1388) 接收:01 06 10 00 13 88 9A 5F (回传确认,写入成功)5.5 批量读取多寄存器
读取1号变频器多个状态寄存器(H2100~H2102,共3个字):
code复制
M2 ADPRW K1 K1 H0003 H2100 K3 D110 M30 --| |-------------------------------------------------------------(P)---返回值存入:
D110:运行频率(H2100)D111:输出电流(H2101)D112:输出电压(H2102)
六、通讯状态监控与调试
6.1 通讯完成标志位
ADPRW指令执行完成时:
- 成功:
M10=ON,且无错误代码 - 失败:
M10=OFF,D10存储错误代码
常见错误代码:
| 代码 | 含义 | 排查方向 |
|---|---|---|
K1 | 从站无响应 | 检查接线/地址/波特率 |
K2 | CRC校验错误 | 波特率/数据位不一致 |
K3 | 接收超时 | 通讯线断开/设备掉电 |
K9 | 帧格式错误 | 检查参数配置 |
6.2 调试技巧
方法一:在线监控GX Works3 → 在线 → 监视 → 软元件批量监视 监控D100/D110等寄存器实时值,以及M10/M20完成标志位状态。
方法二:变频器参数确认进入变频器参数模式,确认:
- 通讯地址是否设为1
- 波特率是否为19200
- P00.01/P00.02是否设为"通讯给定"
方法三:万用表测量用万用表测量RS485 A+/B-之间电压:
- 正常值:2V~5V DC(有信号时)
- 0V:接线断开或极性反接
七、实操完整案例:PLC控制变频器调速
7.1 控制要求
- X0按下:变频器启动(正转)
- X1按下:变频器停止
- X2按下:频率加1Hz(最高50Hz)
- X3按下:频率减1Hz(最低5Hz)
- Y0:运行指示灯
7.2 变频器寄存器映射
| 功能 | 寄存器地址 | 说明 |
|---|---|---|
| 运行指令 | H1000 | H0001=正转,H0002=反转,H0000=停止 |
| 频率设定 | H1001 | 设定频率×100(如50.00Hz=5000) |
| 运行状态 | H2100 | 当前运行频率×100 |
| 输出电流 | H2101 | 当前输出电流×10(A) |
7.3 完整梯形图
code复制
// ================== 初始化 ================== [FEND] // 主程序 LD M8000 // 常ON CALL P0 // 调用Modbus通讯子程序 // ================== 启停控制 ================== P0: LD X0 // 启动按钮 OR M100 // 保持标志 ANI X1 // 停止按钮 OUT M100 // 启动标志输出 OUT Y0 // 运行指示灯 // 启动指令(写入H1000=正转) LD M100 AND MOV(P) K1 K1 H0006 H1000 K1 M200 // ADPRW K1 K1 H0006 H1000 K1 K1 M200 // ================== 频率调节 ================== // 频率增加 LD X2 // 加频按钮 ANI SM402 // 上升沿触发 AND CMP(K5000) D100 SM412 LD X2 ANI SM402 AND D100 K5000 // 不超过50Hz PLS M101 // 加频脉冲 // 频率减少 LD X3 // 减频按钮 ANI SM402 AND CMP(D100) K500 SM412 LD X3 ANI SM402 AND D100 K500 // 不低于5Hz PLS M102 // 减频脉冲 // 频率写入变频器 LD M101 INC D100 LD M102 DEC D100 LD M101 OR M102 AND MOV(P) D100 K1 H0006 H1001 M210 // ADPRW K1 K1 H0006 H1001 K1 D100 M210 // 频率读取 LD M8000 // 每周期读取当前频率 AND MODRD(P) K1 K1 H2100 K1 D100 M220 // ADPRW K1 K1 H0003 H2100 K1 D100 M220 RET八、本文小结
上篇内容回顾:
| 知识点 | 掌握程度 |
|---|---|
| Modbus RTU基础概念 | 理解帧结构与功能码 |
| 硬件接线 | 能正确连接FX5U与变频器 |
| GX Works3参数配置 | 会配置485串口Modbus模式 |
| ADPRW读写指令 | 能读写变频器寄存器 |
| 通讯调试方法 | 能排查常见通讯故障 |
下篇预告(三菱PLC与Modbus通讯实战(下):多从站管理与Modbus TCP):
- 多台变频器同时通讯(RS485总线,最多247从站)
- Modbus TCP以太网通讯配置
- PLC与HMI实时数据交换
- 通讯故障冗余切换方案
下篇不见不散。有问题欢迎在评论区留言,我看到会回复。
系列文章:
- 《三菱PLC与Modbus通讯实战(上):环境配置与基础通讯》
- 《三菱PLC与Modbus通讯实战(下):多从站管理与Modbus TCP》