三菱PLC与组态王锅炉自动控制系统设计与调试实践
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~20mA4AD CH10~1000mm蒸汽压力变送器4~20mA4AD CH20~1.6MPa炉膛负压变送器4~20mA4AD CH3-200~200Pa排烟温度4~20mA4AD CH40~300℃给水调节阀开度4~20mA4DA CH10~100%引风机变频器频率4~20mA4DA CH20~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对照表全部整理进项目文档里。当时觉得多花半小时三个月后做维护或改造的人会感谢这份文档。