简介:本资源是面向工业自动化工程师、SCADA系统开发人员及高校控制类专业学习者的MCGS与OPC通信实战配置包,解决跨厂商设备数据集成与实时监控系统搭建中的核心通讯难题。压缩包共15个文件,涵盖MCGS工程文件(.mcg)、设备驱动配置(.ci、.sym、.sym_xml)、数据库(.mdb、.sdb)、项目备份(.bak)、文档说明(.doc)、OPC配置工具(.xml、.toc)及TwinCAT相关测试组件等,全面支撑从OPC服务器连接、变量映射、数据读写到故障缓存的完整调试流程。资源大小仅1.15MB,结构紧凑、即开即用,已为345人提供学习参考。内含可直接加载运行的MCGS工程、配套OPC通信配置文档及TwinCAT OPC测试客户端,附带变量定义表、通信参数模板与典型排错提示,显著降低OPC协议理解门槛与现场部署试错成本。 凡是想让MCGS和OPC通讯联起来的人,十个里有八个是卡在DCOM、权限和服务器枚举上。我在现场接过不少“MCGS与OPC通讯.rar”这类打包工程,自己第一次弄的时候也是一晚上没睡,从读不到变量到能写数据,中间走了不少弯路。这篇文章把整个链路从头讲透:OPC通讯是怎么一回事、MCGS端怎么做配置、中间要踩哪些坑、出了问题怎么排查,适合刚开始接触MCGS + OPC的上位机工程师、现场调试人员,也适合那些想把手头组态软件连到第三方数据源的自动化从业者。
1. 为什么MCGS要选OPC通讯这条路
1.1 没有OPC之前,工业通讯有多乱
在OPC标准出现之前,工业自动化领域的数据交换基本是“各家自扫门前雪”。西门子的PLC用S7协议,三菱的PLC用MC协议,罗克韦尔走CIP,施耐德和一堆仪表走Modbus,组态软件想跟谁通讯,就得专门给谁写一套驱动。MCGS虽然内置了不少常见PLC驱动,但不可能覆盖市面上所有设备型号,尤其是碰到进口小众控制器、老旧系统、或者非标智能设备时,驱动往往要么没有、要么版本不匹配。
OPC(OLE for Process Control)的出现,本质上是把“设备协议”和“上层软件”解耦。设备厂商只需要提供一个OPC服务器,把底层通讯协议封装好,暴露出一批标准化的数据节点;上位机组态软件只需要实现OPC客户端,就能访问任意厂商的设备数据。你可以把它理解成工业界的USB接口:以前每个设备一根专属充电线,现在设备端只要做出一个标准插座,客户端这根线就能通用。
1.2 什么情况下该在MCGS里走OPC
不是所有项目都需要OPC,但下面这几类场景,用OPC是最优解:
第一,MCGS内置驱动列表里没有这个设备。很多控制器厂家不提供组态软件专用驱动,但会提供一套OPC服务器。这时候用OPC客户端接入,是最稳妥、也是厂家唯一支持的对接方式。
第二,多个系统需要共享同一批数据。比如一台PLC的数据,既要给中控室的MCGS画面,又要给MES系统、给第三方统计软件。如果每个系统都去轮询PLC,PLC通讯负载会成倍增加,而且不同系统的采集节奏还会互相干扰。中间立一个OPC服务器统一采集,MCGS和MES都去连它,结构清晰,负载也可控。
第三,项目前期没有真实设备,但画面和逻辑要提前开发。用OPC Simulation服务器模拟数据,把整个工程跑通,设备到场后只需要切换OPC服务器指向真实设备。
第四,跨系统、跨语言的数据对接。比如C#、LabVIEW、Python程序要同时取PLC数据,或者数据要送到云平台,OPC UA是目前兼容性最好的工业通讯标准之一,比每个系统各自写驱动省心得多。
1.3 为什么不直接用串口或Modbus直连
能直连当然直连。MCGS对很多PLC都有原生驱动,比如西门子S7-200 SMART、三菱FX系列、台达、汇川等,直接在设备窗口加驱动、填IP和寄存器地址就能通讯,性能和稳定性往往比OPC路径更好。但直连的前提是:设备协议公开、你能拿到寄存器表、通讯链路简单。如果设备接口封闭,或者通讯路径上需要做数据预处理,或者PLC已经被其他系统占用,那OPC就体现出价值了。
我一般在项目里是这么判断的:单台PLC、单套画面、点对点通讯,优先用MCGS原生驱动;一旦出现“多源汇聚”“跨系统共享”“异构设备对接”这三个词里的任何一个,就把OPC放到候选方案里。这也是为什么很多示例工程压缩包都叫“MCGS与OPC通讯”——因为OPC解决的恰恰是普通驱动覆盖不了的边角场景。
2. 配置前先把三件事搞清楚
2.1 明确MCGS在通讯里的角色
MCGS在OPC通讯里是客户端,不是服务器。很多人第一次接触这个概念会绕晕,以为MCGS能直接“读”OPC里的数据,实际上流程是这样的:OPC服务器(比如Kepware、Matrikon或设备厂商的服务器)负责跟PLC采集数据,MCGS通过在设备窗口添加一个“OPC客户端”设备,去连接这个服务器,再把服务器的数据节点映射成MCGS内部变量。画面上的标签、按钮、报表,最终访问的都是这些内部变量。
MCGS的版本差异也要注意。老款嵌入版组态软件运行在Windows CE或嵌入式硬件上,OPC支持很有限;通用版运行在PC上,OPC客户端功能完善;昆仑通态触摸屏(TPC系列)的组态软件是否支持OPC,要看具体型号和系统版本。我遇到过不少人在触摸屏上找OPC设备找不到,就是这个原因——先确认硬件平台支不支持,别在配置环节白费力气。
2.2 OPC DA和OPC UA怎么选
OPC DA(Data Access)是老协议,基于Windows的COM/DCOM技术,优点是成熟、普及率高,很多老设备和老系统都支持;缺点是跨机器访问要配置DCOM,权限、防火墙、用户标识任何一环没弄好,就连不上,这几乎是每个OPC DA项目都会踩的坑。
OPC UA(Unified Architecture)是新标准,跨平台、不依赖DCOM,自带加密和证书认证机制,远程访问体验比DA好太多。测试工具常用的有UaExpert,连接地址一般是opc.tcp://ip:端口这种格式,不用再折腾Windows组件服务。
选型原则很简单:能用UA优先用UA,能本机访问就不远程访问。MCGS老版本大多只支持OPC DA客户端,新版逐步加入OPC UA支持,具体要看版本号。
提示:如果设备端只提供OPC DA服务器,比如老版本SIMATIC NET,那就老老实实配DCOM,没有捷径。
2.3 需要提前准备好的工具
工欲善其事,必先利其器。做MCGS和OPC通讯,我一般会准备这几样:
- OPC Core Components:OPC基金会的基础组件,必须安装,否则OPC客户端枚举不到服务器。很多“找不到服务器”的问题就是缺了这个。
- OPC服务器:测试环境用Matrikon OPC Simulation Server,免费,自带模拟数据,不需要真实PLC;生产环境用Kepware或者设备厂商提供的服务器。
- OPC客户端测试工具:Matrikon OPC Explorer、Kepware自带的Quick Client、UaExpert(测OPC UA)。这些工具可以在MCGS介入之前,先把服务器侧的数据质量验证一遍。
- MCGS调试助手PC版:辅助查看MCGS内部变量的实时状态,排查“到底是没读到数据,还是画面没绑定”这类问题很好用。
这些工具在项目调试阶段是救命稻草,别嫌多。
3. 一步步实操:让MCGS通过OPC把PLC数据读进来
3.1 服务器端先把数测通
无论你用的是哪个OPC服务器,第一步都是先在服务器侧把数据读到、把Quality验证为Good。拿Kepware连西门子S7-1200举例,操作流程是:
- 安装Kepware,在配置界面新建通道(Channel),选择Siemens TCP/IP Ethernet驱动,填PLC的IP地址。
- 在通道下新建设备(Device),配置型号。S7-1200一般不涉及机架号和槽号,很多同志在这里习惯性填0/0,结果通讯不上。
- 在设备下建标签(Tag),填DB地址。需要注意:S7-1200/1500的DB块默认勾选了“优化的块访问”,这个选项如果开着,OPC服务器按绝对地址去访问DB数据往往会失败。需要在PLC程序里取消勾选“优化的块访问”,重新编译下载。
- 用Kepware自带的Quick Client在线监控,看Value是否变化、Quality是否为Good。这一步过了,说明数据源没有问题。
很多MCGS连不上的情况,根源其实是OPC服务器本身就没读到PLC数据。所以在MCGS里折腾之前,先用Quick Client或UaExpert确认服务器侧没问题,能省掉一大半排查时间。
3.2 MCGS工程里添加OPC客户端设备
服务器侧正常后,打开MCGS组态环境。操作步骤如下:
- 新建MCGS工程,进入设备窗口。
- 在设备工具箱里找到“OPC客户端”设备,拖到设备窗口。
- 双击这个设备,在属性界面点击“OPC服务器枚举”按钮,系统会列出本机已注册的所有OPC服务器。选择Kepware.OPCClient或Matrikon.OPC.Simulation.1。
- 在OPC设备下添加数据项。这里重点是:MCGS会弹出浏览窗口,直接展开服务器里的标签树,双击需要的Tag,MCGS会自动把完整的Item路径填进配置里。
- 设置数据项属性:数据类型要和OPC服务器一致,读写属性按需要选择,采集周期根据实际刷新速度设置,一般默认100ms到1000ms足够。
这里特别强调一点:添加OPC变量时,尽量用浏览方式选择Item,不要手动输入路径。OPC DA的Item ID是带命名空间的,手填很容易填错,而且排查起来非常痛苦。MCGS支持从OPC服务器直接浏览节点,这个功能一定要用起来。
3.3 画面绑定和脚本调用
OPC变量建立好之后,用法和MCGS内置变量完全一致。在用户窗口拖一个数值显示控件,把“显示变量”指向刚建的OPC变量,运行画面就能实时显示PLC数据。动画连接、报警、报表、曲线,全部可以引用这些OPC变量。
如果要在脚本里读写OPC变量,直接当普通变量用就行。MCGS脚本是类Basic语法,比如:
IF 设备状态变量 == 1 THEN 启动时间 = !TimeStr(0) ENDIF不需要额外调什么OPC接口函数。这是因为MCGS已经在后台把OPC数据项映射成了内部变量,脚本层感知不到底层是OPC还是串口。
3.4 运行测试:正确判断通讯状态
配置完成后,切换到MCGS运行环境,观察变量值。这里我的习惯是:在工程里专门做一个“通讯诊断”页面,把OPC服务器的连接状态、关键变量的Quality值、最后刷新时间都绑定成变量显示出来。这样现场一跑起来,通讯是否正常一目了然,不用拿万用表到处量。
测试时如果发现变量没值,先判断是哪一层的问题:MCGS变量红色且无值,多半是OPC设备初始化失败,检查服务器是否运行、权限是否足够;变量有值但不变,要么采集周期太长、要么OPC服务器那边Tag本身就没更新;变量跳变或时断时续,重点查DCOM超时、防火墙和网络稳定性。
4. DCOM、权限与防火墙:OPC DA最常见的三个坑
4.1 DCOM配置到底配了什么
OPC DA跨进程通讯依赖Windows的DCOM机制。两台软件在同一台机器上跑,也要经过DCOM;跨机器访问,配置复杂度成倍上升。DCOM配置的核心就三件事:让客户端能启动服务器的组件、能调用服务器的方法、能穿过防火墙完成通讯。
标准配置步骤是这样的:
- 按
Win + R,输入dcomcnfg,打开组件服务。 - 进入“组件服务 → 计算机 → 我的电脑”,右键“属性”,切到“COM安全”选项卡。
- 在“访问权限”和“启动和激活权限”两个区域,分别点击“编辑限制”和“编辑默认值”,把
Everyone或指定的Windows用户加进去,勾选“本地访问”“远程访问”“本地启动”“远程启动”等权限。 - 在“我的电脑”下的“DCOM配置”列表里,找到对应的OPC服务器组件(名称一般是服务器名称,比如“Matrikon OPC Simulation Server”),右键属性:
- “位置”选项卡:勾选“在数据所在的那台计算机上运行”(本机场景)。
- “安全”选项卡:可以设为使用自定义权限,把需要的用户加进去。
- “标识”选项卡:选“交互式用户”。这个很关键,如果选了某个系统账户,客户端可能因为会话隔离而看不到服务器。
- 配置完成后重启相关服务,或者注销重新登录。
4.2 防火墙和端口问题
OPC DA依赖RPC动态端口分配。防火墙开启时,只是放行TCP 135端口通常不够,因为服务器还会动态挑选其他端口。这就导致一个很诡异的现象:客户端能发现服务器,但一建立数据连接就超时。
处理办法有两个方向:一是把OPC服务器的exe程序添加到防火墙入站例外里;二是给OPC服务器配置静态端口,然后在防火墙上放行这个端口范围。如果是同一台机器上跑MCGS和OPC服务器,Windows防火墙偶尔也会拦截本机通讯,可以先临时关闭防火墙来验证是不是这个问题。
4.3 权限问题的排查顺序
我做OPC DA项目时,排查有固定的顺序,这个顺序能省下大量时间:
- 先装Matrikon OPC Simulation Server,在MCGS本机跑通一个最简单的示例,确认MCGS的OPC客户端功能本身没问题。
- 再用Quick Client或UaExpert连接目标OPC服务器,确认服务器侧数据质量好。
- 然后建最小化MCGS测试工程,只加一个变量,看能否读到数据。
- 最后再做远程访问,配置DCOM和防火墙。
如果MCGS里枚举不到OPC服务器,先检查一个叫“OPCEnum”的服务是不是在运行。这个服务是OPC服务器枚举的根服务,安装OPC Core Components时会注册。有些精简版系统会把它禁用掉,手动启动并设为自动就行了。
注意:64位系统下如果装了32位的OPC服务器,枚举不到的时候,可以运行
C:\Windows\SysWOW64\dcomcnfg.exe打开32位组件服务视图,看组件是否在这个列表里。
5. 常见问题与排查技巧实录
在MCGS和OPC通讯这条路上,我踩过的坑基本都集中在下面这个表里。建议收藏备用。
| 现象 | 常见原因 | 排查方向 | 解决方案 |
|---|---|---|---|
| OPC设备显示红色/初始化失败 | OPC服务器未启动、组件未注册、DCOM权限不够 | 确认服务器进程在任务管理器里存在;看MCGS报错文字 | 启动服务器;重装OPC Core Components;以管理员身份启动MCGS |
| 枚举列表为空 | 未安装OPCEnum或服务被禁用 | 运行services.msc查看OPCEnum状态 | 启动OPCEnum并设为自动;重装OPC Core Components |
| 变量值一直为0但Quality为Good | 采集周期设置过长、Item地址绑定错误 | 用Quick Client看这个Tag的实时值和变化 | 检查Item对应地址;调短采集周期 |
| Quality为Bad | 设备侧通讯故障、PLC数据块优化访问未关闭 | 看服务器日志、PLC在线状态 | 关闭DB块优化访问;检查IP、机架槽号参数 |
| 能读不能写 | MCGS变量权限设成只读,或服务器写权限限制 | 查看MCGS变量属性中的读写属性 | 改为“可读写”;在服务器端配置允许写入 |
| 数据时断时续 | DCOM超时、防火墙、网络不稳定 | 查看Windows事件日志,ping测试 | 加防火墙例外;调大COM超时;优先本机访问 |
| 64位系统枚举不到服务器 | 32位OPC服务器与64位DCOM配置不匹配 | 检查DCOM配置是32位还是64位视图 | 运行SysWOW64下的dcomcnfg配置 |
除了表格里的这些,还有两条排查经验很有价值。
第一条,用Process Monitor抓一下MCGS访问OPC服务器时的注册表权限报错,能直接定位是不是权限问题。有一次我排查了一个下午,最后发现是服务器组件的注册表键值权限被改了,导致客户端无法读取组件信息。这种问题用眼看不见,必须靠工具。
第二条,遇到所有“奇怪”的OPC DA问题,先试一个土办法:把OPC服务器和MCGS都“以管理员身份运行”。就这一招,能解决一大半的DA通讯故障。Windows的用户权限模型在OPC DA这种老协议面前特别敏感,管理员权限很多时候是隐性前提。
此外,生产环境我强烈建议把OPC服务器和MCGS装在同一台工控机上。远程DCOM的坑实在太多了,能避免就避免。如果必须跨机器,那就把DCOM配置在项目交付文档里写清楚,否则后期运维会非常痛苦。
6. 扩展:从OPC DA到OPC UA,MCGS还能怎么接
6.1 OPC UA为什么让人省心
OPC UA相比OPC DA,最大的变化是彻底摆脱了DCOM依赖。它基于TCP/IP协议栈,跨平台,自带会话加密和设备证书认证,远程访问不需要在组件服务里反复设置权限,不需要担心32位64位DCOM不匹配。所以新项目里,只要设备端支持OPC UA,我基本都会优先走UA。
具体到MCGS,如果组态软件版本支持OPC UA客户端,配置流程就是:在PLC或服务器端启用OPC UA服务,设置监听的IP和端口,生成证书;在MCGS设备窗口添加OPC UA设备,填服务器地址opc.tcp://192.168.0.10:4840这种格式;浏览节点树,添加变量,运行测试。整个过程比DA清爽太多。
6.2 新旧架构混合的实际做法
存量项目经常会出现“老设备只支持OPC DA,但新平台要求OPC UA或MQTT”的情况。这时候可以在中间加一个OPC网关或边缘网关,把OPC DA一侧的数据转成OPC UA或MQTT送出去。MCGS物联助手这类工具,本质上就是干这个事的:它把MCGS内部变量暴露出来,通过MQTT等协议往上送,实现云平台对接。
这个架构在实际项目里很实用,可以逐步替换老的DA链路,而不需要一次性改造全部设备。而且OPC UA服务器通常比DA服务器的并发能力强,对多客户端同时访问也友好。
6.3 有些场合其实用不着OPC
说句实在话,MCGS和PLC之间通讯,OPC不是万能的,也不是最快的。MCGS对很多PLC都有直接驱动,比如S7-200 SMART、三菱FX系列、台达、汇川等,直接用原生驱动配置,性能更好,可靠性也更高。所以我的原则是:先查驱动列表,有就直连,没有或者有多系统共享需求,再上OPC。
如果看到这里你正在做一个MCGS触摸屏和S7-1200的直连项目,建议先查一下MCGS版本里有没有对应型号的西门子驱动。很多国产触摸屏对S7-1200的支持已经很成熟,直接驱动能省掉OPC服务器的安装和授权成本。
我做了这么多MCGS的OPC通讯项目,最大的体会是:通讯架构的价值不在于技术本身有多高级,而在于数据能不能稳定地被正确的人拿到。现在接到一个项目,我第一反应不是急着接线、建工程,而是先画一张数据流向草图,谁产出数据、谁消费数据、中间需不需要汇聚层。如果只是MCGS和一台PLC点对点,我八成会用原生驱动;一旦出现两台以上上位机,或者要对接MES、云平台,OPC这层就值得认真考虑。
最后再分享一个小技巧:在MCGS画面上放一个独立的“通讯诊断”小页面,把OPC服务器的连接状态、关键变量的Quality值、最后刷新时间都绑定成变量显示出来。现场电话打过来的时候,看一眼这个页面,就能先定位一半问题。这比抱着笔记本电脑到现场抓包要高效得多。
本文还有配套的精品资源,点击获取