主要内容

在命令行访问数据

DA编程概述

本节通过可视化Matrikon™OPC仿真服务器提供的三角波和锯齿波信号来说明创建OPC Toolbox™数据访问应用程序的基本步骤。应用程序将数据记录到内存中并绘制数据,突出显示不确定或坏的数据点。通过可视化数据,您可以更清楚地看到信号之间的关系。

请注意

要在以下步骤中运行示例代码,您需要在本地机器上使用Matrikon OPC仿真服务器。安装方法请参见为OPC经典示例安装OPC DA或HDA模拟服务器.该代码只需要对其他服务器进行很小的修改。

步骤1:定位您的OPC数据访问服务器

在此步骤中,您将获得工具箱所需的两条信息,以便唯一地标识要连接的OPC数据访问服务器。在创建OPC数据访问客户端对象(opcda客户端对象),在步骤2:创建OPC数据访问客户端对象

第一个信息是服务器计算机的主机名。主机名(描述性名称,如“PlantServer或IP地址,例如192.168.16.32)限定该计算机在网络上,并被OPC数据访问协议用来确定该计算机上可用的OPC服务器,并与该计算机通信以建立到服务器的连接。在任何OPC工具箱应用程序中,您必须知道OPC服务器主机的名称,以便与该主机建立连接。您的网络管理员可以提供网络上提供OPC服务器的主机名列表。在本例中,您将使用本地主机作为主机名,因为您将连接到与客户端在同一台机器上的OPC服务器。

第二个信息是OPC服务器的服务器ID.特定主机上的每个OPC服务器都由唯一的服务器ID(也称为程序ID或ProgID)标识,该服务器在安装时分配给该服务器。服务器ID是一个文本字符向量,通常包含句点。

虽然网络管理员可以提供特定主机的服务器id列表,但您可以在该主机上查询所有可用的OPC服务器。发现可用的数据访问服务器讨论如何从命令行查询主机。

使用opcserverinfo函数从命令行进行查询。

