●函数
▪根据插值类型的不同查询某多个tag点在某些时刻的插值记录
int32 ar3_query_tags_interp_records_by_mode (
enum HD3_REC_INTER_QUERY_MODE nMode,
int32 nRecNum,
const uint32* pTagIDArray,
HD3Record* pRecArray,
int32* pErrCodeArray
)
●参数
▪nMode:
[in]插值类型,值为1表示前向插值,即将某一个时刻之前最近的一条原始值作为改时刻的插值;值为0表示线性插值,即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值。
▪nRecNum:
[in] records元素个数。
▪pTagIDArray
[in] 多个TagID,与records一一对应。
▪pRecArray
[in,out]in:插值时间戳,out:插值记录的值。
▪pErrCodeArray
[out]:错误码。
●返回值
查询成功返回RD_SUCCESS,查询失败返回错误码,见error_code.h。具体每个tag插值查询错误原因可能不同,具体需判断nErrCodes.
●说明
▪iHyperDB的8种数据类型都支持插值查询。
▪插值时,选定的插值时刻,需要前后都有好的原始记录,方可插值,此外如果插值时间点正好等于原始记录的时间戳,则此数据也能插值得到;
▪如果是最后一个点,那么在大于最后这点的时间戳的时刻进行插值是无法得到数据记录的,因为此时后面的原始数据是没有的,这种原理类似于线性函数两个点之间的插值,如果中间那个点(即插值点)的后一个点还没有原始数据,那么,这个点做插值,就无法插值成功。
▪对于普通点,如果要获取某一秒的数据,一般插值会使用这一秒的999毫秒来进行插值。比如实际存储的两条记录时间戳为1'1ms, 2'1ms,如果用户想要获取2'时的数据,那么传进来进行插值的时间戳使用2'999ms,则基本上2'的数据都能被插值得到(在999ms之前的点都可以通过前点插值得到),因此一般建议插值时ms取为999ms。
●举例
示例代码参见归档数据接口。
参见
▪ar3_query_specify_num_raw_recs
▪ar3_query_interp_record_by_mode
▪ar3_query_interp_records_by_mode
▪ar3_query_tags_interp_records_by_mode
©2015. All Rights Reserved.