1. 项目背景与核心需求
凌晨三点水泵房的压力表指针剧烈摆动,这个场景至今让我记忆犹新。当时正在调试的这套恒压供水系统,采用的是西门子S7-200 SMART PLC配合昆仑通态触摸屏的一拖三变频方案。所谓"一拖三",是指用一台变频器驱动三台水泵,通过智能切换实现恒压供水。这种架构在小区供水、工业循环水系统中非常常见,但要把压力波动控制在±0.1kg范围内,需要解决几个关键问题:
首先是负载均衡问题。三台水泵如果简单地轮流启停,会导致设备磨损不均。我们需要的是一套能根据实际用水量自动调节的运行策略:主泵常驻变频模式精细调节,辅泵在用水高峰时智能投入,低谷时自动退出。其次是PID参数整定,供水系统存在明显的传输滞后,常规的试凑法很难调出稳定参数。最后是硬件配合问题,压力传感器的安装位置、变频器的响应速度都会直接影响控制效果。
2. 系统架构设计解析
2.1 硬件配置方案
这套系统的硬件组成相当经典:
- PLC:西门子S7-200 SMART SR40,带4路模拟量输入/2路输出
- HMI:昆仑通态TPC7062KX,7寸触摸屏
- 变频器:某品牌15kW通用变频器(Modbus RTU通讯)
- 传感器:扩散硅压力变送器(4-20mA输出,0-10kg量程)
特别要注意的是模拟量信号的匹配问题。PLC的模拟量输入模块接收0-10V或0-20mA信号,而压力变送器通常输出4-20mA。如果直接连接,需要在PLC端设置对应的跳线,并在程序中做量程转换:
code复制// 压力值转换公式
实际压力 = (AIW0 - 6400) / (27648 - 6400) * 10kg
2.2 控制逻辑设计
核心控制采用状态机架构,包含以下几个关键状态:
- 单泵变频模式:仅主泵运行,变频器根据PID输出调节转速
- 双泵模式:主泵变频+1#辅泵工频运行
- 三泵模式:主泵变频+2台辅泵工频运行
- 泵组轮换:根据运行时间自动切换主辅泵角色
状态切换的条件主要基于两个参数:
- PID输出值(0-27648对应0-50Hz)
- 压力偏差持续时长(防止瞬时波动误触发)
3. PID控制实现细节
3.1 参数整定实战
供水系统的PID整定是个技术活。初始设置的P=0.5、I=120导致系统剧烈震荡,后来改用临界比例度法才解决问题。具体操作步骤:
- 先将积分时间Ti设为最大值(关闭积分作用)
- 逐渐减小比例带δ(即增大Kp)直到系统出现等幅振荡
- 记录此时的临界增益Kp=1.2和振荡周期T=8秒
- 按齐格勒-尼科尔斯公式计算最终参数:
- P = 0.6*Kp = 0.72
- I = 0.5*T = 4秒
- D = 0.125*T = 1秒
在S7-200 SMART中,PID指令的参数表配置如下:
code复制// PID参数表结构
VB100 // 过程变量PV(0-1之间的实数)
VD104 // 设定值SP
VD108 // 输出值MV
VD112 // 增益Kp(0.72)
VD116 // 采样时间Ts(0.1秒)
VD120 // 积分时间Ti(4秒)
VD124 // 微分时间Td(1秒)
3.2 抗饱和处理技巧
水泵控制系统必须考虑积分饱和问题。当实际压力长期低于设定值时,积分项会持续累积导致控制失灵。我们的解决方案:
- 设置输出限幅(AQW0限制在20000-27648)
- 增加抗饱和系数(0.2-0.5)
- 当压力偏差超过阈值时暂停积分作用
对应的PLC代码片段:
code复制LD SM0.0
MOVR VD108, VD112 // 加载Kp
MOVR 0.2, VD132 // 抗饱和系数
CMPR VD100, VD104 // 比较PV与SP
JMP PID_UPDATE
MOVR 0.0, VD120 // 大偏差时禁用积分
4. 水泵轮换算法实现
4.1 运行时间统计
为了实现三台水泵的均衡磨损,我们设计了基于移位寄存器的运行时间统计方案:
code复制// 每10秒记录一次运行状态
LD SM0.5
MOVB &VB10, AC1
RLB AC1, 1 // 循环左移
ANDB AC1, 16#07 // 保留低3位
MOVB AC1, &VB10 // 更新状态寄存器
VB10的每个bit代表一台泵在对应时间段是否运行。通过统计置位bit的数量,可以计算各泵的累计运行时间。
4.2 优先级调度
启动辅泵时采用"最少运行时间优先"策略:
code复制// 选择待启动的辅泵
LD I0.0 // 启动辅泵条件
MOVW VW20, AC1 // 泵1运行时间
MOVW VW22, AC2 // 泵2运行时间
CMPW AC1, AC2
JMP START_PUMP2
S Q0.1, 1 // 启动泵1
JMP SCHED_END
START_PUMP2:
S Q0.2, 1 // 启动泵2
SCHED_END:
5. 触摸屏界面设计要点
昆仑通态触摸屏的配置有几个关键细节:
- 变量地址对齐:务必确认PLC与HMI的变量地址完全一致。曾经因为VW100与VW102错位导致设定值无法写入
- 数据格式匹配:压力设定值使用REAL格式,而运行频率用INT格式
- 报警记录配置:设置压力上下限报警,并启用历史记录功能
重要变量绑定关系:
| HMI元件 | PLC地址 | 数据类型 | 量程转换 |
|---|---|---|---|
| 压力设定 | VW100 | REAL | 0.0-10.0kg |
| 实际压力 | VW200 | INT | 0-27648→0-10kg |
| 频率输出 | VW10 | INT | 0-27648→0-50Hz |
6. 现场调试经验总结
6.1 典型问题排查
-
压力剧烈波动:
- 检查传感器安装位置(应避开弯头和阀门)
- 确认PID采样时间(供水系统建议0.5-1秒)
- 验证量程转换公式是否正确
-
辅泵不启动:
- 检查状态切换阈值(通常PID输出>70%时启动)
- 确认输出点接线(注意继电器响应时间)
- 监控轮换逻辑的优先级判断
-
通讯中断:
- 检查Modbus从站地址设置
- 确认波特率与校验方式
- 测试终端电阻(长距离时需加120Ω电阻)
6.2 硬件布局建议
- 压力传感器应安装在距泵出口5倍管径以上的直管段
- 变频器电机电缆需采用屏蔽线,并与信号线分开走线
- PLC模拟量输入通道建议增加RC滤波(如100Ω+0.1μF)
7. 系统优化方向
经过半年运行后,我们进一步优化了这套系统:
- 睡眠模式:夜间低用水时段自动切换至单泵低频运行
- 预测控制:根据历史用水数据预判高峰时段
- 远程监控:通过4G模块上传运行数据至云平台
实现睡眠模式的代码逻辑:
code复制// 时间判断(22:00-5:00)
LD SM0.0
AW<= 22, VB50 // 小时数存储于VB50
AW>= 5, VB50
JMP DAY_MODE
MOVW 5000, VW100 // 夜间压力设定值降低
JMP MODE_END
DAY_MODE:
MOVW 8000, VW100 // 日间正常压力
MODE_END:
这套恒压供水系统最终实现了以下指标:
- 压力控制精度:±0.08kg
- 水泵运行时间偏差:<5%
- 节能效果:较传统工频方式节电30-45%