hostInfo = opcserverinfo(“localhost”
hostInfo =主机:'localhost' ServerID: {1x3 cell} ServerDescription: {1x3 cell} OPCSpecification: {'DA2' 'DA2' 'DA2'} ObjectConstructor: {1x3 cell}

更详细地检查返回的结构可以提供每个OPC服务器的服务器id。

allServers = hostInfo。ServerID”
allServers = 'Matrikon.OPC.Simulation. '1“ICONICS.Simulator。1 ' ' Softing.OPCToolboxDemo_ServerDA.1 '

步骤2:创建OPC数据访问客户端对象

在确定要连接的OPC服务器的主机名和服务器ID后,可以创建opcda客户端对象。客户端控制到服务器的连接状态,并存储从该服务器发生的任何事件(例如数据更改状态的通知,称为数据变更事件)在事件日志中。的opcda客户端对象还包含在客户端上创建的任何数据访问组对象。有关OPC工具箱对象层次结构的详细信息,请参见数据访问标准的工具箱对象层次结构

使用opcda函数指定主机名和服务器ID。

Da = opcda(“localhost”“Matrikon.OPC.Simulation.1”
da = OPC数据访问对象:localhost/Matrikon.OPC.Simulation.1服务器参数主机:localhost ServerID: Matrikon.OPC.Simulation.1对象参数组:0-by-1的daggroup对象

创建客户端的详细信息请参见创建OPC工具箱数据访问对象

步骤3:连接到OPC数据访问服务器

OPC数据访问客户端对象在创建时不会自动连接到服务器。这允许您在连接到服务器之前或甚至在服务器不存在的情况下完全配置OPC Toolbox对象层次结构(具有组和项的客户端)。

使用连接函数连接opcda在命令行中将客户端对象添加到服务器。

连接(da)

步骤4:创建OPC数据访问组对象

创建数据访问组对象(dagroup对象)来控制和包含数据访问项对象的集合(daitem对象)。一个dagroup对象控制服务器必须多久向您通知项值的任何更改,控制该组中项的激活状态,并定义、启动和停止日志记录任务。

靠他们自己,dagroup对象年代都没用。控件将项添加到组后,就可以控制这些项、从服务器读取组中所有项的值以及记录这些项的数据dagroup对象。在步骤5中,您浏览OPC服务器以查找可用的标记。步骤6涉及将与这些标记相关联的项添加到dagroup对象。

使用addgroup创建函数dagroup对象。属性中添加一个组opcda客户端对象已经创建。

GRP = addgroup(da)
grp = OPC组对象:Group0对象参数GroupType: private对象:0-by-1 daitem对象父对象:localhost/ matricon .OPC. simulation .1UpdateRate: 0.5 DeadbandPercent: 0对象状态Active: on Subscription: on Logging: off LoggingMode: memory

看到创建数据访问组对象有关从命令行创建组对象的详细信息。

步骤5:浏览服务器名称空间

所有OPC服务器都通过服务器名称空间提供对服务器项的访问。名称空间是服务器项的有序列表,通常以分层格式排列以便于访问。服务器项(也称为标签)是服务器上的测量或数据点,提供来自设备(如压力传感器)或通过OPC数据访问提供数据的另一个软件包(如SCADA包)的信息。

请注意

如果您知道感兴趣的服务器项的项id,则可以跳过本节,直接转到步骤6:将OPC数据访问项添加到组中.在本例中,假设您不知道确切的项目id,尽管您知道您想要记录来自Matrikon Simulation Server提供的锯齿波和三角波的信息。

属性在命令行中“浏览”服务器名称空间serveritems函数。您需要提供一个连接opcda客户机对象的serveritems函数和一个可选的字符向量参数来限制返回的结果。字符向量可以包含通配符().一个使用的例子serveritems如下所示。

sawtoothItems = serveritems(da,‘* *’看到
sawtoothItems = '锯齿波。“锯齿波。”Int1' '锯齿波。Int2' '锯齿波。Int4' '锯齿波。“锯齿波。”真正的锯齿波。真正的锯齿波。锯齿波。UInt2' '锯齿波。UInt4”

获取服务器项属性的命令为serveritemprops.看到serveritemprops详情参考页。

步骤6:将OPC数据访问项添加到组中

现在已经在名称空间中找到了服务器项,可以添加数据访问项对象(daitem对象)为这些标记添加到dagroup您在步骤4中创建的对象。一个daitem对象是到名称空间中的标记的链接,提供标记值和关于该项的附加信息,例如规范化数据类型。

从服务器读取一个值

一个daitem对象最初不包含关于其所表示的服务器项的信息。的daitem对象仅在服务器通知客户端该项的状态发生更改(该通知称为数据更改事件)或客户端专门从服务器读取值时才更新。

每次通过数据更改事件从服务器读取或获取数据时,服务器都会向您提供更新的Value、Quality和Timestamp值。

向组中添加更多项目

使用additem函数向对象中添加项dagroup对象。你需要通过dagroup对象,项目将被添加到其中,以及作为字符向量的完全限定项目ID。项id是使用serveritems函数。

Itm1 = additem(grp,锯齿状的波浪。Real8”
itm1 = OPC项目对象:锯齿波。Real8Object Parameters Parent: Group0 AccessRights: read/write DataType: double Object Status Active: on Data: Value: Quality: Timestamp:

您可以将多个项目同时添加到组中additem通过指定multiple调用ItemID单元格数组中的值。

Itms = additem(grp,{“三角波。Real8”...“三角波。UInt2”})
itms = OPC项目对象数组:Index: DataType: Active: ItemID: 1 double on Triangle Waves。Real8 2 uint16三角波。UInt2

有关向组中添加项目的详细信息,请参见创建数据访问项对象

步骤7:查看所有项目值

group对象允许您从组中的所有项中读取和写入值,并将数据记录到内存和/或磁盘。

价值质量,时间戳只要你有,物品的值就会不断更新订阅启用。订阅控制是否数据变更事件由OPC服务器发送到工具箱,用于值发生变化的项目。UpdateRate而且DeadbandPercent定义为获得新值必须查询项的频率,以及是否将所有值更改或仅将指定量级的更改发送到工具箱。有关订阅的详细信息,请参见数据更改事件和订阅

通过观察一段时间的数据,你会发现这三个信号似乎有相似的范围。这表明当您在步骤10中绘制数据时,可以在相同的轴上可视化数据。

在步骤9中,您将为这三个项目配置日志任务和日志数据。

使用函数,将组对象作为从组中所有项读取值的第一个参数。的函数的详细讨论读写数据

步骤8:配置日志组属性

既然你dagroup对象中包含的项,则使用组来控制这些项与服务器的交互。在此步骤中,将组配置为以0.2秒的间隔记录来自这些项的数据2分钟。您可以使用步骤9中的记录数据来可视化Matrikon Simulation Server产生的信号。

OPC数据访问服务器仅提供对“活动”数据(每个服务器项在其名称空间中的最后一个已知值)的访问。在许多情况下,信号的单个值是没有用的,而包含一段时间内信号值的时间序列有助于分析该信号或信号集。OPC工具箱™软件允许您将一组中的所有项目记录到磁盘或内存中,并在MATLAB中检索数据进行分析®

属性配置日志记录会话dagroup对象。通过修改与日志记录相关的属性,可以控制必须将数据从服务器发送到客户机的频率、组必须记录多少条记录以及记录数据的位置。

使用函数设置OPC工具箱对象属性。从命令行可以计算日志任务所需的记录数量。

logDuration = 2*60;logRate = 0.2;numRecords = ceil(logDuration./logRate);grp。UpdateRate = logRate;grp。RecordsToAcquire = numRecords;

步骤9:记录OPC服务器数据

现在您已经配置了dagroup对象的日志属性,则对象可以将所需的数据量记录到内存中。

使用开始使用所需的函数dagroup对象启动日志记录任务。

开始(grp)

日志任务在后台发生。您可以在运行日志任务时继续在MATLAB中工作。日志任务不受MATLAB中发生的其他计算的影响,MATLAB的处理也不会被日志任务阻塞。控件可以指示MATLAB等待日志记录任务完成等待函数。

等待(grp)

步骤10:绘制数据图

日志记录完成后,将数据从工具箱引擎传输到MATLAB工作空间getdata函数,该函数提供两种类型的输出“数据类型”论点。详细信息请参见getdata参考页面。在本例中,将数据检索到单独的数组中,并绘制数据。

下面的示例生成如下图:

[logIDs, logVal, logQual, logTime, logEvtTime] =...getdata (grp“双”);情节(logTime logVal)轴datetick (“x”“keeplimits”传奇(logIDs)

注意这三个信号看起来几乎完全不相关,除了它们的周期Real8信号。每个信号的峰值是不同的,两个信号的周期也是不同的三角波信号。通过可视化数据,您可以深入了解Matrikon OPC Simulation Server模拟每个标记的方式。在这种情况下,很明显Real8而且UInt2信号有不同的周期。

步骤11:清理

在完成OPC任务后,您应该从内存中删除任务对象,并清除与这些对象相关的变量的MATLAB工作空间。

在MATLAB命令行或从您自己的函数中使用OPC工具箱对象时,必须使用删除函数。请注意,当您删除工具箱对象时,该对象的子对象将自动从工具箱引擎中删除。在本例中,不需要删除grp而且itm,因为他们是父母的孩子

断开(da)删除(da)清除grpitm关上(gcf)

OPC工具箱对象管理的详细讨论删除对象