主要内容

浏览OPC UA服务器名称空间

此示例显示了如何查找OPC统一体系结构(UA)服务器,连接到它们,并浏览其命名空间以查找感兴趣的节点。要在MATLAB会话中运行此示例,您需要安装和启动Prosys OPC UA Simulation Server。阅读OPC工具箱文档的入门部分以获取更多信息。

OPC UA服务器通过一个或多个名称空间来结构可用数据,这些名称空间由多个连接的节点组成。每个名称空间都有一个惟一标识该名称空间的Index。OPC工具箱公开了两种类型的OPC UA节点:对象节点(帮助组织数据)和变量节点(将数据存储在其Value属性中)。变量节点可以包含其他变量节点作为子节点。

所有OPC UA服务器必须发布一个Server节点,该节点包含关于OPC UA服务器的信息,包括该服务器的功能、服务器的可用功能和其他诊断信息。Server节点必须以命名空间索引0存在,命名为'Server'。这个示例将探索一个示例OPC UA服务器的Server节点中包含的ServerCapabilities节点。

探索主机上可用的OPC UA服务器

请注意:本例的这一节需要您安装本地发现服务,并配置Prosys OPC UA仿真服务器以向LDS注册。OPC工具箱文档的入门部分包含了如何完成这一操作的说明。

OPC UA服务器可以在主机上注册本地发现服务。本地发现服务(LDS)发布所有可用服务器,以及它们的唯一“地址”(或URL),用于连接该服务器。

您可以在主机上发现可用的OPC UA服务器opcuaserverinfo.本例使用本地主机。

serverlist = opcuaserverinfo('localhost')
= 1×3 OPC UA ServerInfo数组:一旦指数描述主机端口  ----- ----------------------------------- ---------------------------------- ----- 53530 2 UA示例SimulationServer tmopti01win1064.dhcp.mathworks.com服务器tmopti01win1064历史访问服务器tmopti01win1064 62550 51210 3快速入门

服务器列表显示了可用的OPC UA服务器,以及可以连接到该服务器的主机名和端口号。您可以通过搜索服务器的“描述”找到指定的服务器。找到包含单词“Simulation”的服务器。

sampleServerInfo = findDescription(确保你,'模拟')
sampleServerInfo = OPC UA ServerInfo 'SimulationServer': Connection Information Hostname: 'tmopti01win1064.dhcp.mathworks.com' Port: 53530

构建一个OPC UA客户端并连接到服务器

为了浏览服务器名称空间,您需要构造一个OPC UA客户端并将该客户端连接到服务器。如果您知道OPC UA服务器的主机名和端口,您可以使用主机名和端口参数简单地构造一个OPC UA客户端。

UACLIENT = OPCUA('localhost', 53530);

如果您之前已使用过服务器使用opcuaserverinfo命令,则可以直接从opcuaserverinfo结果。

UAClient = OPCUA(SampleserverInfo)
uaClient = OPC UA Client SimulationServer: Hostname: tmopti01win1064.dhcp.mathworks.com Port: 53530 Timeout: 10 Status: Disconnected

最初客户端与服务器断开连接,并显示了客户端属性的简要摘要。您知道客户端通过查询状态属性进行断开连接,或调用已连接功能。

= uaClient地位。状态与(uaClient)
status ='断开连接'ans =逻辑0

将客户端连接到服务器后,将显示来自服务器的其他属性。

连接(uaClient) uaClient
UAClient = OPC UA客户端SimulationServer:TMOPTI01WIN1064.DHCP.Mathworks.com端口:53530超时:10状态:连接匹配项:运行MINSAMPLERE:0 SEC MAXHISTORYREADNODE:0 MAXHISTORYVALUSEPERNODE:0 MAXREADNODE:0 MAXWREADNODE:0

显示显示客户端状态现在是“连接”,服务器处于“运行”状态,并且客户端存储有关服务器限制的信息。在本例中,所有限制都被设置为零,这表明对sample Server上的抽样率、最大节点或读操作的值没有服务器范围的限制。

浏览服务器命名空间

在MATLAB中,服务器名称空间被增量地直接检索到OPC UA Client变量中。属性可以访问服务器名称空间的顶层命名空间财产。该属性存储OPC UA节点。每个节点可以包含一个或多个子节点,这些子节点本身就是节点。

topnodes = Uaclient.Namespace.
topNodes = 1x6 OPC UA索引名称NsInd标识符NodeType孩子  ----- ----------------------- ----- ----------------------- -------- -------- 服务器1 0 2253对象12 2 2 MyObjectsFolder myobject对象1 3 StaticData 3 StaticData对象9 4 NonUaNodeComplianceTest NonUaNodeComplianceTest对象33 5模拟5 85/0:模拟对象7 6 MyBigNodeManager 61000年MyBigNodeManager对象

节点命名“服务器”包含12个孩子。

可以通过索引可用节点的Children属性来搜索名称空间。例如,要查找ServerCapabilities节点,可以查询Server节点的Children。

serverChildren = topNodes(1)。孩子们
ServerChildren = 1x12 OPC UA节点阵列:索引名称NSIND标识符Nodetype儿童----- -------------------------------------------命名空间0 11715对象1 7 ServerConfiguration 0 12637对象5 8 NamespaceArray 0 2255变量0 9审计0 2994变量0 10 ServerArray 0 2254变量0 11估计returntime 0 12885变量0 12 serviceelevel 0 2267变量0

