主要内容

从OPC UA服务器访问数据

OPC UA编程概述

本主题展示了通过从运行在本地机器上的Simulation Server中检索当前和历史数据来创建OPC统一架构(UA)应用程序的基本步骤。

请注意

要在以下步骤中运行示例代码,您需要在本地机器上运行Prosys OPC UA Simulation Server。您还可以选择安装本地发现服务并向LDS注册Prosys服务器。具体安装方法请参见为OPC UA示例安装OPC UA仿真服务器.该代码只需要对其他服务器进行一些小的更改。

步骤1:找到您的OPC UA服务器

在此步骤中,您将获得工具箱所需的信息,以惟一地标识您想要连接的OPC UA服务器。在创建OPC UA客户端对象时使用这些信息,请参见步骤2:创建OPC UA客户端对象。

第一个信息是服务器计算机的主机名。主机名(像“HistorianServer”这样的描述性名称或像192.168.16.32这样的IP地址)限定了网络上的计算机,OPC协议使用主机名来确定该计算机上可用的OPC服务器。在任何OPC Toolbox™应用程序中,您必须知道OPC服务器主机的名称,以便能够建立与该主机的连接。网络管理员可以提供网络上提供OPC服务器的主机名列表。在本例中,您将使用“localhost”作为主机名,因为您将连接到与客户机相同机器上的OPC服务器。

OPC UA服务器由通用资源位置唯一标识。与web地址类似,OPC UA服务器的URL以opc.tcp: / /,然后以标准ASCII文本提供服务器地址作为主机名、端口和地址。例如,Prosys OPC UA仿真服务器的URL为opc.tcp: / / localhost: 53530 / OPCUA / SimulationServer

OPC UA服务器url通过OPC UA本地发现服务(LDS)发布,在每个OPC UA服务器主机上可用。您的系统管理员可以提供特定主机的服务器url列表,或者您可以查询主机中所有可用的OPC UA服务器。

如果您已经安装了LDS,并在LDS上注册了OPC UA服务器,则可以使用opcuaserverinfo命令功能通过命令行查询主机信息。如果未安装LDS,请直接执行步骤2。

