函数
STDMETHOD (com_ar_query_interp_record_by_mode)(
LONGnMode,
LONGnTagID,
VARIANT* nSec,
VARIANT* nMsec,
VARIANT* nQuality,
VARIANT* nTagType,
VARIANT* bsValue,
LONG* nRetErr
);
参数
[in]LONGnMode,插值类型,值为1表示前向插值;值为0表示线性插值。
[in]LONGnTagID, TagID。
[in,out]VARIANT* nSec, 插值时间戳的秒,必须是LONG类型,nSec->vt = VT_I4
[in,out]VARIANT* nMsec, 插值时间戳的毫秒,必须是LONG类型,必须是LONG类型,nMsec->vt = VT_I4
[out]VARIANT* nQuality,记录的数据质量,nQuality->vt = VT_I4
[out]VARIANT* nTagType, 记录的Tag类型,nTagType->vt = VT_I4
[out]VARIANT* bsValue, 记录的值,bsValue->vt = VT_BSTR
[out,retval]LONG* nRetErr,返回值
返回值
成功,返回RD_SUCCESS。失败返回其它错误码,见error_code.h
说明
iHyperDB的8种数据类型都支持插值查询。
根据数据实际采集及压缩策略,原始历史数据曲线可能存在数据点时间间隔不均,曲线过于抖动或锐化,通过插值方式可以在现有数据逻辑基础上输出增补点令曲线平滑,数据点间隔均匀。本函数用于根据输入TagID及查询时间戳,来查询该点、该时刻的记录。所查询的时间戳未必是实际存储点的时间戳,但可根据插值类型计算获得。
插值计算,插入点前后都需要有质量为好的实际存储点,方可插值。
此外,如果插值时间点正好等于原始记录的时间戳,则此数据的插值查询可以成功返回;
如果插值查询的时间戳后无实际存储点,则无法成功查询返回。
举例
|
|
Set objArray= CreateObject("hdCOMInterface.hdCOMClass.1")
Dim ip,port,bakip,bakport,timeout ip= "127.0.0.1" port= 5678 bakip = "1.2.3.4" bakport = 1234 timeout= 3
Dim ret objArray.com_nt_connect ip,port,bakip,bakport,timeout
Dim id,mode,result id=13 mode = 1 Dim nsec,nmsec,nquality,ntype,nvalue
nsec = CLng(1379310469) nmsec = CLng(0)
result = CLng(objArray.com_ar_query_interp_record_by_mode( mode,id,nsec,nmsec,nquality,ntype,nvalue))
Msgbox "com_ar_query_interp_record_by_mode错误码是:" &result
if result=0 then
Msgbox "sec is:" &nsec Msgbox "msec is:" &nmsec Msgbox "quality is:" &nquality Msgbox "type is:" &ntype Msgbox "value is:" &nvalue
end if objArray.com_nt_disconnect
Set objArray= nothing |
©2015. All Rights Reserved.