主要内容

读取历史OPC UA服务器数据

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

要在MATLAB会话中运行此示例,需要安装Prosys OPC UA仿真服务器。有关更多信息,请阅读OPC工具箱文档的入门部分。

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

使用对Local Discovery Service的查询结果创建客户端对象opcuaserverinfo,或直接使用您要连接的服务器的主机名和端口号。在这种情况下,直接连接到端口53530上的OPC UA服务器。

UACLIENT = OPCUA('localhost',53530); 连接(uaClient);客户机状态
ans = '连接'

定义读取历史数据的节点

Prosys OPC UA仿真服务器为“仿真”分支中的节点提供仿真信号。默认情况下,仿真服务器每秒更新一次值。使用光电阳极功能。

辛诺代兹={'随机的'“三角形”正弦曲线的}; simNodes=opcuanode(3,simNodeIds,uaClient)
simNodes = 1×3 OPC UA节点数组:index名称NsInd标识符NodeType ----- -------- ----- ---------- -------- 1 Random 3 Random Variable 2 Triangle 3 Triangle Variable 3 Sinusoid 3 Sinusoid Variable

从节点读取历史数据

使用readhistory.函数读取节点的历史记录。您必须通过读取历史数据的时间范围。对于Prosys服务器,读取最近30秒的数据。

dataSample = readHistory (uaClient simNodes datetime ('现在')秒(30),日期时间('现在')))
OPC UA数据对象数组:时间戳随机三角正弦信号  ----------------------- -------------------------- -------------------------- -------------------------- 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 2019-12-20 01:18:16.000好(生)[Good (Raw)] 2019-12-20 01:18:18.000 -1.095435 [Good (Raw)] -0.800000 [Good (Raw)] 2019-12-20 01:18:19.000 -1.178567 [Good (Raw)] -1.066667 [Good (Raw)] -1.486290 [Good (Raw)]2019-12-20 01:18:21.000 -1.548359 [Good (Raw)] -1.333333 [Good (Raw)] -1.732051 [Good (Raw)] -1.600000 [Good (Raw)] -1.902113 [Good (Raw)] 2019-12-20 01:18:22.000 -0.785842 [Good (Raw)] -1.866667 [Good (Raw)] 2019-12-20 01:18:23.000 -1.989044 [Good (Raw)] -1.866667 [Good (Raw)][Good (Raw)] 2019-12-20 01:18:25.000 -1.902113 [Good (Raw)] -1.333333 [Good (Raw)] -1.732051 [Good (Raw)] 2019-12-20 01:18:26.000 1.720142 [Good (Raw)] -1.066667 [Good (Raw)] -1.486290 [Good (Raw)] 2019-12-20 01:18:27.000 -1.170482-0.800000 [Good (Raw)] -1.175571 [Good (Raw)] 2019-12-20 01:18:28.000 -1.540274 [Good (Raw)] -0.533333 [Good (Raw)] -0.813473 [Good (Raw)] 2019-12-20 01:18:29.000 -0.430899 [Good (Raw)] -0.266667 [Good (Raw)] -0.415823 [Good (Raw)] 2019-12-20 01:18:30.000 -0.869489 [Good (Raw)] -0.000000 [Good (Raw)] 2019-12-20 01:18:30.000 -0.869489 [Good (Raw)] -0.000000 [Good (Raw)] 2019-12-20 01:18:28.000 -1.540274[Good (Raw)] 2019-12-20 01:18:33. 33] 0.813473 [Good (Raw)] 2019-12-20 01:18:33. 33. 0.891333 [Good (Raw)] 0.800000 [Good (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[Good (Raw)] 2019-12-20 01:18:37.000 -0.590339 [Good (Raw)] 1.600000 [Good (Raw)] 2019-12-20 01:18:37.000 0.59036 [Good (Raw)] 2019-12-20 01:18:38.000 0.172177 [Good (Raw)] 1.866644 [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服务器提供将预处理数据返回给客户端的聚合功能。当您需要在很长一段时间内查询数据时,这非常有用。

查询汇总罚款属性,以确定服务器支持的聚合功能。万博1manbetx

uaClient.AggregateFunctions
ans = 14×1 cell array {'Interpolative'} {'Average'} {'Minimum'} {'Maximum'} {'MinimumActualTime'} {'MaximumActualTime'} {'Range'} {'Count'} {'Start'} {'End'} {'Delta'} {'WorstQuality'} {'StartBound'} {'EndBound'}}

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

dataAverage = readProcessed (uaClient simNodes,“平均”,秒(30),日期时间('现在'datetime)分钟(10),('现在')))
dataAverage=1×3 OPC UA数据对象数组:时间戳随机三角形正弦波-----------------------------------------------------------------------------------------------2019-12-20 01:08:44.000-0.008396[良好(计算)]-0.000000[良好(计算)]0.000000[良好(计算)]2019-12-20 01:09:14.0000.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[好(计算)]2019-12-20 01:10:44.000【好(计算)】0.000000【好(计算)】2019-12-20 01:11:14.000 0.065122【好(计算)】0.000000【好(计算)】(计算)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-0.198687[好(计算-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[好(计算)]2019-12-20 01:16:44.000 0.085904[好(计算)]-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);