☰
MCGS组态软件配合PLC仿真:配料称重系统设计调试全解析
2026/10/20 8:32:56 网站建设 项目流程

做配料称重系统这件事,最头疼的往往不是控制逻辑本身,而是调试环境。现场没设备、传感器没接、PLC没到位,程序写好了却没地方跑,这是很多搞自动化的人都会撞上的墙。用MCGS组态软件做上位机界面,搭配PLC仿真来验证整个配料称重流程,是我这几年用过最顺手的低成本验证方案。这套东西既能跑通逻辑,又能把画面做出来给老板和同事看,最关键是省钱省时间。这篇文章我就把整个设计思路、实操步骤和踩过的坑完整写出来,适合正在做毕业设计、课程设计,或者刚入行需要快速验证方案的朋友。

1. 项目整体设计与方案选型

1.1 这套方案解决什么问题

配料称重在工业现场太常见了:化工、饲料、建材、食品,凡是需要按配方把几种物料按比例混合的产线,都离不开这套逻辑。典型的工作流程是:启动后依次打开几种物料的给料设备,每种物料达到目标重量就切换或停止,全部加完以后放料排出,然后进入下一个循环。

用真实PLC加真实仪表做这套系统,成本少说几万块,而且调试周期长。但很多场景下,我们其实只是想验证控制策略、跑通HMI画面、演示工艺流程,这时候MCGS组态加PLC仿真就是最优解。MCGS负责画面和操作逻辑,PLC仿真负责模拟真实的输入输出和重量变化,两边一配合,一套完整的配料称重系统就在电脑里跑起来了。

这套组合能做的事情不少:配方管理、手动/自动切换、实时重量显示、变频给料控制、报警记录、数据报表,基本上把现场能遇到的功能都覆盖了。对于学生做课设,这就是完整的设计素材;对于工程师做方案预演,这就是快速验证的工具箱。

1.2 为什么选MCGS配合PLC仿真

先说MCGS。国产组态软件里,MCGS的上手门槛确实低,尤其是嵌入版,拖拖拽拽就能把画面搭出来。它的实时数据库、设备窗口、用户窗口这套架构很直观,做工程项目的速度比从零写上位机快得多。很多高校的自动化专业和电气专业,实验室配的就是这套软件,所以拿它来做示例,大家上手没有隔阂。

再说PLC仿真。仿真不是为了替代真实PLC,而是为了在硬件条件不具备的时候,先把程序和画面验证到位。我用过的仿真方式有两种:一种是用PLC编程软件自带的仿真功能,把梯形图跑起来,往外发数据给MCGS;另一种是直接用MCGS的设备仿真或者用脚本模拟数据变化。两种各有优劣,后面实操部分我会详细对比。

还有一点很实际:这套软组合方案对未来移植到真实设备也是平滑的。MCGS画面基本不用动,PLC程序里的变量地址你提前规划好,到时候直接替换成真实PLC的IP地址或者串口号就行。这一点我后面会反复强调,因为很多人在仿真阶段偷懒随便建变量,到现场全得返工。

1.3 系统组成与功能拆解

整套系统拆开来看,主要是三个部分:控制逻辑部分、界面显示部分、数据交互部分。

控制逻辑在PLC(仿真)里实现:称重传感器信号经变送器转换成标准信号,PLC通过模拟量模块读取当前重量,然后根据配方设定值控制各个给料设备的启停,实现粗加料、精加料、停止、换料、卸料这些动作。界面上会有手动/自动两种模式的切换,自动模式下还要处理启动条件、循环次数、完工报警这些细节。

界面显示在MCGS里实现:主要画面包括系统主画面(看总体状态、重量曲线、设备运行灯)、配方管理画面(设置各物料的设定重量)、报警画面(记录超差、故障信息)、报表画面(查询历史批次数据)。操作人员通过触摸屏上的按钮完成启动、停止、复位等操作,状态信息通过指示灯、数值显示、棒图这些元件实时呈现。

数据交互通过串口或者以太网完成:MCGS作为上位机(主站),PLC作为下位机(从站),常用的协议是Modbus RTU。MCGS定时轮询PLC中的寄存器,把重量值、运行状态读上来,同时把操作指令写下去。

2. 核心细节解析与实操要点

2.1 变量规划是成败关键

