主要内容

阅读Historical OPC UA Server数据

这个示例向您展示了如何从OPC UA服务器读取历史数据。具体来说,本示例从Prosys OPC UA Simulation Server v4.0.0或更高版本读取数据。

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

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

使用对Local Discovery Service的查询结果创建客户端对象opcuaserverinfo,或直接使用所连接服务器的主机名和端口号。直接连接到OPC UA服务器,端口为53530。

uaClient = opcua (“localhost”,53530);连接(Uaclient);UAClient.Status.
ans = '连接'

定义读取历史数据的节点

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

simnodeids = {“随机”“三角形”正弦曲线的};Simnodes = Opcuanode(3,SimnodeID,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 Server,请阅读最近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 (“现在”(1)分钟(10):分钟):datetime (“现在”);DatareGular = ReadAttime(Uaclient,Simnodes,Timestoreturn)
datareregular = 1-by-3 OPC UA时间戳随机三角正弦信号  ----------------------- -------------------------- -------------------------- -------------------------- 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好(生)[Good (Raw)] 2019-12-20 01:13:44.000 1.259184 [Good (Raw)] 0.266667 [Good (Raw)] 0.415823 [Good (Raw)] 2019-12-20 01:13:44.000 0.193783 [Good (Raw)] 0.266667 [Good (Raw)01:14:44.000 1.073438 [Good (Raw)] 0.266667 [Good (Raw)] 0.415823 [Good (Raw)] 2019-12-20 01:15:44.000 0.099768 [Good (Raw)] 0.266667 [Good (Raw)] 0.415823 [Good (Raw)] 2019-12-20 01:16:44.000 -1.368735 [Good (Raw)]2019-12-20 01:18:44.000 0.818252 [Good (Raw)] 0.266667 [Good (Raw)] 0.415823 [Good (Raw)]

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

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

查询AggregateFunctions属性,以确定服务器支持的聚合功能。金宝app

uaclient.aggregateFunction.
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(“现在”datetime)分钟(10),(“现在”))
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:40088148 [良好(计算)] -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.00000000[良好(计算)] -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 simNodes,'平均数'秒(0.5),日期时间(“现在”datetime)秒(5)(“现在”))
dataMixedQuality = 1 × 3 OPC UA时间戳随机三角正弦信号  ----------------------- --------------------------------- --------------------------------- --------------------------------- 2019-12-20 01:18:39.000 0.000000[坏NoData后(生)):0.000000(缺点:NoData后(生))0.000000[坏NoData后(生)):2019-12-20 01:18:39.500 -0.589250(好(计算))1.600000(好[2019-12-20 01:18:40.000 0.000000[坏:NoData (Raw)] 0.000000[坏:NoData (Raw)] 2019-12-20 01:18:40.500 -0.959042[好(计算)]1.333333[好(计算)]1.732051[好(计算)]2019-12-20 01:18:41.000 0.000000[坏:NoData (Raw)] 0.000000[坏:NoData (Raw)]0.000000[坏:NoData (Raw)] 2019-12-20 01:18:41.500 0.425527[好(计算)]1.066667[好(计算)]1.486290[好(计算)]2019-12-20 01:18:42.000 0.000000[坏:NoData (Raw)] 0.000000[坏:NoData (Raw)] 2019-12-20 01:18:42.500 0.078668[好(计算)]0.800000[好(计算)]1.175571[2019-12-20 01:18:43.000 0.000000 [Bad:NoData (Raw)] 0.000000 [Bad:NoData (Raw)] 2019-12-20 01:18:43.500 1.188043 [Good (calculate)] 0.533333 [Good (calculate)] 0.813473 [Good (calculate)]

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

datagood = filterbyquality(DataMixedQuality,‘好’
dataGood = 1 × 3 OPC UA时间戳随机三角正弦信号  ----------------------- --------------------------------- --------------------------------- --------------------------------- 2019-12-20 01:18:39.500 -0.589250(好(计算))1.600000(好(计算))1.902113(好(计算))2019-12-20 01:18:40.500 -0.959042(好(计算))1.333333(好(计算)]2019-12-20 01:18:41.500 0.425527[好(计算)]1.066667[好(计算)]1.486290[好(计算)]2019-12-20 01:18:42.500 0.078668[好(计算)]0.800000[好(计算)]2019-12-20 01:18:43.500 1.188043[好(计算)]0.533333[好(计算)]0.813473(好(计算))

断开与服务器

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

断开(uaClient);