MCGS 7.7鼓风机气压检测系统仿真程序开发全流程解析
2026/9/9 15:44:52 网站建设 项目流程

搞工业自动化的朋友应该都遇到过这种尴尬:现场设备还在物流路上,项目节点却已经压着要HMI画面和程序了。尤其是鼓风机这类大型设备,现场联调窗口短、配合成本高,等真机上去再改画面逻辑,加班周期根本不敢想。所以这几年我养成了一个习惯:凡是带模拟量监控的项目,都先用MCGS 7.7把仿真程序完整跑通,把画面、变量、报警逻辑全部验证一遍,再等设备到场直接对接。今天要分享的就是这样一个项目——鼓风机气压检测系统MCGS 7.7仿真程序探索,从工程创建、设备组态、变量定义到画面设计和报警逻辑,完整走一遍流程,顺便把我踩过的坑也一并摊开讲。

1. 项目整体设计与思路拆解

1.1 先搞清楚一个工程问题:为什么要做仿真

很多人觉得仿真程序就是"画个画面、绑几个变量",没什么技术含量。这话对了一半:如果只是为了看效果,确实简单;但如果把仿真当成正式程序的前置验证,就完全不一样了。

鼓风机气压检测这种项目,核心逻辑不算复杂,但坑全在细节里。出口压力超上限要报警、超上限限要联锁停机、滤清器压差大要提示清堵、压力波动时显示值不能跟着跳来跳去……这些逻辑如果没有提前验证,等真到了现场就会手忙脚乱。而且MCGS的程序下载到触摸屏之后,改动一次要重新编译下载、断电重启,在现场反复折腾,时间成本非常高。

我选的方案是:在MCGS 7.7里通过模拟设备替代真实传感器,先在电脑上把整套系统跑通。这样有几个实在的好处:

  • 不需要真实PLC和变送器,零硬件成本启动开发,特别适合前期方案确认和给甲方演示;
  • 所有变量、画面、脚本逻辑都提前验证过了,现场只需要改设备通讯参数,故障率大幅降低;
  • 给新手学习提供了很好的切入路径——不用面对一堆硬件接线,先把组态逻辑吃透。

1.2 鼓风机气压检测系统到底要测什么

先说清楚鼓风机气压检测的工艺背景,不然后面的变量定义和画面设计就是空中楼阁。

一套典型的鼓风机监控系统,少则两三个测点,多则七八个测点。常见的有:

  • 鼓风机出口压力:这是核心参数,直接决定风机是否在正常工作区间,超压会导致管网爆裂或风机喘振;
  • 进气滤清器真空度(负压):滤清器堵塞时进气阻力增大,真空度异常,需要提示清堵;
  • 进气总管压力与出气总管压力:用于计算压差,监测整个管路的通畅程度;
  • 冷却水压力(如有):大功率风机通常有水冷系统,冷却水压力不足会触发保护停机。

气压变送器在现场最常见的输出信号是4-20mA电流,量程根据工艺要求选定,这里我们以0-100kPa为例。4mA对应0kPa,20mA对应100kPa。在PLC侧模拟量模块会把这个电流信号转换为数字量,常见的12位AD对应的原始数值是0到4095。MCGS通过读取PLC的寄存器拿到这个原始值,再换算成实际压力值。

换算公式很简单:

实际压力值 = 量程下限 + (原始AD值 ÷ 4095) × (量程上限 - 量程下限)

这个公式后面在实时数据库的脚本里会用到,先记在这里。

1.3 为什么选MCGS 7.7:四大组态结构先摸清楚

MCGS(Monitor and Control Generated System)是国内工控圈用得相当广的组态软件,7.7版本在原有基础上把界面、变量管理和脚本调试做了不少优化。它最大的特点是把工程分成四大结构:设备窗口、用户窗口、实时数据库、运行策略。

  • 设备窗口:负责和外部设备打交道,PLC、仪表、模拟设备都从这里接入;
  • 用户窗口:就是你看到的画面,拖控件、画图形、做动画,都在这里完成;
  • 实时数据库:可以理解成一个全局变量池,所有窗口和设备都从这里读写数据;
  • 运行策略:程序逻辑的承载者,循环策略、报警策略、事件策略、启动策略都在这里编写。

