简介:围绕热力公司换热站自动控制展开的课程设计技术文档,面向自动化、电气工程及相关专业的在校学生与从事供热系统改造的工程技术人员,可用于换热站控制方案设计、PLC选型与课程设计写作参考。文档以西门子S7-200为核心控制器,梳理集中供暖的国内外发展概况、换热站的构成与工作原理,并逐层展开温度调节、循环水流量调节与压力调节的控制思路,以及PLC在自动控制、运行监控和故障诊断中的典型应用。文中还介绍了S7-200的CPU主机、I/O模块、功能模块、通信模块与人机接口等硬件组成,给出控制系统总体方案、硬件框架与电气图,便于按模块查阅借鉴。整包仅1个doc文件,约277KB,体量轻便,下载后可直接阅读与二次编辑。目前已有481人学习下载,适合需要快速掌握换热站控制逻辑与S7-200应用要点的读者。
1. 换热站为什么要把控制权交给 PLC:从一次供暖波动说起
冬季供热,热力公司的换热站往往承接几十万平方米的二次网。一次侧高温水通过板式换热器把热量传给二次侧,二次侧供水温度直接决定用户室温。人工盯着温度表拧阀门,等发现降温再开大调节阀,管道里已经掉了几度,用户端体感很明显。更麻烦的是夜间室外温度下降,二次侧设定值还在白天那条线上,热量不是不够就是过量。
PLC 控制系统的价值在于把“看温度—调阀门—再观察”这个循环压缩到秒级。它持续采集一次侧、二次侧的供回水温度和压力,按气候补偿曲线算出目标供水温度,用 PID 输出控制一次侧电动调节阀开度,同时根据压差或温差调节循环泵频率。对于热力公司来说,这不仅是稳定供暖,还能把泵耗和蒸汽消耗压下来。
这个标题适合正在做换热站自控改造的电气工程师、暖通技术人员和 PLC 编程入门者。它不要求一开始就上大型 DCS,用一套 S7-1200 或 S7-1500 加触摸屏就能跑通核心回路。关键是把点位、通讯和 PID 参数这三块做扎实。
2. 换热站控制系统的点位梳理与 PLC 硬件选型
2.1 换热站一次侧与二次侧的关键测点清单
做换热站控制系统,第一步不是写程序,而是把点位表定下来。一次侧和二次侧的测点漏一个,后面选模块、配变频器、做画面都要返工。常见做法是按“温度、压力、流量、液位、状态、控制”六类走一遍。
| 序号 | 测点 | 信号类型 | 量程 | PLC 通道 | 用途 |
|---|---|---|---|---|---|
| 1 | 一次侧供水温度 | PT100 | 0~150℃ | AI 热电阻 | 热源监视 |
| 2 | 一次侧回水温度 | PT100 | 0~150℃ | AI | 计算换热量 |
| 3 | 二次侧供水温度 | PT100 | 0~100℃ | AI | PID 反馈 |
| 4 | 二次侧回水温度 | PT100 | 0~100℃ | AI | 气候补偿修正 |
| 5 | 一次侧供水压力 | 4-20mA | 0~1.6MPa | AI | 超压报警 |
| 6 | 二次侧供回水压差 | 4-20mA | 0~0.6MPa | AI | 循环泵变频 |
| 7 | 二次侧流量 | 4-20mA | 0~500m³/h | AI | 热量计量 |
| 8 | 补水箱液位 | 4-20mA | 0~3m | AI | 补水泵控制 |
| 9 | 循环泵运行/故障 | 干接点 | DI | DI | 联锁 |
| 10 | 调节阀开度反馈 | 4-20mA | 0~100% | AI | 阀位监视 |
| 11 | 调节阀控制 | 4-20mA | 0~100% | AO | PID 输出 |
| 12 | 循环泵频率给定 | 4-20mA | 0~50Hz | AO | 变频调速 |
| 13 | 补水泵启停 | 继电器 | DO | DO | 液位控制 |
| 14 | 二次侧供水压力 | 4-20mA | 0~1.0MPa | AI | 超压保护 |
点位表要先于选型。AI 通道数量决定了模拟量模块块数,DI/DO 要留 20% 余量。PT100 优先选热电阻模块而不是变送器,少一层转换少一个故障点。二次侧供回水压差如果直接进 PID 控制循环泵,采样周期要设得比温度回路快。
2.2 S7-1200/1500 的 CPU、模拟量模块和通讯口怎么配
常见做法是用 S7-1200 CPU 1214C 或 1215C 打底,加 SM1231 模拟量输入模块和 SM1232 模拟量输出模块。如果点数超过 30 个 AI,或者需要做多台变频器轮询,S7-1500 的背板总线和大容量 M 区会更从容。通讯口至少留两个:一个 PROFINET 接触摸屏和上位机,一个 RS485 做 Modbus RTU 接变频器或智能仪表。
CREATE TABLE heat_station_io ( id INT PRIMARY KEY, tag_name VARCHAR(64) NOT NULL, -- 位号,例如 TE_201 description VARCHAR(128), -- 中文描述 signal_type VARCHAR(16), -- AI/DI/AO/DO range_min DECIMAL(10,2), -- 量程下限 range_max DECIMAL(10,2), -- 量程上限 plc_address VARCHAR(32), -- 例如 %IW64 modbus_addr INT, -- 变频器寄存器地址 alarm_high DECIMAL(10,2), alarm_low DECIMAL(10,2) ); INSERT INTO heat_station_io VALUES (1,'TE_201','二次侧供水温度','AI',0,100,'%IW64',NULL,75,35), (2,'PT_202','二次侧供水压力','AI',0,1.0,'%IW66',NULL,0.8,0.2), (3,'FT_203','二次侧流量','AI',0,500,'%IW68',NULL,NULL,NULL), (4,'VFD_01_F','循环泵1频率给定','AO',0,50,'%QW64',NULL,NULL,NULL);逻辑说明:这张表把位号、量程、PLC 地址和 Modbus 地址放在同一行,组态时可以直接对照。参数说明:plc_address里 AI 用 %IW,AO 用 %QW;modbus_addr只在需要读变频器数据的点位填写;alarm_high和alarm_low留空表示不报警。把点位表建在数据库里不是为了炫技,而是为了后续做能耗报表和报警记录时不用再手工对一遍。
2.3 变频器与 PLC 的 Modbus RTU 通讯参数怎么定
换热站里循环泵和补水泵常用变频器调速。PLC 和变频器之间常见的做法是 Modbus RTU,RS485 两线制,波特率 9600 或 19200,8 位数据位,1 位停止位,无校验或偶校验。站内变频器数量少的时候轮询周期压力不大,但如果是多台泵加多台补水泵,就要把轮询周期和超时分开设。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 波特率 | 9600/19200 | 距离短可提高 |
| 数据位 | 8 | 固定 |
| 停止位 | 1 | 固定 |
| 校验 | None/Even | 与变频器一致 |
| 从站地址 | 1~32 | 不重复 |
| 轮询周期 | 200~500ms | 每站分开 |
| 响应超时 | 300~1000ms | 大于正常响应 |
import time # 从站点位映射:站号 -> 需要读的寄存器 slaves = { 1: {"run_status": 0x2000, "freq_set": 0x1000, "freq_actual": 0x2001}, 2: {"run_status": 0x2000, "freq_set": 0x1000, "freq_actual": 0x2001}, 3: {"run_status": 0x2000, "freq_set": 0x1000, "freq_actual": 0x2001}, } def poll_slave(addr, reg): # 实际项目中这里调用 PLC 的 Modbus_Comm_Load 和 Modbus_Master # 返回寄存器值;超时返回 None return None while True: for addr, regs in slaves.items(): for name, reg in regs.items(): val = poll_slave(addr, reg) if val is None: # 记录通讯故障,保持上一次有效值,不立即停泵 pass time.sleep(0.3)逻辑说明:轮询按站号从小到大,每次只读需要的寄存器,避免一次读一大片造成超时。参数说明:0x2000这类地址要按变频器手册的通讯地址表替换,不同品牌寄存器和倍率不同。
注意:通讯超时后不要立刻写 0 频率,应该先报警并保持当前输出,否则一台变频器掉线会导致整个二次网流量骤降。
3. 换热站 PLC 程序的梯形图与 SCL 落地:从启停联锁到 PID 调节
3.1 循环泵、补水泵、一次侧调节阀的启停联锁逻辑
循环泵是二次网的心脏,启停顺序错了会打坏换热器。常见做法:先开二次侧循环泵,确认压差建立后再开一次侧调节阀;停泵时先关调节阀,再停循环泵。补水泵受液位和压力双条件控制,液位低启动,压力高停止,同时要防止频繁启停。梯形图适合写这类联锁,但用 SCL 表达条件更紧凑,博途里两种语言可以混用。
// 循环泵启动允许 "Pump1_Run_Allow" := "No_Alarm" AND "Valve_Closed" AND NOT "VFD1_Fault"; // 循环泵启动 IF "Pump1_Start_Cmd" AND "Pump1_Run_Allow" THEN "Pump1_Run" := TRUE; "VFD1_Freq_Set" := "Freq_Manual"; END_IF; // 调节阀开启条件:循环泵运行且二次侧压差大于下限 IF "Pump1_Run" AND ("DP_Actual" > "DP_Low_Limit") THEN "Valve_Enable" := TRUE; ELSE "Valve_Enable" := FALSE; END_IF; // 补水泵:液位低启,压力高停,加最小运行时间 IF ("Level_Actual" < "Level_Low") AND NOT "Pump2_Run" THEN "Pump2_Run" := TRUE; "Pump2_Timer" := T#0S; ELSIF ("Pressure_Actual" > "Pressure_High") OR ("Level_Actual" > "Level_High") THEN "Pump2_Run" := FALSE; END_IF;逻辑说明:Pump1_Run_Allow把报警、阀门关闭、变频器故障串在一起,任何一个不满足就不允许启动。参数说明:DP_Low_Limit建议取二次侧设计压差的 60%~70%,太低会导致调节阀一开就抢水。Pump2_Timer用于记录补水泵运行时间,可以配合最小运行时间防止频繁启停。
注意:补水泵停止条件里的压力高和液位高是“或”关系,任一条满足就停,避免水箱溢流。
3.2 二次侧供水温度 PID 回路:PID_Compact 的参数怎么给
二次侧供水温度是换热站的核心被调量,执行机构是一次侧电动调节阀。常见做法是在博途里调用 PID_Compact 指令,反馈用二次侧供水温度,输出给调节阀的 4-20mA。PID 参数不要一上来就自动整定,先给一组保守值手动跑。
| 参数 | 初始值 | 作用 | 调整方向 |
|---|---|---|---|
| 比例增益 Kp | 2.0 | 快速响应偏差 | 振荡就减小 |
| 积分时间 Ti | 300s | 消除稳态误差 | 太慢就减小 |
| 微分时间 Td | 20s | 抑制超调 | 噪声大就减小 |
| 采样时间 | 1s | 与程序周期匹配 | 不宜小于 0.5s |
| 输出限幅 | 0~100% | 保护调节阀 | 按阀门口径设 |
| 手动/自动切换 | 无扰 | 防止阀位突跳 | 必须做 |
// 调用 PID_Compact 背景数据块 "PID_Compact_1"(Setpoint := "SP_Supply_Temp", Input := "PV_Supply_Temp", Output => "Valve_Output", ManualEnable := "PID_Manual", ManualValue := "Valve_Manual_Value"); // 输出限幅和反算 IF "Valve_Output" > 100.0 THEN "Valve_Output" := 100.0; ELSIF "Valve_Output" < 0.0 THEN "Valve_Output" := 0.0; END_IF; // 把输出写到模拟量通道 "QW_Valve" := INT_TO_WORD(REAL_TO_INT("Valve_Output" * 276.48));逻辑说明:Setpoint来自气候补偿曲线,Input是二次侧供水温度。参数说明:276.48是 4-20mA 对应 0-27648 的系数,0% 对应 0,100% 对应 27648。
注意:手动/自动切换时要把
ManualValue先赋成当前输出值,再切自动,否则阀门会跳。PID 输出加变化率限幅,每分钟不超过 10%,对调节阀和换热器都更友好。
3.3 气候补偿曲线与分时段设定值的实现
气候补偿曲线是换热站节能的关键。室外温度高,二次侧供水设定值就低;室外温度低,设定值就高。常见做法是取 5 个折点做线性插值,再按白天/夜间分时段加修正。
| 室外温度 | 二次侧供水设定值 |
|---|---|
| 10℃ | 45℃ |
| 5℃ | 50℃ |
| 0℃ | 55℃ |
| -5℃ | 60℃ |
| -10℃ | 65℃ |
FUNCTION "ClimateCurve" : REAL VAR_INPUT OutdoorTemp : REAL; END_VAR VAR i : INT; x1, x2, y1, y2 : REAL; END_VAR BEGIN // 折点数组 x1 := -10.0; x2 := -5.0; y1 := 65.0; y2 := 60.0; IF OutdoorTemp <= x1 THEN "ClimateCurve" := y1; ELSIF OutdoorTemp >= x2 THEN "ClimateCurve" := y2; ELSE "ClimateCurve" := y1 + (y2 - y1) * (OutdoorTemp - x1) / (x2 - x1); END_IF; END_FUNCTION逻辑说明:实际项目里用数组和循环处理多个折点,这里用一条线段说明插值方法。参数说明:折点要根据当地室外计算温度和二次网设计供回水温度确定,不能直接抄。
注意:夜间可以把设定值降 3~5℃,但清晨要提前 1 小时恢复,避免用户起床时室温不达标。
4. 换热站控制系统的上位机监控与报警联锁:WinCC 与数据记录怎么接
4.1 WinCC 变量连接与画面组态的关键点
上位机常见做法是用 WinCC 通过 PROFINET 或 OPC UA 连接 PLC。变量名要和 PLC 里的符号名一致,不要用绝对地址。画面至少要有:工艺流程图、参数设置、报警记录、历史趋势、能耗报表。
| 变量名 | PLC 地址 | 数据类型 | 画面元素 |
|---|---|---|---|
| TE_201 | %IW64 | Int | 二次侧供水温度 |
| PT_202 | %IW66 | Int | 二次侧压力 |
| Valve_Output | %QW64 | Int | 调节阀开度 |
| Pump1_Run | %M10.0 | Bool | 循环泵状态 |
| Alarm_OverTemp | %M20.0 | Bool | 超温报警 |
变量采集周期按用途分:温度压力 1s,电参数 5s,累计量 60s。不要把所有变量都设成 100ms,否则通讯负荷和归档数据量都会上去。
4.2 报警、历史趋势与防冻保护的联锁
换热站最怕冻。二次侧停水、室外温度低于 -15℃、补水箱低液位,任何一条都要触发防冻保护。常见做法是防冻保护优先于 PID,直接强制循环泵运行,调节阀开到安全开度,同时给值班人员发报警。
-- 查询最近 24 小时二次侧供水温度的超限记录 SELECT tag_name, ts, value, alarm_high FROM heat_station_history WHERE tag_name = 'TE_201' AND ts >= NOW() - INTERVAL '24 HOUR' AND value > alarm_high ORDER BY ts DESC;逻辑说明:历史数据表按位号和时间建索引,查询才不会拖慢组态软件。参数说明:alarm_high来自点位表,超限记录可以直接导出给运行人员做分析。
注意:报警要分等级,超温、超压、低液位是紧急;通讯中断、变频器故障是重要;传感器偏差是提示。
4.3 换热站无人值守的远程巡检与故障定位
无人值守不是没人管,而是把巡检变成脚本和报表。常见做法是用一台工控机做数据网关,定时检查 PLC、变频器和仪表的通讯状态,把结果写到数据库,手机或值班室只看异常。
#!/bin/bash # 设备清单:IP 和名称 devices=( "192.168.1.10 PLC_S7_1200" "192.168.1.21 VFD_01" "192.168.1.22 VFD_02" "192.168.1.30 HMI" ) for dev in "${devices[@]}"; do ip=$(echo $dev | awk '{print $1}') name=$(echo $dev | awk '{print $2}') if ping -c 2 -W 1 $ip > /dev/null 2>&1; then echo "$(date '+%F %T') $name OK" else echo "$(date '+%F %T') $name FAIL" | tee -a /var/log/heat_station_net.log fi done逻辑说明:脚本按 IP 逐个 ping,成功写正常日志,失败写故障日志。参数说明:-c 2表示发两个包,-W 1表示单次超时 1 秒,避免脚本卡住。
注意:网络通不代表 Modbus 通,还要在 PLC 里读通讯状态位,两者结合才能定位是网线问题还是串口参数问题。
4.4 能耗数据采集与节能评估
换热站节能效果要用数据说话。常见指标是单位面积耗热量、单位面积耗电量、补水率。PLC 把累计流量、累计热量、泵频率和运行时间传到上位机,按小时和日汇总。
| 指标 | 计算方式 | 数据来源 |
|---|---|---|
| 单位面积耗热量 | 累计热量 / 供热面积 | 热量表 |
| 单位面积耗电量 | 累计电量 / 供热面积 | 电表/变频器 |
| 补水率 | 补水量 / 循环水量 | 流量计 |
| 泵平均频率 | 频率累计 / 运行时间 | 变频器 |
| 供回水温差 | 供水温度 - 回水温度 | 温度传感器 |
这些指标要和室外温度放在同一张趋势图上,否则看不出是天气变冷还是控制变差。调整气候补偿曲线后,连续观察 3 天以上再判断效果。
5. 换热站 PLC 程序调试的 5 个硬技巧:从模拟量跳变到 Modbus 超时
调试阶段最耗时间的不是写程序,而是把现场信号和程序里的数值对上。下面几个技巧在换热站项目里反复用到。
模拟量跳变先看接线和滤波。4-20mA 信号被变频器载波干扰很常见,表现为温度值上下跳 2~3℃。先检查屏蔽层是否单端接地,再在 PLC 里加一阶滤波。下面这段 SCL 是一阶滤波,时间常数取 3~5 个扫描周期。
// 一阶滤波:PV_Filtered = PV_Filtered + (PV_Raw - PV_Filtered) * K "PV_Filtered" := "PV_Filtered" + ("PV_Raw" - "PV_Filtered") * 0.2;PID 手动切自动要无扰。切换前把ManualValue写成当前实际输出,再把ManualEnable置 FALSE。顺序反了,调节阀会瞬间全开或全关。
Modbus 轮询要分站超时。每台变频器单独设响应超时,不要共用一个长超时。一台掉线不能拖慢整条轮询链。轮询到故障站时跳过,下一轮再试。
防冻保护要现场验证。把室外温度传感器模拟到 -20℃,观察循环泵是否自动启动、调节阀是否开到设定安全开度、报警是否上传。验证完记得恢复参数。
程序备份分三层。PLC 里存一份,工程师电脑存一份,上位机归档一份。每次修改 PID 参数或联锁条件后,在注释里写清日期和原因。换热站运行周期长,半年后回头看注释比看程序本身更有用。
| 现象 | 先查 | 再查 |
|---|---|---|
| 二次侧温度长期偏低 | 调节阀开度是否到限 | 一次侧供水温度是否够 |
| 循环泵频率忽高忽低 | 压差反馈是否波动 | PID 微分是否过大 |
| 补水泵频繁启停 | 液位和压力设定死区 | 最小运行时间是否设置 |
| 通讯时断时续 | 终端电阻和屏蔽层 | 波特率和校验 |
| 上位机数据不刷新 | PLC 连接状态 | 变量采集周期 |
下一次调整气候补偿曲线时,把室外温度和二次侧供水温度的 24 小时趋势叠在同一张图上,比单看瞬时值更容易判断折点该上移还是下移。
本文还有配套的精品资源,点击获取