S7-200燃油锅炉控制:步号状态机与EM235/MM440调试
2026/9/17 18:46:00 网站建设 项目流程

简介:这是一份面向自动化、电气工程及其自动化专业学生与PLC初学者、工程实践课程的锅炉控制系统设计文档。围绕PLC与DCS控制思路,以燃油锅炉为对象,涵盖启动停止流程、燃烧异常处理、水位高低控制、油温预热与喷油联动、蒸汽压力监测等典型控制要求,可作为课程设计、实习报告或毕业设计的参考模板。资源包内含1个doc文档,约1.84MB,结构完整,包含实习任务书、技术要求、进度安排、主要参考资料及目录章节,便于直接查阅与二次编辑。文档以实习报告形式呈现,从工程实践目的、意义到技术要求与调试安排均有交代,读者可据此理解燃油锅炉PLC控制系统的整体设计脉络,并复用其中的控制逻辑与报告框架。目前已有195人学习,适合需要快速搭建锅炉PLC控制方案、梳理控制逻辑与撰写设计说明的读者参考借鉴。

1. 燃油锅炉上继电器柜还能用吗:S7-200 方案的第一性理由

一个酒店后勤的 2 吨燃油锅炉,原柜子里是二十多只中间继电器和时间继电器串出来的点火时序。冬天负荷一上来,预热定时器漂个十几秒,点火变压器和瓦斯阀就错拍,轻则不点火,重则爆燃报警。这类现场我见过不止一次,根子不在继电器坏没坏,而在于时序靠 RC 或电磁式延时元件层层堆叠,没有统一时钟,也没有联锁优先级——三四个条件同时成立时,谁的触点先闭合完全看运气。

基于 PLC 的锅炉控制系统把这件事捋直了:一台 S7-200 CPU224 加一块 EM235 模拟量模块,把预热、点火、喷油建立、稳定燃烧、停炉吹扫、水位上下限、蒸汽压力越限、油温水温判断全部写进梯形图,时序交给定时器统一给,联锁用步号管理,谁先谁后有明确顺序。它和 DCS 的边界也很清楚——单台锅炉、几十个 I/O 点,PLC 是更划算的选择;真要十几台锅炉联网做集中监控、还要做趋势和报表,才轮到 DCS 上场。

这套设计的输入输出点不多,但每一个都直接对应安全动作,所以地址表必须先钉死,再谈程序。下面从工艺要求怎么翻译成步号开始拆。

2. 把工艺要求翻译成步号与 I/O 表:锅炉燃烧时序的状态机建模

2.1 从工艺描述到 I/O 地址分配

原始技术要求里有五条硬指标:启动后预热 1min 才点火、点火持续 3s 后喷油、喷油 3s 后关点火变压器和瓦斯阀、停机时鼓风机续吹 15s、水位和蒸汽压力越限要能自动切断并自动重投。这五条全部落在开关量上,模拟量只负责水温和油温判断。先落地址表:

名称代号地址类型说明
启动按钮SF1I0.0数字输入常开,按下启动
停止按钮SF2I0.1数字输入常开,按下停炉
水位上限开关BG1I0.2数字输入浮球开关,到上限闭合
水位下限开关BG2I0.3数字输入浮球开关,到下限闭合
蒸汽压力开关BPI0.4数字输入越限闭合
热继电器BBI0.5数字输入过载时断开
水温变送器AIW0模拟输入4~20mA,量程 0~500℃
油温变送器AIW2模拟输入4~20mA,量程 0~100℃
燃油预热器KF1Q0.0数字输出接触器线圈
鼓风机QA1Q0.1数字输出Y90L-4,1.5kW
点火变压器KF2Q0.2数字输出高压点火
瓦斯阀MB1Q0.3数字输出母火
喷油器电磁阀MB2Q0.4数字输出主油路
进水阀MB3Q0.5数字输出
出水阀MB4Q0.6数字输出
减速信号MB5Q0.7数字输出接 MM440 的 DIN2
变频器给定AQW4模拟输出0~10V 对应 0~50Hz

原始任务书按 5 点开关量输入、7 点输出选的 CPU224,实际接线时把热继电器和变频器故障接点也算进来,14 入 10 出的本机点数仍然留了余量,后面要加火焰检测器或燃油压力开关直接挂扩展模块就行。

2.2 用步号状态机替代定时器串联