这个项目里,变量规划直接决定后面所有工作的顺畅度。我见过太多人上来就画画面,画完了才发现变量没建全,又回头改,来回折腾。正确的顺序应该是:先画系统结构图和流程图,再列变量表,最后才动手搭画面。

变量表要区分好输入、输出和中间量。以一套三物料配料系统为例,大致需要这些变量:

变量名类型对应PLC地址功能说明
当前重量数值模拟量输入称重传感器的实时重量
物料A设定数值保持寄存器配方中A的目标重量
物料B设定数值保持寄存器配方中B的目标重量
物料C设定数值保持寄存器配方中C的目标重量
启动按钮开关线圈启动自动配料流程
停止按钮开关线圈停止当前流程
手动/自动开关线圈模式切换
A给料运行开关线圈控制A料仓的给料设备
B给料运行开关线圈控制B料仓的给料设备
C给料运行开关线圈控制C料仓的给料设备
卸料阀开关线圈控制放料阀门
批次计数数值保持寄存器当前累计完成的批次数

变量命名建议带上前缀区分类型,比如用AI开头表示模拟量输入,AQ表示模拟量输出,DI表示数字量输入,DO表示数字量输出。这样做的好处是,变量多起来以后不会乱,而且对上位机和PLC两边的地址映射关系一目了然。

2.2 MCGS组态画面的设计逻辑

MCGS的画面组态分几个层次,从底层往上分别是:用户窗口(也就是画面本身)、实时数据库(变量集合)、设备窗口(驱动配置)、运行策略(脚本逻辑)。很多人只把注意力放在用户窗口上,忽略了运行策略,其实运行策略才是MCGS里最能体现水平的部分。

画面布局上,我推荐分屏设计而不是全挤在一个页面里。主画面放流程图和操作按钮,这是操作工每天面对的画面;配方画面放参数输入,这是班组长用的;报警和信息画面单独一页,方便随时切换查看。屏幕尺寸一般是10寸或者15寸,按这个尺寸来做排版,尤其是按钮大小和间距,要考虑手指触摸的便利性,不能做得跟鼠标操作一样小。

这里有个实用技巧:凡是需要操作工频繁按的按钮,比如启动、停止、急停,放在主画面的固定位置且要显眼;凡是设置类参数,放在子画面并加上权限控制。操作工误触配方参数导致生产事故的案例,我在现场见过不止一次,所以权限分离一定要做。

2.3 PLC控制程序设计要点

配料称重系统的PLC控制逻辑,核心就是一个"粗加料-精加料-停止-换料-卸料"的状态循环。之所以要分粗加和精加,是因为称重系统有惯性,给料设备停止后到实际停止下来,物料还会多冲进去一些,这叫过冲量。粗加阶段用快速度进料,到目标值的大约90%时切换到精加,精加阶段用慢速度进料,到达目标值才停。

仿真环境下虽然没有真实的过冲量,但这个逻辑还是要在程序里体现出来,毕竟最终要移植到真实设备上。PLC里的实现思路是:每个物料对应一个状态字,状态字的不同数值代表不同的阶段。用一个定时中断或者扫描周期来读取当前重量,跟设定值比较,然后改变状态字。梯形图写起来虽然直观,但状态多了以后会显得很散,有条件的话用SFC(顺序功能图)或者ST(结构化文本)来写会更清晰。

另外提醒一点:自动模式的启动条件必须做完整检查,比如当前重量必须接近零、所有给料设备必须在停止状态、卸料阀必须已关闭、批次计数没有异常。这些条件缺一漏一,运行中途就可能出各种诡异问题。

2.4 MCGS运行策略与脚本应用

MCGS运行策略这块是很多教程没讲透的地方。它本质上是个事件驱动的脚本环境,常用的策略有启动策略(打开画面时执行一次)、循环策略(周期性执行)、退出策略(关闭画面时执行)。

做配料称重系统,我在MCGS里主要做三件事:一是开机初始化参数,把上一次保存的配方读出来写到显示控件里;二是做重量超差报警判断,当实际重量跟设定值偏差超过允许范围时弹出报警;三是做报表数据记录,每完成一个批次就把关键数据追加到数据表里,方便后续查询。

这里给一个循环策略中做超差判断的脚本示意:

!IF 当前重量 > 物料A设定 * 1.02 THEN 报警状态 = 1 报警内容 = "物料A重量超差" !ELSE 报警状态 = 0 !ENDIF