确保你= opcuaserverinfo (“localhost”
一旦= 1 x2 OPC UA ServerInfo数组:指数描述主机端口  ----- ----------------------------- ------------ ----- 1 SimulationServer并且。2快速启动数据访问服务器myhost。当地62547

方法定位感兴趣的服务器findDescription函数在服务器描述中搜索特定的字符向量。

hsInfo = findDescription(确保你,“模拟”
hsInfo = OPC UA ServerInfo 'SimulationServer': Connection Information Hostname: 'myhost. hsInfo = OPC UA ServerInfo ': SimulationServer': Connection Information Hostname: 'myhost. hsInfo ':本地的端口:53530

在这个发现过程中,您可以识别OPC UA服务器侦听连接的端口(53530)。发现过程还使构建和连接所需的OPC UA服务器变得更容易。

步骤2:创建一个OPC UA客户端并连接到服务器

定位OPC UA服务器后,创建一个OPC UA客户端来管理与服务器的连接,获取关键的服务器特征,并从服务器读取和写入数据。你可以使用opcuaserverinfo结果直接构造OPC UA客户端。

uaClient = opcua (hsInfo)

或者可以直接使用主机名和端口创建客户端。

uaClient = opcua (“localhost”, 53530)
uclient = OPC UA Client: Server Information: Name: 'SimulationServer@localhost' Hostname: 'localhost' Port: 53530 EndpointUrl: ' OPC . uclient = OPC UA Client: Server Information: Name: 'SimulationServer@localhost' Hostname: 'localhost' Port: 53530 EndpointUrl: ' OPC . uclient = OPC UA Client: Servertcp://localhost:53530/OPCUA/SimulationServer' Connection Information: Timeout: 10 Status: 'Disconnected' ServerState: ''安全信息:MessageSecurityMode: SignAndEncrypt ChannelSecurityPolicy: aes256_sha256_rsaps端点:[1×11 opc.ua.EndpointDescription]

客户机最初断开与服务器的连接,如状态财产。连接到服务器后,其他属性会显示在客户端显示中。

连接(uaClient)
uclient OPC UA Client: Server Information: Name: 'SimulationServer@localhost' Hostname: 'localhost' Port: 53530 EndpointUrl: ' OPC . uclient OPC . uclient OPC . uclient OPC . uclient OPC . uclient OPC . uclienttcp://localhost:53530/OPCUA/SimulationServer' Connection Information: Timeout: 10 Status: 'Connected' ServerState: 'Running'EndpointDescription]服务器限制:MinSampleRate: 0 sec MaxReadNodes: 0 MaxWriteNodes: 0 MaxHistoryReadNodes: 0 MaxHistoryValuesPerNode: 0

其他属性描述了服务器的功能,特别是对各种读写操作的限制。限制值为0表示服务器没有对该功能施加直接限制。

步骤3:浏览OPC UA服务器名称空间

OPC UA服务器为读取和写入当前数据和历史数据提供了一个名称空间。命名空间被组织为节点的层次结构。每个节点都有描述该节点的属性。节点由两个元素唯一标识:名称空间索引(数字整型)和节点标识符(数字整型、字符向量或全局唯一标识符或GUID)。要惟一地描述一个节点,必须同时提供名称空间索引和标识符;不能只提供标识符,因为不同的名称空间索引可能会重复该标识符。

OPC工具箱通过OPC UA客户端的名称空间属性公开节点的层次结构。名称空间属性的每个元素都是服务器最高层的一个节点。名称空间中的每个节点都有一个孩子们属性,该属性公开该节点中包含的子节点。属性以图形方式浏览名称空间browseNamespace函数。结果对话框允许您从层次结构中选择节点,并在函数的输出中返回它们。

serverNodes = browseNamespace (uaClient)

带有选定项的名称空间浏览器

当你点击好吧选择的项目将在命令窗口输出中返回。

serverNodes = 1x2 OPC UA节点数组:index名称nind Identifier NodeType Children ----- ---------------------- --------------- ---------------- 1 MinSupportedSample金宝appRate 0 2272 Variable 02 MaxArrayLength 0 11702 Variable 0 . index名称nind Identifier NodeType Children ----- ---------------------- --------------- ---------------- 1 MinSupportedSampleRate 0 2272 Variable 02 MaxArrayLength 0 11702 Variable 0 . index

节点可以具有与之关联的数据值,也可以只是其他节点的容器。的NodeType属性将节点标识为对象节点(容器)或变量节点(数据)。有关如何以编程方式搜索服务器名称空间的更多信息,请参见浏览OPC UA服务器名称空间

步骤4:从OPC UA服务器读取当前值

OPC UA服务器提供对它们的当前值和历史值的访问变量节点。使用OPC工具箱,您可以使用节点数组从服务器读取当前值。当前数据包括值、服务器从传感器接收数据值的时间戳,以及描述数据值的准确性和来源的质量。

[val, ts,战]= readValue (uaClient serverNodes)
val = 2×1 cell array {[0 sec]} {[65535]} ts = 2×1 datetime array 10- april -2019 09:46:43 10- april -2019 09:46:43 qu= OPC UA Quality ID: 'Good' ' 'Good'

有关读取和写入当前值的详细信息,请参见读取和写入当前OPC UA服务器数据

步骤5:从OPC UA服务器读取历史数据

OPC UA服务器上存储选定节点的历史数据。在上一步中检索到的服务器节点将不会被服务器存档,因为这些值通常不会更改。您可以查询Historizing属性,以确定服务器当前是否正在为该节点归档数据。

因为serverNode列表是一个数组,所以必须使用连接来收集输出。

[serverNodes。Historizing]
Ans = 0 0

当前没有对服务器节点进行历史记录。此外,服务器不允许对这些节点进行历史访问,如AccessLevelHistory属性。

{serverNodes。AccessLevelHistory}
Ans = 'none' '无

要定位具有历史记录的节点,请在服务器上查询模拟父节点。

simNode = findNodeByName (uaClient。名称空间,“模拟”
simNode = OPC UA Node: Node Information: Name: 'Simulation' Description: 'The type for objects that organize other nodes.'NamespaceIndex: 5 Identifier: '85/0:Simulation' NodeType: 'Object' Hierarchy Information: Parent: Server Children: 14

模拟节点是一个对象Node,所以它没有价值.然而,它有7个孩子。定位正弦信号随机子节点。的“部分”标志查找以提供的参数开始的节点。

sineNode = findNodeByName (simNode,正弦曲线的“部分”);randNode = findNodeByName (simNode,“随机”“部分”
randNode = OPC UA Node: Node Information: Name: 'Random1' Description: " NamespaceIndex: 5 Identifier: 'Random1' NodeType: 'Variable' Hierarchy Information: Parent: 'Simulation' Children: 0 ServerDataType: Double AccessLevelCurrent:读/写AccessLevelHistory:读Historizing: 0 .

虽然Sinusoid1Random1节点当前未被归档(Historizing是false),您可以从节点读取历史数据(历史记录在启动时被记录,然后关闭)。要读取指定时间范围内存储在服务器上的所有数据,请使用readHistory函数,传递要读取的节点和要读取数据的时间范围。

histData = readHistory (uaClient [sineNode randNode], datetime (“现在”datetime)秒(10)、(“现在”))
OPC UA数据对象数组:时间戳Sinusoid1 Random1  ----------------------- -------------------------- -------------------------- 2019-04-10 09:58:31.000 0.415823[好(生)]0.131428[好(生)]2019-04-10 09:58:32.000 0.813473[好(生)]0.038980[好(生)]2019-04-10 09:58:33.000 1.175570[好(生)]0.316324[好(生)]2019-04-10 09:58:34.000 1.486290[好[Good (Raw)] 2019-04-10 09:58:38.000 1.732051 [Good (Raw)] 2019-04-10 09:58:36.000 1.902113 [Good (Raw)]0.116650 [Good (Raw)] 2019-04-10 09:58:40.000 1.732051 [Good (Raw)] 0.391128 [Good (Raw)]

获取检索数据的摘要。

总结(histData)
1 × 2 OPC UA数据对象:名字开始时间结束时间戳值质量  --------- ---------------- ----------------------- ----------------------- ----------------------------- Sinusoid1 10双值2019-04-10 09:58:31.000 2019-04-10 09:58:40.000 1独特质量[好(生)]Random1 10双值2019-04-10 09:58:31.000 2019-04-10 09:58:40.000 1独特的品质(好(生))

步骤6:绘制数据

您可以直接根据结果绘制数据opc.ua.Data对象。

情节(histData)传奇显示

您也可以将数据转换到MATLAB®用于进一步处理的本机数据类型。有关处理数据的信息,请参见OPC UA数据可视化和预处理

第七步:清洁

当您与OPC服务器完成数据交换后,应该断开与服务器的连接。

断开(uaClient)

然后可以从MATLAB内存中清除OPC UA变量。如果从内存中清除OPC UA客户端,到服务器的连接将自动关闭。