最常见的写法是把 T37 串到 T38 再串到 T39,链式往下推。这种写法在只跑一次的顺序控制里没问题,放到锅炉上就出毛病:停机时定时器要逐个复位,漏一个下次启动就少走一段;故障中断后恢复,时间要重新补;调试的时候盯着程序状态看半天也不知道此刻走到哪一步。

我一般用整型变量 VW100 存步号,每一步输出由「运行标志 AND 步号比较」驱动,步转移条件只在一处写。步号用 10、20、30 这种带间隔的编号,后面要在两步之间插一段就插 15、25,不用重排。上电初始化放一段:

// 首次扫描初始化:清步号、清标志、清输出映像 LD SM0.1 // 仅第一次扫描接通 MOVW 0, VW100 // 步号归零,回到待机步 R M0.0, 1 // 清系统运行标志 R M10.0, 1 // 清传感器故障标志 R M10.1, 1 // 清自动重投请求 R Q0.0, 8 // 一次复位 Q0.0~Q0.7,防上电残留输出

R Q0.0, 8从 Q0.0 开始连续复位 8 个位,这是 S7-200 位复位指令带个数的写法,比写八行干净。注意这一步必须放在 OB1 最前面,否则上电瞬间若输出映像里残留上次的置位状态,鼓风机或喷油阀会先动作一下再被清掉。

2.3 步转移条件表

把五条工艺要求拆成八步,每步的进入、输出、退出写清楚,程序基本就是照抄:

步号阶段进入条件该步输出退出条件
0待机上电或吹扫结束全断I0.0 按下且无故障
10燃油预热启动Q0.0T37 到(60s)
20点火预热结束Q0.1 Q0.2 Q0.3T38 到(3s)
30喷油建立点火结束,油温合格Q0.1 Q0.4T39 到(3s)
40稳定燃烧喷油建立结束Q0.0 Q0.1 Q0.4按停止或出现异常
50停炉吹扫停止按钮Q0.1T40 到(15s)后回步 0
60故障吹扫压力或水位越限Q0.1T42 到(15s)后进步 70
70故障待命吹扫结束全断异常消失并确认 5s 后回步 10

这张表的价值在于:调试时只要在状态表里监视 VW100,就知道锅炉走到哪一步,比逐个看定时器位直观太多。

2.4 水位浮球与压力开关的安全侧约定

水位控制的判据容易被写反。浮球开关装在下限位置和上限位置,正常运行时水位在下限之上、上限之下,所以 BG2(下限)是闭合的、BG1(上限)是断开的。于是「低水位」的判据是 NOT I0.3,「高水位」的判据是 I0.2。如果现场用的是常闭型浮球,这两个判据全部要取反。

蒸汽压力开关同理,选越限闭合(常开接点)便于程序直接判断;若用常闭接点,程序里必须取反,否则高压时反而不报警。这个映射关系我建议在接线前写进图纸会签单,别等调试时才发现逻辑反了。停炉按钮和急停另外用常闭接点串进输出回路的接触器线圈,做一层与程序无关的硬冗余。

3. S7-200 梯形图实现:预热 60s、点火 3s、吹扫 15s 的定时器网络

3.1 定时器时基选择与 PT 值换算

S7-200 的定时器分三档时基,选错时基会造成 PT 值溢出或分辨率浪费:

定时器号时基最大定时本设计用途PT 取值
T32、T961ms32.767s短脉冲(备用)
T33~T36、T97~T10010ms327.67s备用
T37~T63、T101~T255100ms3276.7s预热、点火、吹扫600 / 30 / 150

工艺时间全是秒级,选 100ms 时基就够,分辨率 0.1s,误差在允许范围内。用 1ms 时基处理 60s 直接溢出,PT 最大只能到 32767 即 32.767s。换算方式:60s → 600,3s → 30,15s → 150,故障消失确认 5s → 50。

3.2 预热、点火、喷油三段时序

