从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