拓冰建站拓冰建站
首页 / 资讯中心 / 正文

换热站PLC控制实战:点位、PID、Modbus与WinCC组态

简介围绕热力公司换热站自动控制展开的课程设计技术文档面向自动化、电气工程及相关专业的在校学生与从事供热系统改造的工程技术人员可用于换热站控制方案设计、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一次侧供水温度PT1000~150℃AI 热电阻热源监视2一次侧回水温度PT1000~150℃AI计算换热量3二次侧供水温度PT1000~100℃AIPID 反馈4二次侧回水温度PT1000~100℃AI气候补偿修正5一次侧供水压力4-20mA0~1.6MPaAI超压报警6二次侧供回水压差4-20mA0~0.6MPaAI循环泵变频7二次侧流量4-20mA0~500m³/hAI热量计量8补水箱液位4-20mA0~3mAI补水泵控制9循环泵运行/故障干接点DIDI联锁10调节阀开度反馈4-20mA0~100%AI阀位监视11调节阀控制4-20mA0~100%AOPID 输出12循环泵频率给定4-20mA0~50HzAO变频调速13补水泵启停继电器DODO液位控制14二次侧供水压力4-20mA0~1.0MPaAI超压保护点位表要先于选型。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 用 %IWAO 用 %QWmodbus_addr只在需要读变频器数据的点位填写alarm_high和alarm_low留空表示不报警。把点位表建在数据库里不是为了炫技而是为了后续做能耗报表和报警记录时不用再手工对一遍。2.3 变频器与 PLC 的 Modbus RTU 通讯参数怎么定换热站里循环泵和补水泵常用变频器调速。PLC 和变频器之间常见的做法是 Modbus RTURS485 两线制波特率 9600 或 192008 位数据位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 参数不要一上来就自动整定先给一组保守值手动跑。参数初始值作用调整方向比例增益 Kp2.0快速响应偏差振荡就减小积分时间 Ti300s消除稳态误差太慢就减小微分时间 Td20s抑制超调噪声大就减小采样时间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% 对应 0100% 对应 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%IW64Int二次侧供水温度PT_202%IW66Int二次侧压力Valve_Output%QW64Int调节阀开度Pump1_Run%M10.0Bool循环泵状态Alarm_OverTemp%M20.0Bool超温报警变量采集周期按用途分温度压力 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 21; 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 小时趋势叠在同一张图上比单看瞬时值更容易判断折点该上移还是下移。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门