这四个结构之间的关系,可以类比成一个人:设备窗口是感官(看外部信号),实时数据库是大脑(存储数据),运行策略是神经系统(决策逻辑),用户窗口是脸面(呈现给操作员)。搞清楚这个架构,后面所有操作就有了主线。

MCGS 7.7的软件体积不大,安装过程比较顺利,Win10/Win11都能正常运行。值得一提的是它的帮助文档,自带了很多案例工程可以直接参照,遇到不会的组件先翻帮助,比到处问人效率高得多。

2. 仿真程序基础框架搭建:设备窗口与实时数据库

2.1 新建工程与初始参数设置

打开MCGS 7.7,第一步是新建工程。这里有一个使用习惯上的细节:建议工程名直接写成有意义的名称,比如"鼓风机气压检测系统_仿真",不要用默认的"工程0"之类,后期工程文件多了就知道这个习惯多省事了。

工程创建后,首先进入的是"工作台"界面。在左侧可以看到设备窗口、用户窗口、实时数据库、运行策略四个页签。我一般会按照"先把数据库变量建好、再配设备、再画画面、最后写策略"的顺序推进,这样逻辑清晰、不容易返工。

工程参数里比较重要的是"运行环境"设置。仿真调试阶段建议把窗口分辨率设置成和实际触摸屏一致,比如常用的7寸屏是800×480,10寸屏是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_state=1,这样风机运行时绿灯亮,停止时自动消失。同理加一个红色灯绑定Fan_state=0,就能实现红绿切换的效果。

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_high(80kPa)时,触发报警,画面上压力数值变成红色闪烁,报警列表里写入一条记录,同时累计报警次数。第三级是联锁停机,当压力超过P_highH(90kPa)时,除了报警之外,还要强制Fan_state=0,也就是把风机关掉,防止事故扩大。

这个逻辑在循环策略中的脚本类似这样:

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脚本里赋值语句不能链式写,比如A=B=C这样是会报错的,需要分开写。

调试脚本强烈建议开启"调试信息输出",在运行环境中能看到脚本执行到哪一步、变量值是多少。这比盲改代码高效太多,特别是变量数量多的时候,几乎是救命功能。

5.3 仿真转真机时的三个切换要点

仿真程序跑通只是第一步,设备到场后要切到真实PLC,这时候有几个关键点不能忘。

第一,设备窗口里要把模拟设备替换成真实的PLC设备驱动,并配置通讯参数,比如串口COM口、波特率、站号或以太网IP地址。这一步最容易出错的是通讯参数,最好在工程里先把"通讯状态"变量拉出来显示在画面上,方便现场确认通讯是否正常。

第二,模拟量通道的数据范围要对齐。真实PLC的AD值通常是0-4095或0-27648(14位AD),如果仿真时脚本里的换算系数是针对模拟设备的,切到真机时一定要核对量程范围,否则显示的压力值会差得离谱。

第三,报警参数的下发。现场运行工况和仿真环境不一样,甲方可能要求把报警值调到65kPa而不是80kPa,这个参数在触摸屏上直接改就行,前提是你在画面上留了参数入口。如果没留,就只能重新整定进程序重新下载,费时费力,这也是我前面反复强调参数不要写死的原因。

6. 最后分享一点自己的体会

做这个鼓风机气压检测系统MCGS 7.7仿真程序,最大的收获不是学会了某个控件怎么用,而是建立了一套"先仿真验证、后现场交付"的工作方法。仿真环境成本低、反馈快、不怕改错,非常适合前期方案验证、给甲方演示、甚至培训新入职的电工和工艺员。MCGS 7.7自带的模拟设备、报警策略、曲线控件这些功能,应付中小型监控系统的仿真绰绰有余。如果你也正在做类似的风机、水泵、空压机监控项目,我建议你也试着先花半天时间把仿真程序搭起来,把变量逻辑理清楚,现场调试的焦虑感至少能少一半。下次遇到新的项目,换汤不换药,这套思路依然管用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询