老工控人应该都有体会,火电厂这类项目里,控制系统不一定非要上DCS才算“正统”。我前两年接手过一个烟气脱硫(FGD)改造项目,下位机用的是西门子S7-200,上位机用组态王,整套系统跑下来稳定性和维护便利性都出乎意料。今天就把这套组合的完整思路、配置细节和踩坑记录整理出来,给正在做中小型环保控制项目的朋友一个参考。
这套方案特别适合脱硫工艺中设备点位在100点以内、控制逻辑以泵阀联锁和模拟量调节为主的项目,也适合预算有限、想用国产组态软件替代进口HMI的改造场景。如果你想了解S7-200和组态王之间到底怎么通讯、数据词典怎么建、画面怎么调才好看,这篇文章应该能帮你省下不少摸索时间。
1. 项目背景与控制系统总体架构
1.1 火电厂烟气脱硫工艺的监控需求
火电厂湿法脱硫系统说白了就是把锅炉出来的含硫烟气送进吸收塔,用石灰石浆液喷淋洗涤,让二氧化硫和浆液里的碳酸钙发生反应,生成亚硫酸钙然后氧化成硫酸钙(也就是石膏)。整个过程涉及浆液循环泵、氧化风机、石膏排出泵、除雾器、浆液密度和pH值调节等多个环节,任何一个设备掉链子都可能影响脱硫效率,甚至触发环保数据超标。
这套控制系统的核心任务有三个:一是保证脱硫效率稳定在环保要求的范围内,二是让设备按联锁逻辑自动启停,避免误操作烧坏设备,三是把关键运行参数完整记录下来,满足环保部门的数据核查要求。S7-200做底层逻辑控制完全够用,组态王做上位机监控和报表又比传统仪表盘直观得多,两者配合起来正好覆盖了这些需求。
1.2 为什么选择S7-200加组态王的组合
接触过现场的朋友可能知道,大型火电机组的脱硫岛一般配套DCS系统,动辄几十万上百万的投入。但很多老机组改造脱硫项目,其实只需要控制吸收塔区域和脱硫剂制备区域的几十个设备,用DCS属于杀鸡用牛刀。S7-200本身自带通讯口,支持PPI协议,价格便宜,而且当年很多电厂电工都熟悉它的编程方式,后期维护不费劲。
组态王作为国产组态软件的常青树,最大的优势就是上手快、中文界面友好、驱动库齐全。它对S7-200的PPI和MPI通讯支持很成熟,不需要额外编写复杂的通讯脚本。再加上组态王的报表、曲线、报警功能做得很实用,环保数据记录这一块儿能直接出日报表月报表,省了不少开发时间。这套组合的总投入比DCS方案能省下大概六成,对于中小型脱硫改造项目来说性价比非常突出。
1.3 控制系统的三层架构拆解
整套系统我习惯分成三层来看:
- 现场设备层:包括各类泵、风机、电动阀门、pH计、密度计、液位计、压力变送器、烟气分析仪等,负责执行动作和采集信号。
- 控制层:以S7-200 CPU226为核心,负责所有开关量逻辑、模拟量处理、PID调节和联锁保护。扩展模块根据点位需求配置EM221、EM222、EM231、EM232等。
- 监控层:组态王运行在工控机上,通过PPI电缆和S7-200通讯,负责画面显示、参数设置、报警记录、历史趋势和报表输出。
这样的结构层次分明,故障排查时哪一层出了问题很容易定位。我遇到过不少项目一上来就想着PLC和上位机直接堆功能,结果出了毛病到处找原因。先把架构理清楚,后面所有工作都是往这个框架里填东西。
2. 西门子S7-200控制核心的硬件配置
2.1 CPU和扩展模块的点位规划
烟气脱硫控制系统的点位数量需要根据工艺流程仔细统计,我建议开工前先做一张详细的I/O清单。拿我经手的这个项目举例,吸收塔区域大概有浆液循环泵3台(每台需要DI运行反馈、DO启停控制、AI电流监视)、氧化风机2台、石膏排出泵2台、除雾器冲洗电动门8个,再加上液位计、pH计、密度计、压力变送器这些模拟量信号,开关量输入大概60点,开关量输出40点,模拟量输入16路,模拟量输出4路。
根据这个点数,我选了CPU226(集成40点数字量I/O)再加一块EM231模拟量输入模块(8路)和一块EM232模拟量输出模块(4路)。这里有个小经验:模拟量模块尽量多留两路备用通道,因为现场经常会有临时新增的仪表信号,等系统投运后再加模块很麻烦,还要重新组态下载程序。数字量模块如果CPU集成的不够用,EM221和EM222是最便宜的选择,注意认准订货号就行。
2.2 模拟量处理的工程单位转换
烟气脱硫系统里模拟量信号特别多,pH值、液位、压力、流量、烟气SO2浓度、浆液密度等等,每一个都需要在PLC里做工程量转换。S7-200的模拟量输入模块读取的原始值是0到32000(4到20mA对应),对应到实际工程值需要做线性换算。
我在程序里写了一个通用的模拟量处理子程序,输入参数是原始值和量程上下限,输出就是实际工程值。计算公式很简单:实际值等于量程下限加上原始值除以32000再乘以量程跨度。比如液位计量程是0到5米,读到的原始值是16000,那实际液位就是0加16000除以32000再乘以5,等于2.5米。
特别注意pH计的信号处理,因为pH值和水温有关系,如果现场温度波动大,最好在PLC里做温度补偿计算,或者在仪表端开启自动温度补偿功能。我见过一个项目忽略了温度补偿,夏天和冬天的pH读数差了0.5以上,导致浆液品质波动很大。
2.3 关键联锁逻辑的设计思路
脱硫系统的联锁保护是安全底线,S7-200的扫描周期足够快,完全能胜任这些逻辑判断。我重点做了几个联锁:
一是浆液循环泵的启动联锁:必须在吸收塔液位高于低低限、入口烟气挡板已开启、对应出口电动门已开到位这三个条件同时满足时才能启动,否则不允许合闸。
二是氧化风机的联锁保护:风机轴承温度高于90度时立即跳闸,同时关闭对应出口风门;两台风机的运行状态互锁,不能同时启动,避免风量过大影响浆液氧化效果。
三是石膏排出泵的联锁:泵运行时如果浆液密度低于某个值(说明浆液太稀),自动停止排出泵,防止把石膏浆液抽回导致管道堵塞。
编写联锁逻辑时我习惯用常闭触点加置位复位的方式,而不是单纯用线圈输出。原因是S7-200的程序扫描是顺序执行的,如果用普通线圈,程序后面的逻辑可能会把前面的输出状态覆盖掉。用置位复位指令做联锁,只要条件不满足,输出状态就不会改变,可靠性高得多。
3. 组态王上位机监控系统的搭建
3.1 组态王工程创建与画面结构规划
组态王安装好之后,第一步是新建工程。这里提醒新手朋友:工程存放路径绝对不要用中文,最好直接放在某个盘的根目录下新建一个英文文件夹,比如D盘下建个FGD_Monitor的文件夹,不然后面运行时候经常出现画面加载失败或者变量读取异常的问题。
画面结构我按照脱硫工艺流程分成四个主画面:系统总览、吸收塔区域、脱硫剂制备区域、报警和报表。总览画面放工艺流程图和重要参数,让运行人员一眼能看到整个系统的运行状态;吸收塔区域画面详细显示塔内液位、pH值、浆液密度、循环泵运行状态等;报警和报表画面负责调阅历史报警记录和生成运行报表。
画面尺寸设置是个容易踩坑的地方。组态王默认的画面尺寸是1024乘768,如果有运行画面和电脑屏幕显示不一致的情况,提前在工程浏览器的系统配置里修改画面大小,设置为和工控机分辨率一致。运行后在画面空白处右键打开画面属性,也可以调整显示比例。
3.2 设备通讯配置与S7-200连接
组态王和S7-200通讯是整套系统能跑起来的桥梁。在组态王工程浏览器的设备配置里选择PLC设备,驱动类型选西门子S7-200系列(PPI),通讯方式选串口。这里关键是把通讯参数和PLC侧设成一致的:波特率9600、数据位8、停止位1、偶校验。
S7-200侧需要在编程软件Micro/WIN里把系统块的通讯端口参数设置成一样的数值,然后在程序里初始化通讯口。我用的是CPU226自带的Port0口,PPI电缆换成USB-PPI编程电缆,插在工控机的USB口上。通讯插头上有拨码开关,如果PLC是链路中的最后一台设备,拨码要拨到ON位置接终端电阻,否则通讯不稳定。
组态王侧通讯参数设置完成后,可以在设备测试窗口做通讯测试。我的经验是测试时先发一个简单的读取命令,看看返回数据是否正常,如果返回超时,就检查串口号、波特率和PLC地址(站号)。S7-200默认站号是2,组态王设备地址也要填2,两边站号对不上是通讯失败最常见的原因。
3.3 数据词典变量定义的实战要点
组态王的数据词典是整个监控系统的心脏,每个画面上的显示值、每个控制按钮对应的输出值,都要先在数据词典里定义变量。我建立变量时遵循一个命名规则:设备名称加信号类型,比如循环泵1运行反馈定义为LHB1_RUN,液位计的液位值定义为LEVEL_ABS,这样后期维护时看到名字就能猜到是哪个信号。
S7-200的数据类型和组态王变量的对应关系要注意区分。S7-200的V区字节地址在组态王里对应变量类型要选I/O离散或I/O整数,寄存器地址要填写PLC的实际地址。比如说S7-200里VW100存储的是吸收塔液位的实际工程值,组态王里就定义I/O整数变量,寄存器地址填VW100,数据类型选有符号整数,读写属性根据实际需要选读写或只读。
模拟量信号保存在V区时,如果PLC程序里已经做了工程量转换,上位机读到的就是实际工程值;如果读的是模块原始值,还要在组态王里做一次量程转换。我的做法是PLC里统一做转换,上位机只负责显示和记录,这样调试时用手机串口助手直接读CPU的V区就能验证数据是否正确。
3.4 画面动画连接和按钮控制
画面上的图形元素和变量建立动画连接之后,才能实现动态显示和控制功能。比如吸收塔的液位显示,我画了一个液位罐的图形,在动画连接里选择垂直填充,表达式填LEVEL_ABS这个变量名,填充方向根据实际液位升高方向调整,颜色用绿色表示正常运行范围,超过高低报警值变红色。
控制按钮的设置相对复杂一些,组态王里可以用按钮加脚本的方式实现PLC输出控制。比如启动浆液循环泵的按钮,在按钮的弹起事件里写一段脚本,把PLC里对应的启动命令寄存器置位。S7-200程序里做一个脉冲触发,上位机发来启动命令后,PLC执行置位操作并反馈运行状态。按钮字体大小的修改其实很简单,选中按钮后在属性工具栏的文本设置里调整字体大小和颜色,如果按钮的文本显示位置不对,检查一下按钮的显示属性是否设置了自动适应内容。
运行画面的显示比例如果和电脑分辨率不一致,会出现画面显示不完整或者四周留黑边的情况。解决方法是组态王的开发系统里,在画面属性的显示选项里选择适应窗口或者设置画面缩放,一般选适应窗口后运行画面会自动匹配当前分辨率。
4. 通讯协议与数据交互的深入解析
4.1 PPI协议的特点与通讯参数匹配
PPI是西门子S7-200专用的点对点接口协议,本质上是一个主从协议,组态王作为主站发起通讯请求,S7-200作为从站响应请求。PPI协议不需要额外授权,而且支持一条总线上挂多台PLC,最多可以有32个站。
实际项目中,我最常遇到通讯问题的就是波特率和站号匹配不上。你要知道,S7-200的通讯口默认波特率是9600,组态王端如果设成了19200,两边根本握不上手。我通常在PLC程序里用Micro/WIN的系统块设置把Port0的波特率定成9600,然后在组态王的设备配置里也填9600,这样最保险。还有一个细节是PPI协议的地址分配,S7-200的CPU通信地址在系统块里配置,默认是2,组态王设备地址必须填一样的值。
4.2 数据词典与PLC变量地址的映射关系
组态王数据词典和S7-200程序变量之间的对应,是很多新手容易搞混的地方。这里我举个例子说明:PLC程序里用VD200存储氧化风机电流的工程值,组态王里定义一个I/O实数变量FAN_CURRENT,寄存器地址填VD200,数据类型选浮点数。组态王通过PPI协议读取VD200地址的4个字节,然后解析成一个32位浮点数显示在画面上。
布尔量(开关量)的处理要注意位寻址方式。S7-200的V区位地址比如V300.0,在组态王里定义I/O离散变量,寄存器地址填V300.0,数据类型选Bit。有些老版本组态王不识别带小数点的位地址,需要改成偏移量的方式计算,这个可以查对应版本的驱动说明。
4.3 数据刷新率和通讯负载的平衡策略
通讯数据量不是越大越好,我在调试的时候发现,如果数据词典里塞了几百个变量全部启用快速采集,PPI通讯的负载会变得特别高,很容易出现数据延迟,甚至通讯超时。实际项目里我把变量的采集频率分成三档:关键参数(液位、pH、烟气SO2浓度)采集周期设为500毫秒,一般设备状态信号设为1秒,普通备用信号设为3秒。
组态王里每个变量都可以单独设置采集频率,在变量属性的采集频率选项里填对应的毫秒数就行。这样做的好处是整个通讯轮询周期变短了,关键数据的实时性反而提高了。
5. 实操过程与核心环节的实现记录
5.1 PLC程序的模块化编写与调试
整个PLC程序我按照功能分成主程序、模拟量处理子程序、泵阀控制子程序、联锁保护子程序和通讯数据映射区。每个子程序用S7-200的软件Micro/WIN编写,子程序之间通过V区共享数据,这样结构清晰,现场改逻辑的时候不用翻几百行的梯形图。
模拟量处理子程序我前面提到过,直接调用系统自带的SCALE指令也行,但我更喜欢自己写换算公式,因为SCALE指令的输入输出范围和我的传感器量程不一定完全匹配,自己写更有掌控感。调试模拟量时我是用一个信号发生器给PLC模拟量模块送标准4到20毫安信号,然后对比PLC读取的原始值和模块指示灯,确认线接对了、程序换算对了再接现场仪表。
泵阀控制程序的要点是启停按钮采用脉冲触发加状态互锁逻辑。PLC程序接收到组态王的启动按钮信号后,先判断联锁条件是否满足,满足则置位运行继电器,不满足则把启动失败信号反馈给上位机。我用M0.0到M0.7存储上位机的命令脉冲,V区存储设备的反馈状态,这样即使上位机故障,PLC侧的保护逻辑也能独立运行。
5.2 组态王画面的绘制与动画连接
组态王画面绘制其实是一项要求耐心的工作,工艺流程图画得好不好直接影响运行人员的体验。管道用直线加粗细设置,设备用图库里的现成图元,阀门根据开到位关到位信号改变颜色和旋转角度。吸收塔我用椭圆加矩形组合,塔内液位用矩形填充,填充的百分比对应液位变送器的量程比例。
动画连接设置里面有一个容易忽视的点就是变量类型不匹配。比如把I/O整数变量连到了需要布尔变量的动画上,画面运行时会提示表达式错误。遇到这种情况,把变量的数据类型改对,或者写一个脚本把整数变量转换成开关量变量就可以解决。
5.3 系统联调流程和参数整定
系统联调是最考验耐心的一环,我通常按照先本地后远程、先开环后闭环的顺序来:先手动操作各泵阀,确认执行机构和反馈信号没问题;然后切到上位机远程操作,验证组态王命令能不能下达到PLC;最后投入自动调节回路,整定PID参数。
脱硫系统的PID调节主要指浆液pH值调节:根据pH变送器测量值,自动调节石灰石浆液供给阀的开度。pH值调节的大惯性大滞后特点很明显,从加浆液到pH变化可能要十几分钟甚至更久,我用的是积分分离的PID算法,pH偏差大时纯比例控制快速逼近,偏差小于阈值时投入积分消除静差。经过反复试验,我最后把比例增益设为1.5,积分时间设为300秒,微分时间为0,稳定效果很好。
5.4 环保数据报表的生成与存储
环保数据记录是脱硫控制系统的硬性要求,组态王的报表系统可以轻松实现。我建立了一个实时数据报表,把脱硫效率、SO2排放浓度、烟气流量、pH值、液位等关键参数按每分钟一行记录到历史报表,同时每天生成一张日汇总报表,统计排放浓度的最大值、最小值、平均值,以及脱硫系统的运行时间。
报表的数据源是组态王的历史库,历史库的数据存储周期可以设置,我一般设为30秒存储一次,足够满足环保数据核查精度。同时组态王提供SQL访问接口,也可以把数据定时写入外部数据库,方便电厂信息管理部门二次开发。
6. 常见问题与排查技巧实录
6.1 通讯异常的排查顺序
我调试期间通讯问题出现的次数最多,处理多了倒是总结出一套排查顺序:先看物理层,再查协议参数,最后检查变量地址。物理层包括PPI电缆有没有插牢、电缆有没有损坏、通讯口是不是被其他程序占用了。很多奇怪的问题最后都出在USB转串口驱动上,换台电脑或者重装驱动就好了。
协议参数排查重点检查波特率、站号、校验方式是否一致。我遇到过组态王设备地址填了0的情况,S7-200根本不应答,改成2就好了。还有一个容易让人抓狂的问题是:PLC程序里没有初始化通讯口,导致通讯口一直处于默认状态,组态王连上了但读回来的数据全是乱的。在Micro/WIN的系统块里把端口参数配置好,重新下载程序就正常了。
6.2 模拟量读数跳变和信号干扰处理
现场模拟量信号跳变的问题我也花了不少精力排查。pH信号跳变严重,一开始以为是变送器坏了,后来用万用表量发现是信号线和动力电缆走在同一个桥架里,感应出了交流干扰。解决办法是把信号线和动力线分开敷设,pH计的屏蔽层单端接地,信号在PLC侧并联了一个滤波电容,跳动幅度明显降下来了。
对于压力变送器和液位计的模拟量信号跳变,我推荐在PLC程序里做平均值滤波:每次采样取50个数据,去掉最大值和最小值,然后求平均值。这样处理之后画面上的数据曲线平滑多了。滤波的时间常数不能设太大,否则真实数据变化会被掩盖,一般控制在1秒以内比较合适。
6.3 组态王安装和运行阶段的老大难问题
组态王安装时最常见的问题是提示explorer.exe与.cab文件不匹配,这种通常出现在系统更新了版本而安装包比较老的情况下。我的处理办法是先运行操作系统更新把补丁打全,再以管理员身份运行安装程序。如果还报错,就把杀毒软件暂时退出来,因为杀毒软件会拦截组态王安装过程中的驱动注册和文件释放。
工程解密问题上我多说一句:网上流传的组态王工程密码破解方法基本都是针对6.53及更早版本的,新版本的安全性做了很大改进。正常做法是找厂家提供官方解锁工具,或者提前做好工程文件的备份,不要把密码弄丢了。我自己的习惯是每个版本的工程文件压缩打包存在两个位置,防止硬盘损坏或者误删造成不可逆的损失。
6.4 运行画面与电脑分辨率不一致的修复
这个问题在新装组的态王电脑上特别常见,开机运行后画面要么只显示左上角一部分,要么整体被拉变形。原因很简单:开发环境下组态王默认画面尺寸和工控机的分辨率不一致。
我一般先在开发系统的工程属性里把画面的分辨率设置成目标工控机分辨率,比如1366乘768的屏幕就把画面宽度高度改成1366和768,然后画面上所有元素重新排列一次。如果已经做好的画面不想重新排,还可以在运行系统启动画面的选项里勾选画面自适应窗口,这样画面会自动缩放匹配屏幕。要注意的是自适应缩放后字体可能会有点发虚,图形密集的画面显示效果会略打折扣,还是提前设置好分辨率最省心。
6.5 按钮操作无响应和文本显示不全的处理
运行现场容易遇到按钮点下去没反应的情况,这时候先检查按钮关联的变量是不是正常工作。在组态王的开发系统里可以查看变量的实时值,如果变量的值在变化但PLC侧没动作,说明通讯链路或者PLC程序有问题;如果变量值压根不变,点按钮的脚本事件可能没触发成功。
有时候按钮文本字体显示不全,按钮的宽度固定,文字超出了显示范围。解决办法是选中按钮,在文本设置里改小字体,或者勾选自动换行和自动缩放。组态王里按钮的字体样式是支持统一修改的,工程浏览器里有全局文本设置,改一处所有按钮都跟着变,省得一个个调。
7. 控制系统的扩展方向与实际心得体会
项目验收之后,我又对这套系统做了一些功能扩展的思考。S7-200虽然已经停产多年,但实际工控现场的存量非常大,而且它的继任者S7-200 SMART在指令系统和编程风格上基本兼容,老项目的程序迁移到新硬件成本并不高。组态王也陆续推出了新版本,对主流PLC和现场总线的支持越来越完善,未来如果脱硫系统需要接入电厂已有的DCS或者MES系统,组态王的OPC接口可以轻松实现数据中转。
还有一个值得关注的扩展是远程运维和移动监控。通过组态王自带的数据转发功能和短信报警模块,可以把关键报警信号推送到值班人员的手机上,这样即使人不在控制室也能第一时间知道系统异常。我后来在这个项目上加了一套4G版的串口服务器,把PLC的通讯口映射到公网服务器,出差时用组态王远程客户端查看现场数据和画面,排查问题方便了很多。
根据自己的经验,做这类控制系统项目最重要的不是追求技术多先进,而是把每个环节做扎实。图纸上的点位统计一定要仔细,通讯参数一定要两边统一,程序要做好注释,画面要让运行人员看得顺心。这些基本功往往决定了系统后期能不能长期稳定运行。西门子S7-200和各种组态软件都是很成熟的产品,配合好了就是一套性价比很高的中小型控制系统方案,用个十年八年不成问题。