1. 项目背景与核心价值
工业自动化领域长期面临一个经典难题:如何协调多台并联设备的启停顺序,在满足工艺需求的同时实现能耗最优?这个问题在水泵系统、风机阵列等场景尤为突出。传统的人工控制或简单时序控制往往造成设备磨损不均、能耗居高不下。
以常见的5台并联水泵系统为例,多数现场采用"先启先停"或"轮换启停"的简单策略。这种模式下,1号泵往往承担80%以上的工作量,而5号泵可能长期处于备用状态。半年后设备体检时,1号泵的机械密封、轴承等关键部件磨损程度明显高于其他泵,导致维护成本激增。
更关键的是,这种粗放控制会带来显著的能源浪费。我们实测某水厂案例显示:采用传统轮换控制时,系统在60%负荷工况下总功耗为218kW;而采用本文介绍的PLC优化算法后,相同工况下功耗降至189kW,节能达13.3%。按工业电价0.8元/度计算,单套系统年节省电费可达16万元。
2. 系统架构设计
2.1 硬件配置方案
核心控制单元选用西门子S7-1200系列PLC(CPU 1215C),该型号具备:
- 2个PROFINET接口(用于HMI通讯和远程监控)
- 14点数字量输入(DI)/10点数字量输出(DO)
- 2路模拟量输入(AI)用于压力信号采集
- 1路模拟量输出(AO)控制变频器
每台水泵配置:
- 施耐德ATS48软启动器(带Modbus RTU通讯)
- WIKA S-10压力变送器(4-20mA输出)
- 霍尼韦尔流量开关(干接点信号)
关键细节:模拟量输入通道需配置1%精度的250Ω精密电阻,将4-20mA信号转换为1-5V电压信号。我们曾在某项目因使用普通电阻导致压力值漂移2%,引发频繁误动作。
2.2 控制逻辑拓扑
系统采用三级控制架构:
- 设备层:各水泵本体的启停、故障状态监测
- 控制层:PLC运行优化算法,输出控制指令
- 调度层:SCADA系统展示实时能效曲线
特别要注意PROFINET网络组态时,需将PLC、HMI和变频器的设备名称与IP地址严格对应。某项目曾因设备名称包含中文括号导致通讯中断,故障排查耗时6小时。
3. 核心算法实现
3.1 能耗模型建立
水泵功率消耗遵循立方定律:
code复制P = ρ * g * Q * H / (η * 3600)
其中:
- ρ:流体密度(kg/m³)
- g:重力加速度(9.81m/s²)
- Q:流量(m³/h)
- H:扬程(m)
- η:综合效率(通常0.6-0.8)
通过实测获得各泵的Q-H曲线后,可建立离散化能耗矩阵。例如某离心泵在50Hz时的性能参数:
| 流量(m³/h) | 扬程(m) | 效率(%) | 功率(kW) |
|---|---|---|---|
| 100 | 32 | 68 | 12.8 |
| 150 | 30 | 72 | 17.0 |
| 200 | 27 | 75 | 19.6 |
3.2 动态规划算法
采用Bellman最优化原理实现递推计算,核心伪代码如下:
st复制FUNCTION OptimizePumpSequence
INPUT: DemandFlow, PumpStatus[], PumpCurves[]
OUTPUT: OptimalCombination
// 初始化DP表
FOR i FROM 0 TO DemandFlow STEP 0.1
DP[i].cost = INFINITY
// 基准情况
DP[0].cost = 0
DP[0].combination = []
// 递推填充
FOR flow FROM 0.1 TO DemandFlow STEP 0.1
FOR each pump IN PumpStatus
IF pump.isAvailable THEN
FOR segment IN PumpCurves[pump.ID]
remaining = flow - segment.flow
IF remaining >= 0 AND
DP[remaining].cost + segment.power < DP[flow].cost
DP[flow].cost = DP[remaining].cost + segment.power
DP[flow].combination = DP[remaining].combination + pump.ID
END IF
END FOR
END IF
END FOR
END FOR
RETURN DP[DemandFlow].combination
END FUNCTION
实测技巧:离散化步长选择0.1m³/h可在精度和计算速度间取得平衡。某项目曾用1m³/h步长导致算法结果比最优解高5%能耗。
4. PLC程序关键实现
4.1 功能块封装
在TIA Portal中创建"PumpOptimizer"FB块,主要接口参数:
iecst复制FUNCTION_BLOCK PumpOptimizer
VAR_INPUT
ActualFlow : REAL; // 实际流量反馈
SetPoint : REAL; // 流量设定值
PumpStatus : ARRAY[1..5] OF BOOL; // 泵可用状态
END_VAR
VAR_OUTPUT
StartCmd : ARRAY[1..5] OF BOOL; // 启停命令
TotalPower : REAL; // 总功耗
END_VAR
VAR
dpTable : ARRAY[0..1000] OF DP_Entry; // DP表
// ...其他内部变量
END_VAR
4.2 中断处理
配置循环中断OB35(默认100ms周期)处理以下任务:
- 读取模拟量输入并做滑动平均滤波
- 检测急停信号(优先级最高)
- 执行算法计算
- 输出控制命令
滤波算法示例:
iecst复制FILTERED_VALUE := FILTERED_VALUE * 0.8 + RAW_VALUE * 0.2;
血泪教训:某项目因未做滤波导致流量信号波动引发泵组震荡,10分钟内触发16次启停。后改用一阶滞后滤波(α=0.2)后稳定。
5. 现场调试要点
5.1 参数整定流程
-
单泵测试阶段:
- 全开阀门记录空载电流(应<30%额定)
- 逐步关小阀门至额定扬程,记录电流-流量曲线
- 测试紧急停止响应时间(应<500ms)
-
联调阶段:
- 先手动设定固定组合运行1小时
- 观察各泵电流平衡度(差异应<10%)
- 逐步启用自动优化功能
5.2 典型故障处理
| 故障现象 | 排查步骤 | 解决方案 |
|---|---|---|
| 泵频繁交替启停 | 1. 检查流量计安装位置 2. 查看滤波参数 |
1. 应装在总管段 2. 增大滤波时间常数 |
| 算法计算结果不稳定 | 1. 检查Q-H曲线数据 2. 监控DP表状态 |
1. 重新测量泵曲线 2. 增加离散化精度 |
| MODBUS通讯断续 | 1. 测量终端电阻 2. 检查波特率设置 |
1. 末端加120Ω电阻 2. 统一为19200bps |
6. 能效优化效果
在某工业园区供水系统实测数据对比:
| 指标 | 传统控制 | 优化算法 | 改善幅度 |
|---|---|---|---|
| 平均电耗(kWh/m³) | 0.48 | 0.41 | -14.6% |
| 启停次数/天 | 32 | 18 | -43.8% |
| 维护间隔(月) | 6 | 9 | +50% |
特别值得注意的是"睡眠模式"的实现:当夜间流量需求低于单泵能力的30%时,系统会自动选择效率最高的单泵运行,其他泵进入待机状态。该策略使低谷时段能耗再降22%。