主要内容

阅读Historical OPC UA Server数据

此示例显示了如何从OPC UA Server读取历史数据。具体地,此示例从Prosys OPC UA Simulation Server v4.0.0或更高版本读取数据。

要在Matlab会话中运行此示例,您需要安装Prosys OPC UA Simulation Server。阅读OPC Toolbox文档的入门部分以获取更多信息。

创建客户端并连接到服务器

您使用查询结果使用查询结果来使用对本地发现服务的结果opcuaserverinfo.,或直接使用您要连接的服务器的主机名和端口号。在这种情况下,直接连接到端口53530上的OPC UA服务器。

UACLIENT = OPCUA('localhost',53530);连接(Uaclient);UAClient.Status.
ans ='连接'

定义节点以读取历史数据

ProsoS OPC UA Simulation Server为“仿真”分支中的节点提供了模拟信号。默认情况下,Simulation Server会更新每个秒钟的值。使用该节点定义这些节点opcuanode.功能。

simnodeids = {'随机的';'三角形';'sinusoid'};simnodes = opcuanode(3,simnodeids,uaclient)
simNodes = 1×3 OPC UA节点数组:索引名称NsInd标识符的NodeType ----- -------- ----- ---------- --------  1个随机3随机变量2三角形3三角形变量3正弦曲线

从节点读取历史数据

使用readhistory.读取节点历史记录的功能。您必须通过该时间范围来读取历史数据。对于Prosys Server,请阅读最近30秒的数据。

DataSample = readhistory(Uaclient,Simnodes,DateTime('现在') - 秒(30),DateTime('现在')))
DataSample = 1-BY-3 OPC UA数据对象数组:时间戳随机三角形SINUSOID --------------------------------------------------------------------------------------------------- 2019-12-20 01:18:14.000 1.402465 [良好(原始)] 0.266667 [良好(原始)] 0.415823 [良好(原始)] 2019-12-20 01:18:15.000 1.044139 [良好(原始)] 0.000000 [良好(原始)] 0.000000 [Good(RAW)] 2019-12-20 01:18:16.000 -1.857952 [良好(原始)] -0.266667[良好(原始)] -0.415823 [良好(原始)] 2019-12-20 01:18:17.000 1.783723 [良好(原始)] -0.533333 [良好(RAW)] -0.813473 [良好(RAW)] 2019-12-20 01:18:18.000 -1.095435 [良好(原始)] -0.800000 [良好(原始)] -1.175570 [良好(原始)] 2019-12-20 01:18:19.000 -1.178567 [良好(原始)]  -1.066667 [良好(原始)] -1.486290 [良好(原始)] 2019-12-20 01:18:20.000 -1.548359 [良好(原始)] -1.333333 [良好(原始)] -1.732051 [良好(原始)] 2019-12-20 01:18:21.000 -0.438983 [良好(原始)] -1.600000 [良好(原始)] -1.902113 [良好(原始)] 2019-12-20 01:18:22.000 -0.785842 [良好(原始)] -1.866667 [好(RAW)] -1.989044 [良好(原始)] 2019-12-20 01:18:23.000 1.419149 [良好(RAW)] -1.866667 [良好(RAW)] -1.989044 [好(RAW)] 2019-12-20 01:18:24.0001.049357 [良好(RAW)] -1.600000 [良好(RAW)] -1.902113 [良好(RAW)] 2019-12-20 01:18:25.000 -1.932999 [GOOD(RAW)] -1.333333 [好(RAW)]  -1.732051 [良好(原始)] 2019-12-20 01:18:26.000 1.720142 [良好(原始)] -1.066667 [良好(原始)] -1.486290 [良好(原始)] 2019-12-20 01:18:27.000-1.170482 [良好(原始)] -0.800000 [良好(原始)] -1.175571 [良好(原始)] 2019-12-20 01:18:28:10 -1.540274 [良好(原始)] -0.533333 [良好(原始)]-0.813473 [良好(原始)] 2019-12-20 01:18:29.000 -0.430899 [良好(原始)] -0.266667 [好(原始)] -0.415823 [好(原始)] 2019-12-20 01:18:30.000 -0.869489 [良好(原始)] -0.000000 [良好(原始)] -0.000000 [良好(原始)] 2019-12-20 01:18:31.000 -1.630916 [良好(原始)] 0.266667 [好(原料)] 0.415823 [良好(原始)] 2019-12-20 01:18:32.000 1.999292 [良好(原始)] 0.53333 [良好(原始)] 0.813473 [良好(原始)] 2019-12-20 01:18:33.000  -0.891333 [良好(原始)] 0.800000 [良好 (Raw)] 1.175570 [Good (Raw)] 2019-12-20 01:18:34.000 -1.238192 [Good (Raw)] 1.066667 [Good (Raw)] 1.486290 [Good (Raw)] 2019-12-20 01:18:35.000 -0.220548 [Good (Raw)] 1.333333 [Good (Raw)] 1.732051 [Good (Raw)] 2019-12-20 01:18:36.000 -0.590339 [Good (Raw)] 1.600000 [Good (Raw)] 1.902113 [Good (Raw)] 2019-12-20 01:18:37.000 0.519036 [Good (Raw)] 1.866667 [Good (Raw)] 1.989044 [Good (Raw)] 2019-12-20 01:18:38.000 0.172177 [Good (Raw)] 1.866667 [Good (Raw)] 1.989044 [Good (Raw)] 2019-12-20 01:18:39.000 -0.589250 [Good (Raw)] 1.600000 [Good (Raw)] 1.902113 [Good (Raw)] 2019-12-20 01:18:40.000 -0.959042 [Good (Raw)] 1.333333 [Good (Raw)] 1.732051 [Good (Raw)] 2019-12-20 01:18:41.000 0.425527 [Good (Raw)] 1.066667 [Good (Raw)] 1.486290 [Good (Raw)] 2019-12-20 01:18:42.000 0.078668 [Good (Raw)] 0.800000 [Good (Raw)] 1.175571 [Good (Raw)] 2019-12-20 01:18:43.000 1.188043 [Good (Raw)] 0.533333 [Good (Raw)] 0.813473 [Good (Raw)]

