1. 项目概述:基于S7-200 SMART的恒压供水系统实战
去年给本地一家食品厂改造供水系统时,他们最头疼的问题就是水压忽高忽低——清洗生产线时水压不足,夜间低负荷时又经常爆管。传统继电器控制方案已经折腾了三年,最后找到我们用PLC+变频器做彻底改造。这个案例用的是西门子S7-200 SMART SR30 PLC配合ABB ACS550变频器,通过RS485通讯实现一拖二恒压供水,压力控制精度达到±0.02MPa,节能效果比老系统提升23%。
核心架构很简单:PLC作为Modbus主站,通过自带RS485口同时与两台变频器(7.5kW)和Smart 700 IE V3触摸屏通讯。压力变送器(0-1.6MPa量程)的4-20mA信号接入PLC模拟量输入,构成闭环控制。但实际调试中发现,要让这套系统稳定运行,关键得解决三个问题:通讯可靠性、PID参数整定和泵组切换时序。特别是当触摸屏突然死机时,系统必须能维持基本运行——这要求我们在程序里做了多重保护机制。
2. 硬件配置与电路设计要点
2.1 设备选型背后的考量
- PLC选择SR30的理由:自带RS485接口省去了EM277模块(约节省800元),14点DI/10点DO刚好满足需求。实测其485端口驱动能力可带32个节点,远超市面多数国产PLC
- 变频器关键参数:ACS550的7.5kW机型支持Modbus RTU协议内置PID,9902参数设为1即可启用PID宏。注意必须选固件版本≥2.6的机型,早期版本存在40001寄存器读取异常的问题
- 压力变送器接线细节:选用0-1.6MPa量程(对应4-20mA)而非更常见的1.0MPa,是因为食品厂有高压冲洗需求。屏蔽层必须在PLC侧单端接地,我们曾因两端接地导致信号波动±0.05MPa
2.2 电路施工的血泪教训
-
RS485总线规范:
- 使用AWG18双绞屏蔽线(型号Belden 3105A)
- 严格手拉手接线,终端电阻设为120Ω
- A线(绿色)接变频器端子68,B线(红色)接69,反接会导致通讯时通时断
-
EMC处理方案:
markdown复制
| 干扰源 | 应对措施 | 效果验证 | |---------------|-----------------------------|-----------------------| | 变频器高频噪声 | 加装磁环(Fair-Rite #0431168081) | 通讯误码率从5%降至0.1% | | 接触器电弧 | 每个线圈并联RC吸收电路(0.1μF+100Ω) | 消除PLC输入点抖动 | -
安全回路设计:
- 急停按钮直接切断变频器使能(DI1)
- 每台泵的接触器辅助触点串联进PLC输入,作为运行反馈
- 变频器故障输出接PLC高速计数器,实现<100ms的故障响应
3. 通讯协议实现关键细节
3.1 Modbus RTU的魔鬼在波特率
初始化程序看着简单,但几个参数设置不对就会导致整个系统瘫痪:
st复制// 主站初始化(必须放在第一个扫描周期)
LD SM0.1
MOVB 9, SMB30 // 波特率9600(1停止位/无校验)
MOVB 4, MBUS_CTRL:Mode // 启用Modbus主站模式
MOVB 3, MBUS_CTRL:Baud // 与SMB30保持一致
MOVB 0, MBUS_CTRL:Parity // 无校验(与变频器参数一致)
注意:ACS550的通讯参数必须完全匹配,特别是参数5302(波特率)设为9,5303(校验)设为0
3.2 轮询策略的平衡艺术
系统要同时读取两台变频器的状态(频率、电流、故障码)和写入PID给定值。我们的方案是:
- 主循环每200ms读取1#变频器40001-40002寄存器(运行状态)
- 间隔200ms后读取2#变频器相同寄存器
- 每2秒写入一次PID给定值(保持寄存器40020)
st复制// 定时轮询程序段
LDN T37
TON T37, 200
LD T37
MOVW 16#0103, VB100 // 功能码03(读保持寄存器)
MOVD &VB100, P#DB1.DBX0.0 // 存储指令地址
MBUS_MSG VB200:16, 1, 40001, 2 // 从站地址1,读2个字
3.3 触摸屏数据处理的坑
Smart 700 IE V3的浮点数处理需要特殊转换,比如显示实际压力值:
javascript复制// HMI变量转换脚本
float pressure = (GetTagWord("VW202") << 16) | GetTagWord("VW204");
SetTagFloat("Pressure_Actual", pressure/100.0);
这里有个隐藏陷阱:VW202和VW204必须连续存放,且VW202在前。我们曾因地址错位导致显示值跳变到3276.7MPa(足够把管道炸上天)
4. PID控制与泵组切换逻辑
4.1 变频器参数设置顺序
ABB ACS550的PID参数必须按特定顺序设置,否则自整定会失败:
- 9902=1(应用宏选择PID控制)
- 1001=1(启停命令来自DI1)
- 1102=0(DI1功能设为启停)
- 1103=1(DI2设为正转)
- 4001=20%(对应0.32MPa给定压力)
- 4010=0.5(比例增益)
- 4011=30(积分时间)
实测发现:参数4012(微分时间)设为0效果最好,水系统惯性大,微分作用反而引起震荡
4.2 水泵切换的防抖逻辑
一拖二切换的核心是避免两台泵同时启动导致电网冲击。我们的解决方案:
st复制LDW= VW500, 1 // 1#泵运行标志
AW= VW502, 0 // 2#泵停止状态
TON T38, 300 // 延时3秒启动备泵
LD T38
S Q0.2, 1 // 启动2#泵接触器
R Q0.0, 1 // 同时停止1#泵(软切换)
关键点在于:
- 切换前比较两台泵的累计运行时间(VD510和VD514),优先启动运行时间短的泵
- 每次切换后强制PID重置,避免积分饱和
- 增加水流开关反馈作为二次确认(I0.7)
5. 故障诊断与异常处理
5.1 通讯看门狗机制
半夜水压突然飙高的灵异事件,最终定位是触摸屏地址漂移。解决方案:
st复制LD SM0.5 // 0.5Hz时钟脉冲
EU
INCW VW800 // 通讯心跳计数器
LDD>= VD800, 600 // 10分钟无响应(600=10min×60s)
R M0.0, 1 // 触发急停输出
MOVW 0, VW800 // 计数器清零
5.2 典型故障速查表
| 故障现象 | 排查步骤 | 解决方案 |
|---|---|---|
| 通讯时断时续 | 1. 测量AB线间电压(正常2-6V) | 增加终端电阻或检查接线顺序 |
| PID输出震荡 | 1. 检查4001参数单位是否为% | 将4011(积分时间)从30调至60 |
| 泵切换时压力突降 | 1. 监控VD510/VD514运行时间差 | 调整T38延时从300ms到500ms |
| 触摸屏显示值跳变 | 1. 检查VW202-VW204地址连续性 | 添加数据校验脚本 |
6. 节能优化与高级功能
6.1 水量预测算法
根据历史用水数据自动调整PID参数的核心逻辑:
st复制// 每小时用水量计算(立方米)
MOVR VD600, VD604 // 保存上小时值
SUB VD600, VD604, VD608 // 当前小时差值
MOVR VD608, VD612 // 存入环形缓冲区(12个元素)
// PID参数自适应
LDR< VD608, 5.0 // 低负荷时段
MOVR 0.3, VD620 // 比例增益减小
MOVR 60.0, VD624 // 积分时间延长
6.2 能效监控界面
在Smart 700触摸屏上实现的节能看板:
- 实时功率显示(通过变频器寄存器4016读取)
- 累计节电量计算(与旧系统对比)
- 泵组磨损平衡指示(运行时间差百分比)
这套系统最终实现:
- 压力控制精度:±0.02MPa(旧系统±0.1MPa)
- 节能效果:平均23%(峰值时段达35%)
- 泵组寿命:预计延长2-3倍(均衡磨损)
