1. 项目概述:西门子S7-1200与威纶通触摸屏的恒压供水系统
在工业自动化领域,恒压供水系统是典型的闭环控制应用场景。我最近完成的一个纺织厂项目,采用西门子S7-1200 PLC搭配威纶通MT8071iE触摸屏,实现了一拖三(1台主泵+2台辅泵)的恒压供水方案。这个系统已经稳定运行两年多,期间只对PID采样周期做过一次参数调整,充分验证了方案的可靠性。
恒压供水的核心挑战不在于基础控制逻辑的实现,而在于如何让多台水泵协同工作。就像田径场上的接力赛跑,既要保证接力棒的平稳传递(压力无波动),又要合理安排队员的出场顺序(水泵轮换策略)。我们的方案通过三个关键技术点解决了这些问题:带延时触发的PID输出分配、基于运行时间的水泵轮换算法,以及压力信号的移动平均滤波。
2. 系统硬件架构设计
2.1 主要设备选型
系统硬件配置遵循"够用就好"的原则,主要设备包括:
-
PLC控制器:西门子S7-1214C DC/DC/DC
- 选择理由:4路模拟量输入满足压力传感器接入需求,晶体管输出适合驱动接触器
- 关键参数:工作内存75KB,支持PID_Compact指令
-
HMI人机界面:威纶通MT8071iE
- 选择理由:7寸屏性价比高,支持历史数据曲线显示
- 特色功能:10组配方存储,采样周期可低至100ms
-
执行机构:
- 主泵:75kW离心泵(一用)
- 辅泵:55kW离心泵(两备)
- 变频器:三台同型号,采用标准Modbus RTU协议控制
-
检测元件:
- 压力变送器:4-20mA输出,量程0-10bar
- 安装位置:主管道距出口1.5米处,避免水流扰动
2.2 IO分配与电气设计
PLC的IO分配经过精心规划:
plaintext复制AI0 - 压力变送器(4-20mA)
Q0.0 - 主泵接触器
Q0.1 - 辅泵1接触器
Q0.2 - 辅泵2接触器
电气图纸中特别增加了以下保护措施:
- 接触器机械互锁:防止多泵同时启动
- 热继电器报警信号接入PLC
- 每台泵独立过载保护
- 电源进线端加装电涌保护器
3. 控制程序设计详解
3.1 PID控制核心逻辑
系统采用西门子自带的PID_Compact指令块,关键参数配置如下:
st复制"PID_Compact_DB".Setpoint := 3.2; // 设定压力值(bar)
"PID_Compact_DB".Input := "AI_Pressure";
"PID_Compact_DB".CyclicExecute := TRUE;
调试过程中发现两个重要经验:
- 采样周期:初始使用默认100ms导致系统震荡,调整为500ms后稳定
- 输出限幅:将PID输出限制在0-100%范围,避免积分饱和
3.2 水泵切换逻辑
辅泵启动采用延时触发机制,代码实现如下:
st复制IF "PID_Output" > 0.7 AND NOT #Pump2_Running THEN
TON(IN:=TRUE, PT:=T#30s); // 30秒延时
IF TON.Q THEN
"Start_Pump2" := TRUE;
END_IF;
END_IF;
这个延时设计解决了三个问题:
- 避免短暂压力波动导致误动作
- 给主泵留出调节时间
- 防止多泵频繁启停
3.3 信号处理技巧
压力信号滤波采用移动平均算法:
st复制#Pressure_Buffer[0] := "AI_Raw";
FOR #i := 0 TO 9 DO
#Sum := #Sum + #Pressure_Buffer[#i];
END_FOR;
"AI_Pressure" := #Sum / 10;
实际测试表明,10个采样点的移动窗口能有效滤除:
- 水锤效应引起的尖峰
- 电网波动导致的信号干扰
- 传感器本身的噪声
4. 威纶通HMI设计要点
4.1 动态压力曲线实现
历史数据显示控件配置步骤:
- 新建32位浮点数寄存器数组(长度180)
- 设置采样周期为10秒(30分钟数据)
- 在画面添加趋势图控件
- 绑定到数组地址
关键技巧:使用间接寻址实现循环缓冲区
st复制// PLC侧每10秒执行
#Pointer := (#Pointer + 1) MOD 180;
"Pressure_History"[#Pointer] := "AI_Pressure";
4.2 水泵状态可视化
自定义图形元件设置要点:
-
创建包含四种状态的泵图标:
- 停止(灰色)
- 运行(绿色)
- 故障(红色闪烁)
- 待机(蓝色)
-
闪烁效果配置:
- 勾选"闪烁速度"属性
- 设置故障状态闪烁频率为2Hz
- 关联到PLC的报警位地址
4.3 运行时间统计
水泵轮换策略基于运行时间,HMI界面提供:
- 实时显示各泵累计运行小时数
- 维护后清零按钮(带密码保护)
- 时间数据保存在PLC的保持型DB块中
轮换逻辑伪代码:
plaintext复制IF 需要启动辅泵 THEN
找出运行时间最短的泵
IF 该泵无故障 THEN
启动该泵
开始计时
END_IF
END_IF
5. 调试与优化经验
5.1 现场调试问题排查
遇到过的典型问题及解决方案:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 压力波动大 | PID参数不合适 | 先调P,再调I,D设为0 |
| 辅泵不启动 | 延时时间过长 | 逐步减少TON的PT值 |
| HMI曲线不更新 | 地址偏移错误 | 检查指针循环逻辑 |
5.2 系统参数优化
最终采用的PID参数:
- 比例增益(P):2.5
- 积分时间(Ti):12s
- 微分时间(Td):0s
- 采样周期:500ms
这些参数通过Ziegler-Nichols方法初步确定,再根据实际响应微调。
5.3 维护建议
根据两年运行经验总结:
- 每月检查压力传感器零点
- 每季度备份PLC程序
- 每年清洁控制柜灰尘
- 水泵机械密封定期更换
6. 程序扩展思路
这套系统还有改进空间:
-
时段压力控制:在HMI添加压力设定曲线,实现:
- 夜间低压运行节能
- 高峰时段适当增压
-
能效优化:
- 记录流量-压力-功耗关系
- 建立最优控制模型
-
远程监控:
- 通过OPC UA接入SCADA
- 手机端异常报警推送
实际项目中,我们后来在另一个车间实施时增加了变频器控制,通过Modbus RTU通信实现更平滑的压力调节。但核心控制逻辑仍然保持相同架构,只是将原来的直接启停控制改为频率给定控制。