1. 项目背景与系统整体架构
1.1 锅炉控制的核心工艺需求
这次要做的是一台6t/h蒸汽锅炉的自动化改造项目,现场原来靠人工看水位、手动给煤,锅炉效率和安全性都比较差。改造目标很直接:汽包水位、蒸汽压力、炉膛负压三个主要参数能自动调节,电脑上能显示整台锅炉的运行状态和历史曲线,超限报警并且联锁停炉。锅炉是带压连续运行设备,危险程度比普通机电设备高,所以在方案设计时我一直提醒自己,控制系统的可靠性永远排在功能丰富性前面。
从工艺面来看,锅炉控制可以分成水侧和火侧两个回路。水侧的核心是汽包水位,给水调节阀或给水泵转速控制进水量,蒸汽负荷一变,水位就跟着波动,必须有个闭环把水位稳定在设定值。火侧是燃烧控制,鼓风机、引风机和炉排之间要配合好,蒸汽压力作为最终输出指标,反过来调整燃烧强度。两个回路之间还有耦合,比如负荷突然增大时水位会“先涨后跌”,出现所谓的虚假水位现象,单纯靠一个PID硬压很容易出问题。
锅炉还必须有一套完整的联锁保护逻辑:低水位要断火、超压要停炉、引风机跳闸要连带停鼓风机。这些逻辑必须放在PLC里独立执行,不能依赖上位机。上位机画面卡顿、电脑重启都不应该影响安全保护功能。把这个原则想清楚,后面编程和组态才不会走偏。
1.2 三菱PLC+组态王的角色分工与选型理由
这套系统里,三菱PLC负责所有实时运算和控制,组态王负责画面显示、报警记录和历史趋势。选型理由其实很实际:三菱FX系列在国内项目里保有量大,经典稳定,GX Works2编程软件用起来也顺手,中小型系统用它基本不会踩坑;组态王驱动库很全,自带三菱PLC的现成驱动,画面开发速度快,工程周期紧的时候优势非常明显,而且工程师普遍都熟,后期维护接手也容易。
整体架构是典型的上位机加下位机:现场变送器把水位、压力等物理量送到PLC的模拟量模块,PLC的数字量输出控制接触器和变频器,模拟量输出控制调节阀,然后PLC通过通信口与上位机组态王交换数据。组态王里的每个变量都对应PLC内部寄存器或线圈,画面上做的操作最后也会写到PLC某个地址里。关键一点是:组态王不参与直接控制,即使它掉线或者电脑蓝屏,PLC里的PID和联锁逻辑照常运行。做工业控制系统,这个分工边界必须守住,否则把安全交给上位机软件,迟早要出大事。
2. 三菱PLC控制程序设计要点
2.1 硬件配置与I/O清单
PLC我选了FX3U-64MR/ES,继电器输出型,扩展一块FX3U-4AD模拟量输入模块和一块FX3U-4DA模拟量输出模块。FX3U-4AD提供4路模拟量输入,接汽包水位、蒸汽压力、炉膛负压和排烟温度这四个信号;FX3U-4DA有4路模拟量输出,用其中两路分别去控制给水调节阀和引风机变频器,另外留两路备用。为了和上位机通信,PLC上还加了一块FX3U-485-BD通信板。这个配置不算豪华,但把锅炉控制需要的点都覆盖住了,扩展模块卡槽也还有富余,后期要加氧量分析或者烟气监测都方便。
现场I/O分配如下表,具体位号按图纸统一,我习惯在表中直接写好对应寄存器和模块通道,这样编程和组态的时候就不用翻来覆去找接线图。
| 信号说明 | 信号类型 | PLC地址 | 量程范围 |
|---|---|---|---|
| 汽包水位变送器 | 4~20mA | 4AD CH1 | 0~1000mm |
| 蒸汽压力变送器 | 4~20mA | 4AD CH2 | 0~1.6MPa |
| 炉膛负压变送器 | 4~20mA | 4AD CH3 | -200~+200Pa |
| 排烟温度 | 4~20mA | 4AD CH4 | 0~300℃ |
| 给水调节阀开度 | 4~20mA | 4DA CH1 | 0~100% |
| 引风机变频器频率 | 4~20mA | 4DA CH2 | 0~50Hz |
| 鼓风机运行状态 | 开关量输入 | X0 | — |
| 引风机运行状态 | 开关量输入 | X1 | — |
| 鼓风机启动 | 开关量输出 | Y0 | — |
| 引风机启动 | 开关量输出 | Y1 | — |
| 报警蜂鸣器 | 开关量输出 | Y2 | — |
模拟量模块接线的注意事项放到后面讲,这里先说一个原则:所有模拟量信号线必须用屏蔽电缆,屏蔽层在PLC侧单端接地,信号线绝不能和动力线走同一个线槽。否则变频器一启动,PID测量的噪声会让人崩溃。
2.2 模拟量采集与工程量转换
三菱FX3U读取扩展模块要用FROM指令。以4AD为例,扩展模块的单元号从0开始,4个通道的数字量分别存放在模块缓冲区的第0到3个字,程序里用一条FROM K0 K0 D10 K4,就可以把4个通道的原始值一次性读到D10到D13。FX3U-4AD在4~20mA模式下,满量程对应的数字量是4000,实际满量程值会因量程模式不同而有差异,编程前先看手册确认,然后根据这个做线性换算,就能得到真实的工程物理量。
汽包水位的换算公式是:实际水位(mm) = 通道原始值 / 4000 × 量程(1000)。蒸汽压力类似:实际压力(MPa) = 原始值 / 4000 × 1.6。在梯形图里用浮点运算来做,先把D10转成浮点数,再做除法和乘法,最后把浮点结果存到D100这样的变量里,上位机组态就直接读D100。不要用整数运算去算这种带小数的工程量,容易丢精度,现场调试时会出现末位跳个不停的情况。
原始信号在工业现场免不了带一点杂波,我一般在程序里做一步软件滤波,最简单有效的是N次采样的滑动平均。比如每200ms采一次水位,把最近10次读数求平均,再作为PV值去参与PID计算。滤波时间常数不能设太大,否则PID动作会明显滞后。水位和炉膛负压这种变化不剧烈的量,平均周期3到5秒完全够用,控制快速性也不会受太大影响。
2.3 汽包水位PID调节与联锁逻辑
水位和压力控制用三菱FX3U自带的PID功能指令。它是封装好的标准PID算法,调用时只需要指定设定值寄存器、测量值寄存器和一组参数表的首地址。水位回路的设定值我放在D200,测量值就是前面算好的D100,参数表从D300开始,依次设置采样时间、动作方向、比例增益Kp、积分时间Ti和微分时间Td。PID指令运算结果给到D400,再经过限幅后送到4DA,去驱动给水调节阀。
锅炉水位控制里最容易忽略的一点是动作方向。阀门开大、进水量增加,水位上升,这个回路是正作用;如果执行机构特性反过来,就必须把参数表中的正反作用位设置正确,否则投自动之后水位会在设定值附近发散振荡。现场投运时,我习惯先把PID切到手动输出模式,手动缓慢操作调节阀,确认阀门动作方向和水位变化方向一致,再切自动。千万不要一上来就直接投自动,搞不好会打水满。
联锁逻辑用梯形图写最直观。举几个必须有的联锁动作:汽包水位低于低低限(比如-150mm)时,立即切断燃烧器、停止炉排;蒸汽压力高于高限时停炉;引风机运行信号丢失时,立即停鼓风机,防止炉膛正压喷火。每个联锁条件都用一个中间继电器线圈M做汇总,任何一个条件满足就置位停炉中间变量M100,然后由M100去控制各输出。停炉之后要有手动复位按钮,不能自动复位,这样处理事故才能留出清晰的记录。
3. 组态王监控画面的设计实现
3.1 新建工程与IO设备配置
组态王建工程这一步很常规,但第一次接触的人经常在设备定义那里卡住。打开组态王工程管理器,新建工程,填写工程名称和存储路径,然后进入开发环境。在左侧工程浏览器的“设备”上右键,选择“新建”,设备驱动列表依次展开:PLC -> 三菱 -> FX系列(串口),这样组态王就会调用三菱FX的串口驱动。
设备定义对话框里有一个“设备地址”字段,这是PLC在通信总线上的站号。用编程口直连的时候,设备地址通常填0;用485总线连接时,这个地址必须和PLC侧D1121寄存器里设置的站号一致。很多项目出现“设备启动失败”都是从这一步开始的,地址对不上,通信参数全都正确也白搭。设备定义完成后,还要在“设备通讯”选项卡里设置超时时间和尝试恢复间隔,现场建议把超时时间设成3000ms左右,重试次数3次。太短了容易误报,太长了故障响应又太慢。
3.2 定义变量与数据映射
组态王里变量分为内存变量和I/O变量两类。内存变量只存在上位机内部,比如画面上的操作记录、临时计算值;I/O变量则要和PLC通信,变量每读一次或每写一次,都会走一次通信报文。在“数据词典”里新建变量,类型选择I/O实数或I/O整数,连接设备选刚才定义好的锅炉PLC,寄存器填D100,数据类型按PLC程序里的变量长度选。三菱D寄存器是16位的,如果PLC里的数据是32位浮点数,那就需要在组态王侧把变量类型定义成32位无符号整数并按32位读取,这时一个组态王变量会对应连续两个D寄存器。
数据映射最容易出问题的场景是浮点数大小端。三菱PLC内部32位数据是低字在前,如果上位机软件设置成高字在前,读出来的数字会变得非常离谱,比如水位显示成几千万毫米。出现这种问题时,先不要怀疑PLC程序,去组态王变量属性里把字节顺序改成低字节在前再试,基本能解决。这个经验我至少用到了三次,每次都能救急。
3.3 画面绘制与动画连接设置
画面组态是组态王里最出活的部分。先画底层静态图,比如锅炉本体、汽包、管道、阀门,再放动态元件。给水泵、引风机用图标表示,它们的颜色状态绑到对应I/O离散变量上。比如PLC里Y0是鼓风机运行输出,组态王里定义一个I/O离散变量“鼓风机运行”对应Y0,图标颜色变化条件设为变量等于1时显示绿色,等于0时显示灰色。
水位显示用“填充”动画:画一个竖着的矩形框代表汽包,动画连接选择“模拟量值输出”和“填充”,“填充”的百分比来源指向水位变量,同时把量程设为0~1000mm,这样画面上的水位柱就能跟着实时数据上下变化。压力表头用“旋转”动画连接压力变量,阀门开度用百分比显示,每个关键参数旁边再放一个文本显示框,用“模拟量值输出”直接显示数值。所有动画连接做完之后,一定要进入组态王运行系统里验证一遍。我遇到过画面元件绑错变量导致“设备通讯繁忙”的诡异情况,排查时在画面里逐个检查变量连接就能发现。
3.4 报警记录与趋势曲线配置
组态王的报警功能在开发环境的“报警组”里配置。先把所有变量分到同一个报警组,然后在变量属性里打开“报警属性”选项卡,设置上限、下限、报警优先级。这里有一个容易忽略的地方是“报警死区”。锅炉水位正常值附近有一点抖动,如果不设置死区,报警条件会在上限边缘反复触发,一个晚上能弹出几百条报警记录。设置死区之后,只有当数值从正常区间越过报警点并超过死区范围时才真正触发报警,现场用起来会干净很多。
趋势曲线分实时趋势和历史趋势。实时趋势用“实时趋势曲线”控件直接放到画面上,绑定几个关键变量即可;历史趋势需要通过组态王自带的历史数据库记录变量,然后在画面上放置“历史趋势曲线”控件,选择要显示的变量和时间范围。历史数据对锅炉运行分析非常关键,比如夜班负荷变化、给水泵工作状态都能从曲线上看出来,所以变量定义时建议把水位、压力、炉膛负压、给水阀开度、引风机频率全部纳入历史记录,记录周期设1秒,足够查看动态过程了。
4. PLC与组态王的通信配置与协议分析
4.1 通信方式选型:串口、485总线与以太网
组态王和三菱PLC通信,常见的有三套方案,按现场条件选。
第一套直接用PLC自带的编程口。FX3U的编程口是RS422接口,用USB-SC09编程电缆连到上位机,组态王选“三菱FX系列(串口)”驱动,通信参数按编程口默认值设置。优点是不用额外加模块,适合改造项目快速出活;缺点是距离有限,主机房离PLC柜超过15米就不太稳,而且调试期间编程软件和组态王不能同时占用同一个COM口,否则会互相抢串口。
第二套是加一块FX3U-485-BD通信板,走RS485总线。成本低、抗干扰能力强,现场距离几十米到几百米都没问题,适合把上位机放在中控室。485总线是半双工两线制,接线要接A、B两个信号端子,不能接反,总线两端还要各接一个终端电阻,否则距离长了信号会反射。组态王通信参数与PLC侧D8120寄存器的设置必须完全一致,包括波特率、数据位、校验位、停止位。
第三套是加以太网模块FX3U-ENET,走MC协议,速度和稳定性最好,但成本也最高,一般用于大型项目或者多台上位机同时访问的情况。如果预算允许,我推荐直接上以太网方案,调试时不用担心串口占用问题,连交换机就行,排查问题也方便。这个锅炉项目最终选择的是第二套485方案,因为中控室离PLC柜大约80米,性价比最合适。
4.2 三菱PLC通讯协议关键点
组态王和三菱PLC的通信过程,本质上就是上位机按照协议格式向PLC发送读写命令,PLC收到后返回相应的数据帧。串口模式下常用的FX协议报文结构可以分成几个部分:控制码(请求帧用ENQ,响应正确用ACK,响应错误用NAK)、站号、命令码、软元件地址、读取字数、校验码。上位机发一条“批量读取D100开始的10个字”的命令,PLC就会把这10个寄存器的当前值打包返回。
命令码是协议的核心,读取字设备和位设备的命令不同。D寄存器属于字设备,M、X、Y属于位设备。组态王驱动封装好这些细节之后,用户不用自己拼报文,但必须理解地址映射规则:组态王里填D100,对应PLC的D100;填M0,对应PLC的M0。在三菱的软元件地址体系里,输入继电器X和输出继电器Y的编号使用16进制表示,而M、D使用10进制表示,定义组态王变量时千万别把进制搞混,这是新手最容易栽的地方。
如果走以太网MC协议,报文结构换成MC协议帧,命令码和软元件类型代码都和串口协议不同。MC协议访问D寄存器时使用专用的软元件类型代码,地址用4位16进制表示,比如D100对应地址0064H。这些细节在组态王的驱动说明里都有对照表,第一次配置时对着表查一遍,不要凭感觉填。
4.3 组态王侧参数配置实战
以这个项目实际使用的485方案为例,配置过程是这样的:PLC侧先在程序中设置D8120通信格式寄存器,按要求把波特率、数据位数、校验位、停止位配置好。比如常用的一组参数是9600bps、8位数据、偶校验、1位停止位,同时在D1121里设置本机站号。PLC程序里用MOV指令把配置值写入D8120,程序下载并复位PLC,通信参数才真正生效。
组态王这边,新建设备“锅炉PLC”,选择三菱FX系列串口驱动,在串口属性里选择实际使用的COM口,把波特率、数据位、校验位、停止位设置成和D8120完全一样的值。设备地址填PLC站号,再根据要读的变量数量调整通信超时和重试次数。配置完以后,在开发环境里双击设备名,组态王会弹出“设备通讯状态”窗口,如果显示“连接成功”,通信就算通了;如果失败,依次检查串口号是否被占用、COM口参数是否和PLC一致、485AB线是否接反、PLC站号是否匹配。按这个顺序排查,按出现概率排,90%的问题都能覆盖。
4.4 通信故障排查思路
通信故障的排查我一般按照“先PC后PLC再线路”的顺序来。先确认上位机上COM口没被其他软件占用,设备管理器看得到串口,然后用调试工具监听收发数据,或者用组态王自带的串口监视功能。接着确认PLC侧通信参数确实生效了,很多FX3U的通信板需要重新上电或者复位后才按新参数运行,参数改完没复位就去连组态王,当然连不上。线路方面重点查485AB是否接反、屏蔽层是否接地、终端电阻是否按需加装。
还有一个常见问题是“时通时断”。组态王状态栏通信指示灯一会儿绿一会儿红,变量偶尔刷新偶尔卡住。这种多半是信号干扰或者串口设备质量太差,尤其USB转串口线不靠谱时最容易出现。我之前换了一根带隔离芯片的USB转RS485线之后,通信就再也没掉过线,这种线价格不贵,但避免的排查时间远远不止那些。
5. 现场调试过程与常见问题实录
5.1 从接线检查到联动试车的调试流程
现场调试如果顺序不对,问题会叠到一起,最后根本分不清是PLC逻辑错、接线错,还是组态王配置错。我的流程是四步走。
第一步,先断电检查接线。每个端子对着图纸点一遍号,模拟量正负端、485A/B线、电源极性都确认无误再送电。很多现场“PLC输出没反应”其实只是某个公共端没接,这种低级问题排查最费时间,所以接线检查必须做扎实。
第二步,把PLC切换到编程模式,用GX Works2的软元件监控逐一点动Y输出,确认每个设备都能动作。这一步能验证输出点和继电器、接触器的对应关系,避免后续自动模式出现“启动鼓风机结果开的是引风机”的严重错误。
第三步,给模拟量信号。用手摇泵加压模拟水位变送器信号,或者用信号发生器输出4~20mA电流,观察D10到D13的原始值是否随信号变化,确认模块通道和接线没问题。
第四步,恢复PLC运行模式,再进组态王联调。这时候如果画面数据有异常,基本可以锁定在上位机配置环节。
5.2 模拟量干扰与接地处理
现场最头疼的是模拟量数值乱跳,尤其是变频器启动时,水位和压力显示会突然波动几个百分点。处理干扰不能只靠程序滤波,先根治再滤波。我检查时发现有一段变送器电缆和变频器动力线绑在同一个桥架里,这是大忌。把模拟量线挪到独立线槽,与动力线保持30厘米以上间距,屏蔽层在PLC柜单端接地,再把4AD模块的信号电源与I/O电源分开。经过这些处理后,原始值的波动从正负十几个数字量降到了正负1以内,滤波都不用设太深,PID控制效果立刻变好。
如果干扰实在隔离不掉,就在变送器输出和PLC输入之间加信号隔离器,把现场地与PLC控制地彻底断开。隔离器要选带配电功能的,能给两线制变送器供电那种,安装后抗干扰能力会很强。碰到振动、强磁场环境,还可以把4AD模块上的滤波模式设为慢速响应,牺牲一点采样速度换取稳定。
5.3 PID参数整定实操心得
锅炉PID参数整定,我一般从纯比例开始。先把积分和微分关掉,比例系数设得保守一些,看水位曲线是一条稳定的小阻尼波动,然后逐步加大比例,直到曲线出现节奏明显的振荡,这时的比例值往回退一半,作为基础比例。再加积分,积分时间从大到小调节,直到水位静态偏差能拉回设定值且不产生明显超调。微分在锅炉水位这种慢过程里往往用得很少,水位信号本来就有波动,加了微分容易把噪声放大,所以我只加很小的微分或不加。
有一个细节值得记下来:给水调节阀和变频泵组合的系统,执行机构响应存在纯滞后,PID采样时间不能太小。水位回路我选的采样时间是500ms。比例作用太强时,阀门会频繁动作,机械磨损和阀座磨损都受不了。调试时观察阀门开度曲线,如果基本是一条平滑的渐变曲线,说明参数合理;如果阀门开度像锯齿一样剧烈变化,参数太激进,要缓和。
5.4 高频问题排查速查表
| 现象 | 常见原因 | 处理办法 |
|---|---|---|
| 组态王通信灯闪烁,变量不变 | COM口被占用或串口参数不一致 | 关闭占用软件,核对D8120与组态王参数 |
| 485通信距离远时掉线 | 缺终端电阻或屏蔽层接地不良 | 两端加120Ω终端电阻,检查接地 |
| 浮点数读出来数值巨大 | 32位数据字节顺序不一致 | 组态王变量属性改为低字节在前 |
| 水位实际值跳动明显 | 模拟量信号干扰 | 分离信号线与动力线,加隔离器 |
| 报警反复触发 | 未设置报警死区 | 在变量报警属性中设置死区 |
| 画面元件没有反应 | 动画连接绑错变量 | 进入画面编辑逐个检查变量引用 |
排查久了会发现,真正难的不是某个单独环节,而是把几类问题拆分清楚。我的习惯是每次只改一个变量,改完立刻观察效果。不要同时调参数、换线、改程序,否则问题解决了,也不知道是哪一个操作起的作用,下次遇到问题还是得从头排查。
最后再说一点经验。这套三菱PLC加组态王的组合,把主要精力放在通信和I/O映射上是值得的。项目后期大量时间花在联调而不是编程上,提前做好地址规划表,PLC程序里的寄存器地址和组态王变量严格一一对应,能省掉很大一部分重复工作。再就是资料要留全,设备配置截图、D8120参数、站号、I/O对照表,全部整理进项目文档里。当时觉得多花半小时,三个月后做维护或改造的人,会感谢这份文档。