脚本语法不复杂,重点是逻辑要写清楚。特别注意字符串拼接和数值比较的写法,MCGS脚本对变量类型的处理比较灵活,但建议养成显式转换的习惯,避免类型混乱带来的隐性bug。

3. 实操过程与核心环节实现

3.1 建立工程与PLC通信连接

第一步是在MCGS里新建工程,选择嵌入版还是网络版取决于你后续要跑的硬件环境。如果只是纯仿真验证,嵌入版就够了。工程建好之后,先不要急着画画面,第一件事是配置设备窗口——把"通用串口父设备"和"Modbus RTU从站设备"加进来,这样MCGS才能跟PLC仿真软件交换数据。

串口参数的设置很关键。仿真环境里用的往往是虚拟串口,比如通过软件把PLC仿真的数据映射到一个虚拟COM口上,MCGS从这个COM口读数据。常见的参数组合是波特率9600、8个数据位、无校验、1个停止位,也就是常说的9600, 8, N, 1。主从站地址要确认一致,PLC那边设置的从站站号是多少,MCGS设备地址里就要填多少,这个不一致的话,通信会一直报错。

3.2 设备通道与实时数据库绑定

配置完设备窗口,接下来就是把设备通道跟实时数据库里的变量进行绑定。打开设备编辑界面,可以看到系统自动生成的通道列表,每个通道对应PLC里的一个寄存器或者线圈。我们要做的是给每个通道取一个清晰的名称,并把它跟实时数据库里对应的自定义变量关联起来。

以重量读取为例,PLC里的AIW0寄存器存放的是模拟量转换后的当前重量值,那我在MCGS里新建一个数值变量叫"当前重量",然后在设备通道里把这个通道的对应变量改为"当前重量"。这样MCGS每周期轮询到AIW0的最新值,就会自动写入这个变量,画面上的显示控件再引用这个变量,就能实时看到重量变化了。

提示:仿真阶段最容易被忽视的是数据格式换算。PLC里读到的原始值通常是0~32000或0~4000这个范围的数字,对应的可能是0~1000kg的物理重量。确认好量程范围和线性对应关系,在MCGS里做一次线性换算,画面上显示的才是真实重量值。很多人仿真时画面数字乱跳,十有八九是这里没设置对。

3.3 画面组态与动画连接

通信和变量弄好之后,就到了最出效果的画面组态环节。新建一个用户窗口叫"主画面",在画布上用图元工具画出工艺流程图:料仓、给料机、输送带、称量斗、卸料阀,每个设备图元旁边放一个指示灯或者运行状态文字。

动画连接是这个环节的灵魂。MCGS里的每个图形元素都可以设置动画属性,比如一个圆形代表给料电机,我可以把它的填充颜色跟"物料A运行"这个开关变量绑定:变量值为1时显示绿色,为0时显示灰色。数值显示控件绑定"当前重量",棒图控件把重量值用柱状图显示出来,操作工一眼就能看出料斗装了多少。

我习惯在画面上再加三样东西:一是实时趋势曲线,监控重量在整个循环中的变化过程;二是批次统计表格,显示当前配方、目标重量、实际重量、偏差值;三是操作记录框,把每一次点击按钮的动作和操作时间记下来。这三样东西对后续分析和演示都特别有用。

3.4 PLC仿真运行与联动调试

这部分是整个项目的重头戏。我用的PLC仿真方案是:在PLC编程软件中编写完整的配料控制程序,编译无误后进入仿真模式,PLC程序开始在虚拟环境中循环运行。关键一步是设置虚拟通信接口,让PLC仿真的Modbus协议栈发出的数据可以被MCGS接收到。

具体流程大概是这样的:

  1. 在PLC编程软件中编写梯形图程序并编译。
  2. 启动仿真,确认程序没有报错,可以正常进入RUN状态。
  3. 用虚拟串口工具创建一对互联的COM口,比如COM1和COM2。
  4. PLC仿真软件把COM1作为Modbus从站接口绑定。
  5. MCGS的设备窗口把COM2作为主站通信口绑定。
  6. 两边参数设置一致后启动MCGS运行环境,观察数据是否流动起来。

