主要内容

在命令行访问数据

DA编程概述

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

要在以下步骤中运行示例代码,您需要本地计算机上需要Matrikon OPC Simulation Server。有关安装详细信息,请参阅为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是文本字符向量,通常包含句点。

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

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

hostInfo = opcserverinfo (“localhost”)
hostInfo=Host:'localhost'ServerID:{1x3 cell}服务器描述:{1x3 cell}opcsspecification:{'DA2''DA2'}对象构造函数:{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 dagroup对象

有关创建客户的详细信息,请参阅创建OPC工具箱数据访问对象.

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

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

使用连接函数要连接opcda.客户端对象到服务器的命令行。

连接(da)

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

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

他们自己,,dagroup对象s没有用。将物品添加到组后,您可以使用该项目控制这些项目,从服务器中的服务器读取值,以及使用该项目的所有项目的所有项目dagroup对象。在步骤5中,浏览OPC服务器以查找可用的标记。步骤6涉及将与这些标记关联的项目添加到dagroup对象。

使用addgroup.创建函数dagroup对象。此示例将组添加到opcda.客户端对象已创建。

GRP = AddGroup(DA)
grp = OPC组对象:Group0对象参数GroupType: private Item: 0-by-1 daitem对象Parent: localhost/Matrikon.OPC.Simulation.1UpdateRate: 0.5 DeadbandPercent: 0对象状态Active:开启订阅:开启Logging:关闭logingmode:内存

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

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

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

如果您知道感兴趣的服务器项的项id,则可以跳过本节,直接进入步骤6:向组中添加OPC数据访问项。在本例中,假设您不知道确切的项目ID,但您确实知道要从Matrikon Simulation Server提供的锯齿波和三角波记录信息。

从命令行中,您可以使用“浏览”服务器名称空间serverItems.函数。您需要提供连接的opcda.对象的客户端对象serverItems.函数,以及一个可选的字符向量参数,以限制返回的结果。字符向量可以包含通配符(*).使用serverItems.如下。

SawtoothItems = ServerItems(da,'*锯*')
锯齿波项目=“锯齿波”。“锯齿波。Int1”“锯齿波。Int2”“锯齿波。Int4”“锯齿波。货币”“锯齿波。Real4”“锯齿波。Real8”“锯齿波。UInt1”“锯齿波。UInt2”“锯齿波。UInt4”

获取服务器项属性的命令是serveritemprops..见serveritemprops.详细信息请参见参考页。

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

现在您已经在名称空间中找到了服务器项,您可以添加数据访问项对象(Daitem.对象)将这些标记添加到dagroup在步骤4中创建的对象。A.Daitem.对象是名称空间中标记的链接,提供标记值,以及该项的其他信息,例如规范数据类型。

从服务器读取值

A.Daitem.对象最初不包含有关它代表的服务器项的信息。这个Daitem.对象仅在服务器通知客户端该项的状态更改(该通知称为数据更改事件)或客户端专门从服务器读取值时更新。

每次通过数据更改事件从服务器读取或获取数据时,服务器都为您提供更新的值,质量和时间戳值。

将更多项目添加到集团

使用新增项目函数将项添加到dagroup对象。你需要通过dagroup对象,并将完全限定的项ID作为字符向量。使用serverItems.功能在步骤5。

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

您可以将多个项目一次性添加到组中新增项目通过指定多个来调用itemid.单元格数组中的值。

itms=附加项(grp{'triangle waves.real8',...'三角形waves.uint2'})
itemms = OPC项目对象数组:Index: DataType: Active: ItemID: 1双三角波。Real8 2 uint16 on Triangle Waves。uint2.

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

步骤7:查看所有项目值

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

这个价值,质量,时间戳只要您有足够的时间,项目的值就会不断更新订阅启用。订阅控制是否数据更改事件由OPC服务器发送到工具箱,用于更改其值的项目。更新死区百分比定义必须查询项以获取新值的频率,以及是否将所有值更改或仅将指定大小的更改发送到工具箱。关于“订阅”的详细信息请参见数据更改事件和订阅.

通过观察数据,您将看到三个信号似乎具有相似的范围。这表明当您在步骤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'双倍的');绘图(日志时间,logval)轴datetick ('X',“keeplimits”传奇(logIDs)

注意三个信号如何几乎完全无关,除了两个时期Real8信号。每个信号的峰值不同,两个信号的周期也不同三角波信号。通过可视化数据,您可以了解Matrikon OPC Simulation Server模拟每个标记的方式。在这种情况下,很明显Real8uint2.信号有不同的周期。

第11步:清理

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

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

断开(DA)删除(DA)清除daGRP.itm.关上(gcf)

opc工具箱对象管理是详细讨论的删除对象.