1. 系统整体框架与设计思路
1.1 楼宇消防系统到底要控制些什么
提到楼宇消防,很多刚入行的工程师第一反应是火灾报警控制器,觉得那东西又复杂又封闭。实际做电气控制设计久了就会发现,在不少中小型楼宇项目里,用PLC做消防联动控制反而比传统报警控制器灵活得多。这套方案用西门子S7-200 PLC做下位机,负责采集探测器、手报、压力开关、水流指示器、防火阀等信号,输出启停消防泵、排烟风机、送风机、防火卷帘、切断非消防电源、电梯归底等指令;组态王做上位机,把整套设备状态、报警信息、操作记录实时展示出来。所谓“电气控制设计”,核心就是把工艺需求变成I/O表,再变成接线图、梯形图、组态画面,最后通过现场调试让整个系统按照防火规范动作。
楼宇消防系统不只是“报个警”那么简单。从使用场景看,至少需要覆盖几大块:消火栓系统(消火栓泵、屋顶稳压泵、阀门状态)、喷淋系统(喷淋泵、水流指示器、压力开关、湿式报警阀)、机械排烟与正压送风系统(排烟风机、送风机、280℃防火阀、70℃防火阀)、防火分隔设施(防火卷帘门、挡烟垂壁)、应急照明和疏散指示,以及火灾确认后的非消防电源切断、电梯迫降、消防广播切换。这些子系统之间动作有先后、延时、互锁关系,用继电器搭积木会越搞越乱,用PLC就是最合适的方式。
1.2 为什么选用S7-200 PLC + 组态王而不是其他方案
这套组合在工控圈里算是“国民CP”了。西门子S7-200虽然诞生很多年,可它的稳定性和易用性至今没有过时,CPU模块自带数字量I/O,不够用就挂EM221、EM222、EM223扩展模块,最多支持到一定程度的小系统足够用。指令集精简,定时器、计数器、置位复位、跳变沿指令处理消防逻辑很顺手。更重要的是,S7-200通过PPI协议可以和组态王直接通讯,不需要额外买通讯卡,一根PC/PPI电缆或USB-PPI电缆就能搞定,成本很低。
组态王这边,图库里有大量消防、电气元件图元,比如烟感、喷淋头、消火栓、双速风机、电机、阀门、指示灯,拖拽就能拼出楼宇平面图。变量关联、报警窗口、历史报表、权限管理这些功能也比较成熟,国内存量项目用得多,后期维护起来,物业和工程公司都熟悉。相比之下,如果是大几百上千点的大型建筑群,可能要考虑西门子S7-1500加WinCC架构,但对大多数单栋办公楼、商场、医院、学校来说,S7-200和组态王的方案性价比非常突出。现在新项目也常见S7-200 SMART,性能和通讯上更强,后面我会单独说升级路径。
2. 电气控制设计核心:从I/O表到联动逻辑
2.1 I/O点表规划:先数清楚设备再画图
设计一套楼宇消防PLC控制系统,第一步不是写程序,而是统计I/O点。我每次做项目都习惯把建筑图纸和消防水图摊开,逐一数设备,用Excel列点表,这个表就是后续所有工作的地基。点表应该包括:信号名称、设备位置、信号类型(DI/DO/AI/AO)、接线端子号、PLC地址、报警属性、供电方式。
拿一个标准的中型办公楼的消火栓和喷淋系统举例:
- DI输入:消火栓按钮(每个栓箱一个,一般用无源常开触点)、消防泵手动/自动状态、喷淋泵手动/自动状态、泵故障(热继常开)、泵运行状态(接触器辅助常开)、消防水池液位低、屋顶水箱液位低、湿式报警阀压力开关、水流指示器(每层一个)、信号蝶阀(每层一个,反馈阀位)、稳压泵状态、双电源切换状态、排烟风机手动/自动状态、防火阀熔断信号、手动火灾报警按钮、烟感/温感手报联动信号等。
- DO输出:消防泵启动、喷淋泵启动、主泵/备泵选先逻辑(不是物理DO)、排烟风机启动、送风机启动、防火卷帘下降、防火卷帘半降、消防广播切换、非消防电源切除、电梯迫降、声光报警器。
- AI模拟量:消防泵出口压力、喷淋泵出口压力、水池液位(如果有液位计)。
统计完大约DI有40~50点,DO有15~20点,AI有4~6点。设计时一定要留冗余,建议实际I/O点数再放大15%~20%,扫地留到后面改逻辑,谁用谁知道。表1是一个简化示例:
| 区域 | 信号名称 | 信号类型 | PLC地址 | 说明 |
|---|---|---|---|---|
| 车库 | 烟感1报警 | DI | I0.0 | 无源干接点 |
| 1层 | 消火栓按钮1 | DI | I0.1 | 常开脉冲 |
| 消防泵房 | 消防泵1运行 | DI | I0.2 | 接触器辅助触点 |
| 消防泵房 | 消防泵1故障 | DI | I0.3 | 热继/塑壳报警 |
| 消防泵房 | 消防泵启动 | DO | Q0.0 | 中间继电器控制 |
| 消防泵房 | 喷淋泵启动 | DO | Q0.1 | 中间继电器控制 |
| 风机房 | 排烟风机1启动 | DO | Q0.2 | 联动防火阀 |
2.2 主电路设计与PLC接线注意事项
点表定了之后,电气控制设计就落到主回路和控制回路。消防泵、喷淋泵属于一级负荷,一般要求双电源供电,末端自动切换,这在系统图里必须画清楚。泵的功率在30kW以下我习惯用直接启动,超过30kW用星三角启动或者软启动器,条件好一点的项目会配变频器。不管用哪种启动方式,PLC的DO输出都不能直接带接触器线圈,必须通过中间继电器隔离,因为PLC输出继电器触点容量通常只有2A,感性负载容易打火烧触点。中间继电器线圈电压选用220V AC或者24V DC都行,尽量统一用24V DC。
接线时的几个关键细节:PLC输入信号一定要是无源干接点,特别强调“干接点”三个字,因为不少传感器厂家会输出带电压的触点,直接接PLC输入可能烧电路。我以前遇到过现场的水流指示器输出带24V电压,就因为没有隔离,导致一个8路输入模块烧掉。正确的做法是信号端经过继电器隔离,触点送给PLC。另外,PLC的输入公共端要根据信号源接法配置成PNP或NPN,S7-200 CPU默认输入是漏型/源型可通过接线选择,我这边的经验是全部用无源触点,公共端接24V负,输入点接正,防止外部干扰。
主回路里,消防泵需采用“一用一备”方式,所以控制回路要设计主备泵切换,切换方式可以是PLC程序内部判断,也可以在柜门上装转换开关。我更喜欢在PLC程序里做,这样能看清楚当前主泵状态,也方便组态王远程切换。控制回路的二次线用1.5mm²的BV线,PLC柜内线槽走线要整齐,强弱电分槽,避免变频器和PLC通讯线搅在一起。
2.3 联动控制逻辑怎么编:手自动、延时、互锁
S7-200的梯形图我一般按功能块组织:主程序OB1里调用“消火栓泵控制”、“喷淋泵控制”、“排烟风机控制”、“防火卷帘控制”、“电梯归底控制”等子程序。每个子程序内部必须包含三大块:手动/自动切换、条件判断、动作输出。手动状态下,PLC输出地址由柜门按钮直接控制,PLC只做监视;自动状态下,PLC根据输入信号执行逻辑。手动/自动切换信号用硬件继电器互锁,避免PLC逻辑和按钮抢控制。
以消火栓泵控制为例,自动条件下的启动逻辑是:消火栓按钮动作(I0.1)或消防联动信号(烟感+手报确认)为真,且泵允许启动(无故障、无水流异常),则置位主泵启动Q0.0;如果主泵故障反馈I0.3在启动指令发出3秒后仍未消除,则复位主泵,置位备用泵。停止条件是:消火栓按钮复位(由按下后的确认信号),或者消防确认结束。实际上消防泵启动后是不能随便停的,规范要求消火栓泵一旦启动,需要通过泵房手动按钮复位,所以程序里“停止”权限要在泵房现场。
排烟风机逻辑会复杂一点:烟感信号触发后,先打开对应防烟分区的排烟口(电动阀),排烟口全开反馈到位后,启动排烟风机;当280℃防火阀动作时,必须立即关停风机。这里需要加入延时,防止排烟口未到位就启动风机导致憋风。我用定时器T37延迟3秒。程序核心大致是这样:
Network: 排烟风机自动启动 A 自动方式 A M0.0 (排烟分区报警) A M0.1 (排烟口全开) S Q0.2, 1 // 启动排烟风机 Network: 防火阀动作停止 A I0.4 (280℃防火阀熔断) R Q0.2, 1 // 停止排烟风机这种逻辑属于基础,但很关键。防火卷帘的控制分为两步:报警后先半降,延时30秒后全降。半降由防火墙两侧的烟感信号触发,全降由温感信号触发或者30秒延时到。电梯归底和非消防电源切除一般需要在火灾确认信号后延迟10秒执行,保证人员疏散。所有这些互锁、延时都要在手动状态下同样有效,否则验收时模拟联动测试会卡住。
3. 组态王监控界面设计与数据采集
3.1 S7-200与组态王通讯连接配置
组态王和S7-200通讯,常用方式是PPI协议。硬件上需要一根PC/PPI电缆,或者USB-PPI编程电缆。组态王支持两种途径:一是直接选择组态王设备驱动中的“西门子 S7-200(PPI)”,通过串口驱动;二是通过西门子的PC Access软件把S7-200的数据做成OPC变量,组态王作为OPC客户端去读取。对大多数项目,直接选PPI驱动最简单,我这里分享直接连的做法。
在组态王工程浏览器左侧“设备”下,“串口”的COM口定义里新建设备,选择PLC类型为“西门子 S7-200”、通讯方式“PPI”,然后设置COM参数。S7-200的PPI波特率默认是9600,8数据位、偶校验、1停止位。PLC侧的站地址默认为2,组态王设备地址也填2。这里有个很容易踩的坑:组态王使用的是自己安装的“西门子S7-200.dll”驱动,某些驱动版本只支持英文变量名,变量名不能带中文,否则通讯时报错。我现在习惯所有PLC内变量命名都用英文或拼音缩写,组态王画面的文字用注释来做,这样就通用了。
连接前还要确保PC串口不被占用,比如USB转串口线需要装驱动,组态王里设置的串口号要和系统设备管理器里的串口号一致,否则一直显示“打开串口失败”。如果用的是USB-PPI电缆,推荐使用西门子原装线,组态王能识别;山寨线经常出现通讯时断时续,除了干扰还有一种情况是PLC和组态王同时访问同一个串口,必须关闭Micro/WIN软件才能连组态王。这些细节都是现场用时间换来的教训。
3.2 数据词典与变量登记
组态王画面要想生动,必须先在数据词典里定义好变量。我习惯把变量分成两类:I/O变量和内存变量。I/O变量对应PLC中的I区、Q区、M区、V区;内存变量用于界面内部的切换,比如页面切换标志、操作员登录状态。S7-200没有DB块,所有数据都放在V存储区里,所以与PLC交换的数据通常用V区地址,比如VW100、VW102作为模拟量通道。
一个典型变量表大概长这样:
| 组态王变量名 | 数据类型 | 寄存器 | 读写属性 | 说明 |
|---|---|---|---|---|
| XF_Control | 离散 | Q0.0 | 读写 | 消防泵启动输出 |
| FB_FB2 | 离散 | I0.3 | 只读 | 消防泵2故障反馈 |
| WaterLevel | 整型 | VW100 | 只读 | 水池液位(0-1000) |
| AutoMode | 离散 | M0.0 | 读写 | 自动方式信号 |
| Fire_Alarm | 离散 | I0.7 | 只读 | 火灾确认报警 |
定义变量时寄存器类型别忘了勾选,离散点选“BIT”,整型模拟量选“SHORT/USHORT”。在S7-200中,位地址对应“I0.0、Q0.0、M0.0”,字地址对应“VW100、VW102”。如果通讯不上,首先检查变量地址是否有越界,S7-200的V区默认很大,但组态王驱动不一定能读所有位。
3.3 画面制作与图库应用
组态王的画面是整个系统给甲方的第一印象,也是日常运维最重要的界面。我从不让画面做得花里胡哨,而是按楼层平面图为底图,把探测器、手报、消火栓、泵、风机、阀门一个个摆上去。制作时优先利用图库管理器,里面有个“消防图库”分类,包含了很多标准消防设备图形。没有合适图元时,可以用基本图元组合:用圆形加文字做烟感,用矩形加三角形做消防栓。
动画连接是关键。比如选中一个“消防泵运行”指示灯,在动画连接里选“颜色”,设置表达式为“\本站点\XF_FB1_Run==1”,条件为真时显示绿色,假时显示红色。一个误报警的烟感,要让它的图标闪烁,可以在动画连接里勾选“闪烁”,表达式设为报警变量。按钮同理,用“按下”命令语言:
\\本站点\\XF_Control = !\\本站点\\XF_Control;画面做好后,记得添加报警窗口。组态王的报警系统需要在“报警组”里建立变量报警组,然后定义I/O变量的报警属性,比如离散量的“报警延时”设为2秒,防止信号抖动频繁弹窗。历史趋势曲线用“趋势曲线”控件,绑定液位、压力等模拟量,方便查故障。最后别忘了做操作权限:泵启动按钮设置为管理员权限,普通操作员只能观看,这个属于消防安全的底线。
4. 现场调试与常见问题排查实录
4.1 调试流程:先单点再联动
现场调试是整个项目最磨人的阶段,也是真正积累经验的地方。我有一套固定流程,能减少大量返工。
第一步,硬件打点。断电后把每一位输入点用短接线短接,然后在组态王或PLC监控软件里看对应的I点状态是否变化。输出点的测试要断开负载,用万用表量PLC输出继电器的通断,确认每个DO都能正常动作。这一步发现接线错误最直接。
第二步,PLC程序模拟。把CPU拨到STOP或者用单次扫描模式,把输入信号强制置位/复位,观察输出逻辑是否符合预期。这里要注意,消防泵、风机的启动输出在模拟时不要真的启动电机,可以脱开主回路或把控制电源断开。
第三步,单点联动测试。恢复主回路但要保证没有人员在泵侧作业,手动一个一个触发:按下消火栓按钮,看PLC是否收到、组态王是否变色、消防泵接触器是否吸合;触发烟感报警,看排烟口是否打开、风机是否启动。每个单点测试都要记录。
第四步,整体联动测试。模拟火灾场景,同时触发多个探测器,观察整套系统是否按时间顺序动作——电梯是否归底、非消防电源是否切断、防火卷帘是否半降/全降、消防广播是否切换。这一步通常需要消防检测公司配合,动作时间用秒表记录,和楼宇自控的联动逻辑对照。所有测试完成后,把模拟信号复位,确认系统能回到正常状态。
4.2 常见问题与排查速查表
现场调试高频问题,我整理了一个速查表,都是实打实遇到的:
| 现象 | 可能原因 | 排查思路和解决 |
|---|---|---|
| 组态王连不上PLC | 串口占用、驱动未安装、PLC站地址不对 | 关掉Micro/WIN软件;检查设备管理器的串口号;设备地址改成2;看电缆上的拨码开关 |
| 组态王变量显示“#” | 变量没有连接到设备或通讯中断 | 打开“设备在线监视”,看设备是否存在;检查变量寄存器地址 |
| PLC下载程序失败 | 通讯速率不匹配、CPU State停在RUN | 把CPU拨到STOP再下载;检查通讯电缆;Micro/WIN里选择“PPI” |
| 输入点受干扰乱跳 | 传感线过长或动力线并行走线 | 信号线用屏蔽双绞线,单端接地;输入公共端加滤波电容;改用带隔离的中间继电器 |
| 输出点烧掉 | 负载电流大或感性负载没有灭弧 | 输出必须经中间继电器;感性负载(接触器线圈)并联续流二极管或RC吸收 |
| 主泵先启动备用泵不投 | 故障信号取错,没有延时切换 | 检查故障输入点是否为常开触点;程序里加5秒延时,启动后先监测泵是否建压 |
| 防火阀动作后风机还能启动 | 程序里没做防火阀互锁 | 把防火阀熔断信号作为启动条件的常闭点,并用置位/复位锁存 |
| 液位信号在组态王显示乱跳 | 模拟量信号源接地或接线脱落 | 液位计输出电流信号,屏蔽层接地;PLC侧并联250Ω电阻转电压信号 |
4.3 消防联动设计的独门避坑点
调试完之后,还有几个设计层面的大坑,很多人画完图才发现。
第一,消防泵房是双电源切换,PLC的24V电源也一定要双路。我遇到过检修时切换双投开关,PLC瞬间掉电,程序全部丢失(老款S7-200带电池还好,但扩展模块需要初始化),会造成很大的麻烦。解决方案是加装UPS给控制器供电,至少保证报警信息和操作记录不丢。
第二,主备泵切换的反馈信号要正确。接触器反馈只是“线圈吸合”不代表泵真正运转,还要看压力开关是否建压。我给S7-200加一个模拟量模块接压力变送器,程序判断启动5秒后压力仍为零,就判定为“泵故障”,自动切换到备用泵。这个逻辑能真实保护建筑供水。
第三,消防泵和喷淋泵的启停,千万不能做成普通阀门那种“按一下启动再按一下停止”的模式。消火栓泵一旦启动,只有泵房现场的和消防控制室的按钮可以强制停止,组态王远程停止权限必须严格限制,否则误操作会导致消防管网失压。权限分级,是这套系统安全性的底线。
第四,烟感和手报信号,如果用PLC直接采集,需要加隔离模块,而且要确保手报按下后能维持信号直到复位,有些手报是脉冲信号,S7-200的输入扫描周期可能丢失,这时要把按钮信号和PLC的保持位配合,用置位指令锁存,再用专门复位按钮恢复。
5. 从S7-200到S7-200 SMART:这套设计的升级路径
现在还有一个现实问题:老项目用的是S7-200,备件越来越难买,新项目越来越多直接用S7-200 SMART。很多用户问,如果衣柜里电控系统淘汰了,能不能直接换PLC,不重新设计。我的经验是:S7-200和S7-200 SMART的硬件接线完全不同,不能直接互换,但程序逻辑可以平移。
S7-200 SMART在楼宇消防项目里优势明显:CPU本体自带有网口,可以和组态王通过以太网通讯,不再依赖PC/PPI串口线,抗干扰能力好得多。在组态王里,需要选择“S7-200 SMART”驱动,以太网地址填CPU的IP,比如192.168.1.10。通讯速度比PPI快很多,画面数据刷新更流畅。程序移植时,只需要把S7-200的地址映射到SMART,比如原来的VW100,仍然可以是VW100,定时器、计数器的功能基本兼容,但指令块(比如加减速、PID)细节有区别。如果还想用变频器控制消防泵做恒压供水,可以通过S7-200 SMART的RS485口,用Modbus RTU和ABB或三菱变频器通讯,这在网上有很多案例,例如用Modbus指令读写变频器的正反转状态和运行频率。不过消防泵毕竟是紧急设备,通讯控制只作为辅助,硬接线启动仍然要保留。
至于再往上走,像S7-1200、S7-1500配WinCC,那是大型综合体和超高层建筑的选择。组态王本身也支持西门子以太网OPC,但一旦项目点数超过几百点,还是建议直接上TIA Portal和WinCC,监控画面更精致,服务器冗余和审计追踪更完整。不过对我个人来说,中小型楼宇消防项目,S7-200 SMART加组态王6.60,依旧是性价比和稳定性平衡得最好的方案,图库、报警、报表、权限这些功能,足够应对日常运维。
6. 写在最后
做了这么多消防项目,我个人实际体会是,楼宇消防系统的核心不在上位画面多漂亮,而在PLC内部那几条硬逻辑——主备泵切换、防火阀联动、手自动权限、反馈信号复位。把这些死死做好,再配一个干净直观的组态王界面,就是一个能过验收、能保命、不至于天天误报的实用系统。最后分享一个小技巧:编程时把每一个输入输出点按“区域编号”写清楚,注释里写中文全称,比如“1F_TF_280_FireDamper_A”,后期改逻辑和排查故障,能省一大半时间。这一行就是这样,细节里全是大坑,多留一分余量,现场就能少熬一个通宵。