联动调试的时候,我会先在MCGS的画面上手动操作测试。切到手动模式,点一下"A给料启动"按钮,正常情况下PLC那边应该收到这个指令,对应的输出点置位,然后我手动改变重量值来模拟物料增加。当重量接近设定值时,PLC程序应该自动把给料指令复位掉。这个流程跑通,说明最基本的联动逻辑没问题。

再切到自动模式,点启动,整个配料流程应该自动跑:开A给料、目标到切换、开B给料、目标到切换、开C给料、目标到卸料,卸完料关闭阀门,批次计数加一。我把这个过程的每一步都记录下来,对照设计规格书逐项核实。

3.5 关键脚本与控制逻辑实现示例

这里我贴一段我自己在MCGS运行策略里用的脚本,模拟一个完整的加料判断逻辑。这是循环策略中的一部分,每200毫秒执行一次:

!IF 自动模式 = 1 AND 启动指令 = 1 THEN !IF 当前状态 = 0 THEN !IF 当前重量 > 0.5 THEN 报警状态 = 1 报警内容 = "称量斗未排空,禁止启动" !ELSE 当前状态 = 1 物料A给料 = 1 !ENDIF !ELSEIF 当前状态 = 1 THEN !IF 当前重量 >= 物料A设定 * 0.9 THEN 物料A给料 = 0 物料A精加 = 1 当前状态 = 2 !ENDIF !ELSEIF 当前状态 = 2 THEN !IF 当前重量 >= 物料A设定 THEN 物料A精加 = 0 物料B给料 = 1 当前状态 = 3 !ENDIF !ELSEIF 当前状态 = 3 THEN !IF 当前重量 >= 物料A设定 + 物料B设定 THEN 物料B给料 = 0 物料C给料 = 1 当前状态 = 4 !ENDIF !ELSEIF 当前状态 = 4 THEN !IF 当前重量 >= 物料A设定 + 物料B设定 + 物料C设定 THEN 物料C给料 = 0 卸料阀 = 1 当前状态 = 5 !ENDIF !ELSEIF 当前状态 = 5 THEN !IF 当前重量 <= 2 THEN 卸料阀 = 0 批次计数 = 批次计数 + 1 当前状态 = 0 !ENDIF !ENDIF !ENDIF

这段脚本把核心的段逻辑写清楚了,后续如果要增加物料种类,照着这个模式往下加状态就行。要注意的是,实际工程中我建议把状态判断放在PLC侧做,MCGS侧只做显示和操作指令下发。上面这段脚本适合纯MCGS单机演示的场景,如果PLC可用的环境下,还是遵循前面说的分工原则更稳妥。

4. 常见问题与排查技巧实录

4.1 通信连不上或数据不刷新

这是我被问得最多的一个问题。做完了所有配置,MCGS运行起来,设备状态却一直是红色的"通信失败"。排查思路是固定的:先确认串口号是否匹配,再查波特率等参数,然后确认站地址。

我碰到过最隐蔽的一个问题是两个虚拟串口软件互相冲突,把COM口的占用关系搞乱了。这种问题用系统自带的设备管理器查一下端口占用情况就能发现。还有一个经常出现的问题是PLC仿真环境下没有给Modbus从站分配正确的寄存器映射区域,导致MCGS读上来的数据全是零或者超范围数值。这种时候打开PLC编程软件里的数据监控表,看看映射区域的数值到底有没有变化,很快就能定位。

仿真阶段通信调试,我建议先把MCGS的"采集频率"调快一点,比如100毫秒轮询一次,方便观察数据变化趋势。等通信确认稳定了,再把轮询频率调回到500毫秒或者1秒,减少系统负载。

4.2 重量数据跳变不稳定

重量值在画面上跳来跳去,通常不是通信问题,而是数据转换和滤波没做好。现场环境存在各种电磁干扰,传感器信号不干净;仿真环境则往往是你没有按实际量程做线性换算,导致数据增益过大,细微的寄存器变化在画面上被放大了好几倍。

解决办法是我在数据采集阶段做数字滤波。最简单有效的是移动平均法,把最近5次采集的数值做算术平均,作为当前显示的重量值。在MCGS里可以在实时数据库的变量属性里设置滤波,也可以直接在循环策略里写脚本处理。还有一点容易被忽略:重量传感器本身的量程和精度决定了下限判断的依据。比如传感器量程是100kg,精度0.1kg,那你判断"料斗已排空"的阈值就不能设成0.01kg,否则永远等不到这个条件成立。