// Network 1:启动——升沿触发,进入预热步 LD I0.0 // 启动按钮 SF1 AN I0.1 // 停止按钮未按下 AN M10.0 // 无未确认故障 EU // 上升沿,只执行一次 MOVW 10, VW100 // 步号 = 10,燃油预热 S M0.0, 1 // 置系统运行标志 // Network 2:预热步输出与 60s 定时 LD M0.0 AW= VW100, 10 // 当前处于预热步 = Q0.0 // 燃油预热器 KF1 通电 TON T37, 600 // 100ms × 600 = 60s // Network 3:预热结束,转点火步 LD T37 AW= VW100, 10 MOVW 20, VW100 // Network 4:点火步——鼓风机、点火变压器、瓦斯阀同时输出 LD M0.0 AW= VW100, 20 = Q0.1 // 鼓风机 QA1 送风 = Q0.2 // 点火变压器 KF2 = Q0.3 // 瓦斯阀 MB1 TON T38, 30 // 持续 3s // Network 5:点火结束,转喷油步 LD T38 AW= VW100, 20 MOVW 30, VW100 // Network 6:喷油步——油温合格才喷油,再持续 3s LD M0.0 AW= VW100, 30 A M0.2 // M0.2 = 油温高于 25℃ = Q0.4 // 喷油器电磁阀 MB2 TON T39, 30 // 3s // Network 7:建立稳定燃烧 LD T39 AW= VW100, 30 MOVW 40, VW100 // Network 8:稳定燃烧步输出 LD M0.0 AW= VW100, 40 = Q0.0 // 预热器保持 = Q0.1 // 鼓风机保持 = Q0.4 // 喷油泵保持

逻辑说明:每个输出都串了运行标志和步号比较,步号一跳走输出自动断开,不需要在别处补复位指令,这是步号法最省心的地方。Q0.2 和 Q0.3 在步 40 不参与输出,等效于「持续 3s 后点火变压器和瓦斯阀同时关闭」。

参数说明:T37 的 PT=600 对应工艺要求的 1min;T38、T39 的 PT=30 对应 3s。注意 Network 6 里 M0.2 串在输出上,如果油温不合格,Q0.4 不输出但 T39 照样计时,3s 后步号仍然会跳到 40——这是一个真实的坑,正确做法是把 T39 的使能也串上 M0.2,或者在步 30 加「T39 到且 M0.2 为 1」才转移。锅炉现场宁愿多等几秒,也不能让程序记录成"已喷油"。

3.3 停机吹扫与故障联锁

// Network 9:停止按钮——进入停炉吹扫步 LD M0.0 A I0.1 EU MOVW 50, VW100 // Network 10:吹扫步只保留鼓风机,15s LD M0.0 AW= VW100, 50 = Q0.1 // 预热器、喷油泵均已断开 TON T40, 150 // 15s // Network 11:吹扫结束,回待机 LD T40 AW= VW100, 50 R M0.0, 1 MOVW 0, VW100 // Network 12:异常联锁——压力越限、水位越限 LD I0.4 // 蒸汽压力开关 BP 越限 O I0.2 // 水位到达上限 ON I0.3 // 水位低于下限(下限开关断开) A M0.0 // 仅运行中才判 EU MOVW 60, VW100 // 进入故障吹扫步 S M10.1, 1 // 记下需要自动重投 // Network 13:故障吹扫步 LD M0.0 AW= VW100, 60 = Q0.1 TON T42, 150 // 15s 后停风 // Network 14:吹扫结束进故障待命步 LD T42 AW= VW100, 60 MOVW 70, VW100 // Network 15:异常消失并确认 5s,自动重新点火 LD M10.1 AN I0.4 AN I0.2 A I0.3 TON T41, 50 // 5s 防抖确认 LD T41 AW= VW100, 70 MOVW 10, VW100 // 回预热步,完整重走点火程序 R M10.1, 1

逻辑说明:故障时不是简单地把输出拉低,而是切到吹扫步把炉膛里残余可燃气体吹出去,再进待命步。压力或水位信号在现场经常抖动,所以重投前加了 5s 确认延时,避免压力开关一抖就反复点火。重投时回到步 10 而不是步 20,因为重新点火必须重新预热燃油,否则雾化不良。

3.4 水位控制与喷油泵双速切换

// Network 16:低水位——开进水阀、关出水阀 LDN I0.3 // 水位低于下限 S Q0.5, 1 // 进水阀 MB3 打开 R Q0.6, 1 // 出水阀 MB4 关闭 // Network 17:高水位——开出水阀、关进水阀 LD I0.2 S Q0.6, 1 R Q0.5, 1 // Network 18:水温高于 90℃,发减速信号 LD M0.0 AW= VW100, 40 AW> AIW0, 11008 // 90℃ 对应数字量,标定见第 4 章 = Q0.7 // 送 MM440 的 DIN2,切到低速段 // Network 19:油温高于 25℃ 才允许喷油 LDW> AIW2, 12800 // 0~100℃ 量程,25℃ 对应 12800 = M0.2

逻辑说明:水位用置位/复位成对写,进水阀和出水阀互锁,不会出现两个阀同时开的工况。这里用 S/R 而不是直接输出,是因为液位控制本身有滞后,阀门需要保持状态直到对侧开关动作。