ServerCapabilities节点是列表中的第二个节点。

serverCapabilities = serverChildren (2)
serverCapabilities = OPC UA节点对象:名称:serverCapabilities Description:描述服务器支持的能力。金宝appNamespaceIndex: 0 Identifier: 2268 NodeType: Object Parent: Server Children: 14个节点。

在Namespace中搜索节点

您可以从Node变量或直接从Namespace属性搜索节点。要查找'ServerCapabilities'节点而不索引到命名空间属性,使用findnodebyname..为了避免搜索找到包含单词“ServerCapabilities”的所有节点实例,您可以使用“好玩”范围。

servercapabilities = findnodebame(topnodes,“ServerCapabilities”“好玩”)
serverCapabilities = OPC UA节点对象:名称:serverCapabilities Description:描述服务器支持的能力。金宝appNamespaceIndex: 0 Identifier: 2268 NodeType: Object Parent: Server Children: 14个节点。

要查找Name中包含单词'Double'的所有节点,请使用“部分”范围。请注意,此搜索将将整个命名空间加载到MATLAB中,因此请谨慎使用此搜索方法。

doubleNodes = findNodeByName (topNodes,“双”“部分”)
DoubleNodes = 1x6 OPC UA节点阵列:索引名称NSIND标识符Nodetype儿童------------------------------------------------------- -------- -------- 1张4双变量0 2 DoubleAnalogItemArray 3 DoubleAnalogItemArray变量3 3 3 DoubleAnalogItem可变DoubleAnalogItem 34 DoubleDataitem 3 DoubleDataitem变量1 5 Doublearray 3 Doublearray变量0 6双3双变量0

理解NodeType

节点具有NodeType,它描述该节点是否仅仅是组织单位(对象NodeType)或包含可以读取或写入的数据(变量NodeType)。对象节点的示例是上面显示的ServerCapability节点。您无法从对象节点读取数据。在这个例子中,doubleNodes不包含Object节点和6个Variable节点。

allNodeTypes = {doubleNodes。NodeType}
allNodeTypes = 1×6 cell array列1到4 {'Variable'} {'Variable'} {'Variable'}列5到6 {'Variable'} {'Variable'}

变量Nodetypes可能包含子项 - 一个NodeType不保证该节点不包含儿童。列出的第二个节点是可变节点(因此可以读取其值),但也有孩子(可以单独读取)。有关从节点读取值的信息,请参阅readValue

了解变量NodeType属性

Variable节点具有描述存储在Variable节点中的数据的附加属性,包括该节点的服务器数据类型和访问权限。要查看这些属性,请显示一个Variable节点。

DoubleNodes(2)
ans = OPC UA节点对象:名称:DoubleAnalogItemArray描述:NamespaceIndex: 3标识符:DoubleAnalogItemArray NodeType: Variable Parent: AnalogItemArrays Children: 3个节点。ServerDataType: Double AccessLevelCurrent:读写AccessLevelHistory: none Historizing: 0

这个节点有一个ServerDataType'double',并允许阅读和写入当前值(AccessLevelCurrent属性),但不支持历史数据读取金宝app(AccessLevelHistory)。服务器不是历w这个节点的历史,正如所示Historizing财产。

一些属性,例如ServerValueRank,ServerArrayDimensions不在节点的显示中显示,但可以通过相应的属性进行查询。有关这些属性的进一步信息,请参阅帮助。

DoubleNodes(2).serverarraydimensions
ans = uint32 0

构建节点直接

节点由其命名空间索引和标识符唯一定义。您可以构造一个已知的节点,而不需要浏览命名空间财产的使用opcuanode功能。例如,要直接构建ServerCapabilities节点,可以使用NamespaceIndex 0和标识符2268(所有OPC UA服务器必须使用此命名空间Index和标识符发布ServerCapabilities节点)。

capabiltiesnode = opcuanode(0, 2268, uclient)
capabiltiesnode = OPC UA节点对象:名称:ServerCapabilities Description:描述服务器支持的能力。金宝appNamespaceIndex: 0 Identifier: 2268 NodeType: Object Children: 14个节点。

注意,使用opcuanode没有Parent属性。

CapabifiessNode.Parent.
ans =空OPC UA节点对象。

但是,如果节点与连接的OPC UA客户端相关联,则会自动检索它们的子节点。

Capabiessnode.children.
ans = 1x14 OPC UA节点数组:索引名称NsInd标识符NodeType孩子  ----- ---------------------------- ----- ---------- -------- -------- 1 ModellingRules 0 2996 6 2 AggregateFunctions 0 2997对象14 3 HistoryServerCapabilities 0 11192 15 4 OperationLimits 0 11704对象12 5 LocaleIdArray 0 2271变量0 6 MinSupportedSampleRate 0 2272 0 7金宝appMaxQueryContinuationPoints 0 0 8 MaxByteStringLength 0 12911 2736变量变量0 9 ServerProfileArray 0 2269 0 10 MaxHistoryContinuationPoints 0 2737变量0 11 SoftwareCertificates 0 3704 0 11703变量MaxStringLength 0 0 13 MaxBrowseContinuationPoints 0 2735变量0 14 MaxArrayLength 0 11702 0

断开服务器的连接

当您完成与服务器的通信后,应该断开客户机与服务器的连接。在MATLAB中,当客户端变量超出作用域时,也会自动执行此操作。

断开(uaClient);