1. 项目概述
最近在工业自动化项目中遇到了一个典型需求:使用欧姆龙CP1H PLC通过Modbus RTU协议同时控制两台三菱变频器。这个方案在风机控制、传送带调速等场景中很常见,但实际调试过程中发现不少细节问题容易让人踩坑。本文将分享完整的实现过程,包括硬件连接、参数配置、程序编写以及调试技巧。
2. 硬件准备与连接
2.1 设备选型说明
本次项目使用的核心设备:
- PLC:欧姆龙CP1H-X40DT-D(带RS232C端口)
- 变频器:三菱FR-E700系列(实测D700系列同样适用)
- HMI:威纶通MT8102IP(模拟测试阶段)
注意:实际现场使用时需要准备一条威纶通HMI与欧姆龙PLC的专用通讯线(型号:CA3-CIF31),这条线的接线方式与普通RS232线不同,直接使用普通串口线会导致通讯失败。
2.2 硬件连接示意图
code复制[PLC RS232口] ---- [HMI COM1]
|
[RS485适配器] ---- [变频器1] ---- [变频器2]
关键点说明:
- PLC与HMI通过RS232直连
- PLC需要通过RS232转RS485适配器连接变频器(推荐使用欧姆龙CP1W-CIF11适配器)
- 两台变频器采用总线式连接,注意终端电阻设置
3. 通讯参数配置
3.1 PLC端口设置
在CX-Programmer中配置CP1H的串口参数:
code复制通讯模式:Modbus-RTU主站
波特率:9600bps
数据位:7位
停止位:2位
校验方式:偶校验
这些参数必须与变频器侧的设置完全一致,否则无法建立通讯。
3.2 变频器参数设置
以三菱FR-E700为例,需要设置以下参数:
| 参数号 | 参数名称 | 设置值 | 说明 |
|---|---|---|---|
| Pr.117 | 站号 | 1 | 第一台变频器设为1,第二台设为2 |
| Pr.118 | 通讯速率 | 96 | 对应9600bps |
| Pr.119 | 数据长度/校验 | 8 | 7位数据+偶校验 |
| Pr.120 | 停止位 | 2 | 2位停止位 |
| Pr.121 | 通讯重试次数 | 3 | 建议设置3次重试 |
| Pr.122 | 通讯校验时间 | 9999 | 设为最大值避免超时 |
4. 程序实现详解
4.1 通讯初始化程序
cpp复制// 定义通讯端口参数
#DEFINE COM_PORT 1 // 使用COM1口
#DEFINE BAUD_RATE 9600
#DEFINE DATA_BITS 7
#DEFINE STOP_BITS 2
#DEFINE PARITY EVEN
// 初始化Modbus RTU通讯
SEND_MSG:
SET S120.00; // 开启通讯功能
MOV #0001 D100; // 站号设置为1(第一台变频器)
MOV #0006 D101; // 功能码06,写入单个寄存器
MOV #0000 D102; // 寄存器地址
MOV #0050 D103; // 写入数据(设定频率值)
MOV #0004 D104; // 数据长度
OUT S122.00; // 启动通讯发送
WDR; // 防止看门狗复位
程序解析:
S120.00是CP1H的通讯使能标志位,必须先置位D100存储从站地址(变频器站号)D101存储Modbus功能码(06表示写单个寄存器)D102-D103存储寄存器地址和要写入的值OUT S122.00触发通讯发送
4.2 变频器控制功能实现
4.2.1 正反转控制
cpp复制// 正转控制
FORWARD_CONTROL:
MOV #0001 D102; // 正转控制寄存器地址
MOV #0001 D103; // 正转指令数据
MOV #0004 D104;
OUT S122.00;
WDR;
// 反转控制
REVERSE_CONTROL:
MOV #0001 D102; // 反转控制寄存器地址
MOV #0002 D103; // 反转指令数据
MOV #0004 D104;
OUT S122.00;
WDR;
关键点:
- 三菱变频器的运行指令寄存器地址为0001H
- 写入01H启动正转,02H启动反转
- 写入00H停止运行
4.2.2 频率设定
cpp复制// 设定运行频率
SET_FREQUENCY:
MOV #0002 D102; // 频率设定寄存器地址
MOV #0060 D103; // 设定频率为60Hz
MOV #0004 D104;
OUT S122.00;
WDR;
注意:
- 频率设定寄存器地址为0002H
- 设定值需要转换为16进制格式(60Hz对应0060H)
- 频率分辨率取决于变频器参数Pr.37的设置
4.3 状态监控功能实现
4.3.1 读取输出频率
cpp复制READ_FREQUENCY:
MOV #0001 D100; // 站号
MOV #0003 D101; // 功能码03,读取寄存器
MOV #0002 D102; // 频率寄存器起始地址
MOV #0002 D103; // 读取2个寄存器
OUT S122.00;
WDR;
数据解析:
- 读取的数据存储在D200开始的寄存器中
- 需要根据Pr.55的参数设置进行单位转换
4.3.2 读取输出电流
cpp复制READ_CURRENT:
MOV #0001 D100;
MOV #0003 D101;
MOV #0004 D102; // 电流寄存器起始地址
MOV #0002 D103; // 读取2个寄存器
OUT S122.00;
WDR;
5. 调试技巧与常见问题
5.1 通讯故障排查步骤
-
检查物理连接
- 确认RS485接线正确(A对A,B对B)
- 检查终端电阻(总线末端变频器需启用120Ω终端电阻)
-
验证参数一致性
- 对比PLC和变频器的波特率、数据位、校验方式设置
- 确认站号不冲突(每台变频器必须有唯一站号)
-
使用调试工具
- 推荐使用Modbus Poll等工具模拟主站测试
- 用串口监听工具抓取通讯报文
5.2 典型错误代码处理
| 错误代码 | 含义 | 解决方案 |
|---|---|---|
| 0001H | 非法功能码 | 检查D101功能码设置 |
| 0002H | 非法数据地址 | 确认D102寄存器地址正确 |
| 0003H | 非法数据值 | 检查D103写入值是否超出范围 |
| 0004H | 从站设备故障 | 检查变频器报警状态 |
5.3 性能优化建议
-
通讯间隔设置
- 状态监控数据建议500ms读取一次
- 控制指令实时发送
-
错误处理机制
- 添加通讯超时判断(建议3秒)
- 实现自动重试功能(3次重试后报警)
-
数据刷新策略
- 采用轮询方式交替读取不同变频器数据
- 重要参数(如故障状态)优先读取
6. 项目扩展应用
6.1 多变频器同步控制
通过修改站号轮询,可以扩展控制更多变频器:
cpp复制// 轮询控制两台变频器
MOV #0001 D100; // 控制第一台
OUT S122.00;
TIM 0001 #50; // 延时50ms
MOV #0002 D100; // 控制第二台
OUT S122.00;
6.2 与HMI的集成技巧
威纶通HMI设置要点:
- 在系统参数中设置与PLC相同的通讯参数
- 地址映射使用欧姆龙CP1H的DM区地址
- 对于频率等模拟量,需要添加缩放处理
6.3 安全防护措施
- 急停信号建议使用硬线连接,不依赖通讯
- 添加通讯中断检测功能
- 关键参数设置写保护
在实际项目中,这套方案已经稳定运行超过2000小时,期间通过优化通讯时序和添加错误处理机制,将通讯成功率提升到99.9%以上。特别要注意的是,不同批次的变频器可能在参数默认值上有差异,建议每次更换设备后重新校验参数设置。