在特定时间读取历史数据

您可以要求服务器在特定时间检索数据。如果服务器没有该特定时间的存档值,则返回插值(或外插)值。使用读物在最后10分钟内每分钟检索数据的功能。

timestoreturn = datetime('现在') -  MINUTES(10):分钟(1):DATETIME('现在');DatareGular = ReadAttime(Uaclient,Simnodes,Timestoreturn)
DatareGular = 1-BY-3 OPC UA数据对象阵列:时间戳随机三角形SINUSOID ------------------------------------------------------------------------------------------------- 2019-12-20 01:08:44.000 -0.083361 [良好(原始)] 0.266667 [良好(原始)] 0.415823 [良好(原始)]2019-12-20 01:09:44.000 0.043744 [良好(原始)] 0.266667 [良好(原料)] 0.415823 [良好(原始)] 2019-12-20 01:10:44.000 1.199272 [良好(原始)] 0.266667 [良好(原料)] 0.415823 [良好(原始)] 2019-12-20 01:11:44.000 1.259184 [良好(原始)] 0.266667 [良好(原始)] 0.415823 [良好(原始)] 2019-12-20 01:12:44.000 0.193783 [良好(原料)] 0.266667 [良好(原料)] 0.415823 [良好(原始)] 2019-12-20 01:13:44.000 -1.585967 [良好(原始)] 0.266667 [良好(原始)] 0.415823[良好(原始)] 2019-12-20 01:14:14:44.000 1.073438 [良好(原始)] 0.266667 [良好(原始)] 0.415823 [良好(原始)] 2019-12-20 01:15:44.000 0.099768 [良好(RAW)] 0.266667 [良好(RAW)] 0.415823 [良好(RAW)] 2019-12-20 01:16:44.000 -1.368735 [良好(原料)] 0.266667 [良好(原始)] 0.415823 [良好(原始)]2019-12-20 01:17:44.000 1.791922 [良好(原始)] 0.266667 [良好(原始)] 0.415823 [良好(原始)] 2019-12-20 01:18:44.000 0.818252 [好(RAW)] 0.26667 [良好(原料)] 0.415823 [良好(原始)]

从服务器读取已处理的数据

OPC UA服务器提供汇总函数,用于将预处理数据返回给客户端。当您需要在大型时间内查询数据时,这是最有用的。

查询汇总罚款连接客户端的属性,以了解服务器支持的聚合功能。金宝app

UACLIENT.AGGREGATEFUNCTION.
ans = 14×1个单元阵列{'Interpolative'} {'Interpolative'} {'minimual'} {'maximume'} {'finestactiualtime'} {'maxingactiualtime'} {'RangeActimtime'} {'Range'} {'count'} {'start'} {'结束'} {'delta'} {'ortsquality'} {'startbound'} {'endbound'}

在过去10分钟内读取每30个秒钟的平均值。

