主要内容

浏览OPC UA Server命名空间

这个示例向您展示了如何找到OPC统一架构(UA)服务器、连接它们并浏览它们的名称空间以找到感兴趣的节点。要在MATLAB会话中运行这个示例,您需要安装并启动Prosys OPC UA仿真服务器。阅读OPC工具箱文档的入门部分以获得更多信息。

OPC UA服务器通过一个或多个名称空间提供可用数据,由多个连接节点组成。每个命名空间都有一个唯一标识命名空间的索引。OPC Toolbox公开了两种类型的OPC UA节点:对象节点,这有助于组织数据和可变节点,在其value属性中存储数据。变量节点可能包含其他变量节点作为儿童。

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

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

请注意:本节要求安装Local Discovery Service,并配置Prosys OPC UA Simulation Server向LDS注册。如何做到这一点的说明包含在OPC工具箱文档的入门部分。

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

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

确保你= opcuaserverinfo (“localhost”
ServerList = 1×3 OPC UA ServerInfo数组:索引说明Hostname端口-----  -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   ----- ----------------------------- ----- 1 Simulationserver TMOPTI01WIN1064.DHCP.MATHWARKS。com 53530 2 UA Sample Server tmopti01win1064 51210 3 Quickstart Historical Access Server tmopti01win1064 62550

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

sampleserverinfo = finddescription(serverlist,“模拟”
SampleserverInfo = OPC UA ServerInfo'SimulationServer':连接信息Hostname:'tmopti01win1064.dhcp.mathworks.com'端口:53530

构造OPC UA客户端并连接到服务器

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

uaClient = opcua (“localhost”, 53530);

如果您之前已经发现使用opcuaserverinfo.命令,您可以直接构建客户端opcuaserverinfo.结果。

uaClient = opcua (sampleServerInfo)
UAClient = OPC UA客户端Simulationserver:hostname:tmopti01win1064.dhcp.mathworks.com端口:53530超时:10状态:断开连接

最初客户端与服务器断开连接,并显示客户端属性的简要摘要。通过查询Status属性或调用与一函数。

status = UAClient.Status Isconnected(Uaclient)
status = '断开' ans =逻辑0

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

连接(uaClient) uaClient
uaClient = OPC UA Client SimulationServer: Hostname: tmopti01win1064.dhcp.mathworks.com Port: 53530 Timeout: 10 Status: Connected ServerState: Running MinSampleRate: 0 sec MaxHistoryReadNodes: 0 MaxHistoryValuesPerNode: 0 MaxReadNodes: 0 maxwritenode: 0

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

浏览服务器命名空间

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

topNodes = uaClient。名称空间
topnodes = 1x6 opc ua节点阵列:索引名称nsind标识符nodetype儿童-----  -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  ---- ----------------------------------------------------服务器0 2253对象12 2 MyObjects 2 MyObjectsFolder对象1 3 StaticData3 staticdata对象9 4 nonuanodecompliancetest 4 nonuanodecompliancetest对象33 5仿真5 85/0:仿真对象7 6 mybignodemanager 6 mybignodemanager对象1000

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

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

ServerChildren = Topnodes(1).Children
serverChildren = 1x12 OPC UA Node array:索引名称NsInd标识符NodeType孩子  ----- ------------------- ----- ---------- -------- -------- 1 ServerStatus 0 2256变量6 2 ServerCapabilities 0 2268 2274 3 ServerDiagnostics 0对象4 4 VendorServerInfo 0 2295 0 5 ServerRedundancy 0 2296对象5 6 0 11715对象1 7 ServerConfiguration 0 12637名称空间对象5 8 NamespaceArray 0 2255 Variable 0 9 Auditing 0 2994 Variable 0 10 ServerArray 0 2254 Variable 0 11 EstimatedReturnTime 0 12885 Variable 0 12 ServiceLevel 0 2267 Variable 0

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

servercapabilities = serverchildren(2)
serverCapabilities = OPC UA节点对象:名称:serverCapabilities Description:描述服务器支持的能力。金宝appNamespaceIndex: 0标识符:2268 NodeType:对象父:服务器子:14个节点。

在命名空间中搜索节点

您可以从Node变量或直接从Namespace属性搜索节点。找到“ServerCapabilities”节点而不索引到名称空间财产,使用findNodeByName。为了避免搜索查找包含“ServerCapabilities”这个词的节点的所有实例'-一次'参数。

serverCapabilities = findNodeByName (topNodes,'servercapabilities''-一次'
serverCapabilities = OPC UA节点对象:名称:serverCapabilities Description:描述服务器支持的能力。金宝appNamespaceIndex: 0标识符:2268 NodeType:对象父:服务器子:14个节点。

要查找Name中包含单词“Double”的所有节点,请使用“部分”参数。注意,这个搜索将把整个名称空间加载到MATLAB中,所以要谨慎使用这个搜索方法。

doubleNodes = findnodebyname(Topnodes,'双倍的'“部分”
doublendes = 1x6 OPC UA节点阵列:索引名称NsInd标识符NodeType孩子  ----- --------------------- ----- --------------------- -------- -------- 1双4双变量0 2 DoubleAnalogItemArray 3 DoubleAnalogItemArray变量3 3 DoubleAnalogItem 3 DoubleAnalogItem变量3 4 DoubleDataItem 3 DoubleDataItem变量1 5 DoubleArray 3 DoubleArray变量0 6双3双变量0

理解NodeType

节点有一个NodeType,用来描述该节点是简单的组织单元(Object NodeType)还是包含可以读写的数据(Variable NodeType)。Object节点的一个例子是上面显示的ServerCapabilities节点。无法从Object节点读取数据。在这个例子中,doubleNodes不包含Object节点,包含6 Variable节点。

allNodeTypes = {doubleNodes。NodeType}
AllNodetypes = 1×6个单元阵列列1到4 {'变量'} {'变量'} {'变量'} {'变量'}列5到6 {'变量'} {'变量'}

变量NodeType可能包含子节点——变量的NodeType不保证该节点不包含子节点。列出的第二个节点是一个可变节点(因此可以读取其Value),但也有子节点(可以单独读取)。有关从节点读取值的信息,请参见ReadValue.

理解变量NodeType属性

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

doubleNodes (2)
ans = OPC UA Node object: Name: DoubleAnalogItemArray Description: NamespaceIndex: 3 Identifier: DoubleAnalogItemArray NodeType: Variable Parent: AnalogItemArrays子节点。ServerDataType: Double AccessLevelCurrent:读写AccessLevelHistory: none Historizing: 0

这个节点有一个ServerDataType,并允许读取和写入当前值(AccessLevelCurrent.财产)但支持没有历史数据阅读金宝app(AccessLevelhistory.)。实例证明,服务器没有历史化此节点历史性化财产。

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

doubleNodes(2)。serverarraydimensions.
Ans = uint32 0

直接构建节点

节点由其NamespaceIndex及其标识符唯一定义。您可以在不浏览的情况下构建已知节点名称空间财产的使用opcuanode函数。例如,要直接构造ServerCapabilities节点,您可以使用NamespaceIndex 0和Identifier 2268(所有OPC UA服务器必须发布一个带有这个NamespaceIndex和Identifier的ServerCapabilities节点)。

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

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

capabilitiesNode。父
ANS =空OPC UA节点对象。

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

capabilitiesNode。孩子们
ANS = 1x14 OPC UA节点阵列:索引名称NSIND标识符Nodetype儿童----- ----------------------------  ---------- --------------------------------2996对象6 2聚合功能0 2997对象14 3 HistoryerverCapabilities 0 11192对象15 4 OperationLimits 0 11704对象12 5 LocaleIdArray 0 2271变量0 6 minsupportedSamp金宝applerge 0 2272变量0 7 maxQueryContinuityPoints 0 2736变量0 8 maxbytringlength 0 12911变量0 9 serverprofilearray 0 2269变量0 10 maxhistorycontinuitions 0 2737变量0 11 softwareCertificates 0 3704变量0 12 maxstringlength 0 11703变量013 maxbrowseContinuitions 0 2735变量0 14 maxArrayLength 0 11702变量0

断开与服务器

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

断开(UACLIENT);