主要内容

从OPC历史数据访问服务器获取数据

本示例向您展示如何从OPC历史数据访问(HDA)服务器获取数据。

先决条件:

在服务器上启动历史数据记录

请注意通常不需要在生产服务器上执行此步骤。

本例使用一个模拟服务器,该服务器只记录使用OPC数据访问客户机订阅的项目的历史数据。从MAT文件加载客户端对象并重新连接客户端。

daObjs =负载(“opcdemoHDAConfigure.mat”);连接(daObjs.opcdemoHDAConfigure);

等待一段时间,让服务器记录一些数据。

暂停(10);

创建OPC HDA客户端对象

创建与OPC HDA服务器关联的OPC HDA客户端。

hdaObj = opchda (“localhost”“matrikon.OPC.Simulation”
hdaObj = OPC HDA客户端localhost/matrikon.OPC. hdaObj = OPC模拟:主机:localhost ServerID: matricon . opc .模拟超时:10秒状态:断开聚合:——(客户端断开)ItemAttributes:——(客户端断开)

客户端对象管理与服务器的连接,允许检索关于服务器的信息,浏览服务器名称空间,并读取存储在服务器上的数据。

此时,客户机还没有连接到服务器。连接客户端到服务器。

连接(hdaObj);

要确认客户端已连接,请显示客户端状态财产。

hdaObj。状态
ans =连接

定义兴趣项目

此示例使用Real8项目从锯齿状的波Real8而且UInt2项目从随机.为便于使用,创建项目名称的单元格数组。

itmIDs = {锯齿状的波浪。Real8”...“随机的。Real8”...“随机的。UInt2”};

从服务器读取原始数据

从过去一天的历史服务器读取原始数据值。

1,数据= readRaw (hdaObj itmIDs现在)
data = 1×3 OPC数据对象:注重科技进步ItemID价值开始时间结束时间戳的质量  ----------------------- --------------- ----------------------- ----------------------- ---------------------- 锯齿状的波。2016-04-12 16:30:25.776 1个独特品质[Raw]随机。2016-04-12 16:30:25.776 1个独特品质[Raw]随机。UInt29 uint16 values 2016-04-12 16:30:17.662 2016-04-12 16:30:25.776 1 unique quality [Raw] Use the showValues method to display all values.

注意:Matrikon服务器只保留每个项目的最后200个模拟值。

显示第一个数据元素的值。

showValues(数据(1))
OPC HDA项目锯齿波的数据对象。Real8:TIMESTAMP VALUE QUALITY ======================= ============= ========== 2016-04-12 16:30:17.662 3.141593 Raw (Good) 2016-04-12 16:30:18.677 6.283185 Raw (Good) 2016-04-12 16:30:19.692 9.424778 Raw (Good) 2016-04-12 16:30:20.707 12.566371 Raw (Good) 2016-04-12 16:30:21.717 15.707963 Raw (Good) 2016-04-12 16:30:22.732 18.849556 Raw (Good) 2016-04-12 16:30:23.747 21.991149 Raw (Good) 2016-04-12 16:30:24.761 25.132741 Raw (Good) 2016-04-12 16:30:25.776 28.274334 Raw (Good)

从服务器读取已处理数据

查询聚合属性来找出服务器支持的聚合类型。万博1manbetx

hdaObj。聚合
ans = OPC聚合类型:注重科技进步ID名称描述  ----------------- -- ------------------------------------------------------------------------------------------- 添入的1检索插值。TIMEAVERAGE 4检索重采样间隔内的时间加权平均数据。MINIMUMACTUALTIME 7检索重采样间隔中的最小值和最小值的时间戳。MINIMUM 8检索重采样间隔内的最小值。MAXIMUMACTUALTIME 9获取重采样间隔中的最大值和最大值的时间戳。MAXIMUM 10检索重采样间隔内的最大值。

Matrikon服务器支持时间加权平均值万博1manbetx,因此我们将在最后1分钟的10秒数据上使用该聚合类型。请注意下面的聚合属性可用于指定聚合类型。

pData = readProcessed (hdaObj, itmIDs hdaObj.Aggregates.TIMEAVERAGE 10、now-1/24/60)”
pData = 1×3 OPC数据对象:注重科技进步ItemID价值开始时间结束时间戳的质量  ----------------------- --------------- ----------------------- ----------------------- ----------------------------- 锯齿状的波。2016-04-12 16:30:16.840 1独特品质[计算]随机。2016-04-12 16:30:16.840 1独特品质[计算]随机。UInt26 uint16 values 2016-04-12 16:29:26.840 2016-04-12 16:30:16.840 1 unique quality [Calculated] Use the showValues method to display all values.

的值随机的。Real8项。

itmInd = getIndexFromID (pData,“随机的。Real8”);showValues (pData (itmInd))
OPC HDA随机项的数据对象。Real8:TIMESTAMP VALUE QUALITY ======================= ============= ====================== 2016-04-12 16:29:26.840 5073.986117 Calculated (Uncertain) 2016-04-12 16:29:36.840 5073.986074 Calculated (Uncertain) 2016-04-12 16:29:46.840 5073.986105 Calculated (Uncertain) 2016-04-12 16:29:56.840 5073.986137 Calculated (Uncertain) 2016-04-12 16:30:06.840 5073.986227 Calculated (Uncertain) 2016-04-12 16:30:16.840 7322.794889 Calculated (Uncertain)

最后一个值的性质是“不确定”因为时间间隔不是完整的10秒。

清理

使用完OPC对象后,从OPC引擎中删除它们。尽管删除HDA Client对象会自动断开该对象与服务器的连接,但这个示例显式地显示了它。

断开(hdaObj)删除(hdaObj)断开(daObjs.opcdemoHDAConfigure);删除(daObjs.opcdemoHDAConfigure);

客户端对象现在无效。

isvalid (hdaObj)
ans = 0