在工业自动化控制系统中,PLC与变频器的通讯是实现电机精准控制的关键环节。今天我要分享的是三菱FX1N PLC通过485总线与3台台达VFD-M变频器建立Modbus RTU通讯的完整实现方案。这个方案已经在多个实际项目中验证过稳定性,可以直接用于生产环境。
这个方案的核心价值在于:
本方案采用的硬件配置如下:
| 设备名称 | 型号规格 | 数量 | 备注 |
|---|---|---|---|
| PLC主机 | 三菱FX1N-24MT | 1台 | 晶体管输出型 |
| 通讯模块 | FX1N-485BD | 1块 | RS485通讯板 |
| 变频器 | 台达VFD-M系列 | 3台 | 功率根据电机选择 |
| 触摸屏 | MCGS标准型 | 1台 | 7寸或10寸 |
注意:FX2N系列PLC同样适用,只需将通讯模块更换为FX2N-485BD即可。变频器数量可根据实际需求增减,理论上485总线最多可挂接32个设备。
485总线接线规范
变频器地址设置
每台变频器必须设置唯一的站号:
plaintext复制变频器1:站号14(0x0E)
变频器2:站号15(0x0F)
变频器3:站号16(0x10)
通过变频器参数P00设置站号,设置后需断电重启生效。
通讯参数配置
所有设备必须使用相同的通讯参数:
plaintext复制波特率:9600bps
数据位:8位
停止位:1位
校验方式:无校验
台达VFD-M变频器支持标准的Modbus RTU协议,使用03/06/16功能码:
| 功能码 | 用途 | 对应变频器参数 |
|---|---|---|
| 03H | 读取参数 | 所有可读参数 |
| 06H | 写入单个参数 | 运行命令、目标频率等 |
| 10H | 写入多个参数 | 批量设置 |
以下是本方案中使用的主要寄存器地址:
| 功能 | 寄存器地址 | 数据类型 | 取值范围 |
|---|---|---|---|
| 运行命令 | 2000H | 16位无符号 | 1:正转 2:反转 5:停止 |
| 频率设定 | 2001H | 16位无符号 | 0-最大频率(单位0.01Hz) |
| 输出频率 | 2103H | 16位无符号 | 当前实际频率 |
程序采用模块化设计,主要包含以下部分:
通讯初始化
功能子程序
错误处理
assembly复制LD M8000 // 运行常ON触点
MOV K100 D100 // 设定频率为10.0Hz(100×0.1)
MOV H0E D102 // 变频器1地址(14)
MOV H0006 D104 // 功能码06H(写单个寄存器)
MOV H2001 D106 // 频率设定寄存器地址
MOV D100 D108 // 要写入的频率值
MOV K5 D110 // 数据长度(地址2字节+数据2字节+CRC2字节)
CALL P100 // 调用通讯子程序
代码解析:
assembly复制LD M8013 // 1秒时钟脉冲
MOV H0E D120 // 变频器1地址
MOV H0003 D122 // 功能码03H(读寄存器)
MOV H2103 D124 // 输出频率寄存器地址
MOV K1 D126 // 读取1个寄存器
MOV K6 D128 // 数据长度(地址2字节+数量2字节+CRC2字节)
CALL P101 // 调用读取子程序
MOV D130 D200 // 存储读取到的频率值
代码解析:
assembly复制LD X0 // 正转按钮
SET M10 // 正转标志
LD X1 // 停止按钮
RST M10 // 清除正转标志
LD X2 // 反转按钮
SET M11 // 反转标志
LD X1 // 停止按钮
RST M11 // 清除反转标志
LD M10 // 正转控制
MOV H0E D140 // 变频器地址
MOV H0006 D142 // 功能码06H
MOV H2000 D144 // 运行命令寄存器
MOV H0001 D146 // 正转命令(0001H)
MOV K5 D148 // 数据长度
CALL P102 // 调用控制子程序
LD M11 // 反转控制
MOV H0E D150 // 变频器地址
MOV H0006 D152 // 功能码06H
MOV H2000 D154 // 运行命令寄存器
MOV H0002 D156 // 反转命令(0002H)
MOV K5 D158 // 数据长度
CALL P103 // 调用控制子程序
在MCGS软件中需配置与PLC的通讯:
频率设定画面
运行状态画面
控制按钮
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 通讯超时 | 接线错误 | 检查A/B线是否接反 |
| 站号冲突 | 确认各变频器站号唯一 | |
| 波特率不匹配 | 检查所有设备波特率设置 | |
| 数据错误 | 校验方式不一致 | 统一设置为无校验 |
| 寄存器地址错误 | 核对变频器Modbus地址表 | |
| 变频器不响应 | 通讯使能未开启 | 检查变频器P88参数是否为1 |
通讯时序优化
程序结构优化
硬件改进
在实际项目中应用这套方案时,我发现以下几个经验特别有价值: