主要内容

创造OPC工具箱数据访问对象

对象的概述

从MATLAB与OPC服务器交互的第一步®软件是在服务器和OPC工具箱之间建立连接™ 软件。你创造opcda.客户端对象控制OPC服务器和工具箱之间的连接。然后你创造数据组对象的集合Daitem.对象,然后创建Daitem.对象本身,代表服务器项目。服务器项对应于物理设备或SCADA系统或DC中的存储位置。

您必须按照上述顺序创建工具箱对象。连接到OPC数据访问服务器描述如何创建一个opcda.客户端对象。本节讨论如何创建和配置数据组Daitem.对象。

Toolbox对象数据访问标准的层次结构

OPC Toolbox DA软件使用三个基本对象来实现,旨在帮助您管理到服务器的连接和服务器项的集合。这三个对象按特定的层次结构排列,如下图所示。

客户端,组和项目的分层视图

  1. 数据访问客户端对象opcda.客户端对象年代)表示可以仅与一台服务器通信的特定OPC客户端实例。您使用的是使用服务器定义服务器主办服务器ID属性。的主办属性定义安装服务器的计算机。的服务器ID属性定义程序ID(翻译),当服务器安装在该主机上时创建。的opcda.客户端对象充当多组对象的容器,并管理与服务器的连接,与服务器通信以及服务器名称空间浏览。

  2. 数据访问组对象数据组对象)表示一个或多个服务器项(服务器上的数据点)的容器数据组对象管理必须读取组中的项的频率、是否必须存储历史项信息,还管理项的创建和删除。组不能没有opcda.客户端对象。您创建数据组使用addgroup.函数opcda.客户端对象。

  3. 数据访问项对象Daitem.对象)表示服务器项。物品由一个项目定义项ID,它在服务器的名称空间中唯一地定义了该服务器项。一个Daitem.对象有一个价值A.质量和A.时间戳,表示服务器从SCADA系统中的仪表或数据点收集的信息。这个价值质量,及时间戳属性表示服务器上次何时要求从该仪器访问信息时服务器已知的信息。

一个数据组对象只能存在于opcda.客户端对象。同样,A.Daitem.对象只能存在于数据组对象你创造数据组使用addgroup.方法的一个opcda.客户端对象。您创建Daitem.使用additem的方法数据组对象。

工具箱对象如何与OPC DA服务器相关

OPC工具箱软件使用对象来定义客户端必须连接到的服务器,以及项目分组的安排。下图显示了OPC工具箱数据访问对象和OPC服务器之间的关系。

客户端和服务器之间的连接

opcda.客户端对象使用OPC数据访问规范标准,在OPC工具箱软件和OPC服务器之间建立连接。这些标准是基于微软的®dcom之所以互操作性标准。

Daitem.对象表示特定的服务器项。请注意,为了有效地操作,客户机通常只需要服务器整个名称空间的一个子集。在上图中,只有光伏SP项目的FIC01,LIT01项目,对于该特定组是必需的。另一个组只能包含一个Daitem.对象,表示单个服务器项。

请注意

数据组对象在OPC服务器上没有等效对象。但是,服务器保留客户机创建的每个组的记录,并使用该组名称与客户机通信有关该组中项目的信息。

创建数据访问组对象

一旦你创建了opcda.客户端对象,您可以将组添加到客户端。一个数据组对象管理多个Daitem.对象。使用一个数据组对象时,您可以在一个操作中从该组中的所有项读取数据,将数据写入该组中的项,定义当该组中的任何项更改值时要采取的操作,或为该组中的所有项记录数据以进行分析和处理。

创建数据组对象,则使用addgroup.功能,指定opcda.要将组添加到其中的客户端对象,以及可选的组名称。看到指定组名有关定义自己的组名的规则。

下面的示例创建一个opcda.客户端对象,将该对象连接到服务器,并向客户端添加两个组。第一个组由服务器自动命名,第二个组由指定的名称命名。

da = opcda (“localhost”“Matrikon.OPC.Simulation.1”);连接(da);grp1 = addgroup (da);grp2 = addgroup(哒。“MyGroup”);

指定组名

在特定客户端对象下创建的每个组必须具有唯一的名称。这允许OPC服务器在客户端使用该组发出服务器请求时唯一地标识该组。名称可以是任何非空字符向量。

您不需要为添加到客户端的每个组指定组名。如果您没有指定名称,OPC服务器将自动为您分配一个组名称。每个OPC服务器为组的自动命名定义了不同的规则。

如果您试图创建一个与已经为该客户端创建的组同名的组,则将生成一个错误。

看到删除对象有关在使用断开连接的客户端创建组时如何自动命名组的信息。

查看组对象的摘要

查看其特征的摘要数据组对象,在命令提示符处输入分配给该对象的变量名。例如,这是对象的摘要GRP1.

GRP1.

列表中的项目对应于对象摘要中的编号元素:

  1. 标题概括包含的名称数据组对象在本例中,这是服务器分配的名称第0组

  2. 对象参数节列出了key的值数据组对象属性。这些属性描述了组的类型,Daitem.与组关联的对象,组的父名称opcda.客户端对象,以及控制服务器如何更新此组的项目信息的属性。在该示例中,此组中创建的任何项目将以半秒间隔更新,死区为0%。有关服务器如何更新项目信息的信息,请参阅数据更改事件和订阅

  3. 对象的状态部分列出了对象的当前状态。一个数据组对象可以处于以下几种状态之一:

    • 积极的State定义组上的任何操作是否应用于该项。

    • 订阅State定义项的值或质量的更改是否会产生数据更改事件。看到数据更改事件和订阅有关订阅财产。

    • 日志记录状态描述组是否正在进行日志记录。看到日志OPC服务器数据有关如何记录数据的信息。

  4. 记录参数第节介绍该组的日志记录属性的值。日志属性控制数据组对象记录数据,包括记录任务的持续时间和记录数据的目的地。看到日志OPC服务器数据有关使用日志记录数据的信息,请参见数据组对象。

使用组对象

一个数据组没有项的对象不执行任何有用的函数。一旦向组中添加了项,就可以使用该组

  • 从OPC服务器读取数据,向OPC服务器写入数据。看到数据读写为更多的信息。

  • 控制OPC服务器如何通知MATLAB有关与A相关联的任何项目的更改数据组对象。看到数据更改事件和订阅为更多的信息。

  • 记录该组中所有项目的数据,以便日后处理和分析。日志OPC服务器数据描述如何控制日志记录。

创建数据访问项对象

一个数据组对象提供用于收集一个或多个对象的容器Daitem.对象。一个Daitem.对象提供指向特定服务器项的链接。这个Daitem.对象定义如何检索和存储服务器项的客户端值,并存储从服务器检索到的该服务器项的最后数据。你可以用Daitem.对象从服务器读取该服务器项的数据,或将值写入服务器上的该服务器项。

你创建一个Daitem.对象使用additem功能,指定数据组对象,以及服务器项的完全限定项ID。属性获取所有服务器项的完全限定项id列表serverItems.函数。

下面的示例以中的示例为基础创建数据访问组对象通过添加A.Daitem.对象设置为该示例中创建的第一个组。将调用与此项关联的服务器项“随机的。Real8”

itm1 = additem (grp1 Random.Real8);

指定项目的本地数据类型

当你创建Daitem.对象,您可以创建一个对象,该对象在客户端上本地存储服务器项的值。您可以指定本地存储数据类型与服务器存储数据类型不同。例如,您可以指定作为整数存储在服务器上的值存储在MATLAB中作为双精度浮点值,因为您知道您将以该项目的值执行双精度计算。

尽管可以在项目创建后修改其数据类型,但也可以通过将数据类型指定为项目的第三个参数来创建具有特定数据类型的项目additem函数。数据类型规范必须是描述该数据类型的字符向量。有效的OPC数据类型是任何MATLAB数值数据类型,加上'char',及“逻辑”.看到使用不同的数据类型有关支持的数据类型的更多信息。万博1manbetx

下面的示例将另一项添加到组中GRP1.中创建的示例创建数据访问组对象. 项目ID为“随机的。UInt2”,它以无符号16位整数的形式存储在服务器上。通过指定数据类型为'双倍的',该值将返回到MATLAB,并在本地存储为双精度浮点数。

itm2 = additem (grp1,“随机的。UInt2”'双倍的');

请注意

服务器使用Microsoft COM Variant转换规则执行从服务器数据类型到项数据类型的转换过程。如果您试图将一个值转换为不具有该值范围的数据类型,OPC服务器将在尝试更新该项的值时返回一个错误。然后应该将数据类型更改为与服务器项的数据类型范围相同或更大的数据类型。看到使用不同的数据类型为更多的信息。

指定项目对象的活动状态

您可以选择指定积极的AN的状态Daitem.通过将字符向量作为第四参数传递字符向量来对象additem函数。的积极的状态可以'在'“关闭”.带有一个积极的的状态“关闭”行为就像从未创建过该项:不发生该项值的服务器更新,对该项的读或写操作将失败。您使用积极的状态暂时禁用一个项目,而不从MATLAB中删除该项目。有关的更多信息积极的状态,请参阅参考页积极的财产。

查看项目对象的摘要

查看其特征的摘要Daitem.对象,在命令提示符处输入分配给该对象的变量名。例如,这是对象的摘要ITM1

ITM1

列表中的项目对应于对象摘要中的编号元素:

  1. 标题概括包括项目的完全限定项目ID。在该示例中,该项目与之相关联“随机的。Real8”服务器项目。

  2. 对象参数节列出了key的值Daitem.对象属性。这些属性描述了项目的名称组,访问权由服务器播发。

  3. 对象的状态部分列出对象的活动状态。的积极的State定义父组上的任何操作是否应用于项,以及是否希望在项值的任何更改时得到通知。

  4. 数据参数第节列出了数据类型用于Daitem.对象来存储值,以及价值质量,及时间戳从服务器获取此项目的最后一个值。有关的更多信息价值质量,及时间戳一个项目,看OPC数据:值、质量和时间戳

使用项目对象

你创建一个Daitem.对象查询关联的服务器项的值,或将值写入该服务器项。您可以将值写入单个项目,并使用单个项目读取值,使用Daitem.对象。有关读取和写入值的更多信息,请参阅数据读写

您还可以使用父母数据组对象来读取和写入所有Daitem.对象,或记录一段时间内项值的更改。看到日志OPC服务器数据查阅有关测井资料的资料。

使用断开连接的客户端构建对象层次结构

使用已连接客户端创建对象时,OPC Toolbox软件在在客户端创建它们之前将使用OPC服务器验证这些对象。例如,在使用该组到客户端添加到客户端时addgroup.函数,验证过程可确保服务器上没有其他具有相同名称的其他组,并且服务器将接受该组。添加项目时,项目ID被验证为有效的服务器项。

偶尔,您可能希望在不连接到服务器的情况下构建工具箱对象层次结构。例如,您可能是关闭网站,并希望在后一天配置日志记录任务,而不是等待在现场时配置该任务的对象。

OPC工具箱软件允许您在不连接服务器的情况下配置整个工具箱对象层次结构。但是,如果没有与服务器的连接,工具箱就无法用该服务器验证创建的对象。相反,OPC工具箱软件对您创建的对象执行一些基本验证,并在连接时使用服务器重新验证这些对象。

当您使用断开连接的客户端创建工具箱对象时,将执行以下验证:

  • 使用addgroup.函数,如果未指定名称,OPC工具箱软件将自动指定唯一的名称小组N,在那里N是最低的整数,可确保组名称是唯一的。例如,创建的第一个组将是“第一组”,然后“group2”,等等。

  • 属性指定组名时addgroup.函数,如果已存在具有相同名称的组,则会生成错误。

  • 属性将项添加到组时additem函数时,只有在组中已经存在相同名称的项时才会生成错误。没有对项目进行其他检查。

  • 将项目添加到组时,如果未指定该项目的数据类型,则将数据类型设置为“未知”.当您连接到服务器时,数据类型将被更改为服务器项的数据类型canonicaldatatype.

尽管进行了上述所有检查,但当断开连接的客户端使用连接到服务器时,服务器可能不会接受在该客户端上创建的所有对象连接函数。例如,项目的项目ID可能对该服务器无效,或者组名可能对该服务器无效。当您连接客户端到服务器使用连接,将从对象层次结构中删除服务器拒绝的任何对象,并且将生成警告。以这种方式,已连接客户端上的所有对象都保证已被服务器接受。

创造OPC工具箱数据访问对象向量

OPC工具箱软件支持的使用万博1manbetx对象向量. 对象向量是MATLAB工作区中的单个变量,包含对多个对象的引用。例如,添加到opcda.客户端对象存储在客户端中集团财产。的集团属性包含A.数据组表示该客户端中所有组的对象向量。同样,一个数据组对象有一个属性,该属性包含对每个的引用Daitem.在组中创建的。

您可以使用MATLAB中的任何标准连接技术来构造向量。然而,OPC工具箱软件对对象向量的构造有一些限制:

  • 对象必须是相同的类。例如,您可以连接两个数据组对象,但不能连接数据组与A的对象Daitem.对象。

  • 组和项对象必须具有相同的父对象。

  • 结果数组的一个维数必须是标量。您可以创建列向量(-按1个对象)或行向量(按1个对象)-n对象),但不是一个——- - - - - -n矩阵。

  • OPC工具箱软件不填充矢量中缺失的元素。相反,生成了一个错误。例如,不能将第4索引处的标量对象分配给标量对象。

以下部分讨论如何创建和使用工具箱对象向量:

构造对象的向量

你可以使用下列任何一种技巧来构造一个对象向量:

  • 使用单个对象变量列表的连接

  • 使用索引分配

  • 使用对象属性检索对象向量

使用连接创建对象向量。要使用连接来构造OPC工具箱数据访问对象向量,可以使用MATLAB的普通语法进行连接。创建要创建的所有对象的列表,并用方括号([]). 用逗号(,)或分号(;)分隔对象向量的每个元素以创建行向量创建列向量。

下面的示例创建了三个虚构的场景opcda.客户端对象,并将它们连接到行向量中。

da1 = opcda (“Host1”'dummy.server.1'); da2=opcda(“Host2”'dummy.server.2');da3 = opcda ('host3'“Dummy.Server.3”);DAV = [DA1,DA2,DA3];

使用索引赋值创建对象向量。索引赋值是指通过将元素赋值给向量中的特定索引来创建向量。下面的示例构造了相同的三个元素opcda.客户端对象矢量如前面的示例中,使用索引分配。

dav (1) = opcda (“Host1”'dummy.server.1'); dav(2)=opcda(“Host2”'dummy.server.2'); dav(3)=opcda('host3'“Dummy.Server.3”);

使用对象属性创建一个对象向量。如果您分配了一个对象向量,则可以获得对象向量集团财产的opcda.客户机对象,或财产的数据组对象,到一个变量。如果客户端具有多个组,或者组具有多个项目,则结果属性是对象向量。

有关获取对象属性的信息,请参见查看特定属性的值

显示对象向量的摘要

要查看对象向量的摘要,请在命令提示符处键入对象向量的名称。例如,这是客户端向量的概要dav

dav
OPC数据访问对象数组:索引:状态:名称:1已断开连接Host1 / Dummy.server.1 2断开连接Host2 / Dummy.server.2 3断开连接Host3 / Dummy.server.3

每个OPC工具箱数据访问对象类的摘要信息是不同的。然而,基本的显示是相似的。

使用对象的向量

使用对象向量就像使用普通对象变量一样。使用对象向量调用的函数仅应用于向量中的所有对象。例如,传递客户机向量dav到Connect函数将向量中的每个对象连接到其OPC服务器。

请注意

某些OPC工具箱函数不接受对象向量作为参数。如果尝试将对象向量与不接受对象向量的函数一起使用,将生成错误。有关函数是否支持对象向量的信息,请参阅相关函数参考页。万博1manbetx

如果需要提取对象向量的元素,请使用标准MATLAB索引表示法。例如,下面的示例从客户机向量中提取第二个元素dav

Dax = DAV(2);

与公众团体合作

OPC数据访问规范提供了在许多客户端之间共享组配置的机制。通常情况下,客户会私人的访问组;连接到同一服务器的其他客户端无法看到该组以及该组中配置的项。但是,客户端可以将组定义为民众,允许其他客户端连接到同一台服务器以访问该组的访问。

请注意

OPC数据访问规范将对公共组的支持定义为可选的。万博1manbetx因此,一些OPC服务器不支持公共组。万博1manbetx

公共组与私有组的区别如下:

  • 将组定义为公共组后,您不能向该组添加项目,也不能从组中删除项目。此限制确保使用该公共组的每个客户端都可以访问相同的项,并且不必担心从该组中添加或删除项。在公开该组之前,应确保该组的项目是正确的。

  • 访问公共组的每个客户端都可以设置自己的组属性,例如UpdateRate死区百分比积极的,及订阅属性。例如,一个客户端可以定义UpdateRate属于10为公共组指定秒,而另一个客户端指定UpdateRate作为2秒。

  • 在服务器上定义的每个公共组都必须具有唯一的名称。如果您尝试使用与服务器上的公共组相同的名称创建公共组,则会生成错误。

  • 单个客户端不能同时拥有同名的公共组和私有组。例如,您不能连接名为'loggroup'然后创建一个私人组叫做'loggroup'

使用OPC工具箱软件,您可以定义和发布自己的公共组或连接到现有的公共组。您还请求从OPC服务器中删除公共组。以下部分说明如何使用OPC工具箱软件处理公共组:

定义一个新的公共组

您可以通过以正常方式创建私有组(描述)来定义新的公共组创建数据访问组对象),然后将该私有组转换为公共组。

您使用公开函数的作用是:将私有组转换为公有组。唯一的论点是公开函数是要转换为公共组的组对象。

下面的示例创建一个私有组,其中包含该组中的特定项。然后将组转换为公共组。

da = opcda (“localhost”'my.server.1');GRP = AddGroup(DA,'profitygrpexample');itm = additem (grp, {'item.id.1''item.id.2'});makepublic (grp);

属性可以检查组类型GroupType财产。

grp。GroupType
民众

连接到现有公共组

除了创建新的公共组外,还可以创建到服务器上现有公共组的连接。要获取服务器上可用公共组的列表,可以使用opcserverinfo函数,传递连接到服务器的客户端对象作为参数。返回的结构包括一个名为的字段“PublicGroups”,其中包含在该服务器上定义的公共组的单元数组。如果“PublicGroups”字段为空,则应检查“万博1manbetxSupportedInterfaces”字段,以确保服务器支持公共组。万博1manbetx支持公共组的服务器将实现万博1manbetxIOPCServerPublicGroups接口。

有一个可用的公共组列表后,可以使用该组的连接addgroup.函数,将连接到服务器的客户端传递给它,该服务器包含公共组、公共组名称和“公众”组类型说明符。

请注意

如果客户端对象与服务器断开连接,则无法创建到现有公共组的连接。

下面的示例连接到一个名为“PublicTrends”在具有程序ID的服务器上'my.server.1'

da = opcda (“localhost”'my.server.1');连接(da);pubGrp = addgroup(哒。“PublicTrends”“公众”);

连接到公共组时,该组中的项目会自动为您创建。

itm=pubGrp.Items
ITM = OPC Item对象数组:索引:DataType:Active:ItemID:1 Double Item.id.1 2 uint16 On Item.id.2 3 Double Item.id.3

不能向公共组添加项目或从公共组中删除项目。但是,您仍然可以修改组的更新速率、死区百分比以及组的活动和订阅状态,并且可以使用组读取、写入或记录数据,就像对私有组一样。

当您使用公共组完成时,可以使用删除函数从客户端对象删除该组。从客户端删除组不会从服务器中删除公共组;完成后,其他客户端可能需要该组。相反,从客户端删除组指示您不再对该组感兴趣的服务器。

从服务器中删除公共组

属性可以请求从服务器删除公共组removepublicgroup.函数,传递连接到服务器的客户端对象和要删除的公共组的名称。

谨慎

OPC数据访问规范未提供任何删除公共组的安全机制;任何客户端都可以请求删除公共组。使用此功能时应格外小心!

如果当前有任何客户端连接到该组,服务器将发出警告,说明当所有客户端完成使用该组时将删除该组。