dataaverage = ReadProcessed(Uaclient,Simnode,'平均数',秒(30),DateTime('现在') -  MINUTES(10),DATETIME('现在')))
dataaverage = 1-by-3 opc ua数据对象阵列:时间戳随机三角形sinusoid ------------------------------------------------------------------------------ ----------------------------- 2019-12-20 01:08:44.000  -0.008396 [良好(计算)] -0.000000 [良好(计算)] 0.000000 [良好(计算)] 2019-12-20 01:09:14.000 0.071422 [良好(计算)] -0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:09:44.000 0.034084 [良好(计算)] -0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:10:14.000 0.190256 [好(计算)] -0.000000 [良好(计算)] 0.000000 [良好(计算)] 2019-12-20 01:10:44.000 0.088148 [良好(计算)] -0.000000 [良好(计算)] -0.000000 [好(计算)2019-12-20 01:11:14.000 0.065122 [良好(计算)] 0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:11:44.000 -0.057444 [好(计算)] 0.000000 [良好(计算)] 0.000000 [良好(计算)] 2019-12-20 01:12:14.000 -0.047782 [良好(计算)] 0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:12:44.000 0.253328 [良好(计算)] 0.000000[良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:13:14.000 -0.018746 [良好(计算)] 0.000000 [良好(计算)] 0.000000 [良好(计算)] 2019-12-20 01:13:44.000 0.103775 [良好(计算)] 0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:14:14.000 0.010857 [良好(计算)] 0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:14:44.000 -0.370672 [良好(计算)] 0.000000 [良好(计算)] 0.000000 [良好(计算)] 2019-12-20 01:15:14.000 -0.198687 [良好(计算)] -0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:15:44.000 -0.025481 [良好(计算)] -0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:16:14.000 0.067565 [良好(计算)] -0.000000 [良好(计算)] 0.000000 [好(计算ULDED)] 2019-12-20 01:16:44.000 0.085904 [良好(计算)] -0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:17:14.000 0.018061 [好(计算)] -0.000000 [良好(计算)] -0.000000 [良好(计算)] 2019-12-20 01:17:44.000 -0.033414 [良好(计算)] -0.000000 [良好(计算)] 0.000000 [良好(计算)] 2019-12-20 01:18:14.000 -0.205573 [良好(计算)] -0.000000 [良好(计算)] -0.000000 [良好(计算)]

在过去5秒内读取每个半秒钟的平均值。注意数据质量如何包括质量良好,并且没有可用于执行计算的数据的质量差。

DataMixedQuality = ReadProcessed(Uaclient,Simnode,'平均数',秒(0.5),DateTime('现在') - 秒(5),DateTime('现在')))
DataMixedQuality = 1-by-3 OPC UA数据对象阵列:时间戳随机三角形Sinusoid ----------------------------------------------------------------------------- ------------------------------ 2019-12-20 01:18:39.000 0.000000[坏:Nodata(RAW)] 0.000000 [坏:Nodata(RAW)] 0.000000 [坏:Nodata(RAW)] 2019-12-20 01:18:39.500 -0.589250 [良好(计算)] 1.600000 [良好(计算)] 1.902113 [良好(计算)] 2019-12-20 01:18:40.000 0.000000 [坏:Nodata(RAW)] 0.000000 [坏:Nodata(RAW)] 0.000000 [Bad:Nodata(RAD)] 2019-12-2001:18:40.500 -0.959042 [良好(计算)] 1.333333 [良好(计算)] 1.732051 [良好(计算)] 2019-12-20 01:18:41.000 0.000000 [坏:Nodata(RAW)] 0.000000 [Bad:Nodata(RAW)] 0.000000 [坏:Nodata(RAW)] 2019-12-20 01:18:41.500 0.425527 [良好(计算)] 1.066667 [良好(计算)] 1.486290 [良好(计算)] 2019-12-2001:18:42.000 0.000000 [坏:Nodata(RAW)] 0.000000 [坏:Nodata(RAW)] 0.000000 [坏:Nodata(RAD)] 2019-12-20 01:18:42。500 0.078668 [良好(计算)] 0.800000 [良好(计算)] 1.175571 [良好(计算)] 2019-12-20 01:18:43.000 0.000000 [坏:Nodata(RAW)] 0.000000 [Bad:Nodata(RAD)]0.000000 [坏:Nodata(RAW)] 2019-12-20 01:18:43:43.500 1.188043 [良好(计算)] 0.533333 [良好(计算)] 0.813473 [良好(计算)]

过滤数据的质量以仅返回良好数据。

datagood = filterbyquality(DataMixedQuality,'好的'
Datagood = 1-by-3 OPC UA数据对象数组:时间戳随机三角形Sinusoid ----------------------------------------------------------------------------- ------------------------------ 2019-12-20 01:18:39.500  -0.589250 [良好(计算)] 1.600000 [良好(计算)] 1.902113 [良好(计算)] 2019-12-20 01:18:40.500 -0.959042 [良好(计算)] 1.333333 [良好(计算)] 1.732051 [好(计算)] 2019-12-20 01:18:41.500 0.425527 [良好(计算)] 1.066667 [良好(计算)] 1.486290 [良好(计算)] 2019-12-20 01:18:42.500 0.078668 [良好(计算)] 0.800000 [良好(计算)] 1.175571 [良好(计算)] 2019-12-20 01:18:43.500 1.188043 [良好(计算)] 0.53333 [良好(计算)] 0.813473 [良好(计算)]

断开服务器的连接

当您与服务器通信时,请断开客户端与服务器的连接。当客户端变量超出MATLAB®的范围时,也会自动执行。

断开(UACLIENT);