1. 项目概述
在工业自动化控制系统中,PLC与变频器的通讯是实现电机调速控制的关键环节。这次我们要实现的是西门子S7-200 Smart系列PLC(以下简称Smart200)与东源变频器通过Modbus RTU协议进行数据交互。这种方案在实际工程中非常常见,主要用于需要远程监控和调节电机转速的场合。
Smart200作为主站,通过串口以Modbus RTU协议与变频器从站通讯。主要实现两个核心功能:一是向变频器写入运行频率指令,二是读取变频器的实时运行电流。特别需要注意的是,启停控制我们采用了外部端子硬接线方式,这样设计有两个好处:一是响应速度更快,二是当通讯故障时仍能保证基本控制功能。
2. 硬件准备与参数配置
2.1 硬件连接示意图
系统硬件连接主要包含三个部分:
- Smart200 PLC本体(建议选择CPU ST30及以上型号)
- 东源变频器(具体型号需确认支持Modbus RTU协议)
- 通讯电缆(建议使用带屏蔽的双绞线)
接线要点:
- PLC的RS485端口(端口0)的A+、B-分别对应变频器的485+、485-端子
- 变频器的DI1、COM端子接PLC的Q0.0和1M,用于外部启停控制
- 务必在两端都接入120Ω终端电阻(长距离通讯时尤为重要)
2.2 变频器参数设置
在东源变频器参数菜单中,需要设置以下关键参数(具体参数号请参考对应型号手册):
code复制P0.01 = 1 // 命令源选择:端子控制
P0.03 = 5 // 频率源选择:通讯给定
P8.00 = 1 // 通讯协议选择:Modbus RTU
P8.01 = 1 // 站号设置(需与PLC程序一致)
P8.02 = 3 // 波特率9600bps
P8.03 = 0 // 无校验
P8.04 = 1 // 停止位1位
注意:不同系列的东源变频器参数编号可能不同,务必以实际型号的说明书为准。参数修改后需要断电重启才能生效。
3. PLC程序设计详解
3.1 通讯初始化
Smart200使用SMB30寄存器配置通讯端口,MBUS_INIT指令初始化Modbus主站:
stl复制Network 1: 初始化Modbus主站
LD SM0.1 // 首次扫描时执行
MOVB 16#09, SMB30 // 端口0配置:9600bps,8位,无校验,1停止位
MOVB 16#01, VB100 // 从站地址存储到VB100
MOVW 9600, VW102 // 波特率存储到VW102
MOVB 1, VB104 // 停止位存储到VB104
MOVB 0, VB105 // 校验方式存储到VB105
CALL MBUS_INIT, 1, VB100, VW102, VB104, VB105, 0, 0, 0
关键点说明:
- SMB30的16#09对应9600bps、8数据位、无校验、1停止位
- MBUS_INIT的Timeout和Done参数设为0表示不使用完成位和超时判断
- 建议将通讯参数存储在变量区而非直接使用常数,便于后期修改
3.2 频率写入实现
频率值通常以0.01Hz为单位,需要将实际频率×100后发送:
stl复制Network 2: 频率写入控制
LD M0.0 // 写入触发条件
EU // 上升沿触发
MOVW VW10, VW200 // VW10存储设定频率(单位0.01Hz)
ITD VW200, VD202 // 转换为双字
DTR VD202, VD206 // 转换为实数
*R 100.0, VD206 // 转换为Hz单位
ROUND VD206, VD210 // 四舍五入取整
DTI VD210, VW214 // 转换回整数
CALL MBUS_WRITE, 1, VB100, 40001, 1, VW214
实际应用技巧:变频器频率寄存器通常支持两种格式 - 直接频率值(如40001)或百分比(如40002)。建议测试确认哪种方式在目标变频器上更稳定。
3.3 电流读取处理
电流读取需要处理数据转换和滤波:
stl复制Network 3: 电流读取处理
LD SM0.5 // 每秒钟读取一次
EU
CALL MBUS_READ, 1, VB100, 40003, 1, VW300
MOVW VW300, VW302 // 原始值备份
ITD VW302, VD304 // 转换为双字
DTR VD304, VD308 // 转换为实数
/R 10.0, VD308 // 假设电流值需要除以10(根据手册调整)
MOVR VD308, VD312 // 最终电流值(单位A)
常见问题处理:
- 如果读取值异常,检查变频器侧的电流变比参数
- 建议增加软件滤波,如取最近3次读数的平均值
- 电流值波动大时,可以适当降低读取频率
4. 外部端子控制设计
虽然启停通过外部端子控制,但仍建议在PLC程序中做联锁保护:
stl复制Network 4: 启停控制联锁
LD I0.0 // 启动按钮
O M0.2 // 自动模式启动信号
AN I0.1 // 停止按钮
AN M0.3 // 故障信号
= Q0.0 // 输出到变频器DI端子
安全注意事项:
- 急停信号必须采用硬接线,不可依赖通讯
- 建议在变频器参数中设置加速/减速时间
- 重要设备应增加机械抱闸控制回路
5. 调试与故障排查
5.1 常见问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 通讯超时 | 接线错误 | 检查A+/B-是否接反 |
| 波特率不匹配 | 确认PLC和变频器设置一致 | |
| 终端电阻未接 | 长距离时两端接120Ω电阻 | |
| 数据错误 | 寄存器地址错误 | 核对变频器Modbus地址表 |
| 数据类型不匹配 | 确认是使用整数还是浮点数 | |
| 变频器不响应 | 站号设置错误 | 确认PLC程序和变频器参数一致 |
| 通讯协议错误 | 确认选择的是Modbus RTU |
5.2 调试工具推荐
- Modbus Poll/Modbus Slave:用于模拟测试
- 串口调试助手:监控原始数据帧
- PLC程序在线监控:观察通讯状态位变化
调试步骤建议:
- 先用调试软件单独测试变频器通讯
- 确认物理层正常后再调试PLC程序
- 先测试读取功能,再测试写入功能
- 最后整合所有功能进行联调
6. 项目优化建议
在实际项目中,我们可以进一步优化这个系统:
- 增加心跳检测机制,定时读取某个固定寄存器判断通讯状态
- 对重要参数(如电流值)做趋势记录,便于故障分析
- 考虑增加通讯超时后的自动处理策略
- 对于多台变频器,建议采用轮询方式而非同时通讯
特别提醒:Modbus RTU协议本身没有重传机制,在关键应用场合建议:
- 重要数据写入后做回读校验
- 对连续通讯失败做计数处理
- 设置合理的通讯间隔(通常不小于100ms)