1. 项目背景与核心价值
暖通空调系统在现代建筑能耗中占比高达40%-60%,而冷水机组作为核心冷源设备,其控制逻辑的优劣直接决定了整个系统的能效表现。去年参与某商业综合体项目时,业主方提出的硬性指标是:在满足制冷需求的前提下,全年综合能效比(IEER)必须达到5.8以上。这个看似简单的数字背后,需要机组在30%-100%负荷区间都能保持最佳运行状态——这正是PLC程序需要解决的真正痛点。
传统继电器控制方案早已无法满足现代建筑的精细化控制需求。以水泵控制为例,定频泵的简单启停会造成30%以上的能源浪费,而采用西门子S7-1500 PLC配合SCL语言编程,可以实现:
- 基于负荷预测的变频调速
- 设备轮换的智能调度
- 故障状态下的无缝切换
这个案例程序包的价值不仅在于提供可运行的代码,更展示了如何用结构化文本实现暖通领域的专业控制策略。整套程序采用模块化设计,包含12个功能块(FB)和35个数据块(DB),所有重要参数都通过UDT(用户自定义数据类型)进行标准化封装。
2. 硬件架构解析
2.1 控制器选型考量
项目选用S7-1516-3 PN/DP作为主控制器,这个选择基于三个关键因素:
-
通信能力:集成3个PROFINET接口,可同时连接:
- 远程I/O站(ET200SP系列)
- G120变频器(通过Startdrive配置)
- HMI触摸屏(KTP1200 Basic)
-
运算性能:1MB工作内存应对复杂算法足够,实测在运行以下任务时CPU负载仅42%:
- 4台离心机的PID控制
- 6组水泵的变频逻辑
- 风阀的模糊控制
-
扩展性:通过CM 1542-5模块扩展PROFIBUS-DP接口,兼容老式传感器
实际项目中遇到过通信负载问题:当同时启用OPC UA数据采集和PROFINET IO设备通信时,建议在OB35循环中断组织块中分配不同的执行周期。
2.2 I/O点规划技巧
典型冷水机组需要监测控制的信号类型:
| 信号类型 | 示例点位 | 处理要点 |
|---|---|---|
| 模拟量输入 | 冷冻水供回水温度 | 需配置50Hz工频滤波 |
| 数字量输入 | 水流开关状态 | 增加10ms防抖延时 |
| 模拟量输出 | 变频器速度给定 | 4-20mA输出带负载检测 |
| 数字量输出 | 接触器控制 | 并联浪涌抑制二极管 |
特别提醒:温度传感器的AI模块必须选择RTD类型(如6ES7531-7KF00-0AB0),普通模拟量模块的测量误差会导致控制精度下降。
3. SCL编程实战解析
3.1 水泵控制算法
核心功能块"FB_PumpControl"的SCL实现逻辑:
scl复制FUNCTION_BLOCK "FB_PumpControl"
VAR_INPUT
bEnable : BOOL; // 使能信号
rFlowSetpoint : REAL; // 流量设定值(m³/h)
rActualFlow : REAL; // 实际流量
END_VAR
VAR_OUTPUT
rSpeedOutput : REAL; // 转速输出(0-100%)
bRunning : BOOL; // 运行状态
END_VAR
VAR
fPID : "PID_Compact"; // 调用标准PID功能
rDeadband : REAL := 0.2; // 死区范围
END_VAR
// 主逻辑
IF bEnable THEN
// PID运算
fPID(
Setpoint := rFlowSetpoint,
Input := rActualFlow,
Output => rSpeedOutput);
// 死区处理
IF ABS(rFlowSetpoint - rActualFlow) < rDeadband THEN
rSpeedOutput := rSpeedOutput * 0.5; // 进入节能模式
END_IF;
bRunning := TRUE;
ELSE
rSpeedOutput := 0.0;
bRunning := FALSE;
END_IF;
关键改进点:
- 在标准PID控制基础上增加死区处理,实测可减少15%的泵启停次数
- 输出限幅在功能块外部通过工艺对象TO关联实现,便于在线调整
3.2 设备轮换策略
通过"FB_EquipmentRotation"实现的三重保护机制:
- 时间均衡:累计运行时间差控制在±10%以内
scl复制// 在循环中断OB中调用
IF #iActivePump.RunHours - #iStandbyPump.RunHours > 36 THEN
SWITCH_PUMP();
END_IF;
- 故障隔离:当检测到电机电流异常时,自动切换备用设备并触发报警
scl复制CASE #iPumpStatus OF
0: // 正常
#bAlarm := FALSE;
1: // 过载
#bAlarm := TRUE;
START_ALTERNATE();
2: // 无流量
IF TON(#tNoFlow, T#30S) THEN
SHUTDOWN();
END_IF;
END_CASE;
- 手动优先:通过HMI上的"强制首选"按钮可锁定指定设备运行
4. 节能控制策略
4.1 冷冻水温度重置
根据室外温湿度实现动态调参:
scl复制// 在OB30中周期执行
#rOutdoorTemp := "AI1".Value;
#rOutdoorHum := "AI2".Value;
// 计算湿球温度
#rWetBulb := 0.72 * (#rOutdoorTemp + #rOutdoorHum) + 0.24;
// 重置冷冻水设定温度
IF #rWetBulb < 15.0 THEN
"Setpoint".ChilledWater := 7.0;
ELSIF #rWetBulb < 25.0 THEN
"Setpoint".ChilledWater := 6.0 + (0.1 * #rWetBulb);
ELSE
"Setpoint".ChilledWater := 5.0;
END_IF;
4.2 负载预测算法
基于历史数据的滑动窗口预测模型:
scl复制// 定义数据结构
TYPE "LoadForecastData" : STRUCT
rHistory : ARRAY[1..24] OF REAL; // 过去24小时负荷记录
rPredicted : REAL; // 预测值
END_STRUCT;
// 预测逻辑
#stForecast.rPredicted := 0.0;
FOR #i := 1 TO 24 DO
#stForecast.rPredicted += #stForecast.rHistory[#i] * #rWeight[#i];
END_FOR;
// 自适应调整权重
IF ABS(#stForecast.rPredicted - #rActualLoad) > 0.2 THEN
ADJUST_WEIGHTS();
END_IF;
5. 调试与优化
5.1 变频器参数整定
G120变频器关键参数设置对照表:
| 参数号 | 名称 | 推荐值 | 说明 |
|---|---|---|---|
| P1300 | 控制模式 | 22 | 带编码器的矢量控制 |
| P1960 | 速度环P增益 | 1.5 | 根据惯量调整 |
| P1961 | 速度环I时间 | 100ms | 水流系统典型值 |
| P1082 | 最大频率 | 50Hz | 泵类设备限制 |
调试技巧:
- 先进行P1910=1的静态识别
- 再做P1960=2的动态优化
- 最后通过Trace功能观察转速跟随性
5.2 PID参数整定
使用TIA Portal中的PID调试工具时,建议采用"Relay"振荡法:
- 设置初始比例带为量程的50%
- 观察振荡周期Tu
- 按Ziegler-Nichols公式计算:
- P = 0.6 * Tu
- I = 0.5 * Tu
- D = 0.125 * Tu
对于冷冻水流量控制,典型参数范围:
- 比例带:20-40%
- 积分时间:30-60s
- 微分时间:5-10s
6. 故障诊断案例
6.1 水泵频繁切换问题
现象:两台备用泵每15分钟就自动切换一次
排查过程:
- 检查运行时间差计算逻辑 → 正常
- 监测电机电流 → 发现波动超过额定值15%
- 检查机械连接 → 发现联轴器对中偏差2mm
解决方案: - 重新校准机械对中
- 在程序中增加电流波动滤波算法
6.2 温度控制振荡问题
现象:冷冻水温度在设定值±1℃范围持续波动
优化步骤:
- 检查传感器响应时间 → 发现PT100热响应时间常数不匹配
- 在AI模块参数中设置合适的滤波时间(改为500ms)
- 调整PID的死区宽度从0.5℃改为0.3℃
最终效果:温度波动范围缩小到±0.3℃
这套程序架构经过三个制冷季的实际运行验证,在保持相同制冷量的情况下,相比原有系统节能率达到23.7%。最大的收获是认识到:优秀的控制程序不是追求最复杂的算法,而是要在设备特性、控制精度和系统稳定性之间找到最佳平衡点。