matlab与组态王通讯——OPC通讯

本文详细介绍了如何在MATLAB中通过OPC与组态王进行通信。首先在组态王中配置OPC服务器,创建"I/O型"变量,并解决无法选择寄存器的问题。然后在MATLAB中利用OPC Configuration、OPC Read和OPC Write模块进行配置,特别指出MATLAB中虽不显示变量列表,但仍可通过输入变量名加上.Value来读写组态王的I/O型变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里不对OPC进行介绍。

一、OPC服务器——组态王

(1)首先在组态王里面新建一个工程,找到“设备”——“”OPC服务器

(2)新建OPC服务器,网络节点名由于不能使用默认的本机名称,建议不懂就照着下图输入\\loaclhost,选中左侧KingView.View.1,其他照默认配置

(3)添加变量名。先在“数据库”——“数据词典”中添加变量。

这里注意:变量名可以任意取,但是变量类型必须是“I/O型”,连接设备需要选中第一步设置的服务器名(一般为KingView.View.1)。

千万注意!!!需要组态王和matlab通讯的变量,必须选为“I/O型”!!!

寄存器可以任意选择,但是建议可以另外建立变量类型为“内存”型的变量,作为寄存器。也即,先建立一个“内存”类型的变量,然后重启组态王程序,再建立对应的I/O变量,在寄存器中选中刚刚建立的“内存”类型的变量。

采样频率按照需要选择。

(4)可能遇到问题:无法选择寄存器

如果出现上图状况,请仔细看看下方的Windows任务栏!

发生问题的原因主要是组态王软件未授权。选择寄存器会必须启动组态王的演示模式,启动时需要选择一下授权配置,如上图。点击演示模式就能正常显示寄存器了。

(5)建立一个画面读写变量和可视化变量,这里不做详解。OPC服务器配置完毕。

二、OPC客户端——matlab

(1)设置一个opc客户端,可以通过写.m脚本文件,也可以输入opctools启动工具箱,也可以在.slx里面使用。

(2)这里主要讲simulink。首先从元件库里面搜索opc

需要选择的文件为:OPC Configuration(必须,配置OPC客户端设置)、OPC Read(读OPC服务器上变量)、OPC Write(写OPC服务器上变量)

(3)配置OPC Configuration

如上图,先双击“OPC Configuration”模块,点击上方的“Configure OPC Clients”,在弹出界面上点击“Add”,输入Host名称为之前一、(2)内设置的“网络节点名”(对应"\\loaclhost"这里填"loaclhost")。再点击“Select”点选服务器名称(KingView.View.1即是组态王OPC服务器)

(4)配置OPC Read(读OPC服务器上变量)、OPC Write(写OPC服务器上变量)

如上图,这里需要注意!!!matlab里面无法显示组态王OPC服务器内的变量名列表,但是不代表无法读写对应的I/O变量!!!

如上图所示,添加“Item IDs”就是添加对组态王OPC服务器内的指定I/O型变量的操作。在点击“Add Items”后弹出的界面里面“Enter Item ID(s)”输入之前在组态王里面的“数据词典”里添加的I/O型变量的名字,在加上.Value。这里注意!!!必须加上.Value,大小写不能错!!!(上图示例,组态王里面的“数据词典”里添加的I/O型变量的名字为“a”)

(5)完毕

### Matlab组态王之间的集成或数据交互 在实际应用中,为了充分利用不同软件的优势并提高系统的整体性能,通常会采用多种方法来实现在Matlab组态王间的集成或数据交互。一种常见的方式是借助于DDE(Dynamic Data Exchange)或者OPC(OLE for Process Control)这两种标准的数据通信接口技术[^1]。 #### 使用DDE进行数据交换 当选择DDE作为中间件时,可以通过编写特定的脚本来调用Windows操作系统自带的功能,在两个应用程序之间传递消息和共享内存对象。这种方式适合简单的实时数据传输需求场景下使用。 #### 利用OPC服务器构建连接 对于更复杂的工业控制系统而言,则推荐选用更为稳定可靠的OPC方案。它允许客户端程序订阅来自远程设备的状态更新,并能处理大量并发请求而不影响效率。具体来说,在Matlab端需安装相应的工具箱以访问外部硬件资源;而在组态王这边则要配置好对应的I/O驱动器以便向外发布信号量级参数表单等信息给到MATLAB侧做进一步分析计算。 ```matlab % 创建 OPC 客户端实例并指定地址的服务端建立链接 opcClient = opcda('localhost', 'Matrikon.OPC.Simulation'); connect(opcClient); % 添加需要读取/写入的目标节点ID至列表当中去 additem(opcClient, {'Random.Real8'}, {'randValue'}); % 获取当前时刻该变量的实际测量值 currentData = read(opcClient); disp(currentData.Value); % 断开连接前记得清理现场工作环境 delete(opcClient); clear opcClient; ``` 此外,还可以考虑引入第三方库文件如`ddeclient.mexw64`来简化编程难度的同时增强跨平台兼容特性。值得注意的是,无论是哪种途径都离不开良好的前期规划和技术选型评估过程——即明确业务逻辑关系图谱之后再着手实施具体的编码任务才是明智之举。
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值