本主题显示通过从本地计算机上运行的模拟服务器检索当前和历史数据来创建OPC统一体系结构(UA)应用程序的基本步骤。
笔记
要在以下步骤中运行示例代码,您需要在本地计算机上运行的Prosys OPC UA Simulation Server。您还可以选择安装本地发现服务并使用LDS注册Prosys Server。有关安装详细信息,请参阅为OPC UA示例安装OPC UA模拟服务器. 该代码只需稍作更改即可与其他服务器一起使用。
在此步骤中,您将获得工具箱唯一标识要连接到的OPC UA服务器所需的信息。在创建OPC UA客户端对象时使用此信息,如步骤2:创建OPC UA客户端对象中所述。
第一条信息是服务器计算机的主机名。主机名(像“Historianserver”等的描述性名称,例如192.168.16.32)符合网络上的计算机,并由OPC协议使用,以确定该计算机上的可用OPC服务器。在任何OPC Toolbox™应用程序中,您必须知道OPC服务器主机的名称,以便可以建立与该主机的连接。您的网络管理员可以提供在网络上提供OPC服务器的主机名列表。在此示例中,您将使用'localhost'
作为主机名,因为您将与客户端连接到同一台机器上的OPC服务器。
OPC UA服务器由通用资源位置唯一标识。与web地址类似,OPC UA服务器的URL以opc.tcp://
,然后提供服务器的地址,作为主机名、端口和标准ASCII文本中的地址opc。tcp://localhost:53530/OPCUA/SimulationServer
.
OPC UA Server URL通过OPC UA本地发现服务(LDS)进行广告,可在每个OPC UA Server主机上提供。您的系统管理员可以为特定主机提供服务器URL列表,也可以为所有可用的OPC UA服务器查询主机。
如果您已经安装了LDS并向LDS注册了OPC UA服务器,则可以使用opcuaserverinfo
函数从命令行查询主机。如果尚未安装LDS,请跳至步骤2。
serverlist = opcuaserverinfo('localhost')
serverList=1x2 OPC UA ServerInfo数组:索引描述主机名端口--------------------------------------------------1模拟服务器myhost.local 53530 2快速启动数据访问服务器myhost.local 62547
通过使用找到感兴趣的服务器FindDescription.
在服务器描述中搜索特定字符向量的功能。
hsInfo=findDescription(服务器列表,'模拟')
hsInfo=OPC UA ServerInfo“SimulationServer”:连接信息主机名:“myhost.local”端口:53530
通过此发现过程,您可以识别OPC UA服务器侦听连接的端口(53530)。发现过程还使构造和连接到所需的OPC UA服务器变得更容易。
在找到OPC UA Server后,创建OPC UA客户端以管理与服务器的连接,获取密钥服务器特征,并从服务器读取和写入数据。你可以使用opcuaserverinfo
结果直接构建了OPC UA客户端。
uaClient=opcua(hsInfo)
也可以直接使用主机名和端口创建客户端。
UACLIENT = OPCUA('localhost',53530)
uaClient=OPC UA客户端:服务器信息:名称:'SimulationServer@localhost'Hostname:'localhost'端口:53530 EndpointUrl:'opc。tcp://localhost:53530/OPCUA/SimulationServer'连接信息:超时:10状态:'断开连接'服务器状态:''安全信息:MessageSecurityMode:SignAndEncrypt ChannelSecurityPolicy:Aes256_Sha256_RsaPss端点:[1×11 opc.ua.EndpointDescription]
客户端最初与服务器断开连接,如地位
所有物连接到服务器后,其他属性将显示在客户端显示中。
连接(Uaclient)
uaClient OPC UA客户端:服务器信息:名称:'SimulationServer@localhost'Hostname:'localhost'端口:53530 EndpointUrl:'opc。tcp://localhost:53530/OPCUA/SimulationServer'连接信息:超时:10状态:'已连接'服务器状态:'正在运行'安全信息:MessageSecurityMode:SignAndEncrypt ChannelSecurityPolicy:Aes256_Sha256_RsaPss端点:[1×11 opc.ua.EndpointDescription]服务器限制:MinSampleRate:0秒MaxReadNodes:0 MaxWriteNodes:0 MaxHistoryReadNodes:0 MaxHistoryValuesPerNode:0
其他属性描述服务器的功能,特别是各种读写操作的限制。限制值0表示服务器没有对该功能施加直接限制。
OPC UA服务器为您提供一个名称空间,用于读取和写入当前数据和历史数据。名称空间被组织为节点层次结构。每个节点都具有描述该节点的属性。节点由两个元素唯一标识:名称空间索引(数字整数)和节点标识符(数字整数、字符向量或全局唯一标识符或GUID)。要唯一地描述节点,必须同时提供namespaceindex和标识符;不能仅提供标识符,因为可能会对不同的命名空间索引重复此操作。
OPC Toolbox通过OPC UA客户端的命名空间属性公开节点的层次结构。命名空间属性的每个元素都是服务器顶部级别的节点。命名空间中的每个节点都有一个孩子们
公开该节点中包含的子节点的属性。您可以使用浏览名称空间brownenamespace.
生成的对话框允许您从层次结构中选择节点,并在函数的输出中返回它们。
serverNodes=browseNamespace(uaClient)
当你点击好啊所选项目将在命令窗口输出中返回。
serverNodes=1x2 OPC UA节点数组:索引名NsInd Identifier节点类型子节点-----------------------------------1分钟支持采样0 2272变量0 2 MaxArrayLength 0 11702变量0金宝app
节点可以具有与其关联的数据值,也可以只是其他节点的容器节点类型
节点的属性将节点标识为对象节点(容器)或可变节点(数据)。有关如何编程方式搜索服务器命名空间的更多信息,请参阅浏览OPC UA服务器名称空间.
OPC UA服务器提供对其当前和历史价值的访问变量
节点。使用OPC工具箱,您可以使用节点阵列从服务器读取当前值。当前数据包括值、服务器从传感器接收数据值的时间戳,以及描述数据值的准确性和来源的质量。
[val,Ts,质量] = ReadValue(Uaclient,ServerNodes)
val = 2×1个单元阵列{[0秒]} {[65535]} ts = 2×1 datetime阵列10-apr-2019 09:46:43 10-2019 09:46:43 qual = opc ua质量ID:'好'好'
有关读取和写入当前值的详细信息,请参阅读取和写入当前OPC UA服务器数据.
将选定节点的历史数据存储在OPC UA服务器上。在上一步中检索到的服务器节点不会被服务器存档,因为这些值通常不会更改。您可以查询历史化
属性,以确定服务器当前是否正在存档该节点的数据。
因为serverNode列表是一个数组,所以必须使用串联来收集输出。
[服务器节点。历史记录]
ans = 0 0
当前未对任何服务器节点进行历史记录。此外,服务器不允许对这些节点进行历史访问,如访问级别历史记录
节点的属性。
{serverNodes.AccessLevelHistory}
ans ='none'没有'
要查找具有历史记录的节点,请在服务器中查询Double和Int32节点模拟
父节点。
simnode = findnodebyname(Uaclient.namespace,'模拟')
simNode=OPC UA节点:节点信息:名称:“模拟”描述:“组织其他节点的对象的类型。”命名空间索引:5标识符:“85/0:Simulation”节点类型:“对象”层次结构信息:父级:服务器子级:14
这个模拟
节点是一个目的
节点,因此它没有价值
。但是,它有7个子项。找到正弦波
和随机的
子节点“-部分”
标志查找以提供的参数开头的节点。
sinenode = findnodebyname(simnode,“正弦波”,“-部分”);randNode=findNodeByName(simNode,'随机的',“-部分”)
randNode=OPC UA节点:节点信息:名称:'Random1'描述:''名称空间索引:5标识符:'Random1'节点类型:'Variable'层次结构信息:父级:'Simulation'子级:0服务器数据类型:Double AccessLevelCurrent:读/写AccessLevelHistory:读历史记录:0
虽然sinusoid1.
和随机数1
当前未存档节点(历史化
false)您可以从节点读取历史记录数据(历史记录在启动时记录,然后关闭)。要在指定的时间范围内读取存储在服务器上的所有数据,请使用readhistory.
函数,传递要读取的节点和要读取数据的时间范围。
histData=readHistory(uaClient,[sineNode,randNode],日期时间('现在')-秒(10),日期时间('现在')))
histData=1×2 OPC UA数据对象数组:时间戳正弦波1随机1-------------------------------------------------------------------------------------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[良好(未加工的)好的(未加工的)0.483303[好的(未加工的)]2019-04-10 09:58:35.000 1.732051[好的(未加工的)]0.208826[好的(未加工的)]2019-04-10 09:58:36.000 1.902113[好的(未加工的)]0.483303[好的(未加工的)]2019-04-10 09:58:37.000 1.989044[好的(未加工的)]0.393722[好的(未加工的)]2019-04-10:38:98032[未加工的]好的(未加工的(未加工的)][参考译文]好的(原料)]0.116650[好的(原料)]2019-04-10 09:58:40.000 1.732051[好的(原料)]0.391128[好的(原料)]
获取检索到的数据的摘要。
摘要(历史数据)
1-by-2 OPC UA数据对象:名称值启动时间戳结束时间戳质量--------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --------------- ------------------------------------------------- SinUsoid1 10双倍值2019-04-10 09:58:31.000 2019-04-10 09:58:40.000 1独特的品质[良好(原始)]随机1 10双值2019-04-10 09:58:31.000 2019-04-10 09:58:40.000 1独特的品质[良好(原始)]
您可以直接从结果中绘制数据opc.ua.data.
对象
情节(HistData)传奇展示
您还可以将数据转换为Matlab®用于进一步处理的本机数据类型。有关处理数据的信息,请参阅可视化和预处理OPC UA数据.
完成与OPC服务器的数据交换后,应断开与服务器的连接。
断开连接(uaClient)
然后可以从MATLAB内存中清除OPC UA变量。如果从内存中清除OPC UA客户端,则与服务器的连接将自动关闭。