参数说明:11008 和 12800 是模拟量换算后的阈值,不是随意取的数——90℃ 在 0~500℃ 量程下对应 11008,25℃ 在 0~100℃ 量程下对应 12800。等第 4 章标定程序跑通后,建议把这两个判断改成浮点比较(LDR> VD200, 90.0),可读性更好,也免得别人改量程时忘记同步改常数。

4. EM235 标定与 MM440 调速:4~20mA 到工程量的换算与参数设置

4.1 EM235 量程配置与接线注意

EM235 是 4 路模拟输入加 1 路模拟输出,量程由模块侧面的 SW1~SW6 拨码决定,SW6 区分单极性和双极性。常用的几档:

输入方式SW1SW2SW3SW4SW5SW6数字量范围
0~5VONOFFOFFOFFONON0~32000
0~10VOFFONOFFOFFONON0~32000
0~20mAONOFFOFFONONOFF0~32000
4~20mAOFFONONONONOFF6400~32000

本设计两块变送器都是 4~20mA 接法,所以拨到 4~20mA 档,输入范围是 6400~32000 而不是 0~32000,这个偏移量是所有换算的基础,搞错就会出现「水还没烧就有温度」。

两个容易被忽略的点:拨码开关必须在断电状态下改,上电后改不生效;没用到的输入通道不能悬空,要把 IN+ 和 IN- 短接并接到 AGND,否则悬空通道读数乱跳,还会通过内部电路影响相邻通道。

4.2 模拟量标定程序

标定公式按线性插值写:

工程量 = (N - 6400) × (量程上限 - 量程下限) / (32000 - 6400) + 量程下限

水温量程 0~500℃,每 1℃ 对应 51.2 个数字量;油温量程 0~100℃,每 1℃ 对应 256 个数字量。程序按「整数 → 双整数 → 实数」的顺序做,别直接用整数乘除,500 乘上去立刻溢出 32767。

// 水温通道 AIW0:4~20mA,量程 0~500℃ LD SM0.0 ITD AIW0, VD100 // 整数 → 双整数,保留符号位 DTR VD100, VD104 // 双整数 → 实数 -R 6400.0, VD104 // 扣掉 4mA 对应的零点偏移 *R 500.0, VD104 // 乘量程上限 /R 25600.0, VD104 // 除以满量程宽度(32000-6400) MOVR VD104, VD200 // VD200 = 水温,单位 ℃ // 油温通道 AIW2:4~20mA,量程 0~100℃ LD SM0.0 ITD AIW2, VD108 DTR VD108, VD112 -R 6400.0, VD112 *R 100.0, VD112 /R 25600.0, VD112 MOVR VD112, VD204 // VD204 = 油温,单位 ℃ // 用于变频器给定的水温偏差运算 LD SM0.0 MOVR 90.0, VD300 // 水温给定值 -R VD200, VD300 // VD300 = 90 - 实测水温 *R 640.0, VD300 // 每 1℃ 偏差给 640 个数字量,约 1Hz ROUND VD300, VD304 // 实数 → 双整数,四舍五入 DTI VD304, VW306 // 双整数 → 整数 LDI>= VW306, 32000 MOVW 32000, VW306 // 上限钳位,防止溢出 LDI<= VW306, 0 MOVW 0, VW306 // 下限钳位 MOVW VW306, AQW4 // 送 MM440 模拟量输入

参数说明:-R 6400.0, VD104在 S7-200 里执行的是 VD104 减去 6400.0 后回存 VD104,不是把 6400 减掉 VD104,方向别弄反。ROUND 是把实数四舍五入成双整数,再经 DTI 转成 16 位整数才能写给 AQW4。钳位那两行是关键——如果水温高于 90℃,偏差变负数,不加下限钳位就会把负数写进 AQW4,模拟量输出模块按补码解释,变频器会收到满速信号,方向正好相反。

4.3 MM440 参数组与给定通道

喷油泵用 MM440 调速,主机参数按 1.5kW、380V 的 Y90L-4 填:

参数设定值含义
P00033访问等级:专家
P0100050Hz 制,功率单位 kW
P0304380电动机额定电压 V
P03053.7电动机额定电流 A,按铭牌填
P03071.5额定功率 kW
P031050额定频率 Hz
P03111400额定转速 r/min
P07002命令源:端子排
P10002频率设定源:模拟量输入
P10800最小频率
P108250最大频率
P112010加速时间 s
P112110减速时间 s
P07011DIN1:ON/OFF1
P070215DIN2:固定频率直接选择
P100125固定频率 1,低速段 25Hz
P10161固定频率选择模式:直接选择