4.3 自动流程走到一半卡住

自动配料流程卡住,十有八九是状态互锁条件没有满足。最常见的情况是卸料环节:程序判断"当前重量 <= 2"就认为卸料完成,但如果第一次调试时料斗里根本没料,重量一直是0,条件瞬间就满足了;反过来,如果模拟重量的数据源没有恢复为零,卸料阀就会一直开着,流程永远走不到下一步。

这里我分享一个调试经验:给每个状态环节加一个超时保护。在PLC程序或者MCGS脚本里,记录当前状态持续的时间,当超过设定时间(比如120秒)却没有发生状态跳转,就把系统置为报警状态,提示操作工介入处理。这个保护机制在现场非常重要,因为物料堵塞、传感器故障都可能导致流程卡死,没有超时保护就会一直挂在那,白白浪费时间。

4.4 配方参数保存与恢复

最后再补一个很多人忽视的细节:配方参数的断电保持。MCGS嵌入版里的变量有断电保持属性,勾选后变量值会保存在内部Flash中。我把配方参数设置成断电保持,再把批次计数也设置成断电保持,这样重启系统后不需要重新输入配方,上一批的累计批次也不会丢。

如果你的MCGS版本不支持变量级断电保持,那就用脚本在策略里手动把配方数据写入系统存盘文件,启动时再读出来。这个方案麻烦一点,但能兼容所有版本。

5. 优化扩展与个人经验总结

5.1 从仿真到现场的平滑迁移

前面说过,用这套方案做出来的东西,最终目标不是停留在电脑里,而是要能平滑迁移到真实设备。要做到这一点,关键在于仿真阶段就得按照真实系统的习惯来规划。比如变量地址,你最好是查清楚PLC型号的I/O表以后,照着真实通道号来建立变量映射,而不是随手找一个寄存器地址。再比如通信协议,仿真用的Modbus RTU到了现场可能换成Profinet或者EtherNet/IP,那你的MCGS设备驱动也要跟着换,但画面和数据库结构基本可以原封不动搬过去。

我做过一个项目,仿真阶段跑了两个星期,画面和程序都反复打磨过。后来设备到场,PLC程序通过以太网与MCGS连接,我把设备窗口从串口改成了以太网驱动,改了IP地址后直接上电运行,画面出来的数据和现场仪表完全一致。那次迁移之顺利,让我真切体会到前期规范规划的价值。

5.2 关于仿真局限性的清醒认识

当然,也要泼一盆冷水:仿真环境毕竟不是现场。真实系统中传感器的非线性、温漂、物料状态变化、机械振动干扰,这些在仿真里一概不存在。所以仿真验证的目的是确认逻辑正确、画面完整、流程顺畅,而不是确认系统在恶劣环境下依然可靠。在现场调试阶段,该做的抗干扰措施、接地规范、硬件保护,一样都不能省。

我见过有人把仿真结果当成万能保证,到了现场直接往设备上怼,结果被现场问题打得措手不及。正确的态度是把仿真当成设计验证的手段之一,而不是全部。真实的调试标准作业:先仿真验证逻辑,再做硬件在环测试,最后才联调现场设备,步步为营。

5.3 最后再分享两个小技巧

第一个小技巧跟演示有关。用MCGS做仿真演示时,很多人不知道怎么让重量曲线看起来更流畅。其实可以在循环策略里给当前重量加一个缓慢变化的随机扰动,比如在设定值附近浮动正负0.5,这样实时曲线就像真实称量过程中的波动,演示效果瞬间提升好几个档次。

第二个小技巧是关于脚本排错的。MCGS的脚本编辑器提示信息不算友好,语法错误定位不太容易。我的做法是在脚本里多用中间变量,把复杂计算拆成几步,每一步都赋给一个临时变量。这样出错时能把问题范围缩得很小,而且可以在画面上放一个调试窗口显示出这些中间变量,运行时一眼就能看出哪一步数值不对。这招帮我省了大量的排错时间。

配料称重这套东西,说难不难,说简单也不简单。把基础的状态逻辑弄清楚,把HMI的人机交互做舒服,剩下的就是反复测试和完善细节了。希望这篇文章能帮你少走一些弯路,把重心放在真正重要的设计问题上,而不是被工具问题卡住。

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

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

立即咨询