MCGS 7.7鼓风机气压检测系统仿真程序开发全流程解析

MCGS 7.7鼓风机气压检测系统仿真程序开发全流程解析 搞工业自动化的朋友应该都遇到过这种尴尬现场设备还在物流路上项目节点却已经压着要HMI画面和程序了。尤其是鼓风机这类大型设备现场联调窗口短、配合成本高等真机上去再改画面逻辑加班周期根本不敢想。所以这几年我养成了一个习惯凡是带模拟量监控的项目都先用MCGS 7.7把仿真程序完整跑通把画面、变量、报警逻辑全部验证一遍再等设备到场直接对接。今天要分享的就是这样一个项目——鼓风机气压检测系统MCGS 7.7仿真程序探索从工程创建、设备组态、变量定义到画面设计和报警逻辑完整走一遍流程顺便把我踩过的坑也一并摊开讲。1. 项目整体设计与思路拆解1.1 先搞清楚一个工程问题为什么要做仿真很多人觉得仿真程序就是画个画面、绑几个变量没什么技术含量。这话对了一半如果只是为了看效果确实简单但如果把仿真当成正式程序的前置验证就完全不一样了。鼓风机气压检测这种项目核心逻辑不算复杂但坑全在细节里。出口压力超上限要报警、超上限限要联锁停机、滤清器压差大要提示清堵、压力波动时显示值不能跟着跳来跳去……这些逻辑如果没有提前验证等真到了现场就会手忙脚乱。而且MCGS的程序下载到触摸屏之后改动一次要重新编译下载、断电重启在现场反复折腾时间成本非常高。我选的方案是在MCGS 7.7里通过模拟设备替代真实传感器先在电脑上把整套系统跑通。这样有几个实在的好处不需要真实PLC和变送器零硬件成本启动开发特别适合前期方案确认和给甲方演示所有变量、画面、脚本逻辑都提前验证过了现场只需要改设备通讯参数故障率大幅降低给新手学习提供了很好的切入路径——不用面对一堆硬件接线先把组态逻辑吃透。1.2 鼓风机气压检测系统到底要测什么先说清楚鼓风机气压检测的工艺背景不然后面的变量定义和画面设计就是空中楼阁。一套典型的鼓风机监控系统少则两三个测点多则七八个测点。常见的有鼓风机出口压力这是核心参数直接决定风机是否在正常工作区间超压会导致管网爆裂或风机喘振进气滤清器真空度负压滤清器堵塞时进气阻力增大真空度异常需要提示清堵进气总管压力与出气总管压力用于计算压差监测整个管路的通畅程度冷却水压力如有大功率风机通常有水冷系统冷却水压力不足会触发保护停机。气压变送器在现场最常见的输出信号是4-20mA电流量程根据工艺要求选定这里我们以0-100kPa为例。4mA对应0kPa20mA对应100kPa。在PLC侧模拟量模块会把这个电流信号转换为数字量常见的12位AD对应的原始数值是0到4095。MCGS通过读取PLC的寄存器拿到这个原始值再换算成实际压力值。换算公式很简单实际压力值 量程下限 (原始AD值 ÷ 4095) × (量程上限 - 量程下限)这个公式后面在实时数据库的脚本里会用到先记在这里。1.3 为什么选MCGS 7.7四大组态结构先摸清楚MCGSMonitor and Control Generated System是国内工控圈用得相当广的组态软件7.7版本在原有基础上把界面、变量管理和脚本调试做了不少优化。它最大的特点是把工程分成四大结构设备窗口、用户窗口、实时数据库、运行策略。设备窗口负责和外部设备打交道PLC、仪表、模拟设备都从这里接入用户窗口就是你看到的画面拖控件、画图形、做动画都在这里完成实时数据库可以理解成一个全局变量池所有窗口和设备都从这里读写数据运行策略程序逻辑的承载者循环策略、报警策略、事件策略、启动策略都在这里编写。这四个结构之间的关系可以类比成一个人设备窗口是感官看外部信号实时数据库是大脑存储数据运行策略是神经系统决策逻辑用户窗口是脸面呈现给操作员。搞清楚这个架构后面所有操作就有了主线。MCGS 7.7的软件体积不大安装过程比较顺利Win10/Win11都能正常运行。值得一提的是它的帮助文档自带了很多案例工程可以直接参照遇到不会的组件先翻帮助比到处问人效率高得多。2. 仿真程序基础框架搭建设备窗口与实时数据库2.1 新建工程与初始参数设置打开MCGS 7.7第一步是新建工程。这里有一个使用习惯上的细节建议工程名直接写成有意义的名称比如鼓风机气压检测系统_仿真不要用默认的工程0之类后期工程文件多了就知道这个习惯多省事了。工程创建后首先进入的是工作台界面。在左侧可以看到设备窗口、用户窗口、实时数据库、运行策略四个页签。我一般会按照先把数据库变量建好、再配设备、再画画面、最后写策略的顺序推进这样逻辑清晰、不容易返工。工程参数里比较重要的是运行环境设置。仿真调试阶段建议把窗口分辨率设置成和实际触摸屏一致比如常用的7寸屏是800×48010寸屏是1024×600先定好分辨率画面组态时就不会出现控件超出边界的问题。2.2 模拟设备配置没有PLC也能有数据源MCGS 7.7在设备窗口里提供了一个非常实用的组件——模拟设备。它能在不连接真实硬件的情况下按照设定的规律产生变化的数据非常适合做仿真。具体操作路径进入设备窗口在工具箱里找到模拟设备双击或拖入设备列表。双击模拟设备进入属性设置可以看到它提供了多路模拟量输出通道每一路都可以设置初始值、变化范围、变化速度等参数。就拿出口压力这一路来说我设置了这样的参数通道初始值50.0模拟50kPa也就是正常运行中的中间值变化下限0变化上限100变化速度0.5数值每周期变化0.5。这样模拟设备就会在0到100的范围内持续缓慢变化近似还原压力波动。如果你希望数据更接近真实工况还可以在后面的循环策略里用脚本对这个原始值做进一步处理比如叠加一个阶梯变化、加一点随机扰动、甚至模拟突然超压等异常场景。需要提醒的是模拟设备输出的数值范围和真实变送器的工程量之间是两回事。如果你用PLC连接真实变送器读回来的通常是AD转换原始值比如0-4095但用模拟设备时它输出的就是普通数值。所以我在设计变量时特意做了统一无论是模拟设备还是真实PLC原始数据都先存到一个原始值变量里然后在脚本里面统一换算成工程量。这样仿真和实际切换时只需要换设备驱动脚本逻辑完全不用动。2.3 实时数据库变量就是程序的灵魂打开实时数据库页签这里就是MCGS工程的核心了。每一个变量都对应一个数据对象定义变量时最重要的是类型选择。MCGS的变量类型主要有数值型、开关型和字符型我们这个项目里用到的变量可以这样规划变量名类型含义初始值备注P_out_raw数值型出口压力原始值0来自模拟设备/PLC AD值P_out数值型出口压力工程值(kPa)0换算后的显示值P_in_raw数值型进气真空度原始值0来自模拟设备/PLC AD值P_in数值型进气真空度工程值(kPa)0换算后的显示值P_high数值型出口压力上限报警值(kPa)80操作员可修改P_highH数值型出口压力上限限报警值(kPa)90联锁停机值Alarm_status开关型报警状态01表示有报警Fan_state开关型鼓风机运行状态01表示运行中Fan_cmd开关型鼓风机启停命令0按钮触发Run_hours数值型累计运行时间(h)0分钟级别累加变量命名的习惯我这里单独说一下在MCGS里中文变量名虽然在很多场合能用但我建议全部使用英文或拼音加下划线的命名方式。原因有两点一是脚本编辑器对中文的支持偶尔会出现莫名其妙的报错二是后面如果要把工程移植到其他组态软件英文变量名通用性更强。2.4 模拟量换算脚本里的常规动作前面说了模拟设备直接输出数值但如果走的是真实PLC通道就需要把AD原始值转换成工程值。这个换算逻辑在MCGS里通常写在循环策略中每秒钟执行一次。换算脚本类似下面这样 出口压力换算 IF P_out_raw 0 AND P_out_raw 4095 THEN P_out 0 (P_out_raw / 4095) * (100 - 0) ENDIF这里量程下限是0上限是100kPa所以公式简化了。如果量程下限不是0比如变送器量程是-10到50kPa公式就要写成P_out -10 (P_out_raw / 4095) * (50 - (-10))在实际工程中上限报警值、联锁值、量程上下限这些东西千万别在脚本里写死应该放到实时数据库里做成变量然后在画面上留出参数设置入口。这样不同工况下调整参数不需要改程序操作员在触摸屏上就能直接改。3. 监控画面组态把界面做得像那么回事3.1 画面整体布局用户窗口是MCGS工程的脸面操作员每天就对着这个屏幕干活所以布局是否合理直接影响使用体验。对于一个鼓风机气压检测系统我的画面布局一般分为几个区域顶部工程标题和当前时间中间主体鼓风机工艺流程示意图用图形元件绘制风机、管道、测压点左侧实时压力数据显示区包括数值、趋势曲线右侧操作按钮区包括启动、停止、报警复位、参数设置入口底部报警信息滚动显示和状态指示。这种布局的好处是信息分区明确操作员扫一眼就能看到最关心的压力数值和报警状态需要操作时自然往右侧按钮区去找。分辨率设成800×480时这个布局刚好放得下要注意不要把所有控件挤在一起留足间距看起来更专业。3.2 鼓风机工艺流程示意图MCGS的用户窗口提供了绘图工具箱可以画矩形、圆、直线、多边形等基本图元也可以使用图库里的元件。虽然它的绘图能力比不上专业CAD但画一个简单直观的工艺示意图是够用的。我的做法比较简单用两个圆和一个矩形组合代表鼓风机本体用直线加箭头表示进出口管道方向出口管路上用一个小圆圈标记测压点位置旁边放一个标签写着PT-101压力变送器位号。画图时有一个经验把相同用途的图元编组选中后右键组合这样移动和缩放非常方便否则一个几百个图元的画面后期改起来简直要命。图形的填充颜色也可以利用变量驱动比如风机运行时电机图形变成绿色停止时变成灰色这个在动画连接里设置。3.3 数据显示与仪表控件数据实时显示是监控画面的核心MCGS提供了好几种方式标签控件静态显示文字数值显示控件显示变量数值仪表盘控件以表盘形式展示压力值比较直观滑动输入器和输入框用于参数设定。我的画面上出口压力P_out用一个仪表盘控件显示量程设为0-100kPa报警区间80-90kPa在表盘上用红色扇形标出。这样做的好处是操作员不用盯数字一眼就能看出指针是否进入危险区。数值显示控件的设置里有一个容易忽略的点小数位位数。压力值保留一位小数就够了不要设成三四位画面看起来又挤又蠢。还有一个地方是显示格式可以选择是否显示单位我一般会在控件旁边用标签手动加上kPa字样视觉上比控件自带单位更好控制。3.4 实时曲线与历史曲线趋势曲线是判断系统运行状态的重要工具可以直观看到压力变化的趋势。MCGS提供了实时曲线和历史曲线两种控件我们的仿真程序里用的是实时曲线。实时曲线控件的配置要点如下曲线颜色和背景色要有足够对比比如黄色曲线配深色背景X轴时间范围一般设60秒也就是能看到过去一分钟的变化趋势Y轴量程要和变量量程一致不然曲线显示会失真可以同时绑定多条曲线比如出口压力和进气真空度一条图上对比。曲线控件的刷新方式需要注意实时曲线是滚动显示的时间到了它会自动左移这个过程中偶尔会有断点的情况也就是曲线不连续。排查下来一般是因为控件刷新周期和脚本扫描周期不匹配造成的解决办法是统一把循环策略扫描周期和曲线刷新周期设为相同值比如都是1000ms。3.5 按钮与输入框的动画连接画面上的按钮不是画上去就完事的必须绑定变量或脚本才有意义。在MCGS里双击一个按钮进入动画连接设置。启动按钮的设置思路按钮属性选按下时触发脚本Fan_cmd 1松开时触发脚本Fan_cmd 0。这样做的目的是模拟实际按钮的瞬动效果防止操作员按住不松开导致命令一直有效。停止按钮同理只不过把1换成0。参数输入框更简单直接绑定P_high、P_highH这类变量然后在输入属性里设置上下限范围防止操作员误输一个离谱的值。比如P_high的范围我限定在50-90kPa防止有人手一抖输成500导致报警形同虚设。设备状态的指示可以用图形元件的可见度属性来做选中一个绿色指示灯图形动画连接选可见度表达式填Fan_state1这样风机运行时绿灯亮停止时自动消失。同理加一个红色灯绑定Fan_state0就能实现红绿切换的效果。4. 运行策略与报警逻辑让程序真正聪明起来4.1 循环策略每秒都在做什么运行策略是整个工程的逻辑大脑循环策略是其中应用最多的一个。MCGS默认的循环策略是1000ms扫描一次也就是1秒执行一次这个频率对于气压检测来说已经足够了不建议把周期改得太短否则脚本刷屏式执行界面会卡顿。循环策略里我主要写三件事第一数据采集与换算。把设备窗口读到的原始值换算成工程值放进P_out等变量里。第二累计运行时间统计。当Fan_state为1时每执行一次策略就给秒计数器加1满60秒转换成分钟再累加到Run_hours里。第三调用报警判断逻辑。这里要重点说一下鼓风机累计运行时间的写法很多新手容易在这里出错IF Fan_state 1 THEN Time_sec Time_sec 1 IF Time_sec 60 THEN Time_sec 0 Run_min Run_min 1 IF Run_min 60 THEN Run_min 0 Run_hours Run_hours 1 ENDIF ENDIF ENDIF用中间变量先做秒和分钟的累加最后才折算到小时这样不仅逻辑清晰而且方便在画面上显示运行X小时X分的格式。4.2 报警判断与联锁逻辑鼓风机气压检测的报警逻辑是整个程序里最核心的部分直接关系到设备安全。我的设计分三级处理第一级是正常范围压力在0-80kPa之间系统正常运行指示灯绿色。第二级是报警当压力超过P_high80kPa时触发报警画面上压力数值变成红色闪烁报警列表里写入一条记录同时累计报警次数。第三级是联锁停机当压力超过P_highH90kPa时除了报警之外还要强制Fan_state0也就是把风机关掉防止事故扩大。这个逻辑在循环策略中的脚本类似这样IF P_out P_high AND P_out P_highH THEN Alarm_status 1 此处可触发报警窗口提示 ELSEIF P_out P_highH THEN Alarm_status 1 Fan_state 0 Fan_cmd 0 ELSE Alarm_status 0 ENDIF报警策略在MCGS里还有一种专门的实现方式——独立的报警策略。在运行策略页签里添加一个报警策略在里面可以针对变量设置上限报警、上限限报警、下限报警、下限限报警等类型系统会自动生成报警记录。这个功能比纯脚本实现要省事得多推荐优先使用。4.3 报警显示与报警复位报警发生后还需要把报警信息展示出来并且允许操作员复位。MCGS提供了报警显示控件拖到画面上绑定相应的数据对象就能自动显示报警时间、报警变量、报警类型、报警值等信息。复位按钮的设计有一个细节报警复位通常是两个动作的组合。第一是清除报警状态把Alarm_status变量归零第二是如果导致报警的原因比如超压还没有解除那么复位后还会再次报警。我通常在复位脚本里加一个延迟判断IF Fan_cmd 0 THEN Alarm_status 0 ENDIF也就是说只有在风机没有启动的情况下才允许复位报警这样避免操作员在设备还在异常状态下强行复位报警、掩盖故障。5. 常见问题与排查技巧实录5.1 仿真调试中遇到的几类典型问题MCGS的仿真运行和真实环境相比出问题的地方往往集中在变量连接和脚本语法上。这里整理几个高频问题基本覆盖了新手到进阶的常见踩坑点。画面没有数据显示这个是最常见的问题。画面能打开模拟设备也配置了但数值控件就是显示0。排查思路分三步先看实时数据库里对应的变量有没有值——在运行环境中按F5进入运行数据查看如果变量为0再到设备窗口检查模拟设备的通道是否已经和变量建立了连接如果变量有值但界面没显示检查控件是否绑定错了对象名。实测中十有八九是通道连接时选错了变量或者画面控件绑定对象选到了同名不同键的变量。变量值一直跳动、不稳定模拟设备本身产生的数据就带有随机性如果直接显示在界面上数值会一直在跳动看起来不专业也影响操作员判断。解决办法是加一个一阶滤波也就是把上一秒的值和当前读到的值做加权平均P_out_display 0.8 * P_out_display 0.2 * P_out系数0.8和0.2是我实际调试下来手感比较好的组合如果你觉得还是太灵敏可以改成0.9和0.1。这个滤波公式对真实PLC采集的模拟量同样适用能有效抑制工业现场的电气干扰。脚本运行不报错但逻辑不生效这种情况往往是脚本里用了中文标点或者半角全角括号混用。MCGS脚本编辑器对中英文标点非常敏感一个小括号不对脚本就直接不执行。排查方法是在运行环境下通过调试窗口单步执行脚本看每一步的变量实际变化。另外一个隐患是IF语句的ENDIF漏写了MCGS不会把所有语法错误都显式提示有时候只是静默跳过。5.2 关于MCGS 7.7脚本语法的几个细节MCGS的脚本语法和VB比较接近但有一些自己的特点容易踩坑。变量名在脚本中大小写不敏感但建议统一大写开头提高可读性字符串比较用号数值比较可以用、、、、逻辑运算符是AND、OR、NOT不可以用、||这种C语言写法。注释用单引号英文单引号也就是开头而VB里用REM。多行注释不常用我一般用多个单引号行。还有一个容易困惑的地方MCGS脚本里赋值语句不能链式写比如ABC这样是会报错的需要分开写。调试脚本强烈建议开启调试信息输出在运行环境中能看到脚本执行到哪一步、变量值是多少。这比盲改代码高效太多特别是变量数量多的时候几乎是救命功能。5.3 仿真转真机时的三个切换要点仿真程序跑通只是第一步设备到场后要切到真实PLC这时候有几个关键点不能忘。第一设备窗口里要把模拟设备替换成真实的PLC设备驱动并配置通讯参数比如串口COM口、波特率、站号或以太网IP地址。这一步最容易出错的是通讯参数最好在工程里先把通讯状态变量拉出来显示在画面上方便现场确认通讯是否正常。第二模拟量通道的数据范围要对齐。真实PLC的AD值通常是0-4095或0-2764814位AD如果仿真时脚本里的换算系数是针对模拟设备的切到真机时一定要核对量程范围否则显示的压力值会差得离谱。第三报警参数的下发。现场运行工况和仿真环境不一样甲方可能要求把报警值调到65kPa而不是80kPa这个参数在触摸屏上直接改就行前提是你在画面上留了参数入口。如果没留就只能重新整定进程序重新下载费时费力这也是我前面反复强调参数不要写死的原因。6. 最后分享一点自己的体会做这个鼓风机气压检测系统MCGS 7.7仿真程序最大的收获不是学会了某个控件怎么用而是建立了一套先仿真验证、后现场交付的工作方法。仿真环境成本低、反馈快、不怕改错非常适合前期方案验证、给甲方演示、甚至培训新入职的电工和工艺员。MCGS 7.7自带的模拟设备、报警策略、曲线控件这些功能应付中小型监控系统的仿真绰绰有余。如果你也正在做类似的风机、水泵、空压机监控项目我建议你也试着先花半天时间把仿真程序搭起来把变量逻辑理清楚现场调试的焦虑感至少能少一半。下次遇到新的项目换汤不换药这套思路依然管用。