Q0.7 接 MM440 的 DIN2,用它切换固定频率 P1001;AQW4 接模拟量输入做连续微调。这两路不要同时启用——P1000 切到模拟量给定时,DIN2 又去选固定频率,最终频率取决于 MM440 内部的叠加规则,现场调起来会莫名其妙。稳妥做法是要么纯模拟量给定,要么纯多段速,二选一。

只有一台变频器时用模拟量最省事;如果后面要一条 RS485 总线挂多台 MM440,就得换 S7-200 的 USS 协议库,用 USS_INIT、USS_CTRL、USS_RPM_W 读写参数,变频器侧配 P2010 波特率、P2011 站号、P2012/P2013 的 PZD 长度、P2009 数据格式。多机轮询时注意给每台留足响应超时,S7-200 的 USS 库一次只处理一个从站,扫描周期会被拉长,锅炉这种安全相关回路建议把通讯参数和联锁参数分开写,别把联锁挂在通讯回来的位变量上。

4.4 断线检测与电源抗干扰

4~20mA 断线时 EM235 读数会掉到 0 附近,程序如果不判就会当成「0℃」,水温永远偏低,喷油泵一直高速跑。加一条断线检测:

// 模拟量断线检测:低于 4mA 对应值判为传感器故障 LDW< AIW0, 6400 O AIW2, 6400 // 两路任一断线 S M10.0, 1 // 置故障标志,参与启动联锁

电源侧按原设计用隔离变压器给 PLC 供电,S7-200 自带的 24V 传感器电源容量不够时加外部 24V 电源,但两个电源不能并联,公共端 M 要连在一起。模拟量信号线用屏蔽双绞线,屏蔽层单端接地;变频器输出电缆和模拟量线分槽走,交叉处尽量垂直,这几条做到位,AIW0 的读数波动通常能从几十个字降到个位数。

5. 上机调试与故障定位:状态表监视、强制输出与组态联调

程序写完之后不要急着接负载,先在 STEP 7-Micro/WIN 里用状态表把时序跑一遍。监视 VW100、T37、T38、T39 四个量,就能完整看到步号从 10 跳到 20 再跳到 30、40 的过程。定时器在状态表里可以直接看当前值,比看触点状态直观。

调试分三段做:第一段只接指示灯,验证时序;第二段接中间继电器和接触器线圈,验证负载动作顺序;第三段接传感器和变频器,验证模拟量和联锁。第二段最容易发现问题——如果某个接触器吸合时 PLC 突然复位,基本是线圈没加浪涌抑制,在接触器线圈两端并 RC 阻容或压敏电阻就能解决。

现象常见原因排查动作
上电后鼓风机瞬间动作一下输出映像残留,初始化没清输出检查 SM0.1 里的复位段是否在最前
预热结束不点火T37 使能未串运行标志,或 PT 值写成 6监视 T37 当前值是否递增
喷油步跳过后无油油温阈值与标定不匹配状态表读 AIW2 实际数字量
停机后鼓风机不吹扫停止信号被步号条件屏蔽检查步 50 的进入条件
水温显示负数4~20mA 档位拨错成 0~20mA核对 SW1~SW6 并断电重启
变频器频率反向AQW4 未做下限钳位监视 VW306 是否为负值

用 MCGS 做组态画面时,通过 PPI 电缆读 VW100 做工艺流程图动画,读 VD200、VD204 显示水温油温,几个关键输出点用 Q 区地址映射指示灯。组态画面里的按钮不要直接写 I0.0,I 区在 S7-200 里是只读的过程映像,要用 M 区或者 V 区中间变量,在程序里把中间位并到启动逻辑上。

最后一个技巧:把每种故障现象和当时的 VW100 步号一起记进调试日志。锅炉系统的偶发故障往往几个月才出一次,等到再出问题时,能拿当时的步号去反查是哪个转移条件没满足——这一步比事后翻程序快得多。现场调试时如果模拟量读数一直抖,先用一根短接线在 EM235 端子上把 IN+ 和 IN- 短接,看读数能不能稳定在 6400 附近,能稳定就是现场传感器或走线的问题,不能稳定就是模块量程拨码或供电的问题,这样一刀切下去,排查方向立刻就窄了。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询