矿井通风系统大概是整个矿井里最不能被断电、最不能拍脑袋停的一套设备。之前很多老矿的做法是“风机一开就跑一年”,无论井下有没有人、瓦斯浓度高不高,主扇一律工频50Hz运行。这么做安全是安全,但电费实在扛不住,而且对电网冲击也大。这几年做自动化改造,我接手过好几套这样的项目,最典型的配置就是S7-200 PLC加组态王,把原来的工频直启改成变频联动、按需通风。
这篇内容适合正在做矿井自动化改造、风井无人值守或者想把手动通风改手自一体的工程师朋友。核心思路不复杂:用瓦斯、风压、温度传感器采集井下环境信号,交给S7-200做逻辑判断,输出给变频器调风机转速,再用组态王把整个过程做成可视化监控界面,该报警报警、该记录记录。下面把我在实际项目中用到的策略、参数、程序和踩过的坑都展开讲一遍。
1. 项目背景与整体思路
1.1 老矿井通风系统的痛点
在我接触过的几个改造项目里,老系统的问题几乎是复制粘贴出来的:
- 风机长期工频恒速运行,井下风量过剩,电能白白浪费。一台55kW主扇一年下来电费相当可观,工频直启那下冲击电流更是让供电系统叫苦。
- 操作员只能靠现场电流表、风压表来判断风机状态,井下的瓦斯浓度、风门状态全靠人工去抄,信息滞后严重。
- 主扇和备用风机切换靠人工倒闸,流程繁琐,赶上半夜风井出问题,等值班员跑过去基本已经过了半小时。
- 完全没有历史数据,出了事故只能翻纸档,想分析瓦斯涌出规律根本无从下手。
这些问题其实都指向同一个结论:通风系统需要能根据井下实时参数自动调节,需要远程可控可监视,需要把安全策略固化进逻辑里而不是靠人盯着。
1.2 为什么要用S7-200加组态王这套组合
选型阶段不是没想过用S7-1200、S7-1500,甚至用国产PLC。但这里有个很现实的问题:很多老矿井的配电室还留着当年的S7-200,库里也有一堆备件,电工师傅对这套系统熟得很。在一个以稳定为第一诉求的场景里,S7-200足够可靠,编程软件Micro/WIN上手也快,配套的EM231模拟量模块价格便宜量又足。再加上组态王是老牌国产组态软件,PPI驱动成熟,和S7-200通信几乎零障碍,画面开发效率比用WinCC在小项目里还顺手。
另外,S7-200的PPI通信不需要额外组网卡,直接用PC/PPI电缆就能和组态王通讯,对现场调试来说非常友好。我不需要改现场任何配线,就能把主扇的启停、频率、电流、瓦斯值全部搬到上位机。这个优势在改造项目里太重要了,原有继电器回路保留作为硬手操后备,新加的PLC控制回路在旁边并联,大不了切换回去用老方式开风机,矿方也愿意接受这种渐进式改造。
1.3 系统总体架构与数据流
整个系统分三层:现场设备层、控制层、监控层。
- 现场设备层包括瓦斯传感器、负压传感器、温度变送器、风门限位、变频器、风机以及对应的接触器、断路器等。
- 控制层就是S7-200 PLC,负责采集数字量和模拟量信号,执行通风策略逻辑,输出启停和频率给定信号。
- 监控层是组态王,运行在地面调度室的工控机上,通过PPI通信读取PLC数据,实现远程监视、远程启停、参数设定、报警记录和报表输出。
数据流方向非常清晰:传感器信号进PLC,PLC把瓦斯浓度、风压、频率等数据存到V区,组态王周期扫描这些V区地址刷新画面;操作员在组态王上改设定值或者点启动按钮,命令写回PLC的V区,PLC程序判断条件后去驱动输出点。整个链路是单主站多从站的PPI结构,现场只有一台PLC,通信压力很小,数据更新速度完全够用。
2. 硬件配置与IO分配
2.1 主要硬件清单与选型理由
实际项目用的核心硬件如下,都是市面上很常见、订货周期短的型号:
| 名称 | 型号 | 数量 | 用途 |
|---|---|---|---|
| PLC主机 | S7-200 CPU224 AC/DC/RLY | 1台 | 逻辑控制核心 |
| 模拟量模块 | EM231 4AI | 1块 | 采集瓦斯、风压、温度模拟量 |
| 变频器 | ACS510 55kW | 2台 | 主扇和备用风机驱动 |
| 瓦斯传感器 | KGJ16型,4-20mA输出 | 2路 | 回风流瓦斯浓度检测 |
| 负压传感器 | GPD型,4-20mA输出 | 1路 | 风井负压监测 |
| 电流变送器 | 穿孔式,量程0-100A输出4-20mA | 2路 | 风机运行电流监视 |
| PC/PPI电缆 | USB-PPI | 1根 | PLC与组态王通信、程序调试 |
CPU224本身自带14路数字量输入和10路数字量输出,我没有再扩展数字量模块,刚刚够用。EM231的四路模拟量通道刚好分配给两路瓦斯、一路负压、一路备用通道做温度变送器,如果以后想增加传感器,还能再挂一块EM231,扩展空间是留够的。
变频器选ACS510的原因也很简单:这款本身自带PID调节功能,但我在这里没有用它自带的PID,而是把PID逻辑放在PLC里做,原因是矿井通风不能只看单一参数,瓦斯、负压、温度这几个量要一起参与判断,用PLC做策略更灵活,变频器只负责执行频率给定。
2.2 IO分配表与信号接线
IO分配这块最容易在调试时出乱子,必须做一张表贴在现场配电柜门内侧。
| 地址 | 信号说明 | 信号类型 | 备注 |
|---|---|---|---|
| I0.0 | 主风机启动反馈 | DI | 接触器辅助触点 |
| I0.1 | 备用风机启动反馈 | DI | 接触器辅助触点 |
| I0.2 | 主风机变频器故障 | DI | 变频器干接点 |
| I0.3 | 备用风机变频器故障 | DI | 变频器干接点 |
| I0.4 | 风门全开限位 | DI | 用于联锁 |
| I0.5 | 风门全关限位 | DI | 用于联锁 |
| I0.6 | 就地/远程选择开关 | DI | 就地则屏蔽上位机操作 |
| I0.7 | 配电室急停按钮 | DI | 常闭点接入 |
| Q0.0 | 主风机变频器启停 | DO | 干接点 |
| Q0.1 | 备用风机变频器启停 | DO | 干接点 |
| Q0.2 | 主风机故障复位 | DO | 复位变频器 |
| Q0.3 | 备用风机故障复位 | DO | 复位变频器 |
| Q0.4 | 声光报警器 | DO | 超限、故障时输出 |
| AIW0 | 1号瓦斯传感器 | AI | 4-20mA |
| AIW2 | 2号瓦斯传感器 | AI | 4-20mA |
| AIW4 | 风井负压 | AI | 4-20mA |
| AIW6 | 风机轴承温度 | AI | 4-20mA |
一个特别要注意的接线细节是模拟量信号线必须用屏蔽双绞线,屏蔽层在PLC侧单端接地。瓦斯传感器输出4-20mA,在EM231上要把通道拨码选成电流模式,量程拨成4-20mA对应6400-32000。这个拨码如果忘记拨,读回来的数值要么一直是0,要么跳满量程,排查半天才发现是模块背后的小开关没拨对。
变频器的启停我选择用干接点控制,频率给定用0-10V的模拟量。这里还有一个小坑:如果PLC输出的模拟量电压信号和变频器模拟量输入的地不共地,很容易出现频率漂移或者跳变,接线时要把PLC的M端和变频器的AGND连在一起。
2.3 模拟量信号的采集与断线判断
4-20mA信号最大的好处是自带断线判断能力。正常工作时电流最小也有4mA,对应EM231的数字量是6400;如果电流掉到4mA以下,比如传感器故障或者信号线断了,PLC读出来就会小于6400甚至直接是0。我在程序里把AIW值小于6400的情况统一判成信号故障,不参与通风判断,同时发出传感器故障报警。
这里要注意:EM231接4-20mA时,断线读数是32767还是0取决于模块型号。老款EM231在电流型断线时往往读到溢出值,就是跳满量程。所以光判断“小于6400”还不够,还要把“大于32000”也判成故障,否则断线时PLC会误认为瓦斯浓度超高,直接让风机满转甚至误报警。这个细节我在第一套系统上就吃过亏,调试时传感器没接,画面瓦斯值直接顶到2%,联锁动作全出来了,排查半天才明白是断线值溢出导致。
对于4-20mA的工程量换算,后面程序章节详细讲,但接线端子上我统一用1+、2-的接法,所有现场传感器全按同一标准接,避免有的班组习惯接反造成负压显示负数。
2.4 变频器联动与外围安全回路
这套系统里变频器不只是“接收频率”的执行机构,它的状态必须实时纳入PLC逻辑。每台变频器提供两组干接点信号给PLC:一组是运行状态,一组是故障状态。我在程序里用故障信号做联锁:主风机变频器故障时,PLC自动断开主风机启动命令,延时2秒启动备用风机,同时在上位机弹出报警。如果备用风机也故障,那就把声光报警器拉响,强制提醒值班员到场处理。
外围安全回路我做了两层:一层是硬回路,配电柜急停按钮直接串联在变频器使能回路里,确保任何情况下按下急停都能彻底切断动力;另一层是软回路,PLC判断到风门未全开时禁止启动风机,判断到瓦斯浓度超过设定上限时强制全速运行同时输出报警。软硬结合,既满足安全规程要求,又不会因为单个信号异常导致系统彻底瘫痪。
3. PLC控制程序核心逻辑
3.1 模拟量标准化:从传感器原始值到工程量
S7-200的模拟量通道返回的数字量范围是0到32000,对应的是0到20mA或0到10V。如果是4-20mA信号,理想情况下6400对应4mA,32000对应20mA。但是模块存在零点和增益误差,纯靠理论换算出来的瓦斯大浓度值,和实际真是值可能存在偏差。
我在程序里用的是标定式换算,而不是简单乘法。具体做法是:现场接好传感器后,用标准气体或者和矿方的手持瓦斯检定器对比,记录两个点的实际读数。比如通道AIW0读到8000时,现场瓦斯浓度是0.13%,读到18000时,现场浓度是0.62%,那么线性标定公式就是:
浓度 = (AIW0 - 8000) ×(0.62 - 0.13)/(18000 - 8000) + 0.13
把这两组标定点直接写进PLC程序,之后所有判断都用标定后的工程量数值。这么做虽然比直接乘个固定系数麻烦一点,但精度提升明显,而且能消除传感器个体差异。组态王那边我显示的是PLC算好的工程量,不需要重复换算。
这里有个经验:每半年至少做一次传感器标定,标定数据记到组态王的报表里,方便追溯。PLC程序里可以把标定点做成可以再上位机修改的参数,存放在V区,这样标定周期到了不需要重新下载程序,直接在组态王上改两个实数就行了。
3.2 三档通风策略与死区防抖
整个智能控制策略的核心就一句话:风量跟着瓦斯浓度走。我实际项目里做的是三档调速加一个超限全速,这个策略简单可靠,矿方也容易理解批准。
| 瓦斯浓度区间 | 风机频率 | 状态描述 |
|---|---|---|
| 0% - 0.30% | 30Hz | 正常通风,满足基础需风量 |
| 0.30% - 0.60% | 40Hz | 加强通风,瓦斯偏高 |
| 0.60% - 0.75% | 50Hz | 强排瓦斯,接近报警线 |
| 超过0.75% | 50Hz + 声光报警 | 超限状态,同时通知矿调度 |
如果只按这个表做简单区间判断,会出现一个问题:瓦斯浓度在0.30%和0.60%边界附近抖动时,变频器频率会一直在30Hz和40Hz之间来回跳,风机转速忽快忽慢,机械和电网都受不了。
解决办法是加滞回比较,也叫死区控制。以从30Hz切40Hz为例:只有瓦斯浓度连续3秒大于0.35%才允许升挡;反过来从40Hz降到30Hz,必须连续3秒小于0.25%才允许降挡。这样中间形成了一个0.25%-0.35%的缓冲区,浓度在这个区域内来回波动时输出频率不变化。实现方法是在梯形图里用两个比较器加定时器串联,升档和降档的判断条件分开写。
另外我在程序里加了切换延时,任何一次挡位切换后需要等待60秒才能执行下一次切换,这个继电器式的延时逻辑很大程度上避免了因为一段异常数据导致的频繁动作。
3.3 双风机主备切换与轮换逻辑
矿井安全规程要求主扇必须有同等能力的备用风机,而且备用的切换时间要尽量短。我的方案是PLC直接控制两台变频器的启停,实现主备自动切换。
平时主风机运行,备用风机处于待机状态,但变频器不断电,保证控制系统随时能启动。当PLC检测到主风机变频器故障,或者主风机启动后5秒内没有收到运行反馈,立刻把主风机停止命令发出,同时启动备用风机。逻辑上必须严格互锁:Q0.0和Q0.1不能同时为1,这个互锁不仅在软逻辑里做,变频器启停端子的外部硬接线也要互锁,双保险。
除了故障切换,程序里还做了定时轮换功能。主风机累计运行时间到设定天数后,系统自动把主备角色互换,让两台风机磨损均匀。轮换动作不是直接停主启备,而是先把备用风机启动,等检测到备用风机反馈信号和风压正常后,再停止原主风机。这样可以保证整个切换过程中井下不断风。
轮换和故障切换的PLC逻辑思路虽然不复杂,但状态变量一定要理清楚。我用M0.1表示主风机运行状态,M0.2表示备用风机运行状态,M0.3表示主备角色标记。所有切换动作都以这些状态量为依据,避免出现“启动了故障风机”这种低级错误。
3.4 报警、联锁与手自动模式切换
这台系统的报警分为几个等级:
- 提示级:负压偏低,表示风门状态或巷道通风出现异常,需要关注。
- 预警级:瓦斯浓度超过0.6%,PLC自动升到50Hz强排,组态王弹黄色报警。
- 故障级:变频器故障、传感器信号断线,PLC发红色报警并声光提示。
- 安全级:瓦斯浓度超过0.75%,除了报警外,系统自动闭锁井下非本安型设备电源,这个功能需要配合断电控制箱实现,我项目里只输出给组态王记录,实际断电回路由矿方安全监控系统负责。
手自动切换我放在PLC程序最外层。就地/远程选择开关打到就地时,所有上位机操作指令一律不执行,现场只能靠配电柜按钮手工开风机。打到远程时,组态王可以设定频率、启停风机、修改报警阈值。这个模式挑选功能逻辑要用“接管”的思想:就地优先级别最高,远程操作只在就地允许的前提下生效,防止调度室乱按PLC程序或矿上检修人员误操作。
报警阈值我全部做成V区参数,组态王可以随时修改。这样不同风井瓦斯情况不一样时,运维人员无需修改PLC程序,只需在组态王操作界面填入对应数值,非常实用。
4. 组态王监控画面与通信配置
4.1 PPI通信配置:让组态王连上S7-200
组态王和S7-200通信是我觉得整个项目里最需要耐心的环节,因为坑基本都是通信参数对不齐导致的。具体配置步骤:
第一步,在组态王的工程浏览器里建立设备驱动,选择“PLC”下面的“西门子”再选“S7-200系列”下的“PPI”驱动。
第二步,配置通信参数。用USB-PPI电缆连接工控机和PLC,在设备配置向导里选择对应COM口,波特率要跟PLC系统块里的一致,默认是9.6k。地址填PLC的站地址,默认是2。
第三步,是最容易忽略的:PC/PPI电缆本身也有波特率拨码,必须和软件设置一致,而且电缆和组态王驱动里的“通信方式”要匹配。我第一次调试时,PLC那边波特率是19.2k,电缆拨在9.6k,组态王设备诊断一直显示“通信失败”,排查了小半天才算出是拨码问题。
第四步,在组态王设备里测试通信。设备配置完成后,右键设备选择“测试”,能看到S7-200的站号和型号说明通信已经建立。如果通信失败,先检查COM口号、波特率,然后检查电缆类型。超五类USB线容易供电不足,建议用带PSU的PPI电缆,通信更稳定。
4.2 工程变量定义与地址映射
组态王和S7-200的数据交换靠变量定义完成。每个变量的关键设置是“连接设备”和“寄存器地址”。S7-200的V区地址可以直接映射到组态王变量,比如VW100对应PLC里的VW100。
我实际项目里的变量定义表大致是这样:
| 组态王变量名 | 连接设备 | 寄存器 | 数据类型 | 读写属性 |
|---|---|---|---|---|
| 1号瓦斯浓度 | PLC1 | VW100 | WORD | 只读 |
| 2号瓦斯浓度 | PLC1 | VW104 | WORD | 只读 |
| 风机频率 | PLC1 | VW108 | WORD | 只读 |
| 主风机启停 | PLC1 | V110.0 | BIT | 读写 |
| 备用风机启停 | PLC1 | V110.1 | BIT | 读写 |
| 手动频率给定 | PLC1 | VW112 | WORD | 读写 |
| 超限报警阈值 | PLC1 | VW116 | WORD | 读写 |
需要重点提醒:S7-200的V区是按字节编址的,但组态王定义变量时如果选择WORD类型,地址V100对应的是VB100和VB101两个字节。为了让PLC程序和组态王变量不对不上,我一般是把PLC里所有要上位的参数集中定义在VW100到VW200这个连续段,并专门作出一张V区地址表贴在工控机旁边,避免数据错位。
位地址映射也要注意格式。组态王读取S7-200的某一位,地址写作“V110.0”这种点号格式,这里V代表V区,110是字节地址,0是位号,对应CPU里的V110.0。如果写错了位号,画面上的按钮就会控制错设备,事故就来了。
4.3 监控画面设计与动画连接
组态王画面我一般划分成几个区域:矿井通风系统总览、主扇控制区、备用扇控制区、参数设置区和报警区。
总览区放一张风井系统示意图,风机用旋转动画表示运行状态,管道用变色表示负压正常与否,瓦斯浓度用仪表盘加数字显示。这个画面的核心是让调度员一秒钟看懂当前通风状态,而不是看一串枯燥数字。
动画连接是画面设计的灵魂。风机图元的旋转速度我直接关联到VW108的频率变量;瓦斯浓度值关联到VW100,并设置了颜色变化:低于0.3%绿色,0.3%-0.6%黄色,超过0.6%红色闪烁。组态王提供了丰富的动画连接方式,包括填充、旋转、可见性、闪烁等,把这些用好了,整个画面才有监控的感觉。
主扇控制区放几个按钮:启动、停止、复位、手动频率滑块,每个按钮都要在“弹起时”关联对应的位变量。这里有个安全设计:停止按钮我做了两次确认弹窗,防止调度员误点导致井下停风。组态王里的弹窗可以用用户函数配合命令语言实现,逻辑比较直观。
4.4 报警窗口、历史曲线与日报表
报警功能是通风监控系统里最不能省的部分。我在组态王里配置了两个报警窗口:一个显示当前实时报警,一个显示历史报警查询。报警变量关联到PLC里的超限标志位,组态王检测到位变量变化后自动记录时间、事件类型、变量值。
组态王的历史曲线可以直观地看瓦斯浓度和风机频率的变化趋势。我配置了三个曲线:1号瓦斯浓度曲线、2号瓦斯浓度曲线、风井负压曲线。时间轴可以自由缩放,班组交接可以看近8小时的曲线趋势,分析瓦斯涌出和风机调速是否合理。
日报表我用组态王自带的报表功能实现,每天定时生成一张Excel格式表格,内容包括当日平均瓦斯浓度、最高浓度、风机运行时长、总耗电量估算。这些数据直接交给矿调度,省去了人工填写值班记录的时间,而且数据可靠得多。报表里的电量是PLC累计变频器运行时间和当前频率估算出来的,精度上满足管理要求。
5. 调试过程中的常见问题与排查
5.1 组态王画面数据不刷新
这个现象基本是通信问题。可以先在组态王设备测试里看通信状态,如果显示“失败”,那就重点检查串口号、波特率、地址。项目里遇到最多次的是USB转串口线不稳定,换一根带FTDI芯片的线就好了。
还有一种情况是通信状态正常但数据不刷新:先把组态王的采集频率调一下,默认的采集周期改成100ms,画面刷新改成300ms左右。另外,如果PLC里对应的V区没写入任何数值,上位机读到的就是0,画面看着像没刷新,实际上只是PLC侧数据没变化。这个在调试时容易误判,我会在PLC里写一段测试程序,让VW100每秒钟自动加1,如果画面跟着跳,说明链路没问题,问题一定在传感器或PLC程序逻辑。
5.2 瓦斯浓度突然跳变到满量程
有一次调试跑到半夜,调度电话打过来说瓦斯浓度一下顶到1.5%,现场风机直接满转。我赶过去一看,传感器信号线缆中间有个接头被老鼠咬断了,EM231读到溢出的数字量,程序预先做的“大于32000判断为故障”逻辑没有生效,于是把溢出值当成了超高瓦斯。
那次之后我就把模拟量故障判断完善成三个条件并行:小于6400判断线、大于32000判溢出、单位时间变化率超过设定阈值判突变。瓦斯浓度在正常巷道里不可能一秒内从0.2%跳到1%,出现这种变化率极大概率是信号问题。我在PLC里用上升速度判断,组态王里再做一次变化率过滤,两道防线才彻底杜绝了误跳。
5.3 风机频繁启停与误切换
风机频繁启停大多数情况不是硬件问题,而是程序里的延时和死区没有处理好。比如备用风机切换逻辑中,如果只判断“主风机运行反馈消失”这一个条件,变频器报一次瞬时过流就可能触发误切换。
我的解决思路是:所有风机状态判断都增加一个1秒的确认延时,所有故障信号都要“保持并复位”处理,也就是说一旦变频器报故障,PLC判断为故障并切换后,必须人工在组态王上按“复位”按钮才能清除故障记忆,避免接触器抖动导致逻辑反复翻转。这和热继电器的自锁复位一个道理。
另外,主备切换的互锁定时器也要设置得合理。我现场用2秒延时启动备用风机,再等3秒确认反馈后停原主风机,整个切换过程大约5秒,井下风量变化在可接受范围内。如果切换时间太短,备用风机还没稳定运行就把主风机停了,可能导致短时负压波动,这个参数可以根据巷道风量大小适当调整。
5.4 通信中断后备用风机不自投
这个问题的关键在于:备用风机的判断依据全部来自PLC内部,组态王通信中断不应该影响PLC本身运行。但实际调试中,如果组态王所在工控机死机或者PPI线路断开,PLC程序里的部分逻辑会因为通信超时进入错误状态,严重时甚至导致PLC停机。
我在程序里专门做了一个通信超时监视段:如果PLC超过10秒没有收到组态王的数据请求,就判断上位机通信故障,但通风逻辑不受影响,继续按照PLC内部策略运行。同时,在所有涉及组态王写入的参数(比如远程启停、频率给定)上,PLC都设置了“无通信反馈默认值”,通信恢复前不执行旧指令,防止恢复瞬间误动作。
这个坑提醒我们:矿井通风的安全底线必须放在PLC,绝不能依赖上位机。组态王再好用,也只是“眼睛和手”,决策必须在PLC内部完成。
写在最后的实际体会
这套S7-200加组态王的矿井通风智能控制系统,我在三个风井改造项目上完整实施过。每次做完之后最大的感触是:真正让矿方觉得有价值的,不是变频器调速省了多少电,也不是画面做得有多好看,而是“系统在半夜能自己正确处理一次瓦斯波动”带来的安全感。
如果你要自己复现这套方案,我的建议是先把瓦斯传感器标定做扎实,再把模拟量断线溢出这些异常情况处理周全,最后再考虑上位机画面。PLC里每一段逻辑问自己一句“如果信号坏了会怎样”,把最坏情况都堵住,这套系统就成功了一大半。组态王画面反而可以慢慢打磨,调度员用顺手了,自然会觉得这套系统值。