电锅炉的峰谷电控制,这些年问的人确实多。大家最关心就一件事:谷电时段怎么把热量蓄够,峰电时段怎么少用甚至不用电,同时末端供水温度还不能塌。我把一个实际做过的项目完整拆开——西门子STEP7写梯形图控制逻辑,昆仑通态触摸屏做操作和监视界面,CAD出全套电气原理图。这套组合把一个18kW电锅炉供热系统改造成了峰谷电自动运行模式,项目做完供热成本降了三成左右。文章会从方案选型讲到梯形图逻辑、触摸屏组态、图纸设计,最后还有现场调试的实战记录,适合正要上手做同类项目的工程师,也适合想了解整套系统设计思路的电气自动化从业者。
1. 方案选型与系统架构
1.1 为什么是西门子STEP7搭配昆仑通态触摸屏
先说设备选型。项目原始设备是一台18kW电锅炉,三组加热管,每组6kW,配一个蓄热水箱和循环泵。原来的控制就是温控器加接触器,人工看着水温手动启停,峰电谷电全靠人记时间,经常到了谷电时段没人去开,白天峰电时段又开着加热,电费看得肉疼。
改造时PLC我选了西门子S7-300系列,编程用STEP7。为什么不用S7-200?项目不只是做开关量启停,还有峰谷时段判断、多组加热投切、多路温度检测和故障保护,S7-300的内存、定时器、模拟量处理能力明显更从容。而且S7-300的STL转梯形图非常顺手,维修电工过来看程序也容易上手。
触摸屏选了昆仑通态TPC系列,尺寸10寸,配合MCGS嵌入版组态软件。选它主要有三个原因:一是和西门子PLC走以太网TCP通讯,不需要额外买通讯模块,一根网线直接连CPU的PN口,稳定性和速度都够;二是MCGS的变量管理和画面开发速度快,项目工期紧的时候优势特别明显;三是成本控制友好,整体预算比同级别进口屏低不少,甲方也认可。
这套组合的本质逻辑是:PLC干它擅长的事——逻辑运算、时序控制、安全保护;触摸屏干它擅长的事——参数显示、设定修改、报警记录、趋势曲线。两者之间通过变量表一一对应,互不抢活。
1.2 电锅炉峰谷电供热系统是怎么运作的
聊原理之前先明确一个背景:电网的峰平谷分时计价,谷电时段电价最低,通常集中在夜间;峰电时段电价最高,集中在白天用能高峰。电锅炉这种纯电加热设备,最大的运行成本消耗就在这里。峰谷电供热系统的核心思路就是四个字:错峰蓄热。
具体到这套系统,蓄热水箱承担的是"储能"角色。谷电时段,PLC自动切入蓄热模式,三组加热管全开,把水箱里的水加热到上限温度(比如85℃),相当于把低电价时段买来的电能转化成热能存在水里;峰电时段,加热管降载甚至全停,循环泵把热水送出去,供采暖末端使用。水箱容量选得合适的话,一个谷电周期蓄的热量可以覆盖白天好几个小时的用热需求。
整个运行模式分成三种,由PLC根据实时时钟自动判断:
- 谷电蓄热模式:水箱温度没到上限,就按顺序投入全部加热管;到了上限就停止加热,等温度自然下降后再补充。
- 峰电放热模式:加热管基本不动作,只运行循环泵,完全靠水箱蓄热维持供水温度;如果水箱温度低到保护下限,才允许一组加热管短时补充。
- 平段智能模式:电价居中的时段,优先用蓄热维持负荷,水温不够时按需投入加热组数,不做满功率运行。
这套逻辑的关键在于时段边界要可配置。各地峰谷时段划分不完全一样,甚至不同季节还会调整。我在程序里把时段参数做成了触摸屏可设置的变量,工程师到现场可以直接改时间段和温度阈值,不用重新下载程序。
2. 梯形图程序设计与核心逻辑
2.1 梯形图程序的整体框架怎么搭
STEP7里项目结构我习惯这样组织:OB1是主循环,按顺序调用各功能块;FC1做时间判断与运行模式切换,FC2做温度采集与加热控制,FC3做保护和报警逻辑;DB1存模式状态和运行标志,DB2存所有设定参数,DB3存实时数据显示值。
程序写之前IO分配必须先定死。下面是我这个项目的分配表,可以直接参考:
| 地址 | 类型 | 用途 |
|---|---|---|
| I0.0 | 数字量输入 | 手动/自动切换 |
| I0.1 | 数字量输入 | 启动按钮 |
| I0.2 | 数字量输入 | 停止按钮 |
| I0.3 | 数字量输入 | 故障复位按钮 |
| I0.4 | 数字量输入 | 流量开关信号 |
| I0.5 | 数字量输入 | 超温保护开关 |
| I1.0~I1.2 | 数字量输入 | 三组加热接触器反馈 |
| Q0.0 | 数字量输出 | 循环泵启动 |
| Q0.1 | 数字量输出 | KM1接触器(1组加热) |
| Q0.2 | 数字量输出 | KM2接触器(2组加热) |
| Q0.3 | 数字量输出 | KM3接触器(3组加热) |
| Q0.4 | 数字量输出 | 运行指示灯 |
| Q0.5 | 数字量输出 | 故障指示灯 |
| IW64 | 模拟量输入 | 水箱温度PT100 |
| IW66 | 模拟量输入 | 供水温度PT100 |
| IW68 | 模拟量输入 | 回水温度PT100 |
IO表定好后,OB1的调用结构就很清晰了。每次扫描先读输入、再刷新模拟量通道,然后按FC1、FC2、FC3的顺序执行,最后写输出。这里有个细节:接触器反馈信号必须在程序里用,但绝不能直接拿它做输出条件,否则设备启动瞬间反馈还没建立,输出会被误切断。我在反馈判断里加了延时确认,反馈必须在启动指令发出后持续2秒仍然有效,才认为设备确实合闸了。
2.2 峰谷时段切换的编程实现
时段判断是这套系统的核心大脑。STEP7里读取系统时钟用SFC1(READ_CLK),调用后系统时间会写入一个日期时间变量。我从中取出小时和分钟值,换算成分钟数,然后和触摸屏里设定的时段边界做比较。
时段参数我做了6个可设置变量,存到DB2:
- 峰电开始时间1、峰电结束时间1(比如8:00到11:00)
- 峰电开始时间2、峰电结束时间2(比如18:00到22:00)
- 谷电开始时间、谷电结束时间(比如22:00到第二天8:00)
程序里先判断当前时间是否落在任何一个峰电区间内,若是则模式号置1;否则判断是否在谷电区间内,若是则模式号为2;如果都不满足,模式号就是3(平段)。这个判断逻辑用梯形图写,本质上就是区间比较加上RS触发器锁存模式状态。
有个坑必须提醒:夜间跨天的情况。谷电时段是22:00到8:00,结束时间比开始时间数值小,直接比较分钟数会出错。我处理的方式是:把谷电结束时间加24小时再比较,同时当前时间如果小于谷电结束时间,就先把当前时间加上24小时再参与比较。这个问题不做,半夜程序会判错模式,加热逻辑全乱。
模式切换的时候我还加了一个切换缓冲。加热管不能瞬间从全开到全停,电热元件突然断电对电网有冲击,突然重新上电也对接触器寿命不利。所以模式切换后我强制延迟5秒再做任何加热组变动,这一个延时在梯形图里用系统定时器实现。
2.3 温度控制与加热器分组投切
温度控制我采用的是分段控制,没有上PID。原因很实际:电锅炉的热惯性大,加热管功率固定,PID调出来的输出最终还是折算成投几组加热管,本质上仍然是分段式。分段控制逻辑简单、现场好调、不容易出幺蛾子,对于供热这种对精度要求不苛刻的场景足够了。
控制逻辑分三层判断:
第一层看温差。用目标水温减去当前水箱水温,温差大于10℃时,输出"全速加热"指令,三组全投;温差在5到10℃之间,输出"快速加热",投两组;温差在2到5℃,投一组;温差小于2℃,认为接近目标,切回保温状态。
第二层看模式。谷电模式以水箱上限温度为追求目标,目标值取水箱高温限(比如85℃);平段模式以供水温度为目标,目标值取用户设定值(比如60℃);峰电模式除非水温低于保护值,否则禁止加热。
第三层看运行安全。手动模式不自动改变加热组数,操作员自己通过触摸屏按钮选择投入1组、2组还是3组。自动模式则完全由PLC决策,触摸屏上的手动投切按钮在自动模式下被程序锁定。
加热组的投切顺序必须严格遵守:先启循环泵,水流建立后再投加热;三组加热依次投入,组间间隔5秒,防止三组同时合闸拉低母线电压;停止时三组可以同时断开,但下一次再启动必须仍从第1组开始。
我还专门做了投切次数均衡。KM1总是最先投入、最后退出,接触器磨损明显快于另两个。程序里我加了一个轮换计数,如果KM1投切次数超过KM2和KM3平均值80次,就把启动起始顺序循环换到KM2先投。这个小逻辑能让三个接触器寿命均衡一些,维护周期能错开。
2.4 保护连锁逻辑怎么设计
安全保护是整个程序里优先级最高的一块。我设计的保护分两个层面:硬保护和软保护。
硬保护回路不经过PLC。超温开关和流量开关的常闭触点直接串在接触器线圈回路里,不管PLC程序什么状态,只要超温或者断水,接触器立刻失电,加热管物理断电。这是最后一道防线,PLC死机、程序跑飞、通讯断开都不影响它生效。
软保护进PLC逻辑。热继电器的辅助常开触点接入DI点,一旦动作,PLC捕捉到过载信号,程序立即封锁所有加热输出,同时把故障代码写到DB3里供触摸屏显示;如果接触器反馈信号和输出指令不一致——比如我让KM1吸合但反馈5秒内没到——判定接触器故障,同样连锁停机并报警。
还有个容易忽略的点:停电恢复逻辑。项目运行中突然停电再来电,如果程序默认重启后直接按自动模式跑,而此时水箱还是高温,加热管直接投上会很危险。我在OB100(启动组织块)里做了初始化,断电恢复后系统进入停止状态,触摸屏上必须操作员重新确认启动,程序才允许再次投入运行。这个设计甲方后来专门表扬过,因为冬天夜里停电再来电,系统不会自作主张恢复加热。
3. 昆仑通态触摸屏组态设计
3.1 设备窗口与变量连接
MCGS组态软件的操作思路和西门子WinCC有很多共通之处,但有自己的习惯:先组设备,再建变量,然后画画面。设备窗口里添加的是S7-300 TCP驱动,通讯参数填PLC的IP地址、机架号和槽号。S7-300的默认机架0槽号2这个参数别填错,填错了通讯就是连不上。
变量连接是触摸屏组态里最关键也最繁琐的环节。我做一个变量对应表,程序里每个重要位和字在触摸屏里都有映射:
| MCGS变量 | 类型 | 对应PLC地址 | 用途 |
|---|---|---|---|
| 运行模式 | 数值 | DB1.DBW0 | 显示当前模式 |
| 水箱温度 | 数值 | DB3.DBW0 | 实时水温 |
| 供水温度 | 数值 | DB3.DBW2 | 实时供水温 |
| 回水温度 | 数值 | DB3.DBW4 | 实时回水温 |
| 目标水温 | 数值 | DB2.DBW0 | 设定目标 |
| 谷电开始 | 数值 | DB2.DBW2 | 时段设置 |
| 谷电结束 | 数值 | DB2.DBW4 | 时段设置 |
| 加热组数 | 数值 | DB3.DBDW6 | 当前投切组数 |
| 手动投切选择 | 数值 | DB2.DBW6 | 手动模式选择 |
| 故障代码 | 数值 | DB3.DBW8 | 报警显示 |
| 系统启动 | 位 | M0.0 | 触摸屏启动按钮 |
| 系统停止 | 位 | M0.1 | 触摸屏停止按钮 |
| 故障复位 | 位 | M0.2 | 故障复位 |
变量建好后,画面的数据就能动起来了。实时值在画面上直接绑定变量地址即可,数值显示用"数值对象",按钮用"位操作"或"数值操作"绑定对应地址。MCGS里有一个细节:位变量在画面上的按钮属性里要选"切换"还是"置位/复位"。启动按钮我用的是置位,停止按钮用的是复位,因为程序里系统启动标志是RS触发器,置位和复位要分开,不能两个都用切换模式。
3.2 画面结构与操作流程
我做了四个主画面:主监控画面、参数设置画面、实时趋势画面、报警与数据记录画面。
主监控画面是操作员每天看得最多的页面。中央放一个锅炉示意图,加热管、蓄热罐、循环泵用线条和色块画出来,运行中用颜色变化表示状态——泵运行时色块变绿,加热管投运时变红。水温数值放在对应位置旁边,模式文字动态显示"峰电放热""谷电蓄热""平段智能"其中之一。操作区放启动、停止、故障复位三个大按钮和手动/自动切换开关。这个画面的原则是一眼能看全,不需要翻页。
参数设置画面是工程师专属页面。除了时段边界,还放了目标温度上限、下限、温差区间、投切间隔这些参数。所有参数设置我都在用户权限里限制了——操作员级别只能查看,工程师级别才能修改。MCGS的用户权限设置支持密码登录,工程里设一个操作员密码一个工程师密码,做项目移交时把工程师密码单独给甲方电气负责人。
设置完参数后不能马上生效,我在画面里加了一个"参数确认"按钮:点击后先读取当前所有设置值,然后触发PLC端一个确认标志M0.3,程序接收后会做一次参数合法性检查,比如谷电开始时间不能等于峰电开始时间,上限温度不超过95℃。参数非法时拒绝采纳并在画面上弹窗提示。
3.3 报警、趋势与数据记录
报警这块我用了MCGS的实时报警和历史报警功能。PLC在DB3.DBW8里写的故障代码是数字量,画面报警显示时要做条件翻译。我在脚本里写了判断逻辑:故障代码为1显示"超温保护动作",2显示"断水故障",3显示"接触器反馈异常",4显示"加热管过载",5显示"通讯中断"。这样操作员看到的是汉字描述,而PLC那边只是一个简洁的数字代码。
实时趋势画面非常重要,峰谷电系统调式初期,我基本就是盯着趋势图在调。趋势曲线绑定了水箱温度、供水温度、回水温度三个变量,横轴4小时,纵轴0到100℃。蓄热过程水箱温度爬升、放热过程水温下降是否平缓,一眼就能看出问题。比如如果供水和回水温差过大,说明循环泵流量不够,末端热量带不出去,单靠调加热组数解决不了问题。
数据记录我用的是MCGS的数据存盘功能。把水箱温度、运行模式、加热组数每10分钟存一条记录,存成CSV文件。积累两三个星期的数据,导出来做能耗分析,谷电时段耗了多少、峰电时段放了多少热,一目了然。这个数据也是项目验收时向甲方证明节费效果的重要依据。
4. CAD电气原理图设计要点
4.1 主回路设计
图纸部分我是用CAD画的,整套图分主回路图、控制回路图、PLC接线图、端子排布图和图纸目录。画图之前先确定一个原则:图纸里的所有元件编号、端子号、线号必须和实物一一对应,这样才能让接线电工不靠猜干活。
主回路比较简单,但是细节不能省。三相电源进来先经过总断路器QF1,然后分三条支路到三组加热管。每条支路串一个接触器KM和热继电器FR,热继电器的整定电流按每组加热管额定电流选。6kW加热管在380V下额定电流约9A,热继电器我选了整定范围8到12.5A的型号,整定在9.5A左右,留了零点几安的余量避免启动时误动作。
加热管是电阻负载,不允许用变频器驱动,接触器和断路器直接控制即可。但接触器的灭弧能力一定要够,电流不大不代表可以随便选,频繁投切对接触器寿命的考验很大,我选的是AC-1负载类型的接触器,额定电流比计算值大一档,选了16A规格。实践证明这个选择正确,改造后用了两个采暖季没换过一个接触器。
主回路的导线截面积也要算。18kW总电流约28A,进线我用6平方毫米铜线,分路到每组加热管电流9A,用2.5平方毫米铜线足够。图纸上线径标得清清楚楚,接线工照图施工不会错。加热管外壳做接地保护,接地线截面按规范不小于相线的一半,我统一用了黄绿双色线并接到总接地排。
4.2 控制回路与PLC接线
控制回路图是这套图纸里信息量最大的。24V直流电源采用开关电源供PLC和继电器线圈;220V交流回路供接触器线圈和报警铃。两套电压系统在图纸上用途例区分,接线时强电和弱电分开走线槽,这是最基本的抗干扰手段。
PLC数字量输入回路的接法是我特别想强调的。我的项目里启动、停止按钮用的是常开触点,24V正极进入按钮,按钮出来接PLC的DI点,DI点内部是漏型输入方式,公共端接24V负极。图纸上公共端标了1M、2M,注意S7-300不同类型的DI模块有源型漏型之分,接线前必须看模块手册确认公共端接法,接反了输入信号灯全亮但逻辑读不到。
数字量输出我用了继电器输出方式。PLC的DO点不直接带接触器线圈,而是先驱动中间继电器KA,再由KA的触点去控制220V接触器线圈。这样PLC和强电回路完全隔离,线圈产生的浪涌不会冲击PLC输出点。中间继电器选的是带指示灯的DC24V型号,线圈两端并联续流二极管,图纸上标明了二极管极性,反了会短路。
控制回路还画了急停回路。急停按钮的常闭触点串在接触器线圈回路里,位置在所有KA触点之前,拍下急停按钮时无论PLC输出什么状态,接触器全部失电。急停回路不经过PLC是标准做法,这条线在图纸上用粗线标出,调试时我也专门验证过。
4.3 通讯与接地图纸细节
RS485通讯和以太网通讯的画法不一样。虽然我这个项目主通讯走的是以太网,但要留一个RS485备用口给后期扩展,我画了RJ45接口和DB9备用口的接线图。以太网部分用屏蔽网线,长度不超过30米走独立的弱电桥架,和动力电缆保持至少20厘米间距。图纸上我用局部放大图画了通讯线两端接头做法,特别是屏蔽层单端接地:PLC这端屏蔽层接设备地,触摸屏这端屏蔽层悬空,两端都接地会形成接地环路,反而引来干扰。
接地图纸是很多半路出家工程师最不爱画的部分,其实特别重要。我在图纸上分了三类地:保护地(PE)、信号地(AGND)、屏蔽地(FE)。PE接地排接所有设备外壳和柜体;信号地单独接到PLC模拟量模块的接地端子;屏蔽地接通讯电缆屏蔽层。三个地最终通过星型结构汇接到柜体总接地点,总接地点和厂房接地网的连接电阻要求小于4欧,这个数值我在图纸的技术说明里专门写明了。
端子排布图也必须画。我用端子排图把PLC每个通道、每个传感器的走线去向标注清楚,每个端子编号和线号对应。现场调试的时候不用对着PLC接线端逐一数,直接看端子排图就能找线,效率高很多。这套图做完,甲方电工自己拿图就能排查线路故障,不用每次都打电话问我。
5. 现场调试记录与典型问题排查
5.1 触摸屏连不上PLC的排查过程
第一次上电调试,触摸屏就显示通讯失败,这是这类项目最常遇到的问题。我按以下顺序排查,每个项目都能适用:
先PING。电脑网线直接插到PLC的PN口,电脑配好同网段IP,PING一下CPU的地址,能通说明物理链路没问题。PING不通,查网线和IP——S7-300的PN口默认IP地址可能不是项目里设的地址,要用STEP7在"在线"模式下把CPU的实际IP读出来对比。我遇过一次CPU地址和触摸屏设置了不同网段,电脑能PING通,但触摸屏里设备窗口配置的IP不对,这个问题不在电脑上查根本发现不了。
通讯参数里机架号和槽号也容易错。S7-300集成PN口的CPU,槽号一般是2,但具体要看硬件配置。我在MCGS设备窗口里填的槽号必须和STEP7硬件配置里CPU所在的槽号一致,填错就是"设备连接失败"。
还有一次是触摸屏软件版本的问题。老版本的MCGS驱动对新的CPU固件兼容性不好,连接建立后报EOF错误。升级MCGS版本的驱动文件后恢复正常。碰见这种问题别先怀疑硬件,先确认软件工具版本是否匹配。
5.2 模拟量跳变和接触器干扰的治理
调试加热投切时发现一个现象:KM2合闸的瞬间,触摸屏上的水箱温度值会突然跳变几度然后又恢复。典型的接触器动作电磁干扰串入了模拟量回路。
排查过程我用了排除法。先把PT100信号线从模拟量模块上摘下来,用信号发生器直接给固定值,此时温度读数纹丝不动,说明模块本体没问题,干扰源来自外部。再看现场布线,PT100信号线是两线制走线槽,和220V动力线有相当一段是平行走向,接触器动作时感应电压进入了信号线。
治理分两步。第一步把PT100改成三线制接法,三线制的抗干扰能力远强于两线制,还能补偿导线电阻引起的误差;第二步把信号线改走独立的金属线槽,和动力线完全分离,线槽两端接地。改完后再试,合闸瞬间温度波动控制在0.1℃以内。干扰问题很多时候不是设备质量问题,而是走线和接地不合理,这个案例可以作为处理模拟量干扰的标准思路。
5.3 峰谷切换逻辑实测验证
程序写完必须做仿真验证,但仿真通过不等于现场没问题。我做了一次完整的24小时切换实测:第一天的谷电时段从22点开始,系统自动进入蓄热模式,水箱温度从56℃一路升到85℃,三组加热管逐台投入,切换间隔5秒,中途温度升到83℃后第一组自动退出,之后温度到上限继续退出第二组,这个"自动降载保温"过程工作正常。
第二天8点切峰电时段,程序判断后立即退出所有加热,只保留循环泵运行。供水温度靠水箱蓄热维持,持续了4个小时水温从61℃降到54℃,仍在可接受范围内。这个结果说明了蓄热水箱的容量选得合理,也验证了时段切换逻辑没有误动作。
中途也发现了一个问题:PLC的CPU时钟走得偏快,运行几天后和真实时间有了几分钟的偏差。几分钟偏差不影响供热,但会影响峰谷切换的准确时刻。我的处理是触摸屏上每周一凌晨自动同步一次PLC时钟,MCGS脚本里写SYNC指令把触摸屏的系统时间写入PLC。这个功能在项目说明书里要求操作员确认启用,避免夏天冬天电价时段调整后时间基准不一致。
5.4 项目复盘的几个实用心得
项目交付后,我整理了几条个人觉得特别有价值的经验:
第一,IO分配表、变量对应表、图纸元件编号,这三样东西在开工前就要确定成一套,后续再改任何一个都牵一发动全身。这次项目初期因为热水温度上限从80改成85,牵扯到梯形图常数、触摸屏变量、图纸端子说明三处同步改,幸好当时文档及时更新,否则现场极易改漏。
第二,保护逻辑宁可设计得"过分"也不能将就。接触器反馈检测和硬线急停,现场当时觉得"系统这么简单不会出事",但后来真的遇到一次加热管老化短路,热继电器和接触器反馈双保险同时动作,系统安全停机,没有扩大损坏。
第三,峰谷电系统的节费效果一定要用数据说话。触摸屏存的数据记录不仅用于调试,也用于给甲方写运行报告。用真实数据复盘,哪段时间蓄热不够、哪个模式切换太频繁,都能通过数据曲线看出来,比靠嘴巴解释有说服力得多。
调试最后一天,甲方电气工程师问我这套系统最复杂的部分是什么。我当时的回答是:程序、画面、图纸单个拿出来都不算难,难的是三者之间的信息完全打通。PLC里的一个变量,在梯形图里是地址,在触摸屏里是显示值,在图纸上是端子号,三处对不上任何一个,调试现场就是无休止的返工。这套项目做下来,最值钱的东西不是设备本身,而是这套从设计到交付的完整映射关系。后面再有类似项目,我还是会沿用这套方法,把配线、程序、画面三张表钉在一起,再复杂的系统也能稳稳落地。