负荷曲线数据存取方法技术

技术编号:29584122 阅读:15 留言:0更新日期:2021-08-06 19:42
本发明专利技术公开了一种负荷曲线数据存取方法。存储时:将捕获时间与负荷数值分别存放在时间存储区和数值存储区;捕获时间按时间片段的结构形式存储,每个时间片段对应一个负荷数值集合,负荷数值集合包含一个负荷数值或者两个以上连续的负荷数值;时间片段中包含与负荷数值集合对应的时间区间数据,还包含指向所对应的负荷数值集合在数值存储区中的存储位置的数值索引数据。查找时:先将查找的时间段与时间片段的时间区间数据比较,定位到时间片段,再根据时间片段的数值索引数据定位到数值存储区中的目标负荷数值。本发明专利技术解决了向前修改时间的情况下,数据记录的查找与完整性之间存在的不可调和的矛盾,同时也避免了无效数据对数据查找的影响。

【技术实现步骤摘要】
负荷曲线数据存取方法
本专利技术涉及一种存取负荷曲线数据的方法。
技术介绍
负荷曲线记录功能是智能电表的重要功能之一,它可以根据用户预先设定好的数据要求,按照固定的时间间隔保存数据,以统计用户的用电情况。常规的负荷曲线一般是按照时间有序存储的,类似于“(时间1,数据1),(时间2,数据2)”的存储结构。查找一般采用二分法,由于时间是有序存储的,使用二分法查找,理论的算法复杂度为O(log2n),即在存储了n条数据的曲线内查找一条特定的数据,最多需要查找log2n次。这种负荷曲线的存取方式,结构简单,效率高,非常适合智能电表这种小型的嵌入式设备。但是,现有的这种负荷曲线存取方式也有其缺陷,主要在于:1)如果向前修改电表时间,则需要擦除部分负荷曲线记录,否则无法满足时间有序存储的要求。举例说明:假设电表当前时间为T1,后来经过对时后发现时间错误,需要将当前时间向前修改时间为T2(T2<T1),那么修改时间后,T2至T1时间内的负荷曲线记录必须擦除,否则负荷曲线记录的时间就无法满足有序的要求,会导致二分法查找失效。然而,为了保证负荷曲线数据的可追溯,在很多情况下,无论时间是否为有序排列,都需要将所有已经记录的负荷数据保存下来,用于日后查询,这种情况下是不允许擦除已经记录的负荷曲线数据的,记录的查找与完整性之间存在不可调和的矛盾。2)无法高效的剔除无效数据。电表作为一种工业设备,面对的用电工况比较复杂。在电表运行期间,可能会出现频繁的停电上电或者供电电压不足的情况。在这些工况下,负荷曲线的存储可能会失败,出现无效数据。二分法查找过程中如果出现无效数据,也会出现查找错误。受IO交互速度和RAM容量限制,目前无法对每一条负荷曲线数据进行遍历,判断其有效性。因此目前比较通用的解决方法是:依然采用有序存储、二分法查找,同时通过增加备用电源的方案,提升供电不稳时存储器件的电源稳定性。但是,这种方案显著增加了硬件成本。
技术实现思路
本专利技术提出了一种负荷曲线数据存取方法,其目的是:(1)解决需要向前修改时间的情况下,数据记录的查找与完整性之间存在的不可调和的矛盾;(2)避免无效数据影响数据的查找。本专利技术技术方案如下:一种负荷曲线数据存取方法,负荷曲线数据包括负荷数值以及与负荷数值相对应的捕获时间,主要步骤为:存储时:将捕获时间与负荷数值分别存放在时间存储区和数值存储区;其中,捕获时间按时间片段的结构形式存储,每个时间片段对应一个负荷数值集合,负荷数值集合包含一个负荷数值或者两个以上连续的负荷数值;时间片段中包含与负荷数值集合对应的时间区间数据,还包含指向所对应的负荷数值集合在数值存储区中的存储位置的数值索引数据;查找时:先将查找的时间段与时间片段的时间区间数据比较,定位到时间片段,再根据时间片段的数值索引数据定位到数值存储区中的目标负荷数值。作为本方法的进一步改进:存储时,先存储负荷数值,如果负荷数值存储成功,则存储或更新对应的时间片段,否则直接结束本次存储。作为本方法的进一步改进:所述负荷数值在数值存储区中循环存储,即数值存储区存满之后,返回到数值存储区的起始端覆盖最早的数据记录继续存储。作为本方法的进一步改进:所述时间区间数据包括起始时间start_time和时间间隔interval;起始时间start_time是指该时间片段对应的负荷数值集合中第一条负荷数值对应的捕获时间,时间间隔interval是负荷数值的捕获周期;所述数值索引数据包括区间起始索引start_index,其指向该时间片段对应的负荷数值集合中第一条负荷数值在数值存储区的存储位置;时间片段还包含条数值count,它是指负荷数值集合中负荷数值的数量。作为本方法的进一步改进:所述时间片段在时间存储区中循环存储,即时间存储区存满之后,返回到时间存储区的起始端覆盖最早的数据记录继续存储。作为本方法的进一步改进:使用时间片段起始索引start_valid_index和当前时间片段索引cur_index指向有效的时间片段;其中,时间片段起始索引start_valid_index指向时间存储区中第一条有效的时间片段,当前时间片段索引cur_index指向时间存储区中最新存储的有效的时间片段。作为本方法的进一步改进:新增负荷曲线数据时执行以下步骤:A-1、将负荷数值和捕获时间分开;A-2、将负荷数值保存到数值存储区,如果保存成功,执行步骤A-3,否则结束新增负荷曲线数据的操作;A-3、判断当前新增的负荷数值的捕获时间capture_time与最新的有效的时间片段是否匹配,判断条件为:capture_time=start_time+interval*(count+1)式中,start_time、interval和count分别为最新的有效的时间片段的起始时间、时间间隔和条数值;满足该条件则执行步骤A-4,否则执行步骤A-5;A-4、将最新的有效的时间片段的条数值count加1;然后执行步骤A-6;A-5、在时间存储区中新建一条时间片段,该时间片段的起始时间start_time等于新增的负荷数值的捕获时间capture_time,时间间隔interval等于当前的捕获周期,区间起始索引start_index等于新增的负荷数值的存储位置,条数值count等于1;然后执行步骤A-6;A-6、根据间片段起始索引start_valid_index找到第一个有效的时间片段,判断新增的负荷数值的存储位置是否在该时间片段所对应的数值存储区的区间内;如果新增的负荷数值的存储位置在该时间片段所对应的数值存储区的区间内,且start_valid_index不等于cur_index,则第一个有效的时间片段中的start_time值增加该片段的interval,start_index值增加1,count值减1;再判断此时的count是否小于0,如果小于0,则将start_valid_index值加1;如果新增的负荷数值的存储位置在该时间片段所对应的数值存储区的区间内,且start_valid_index等于cur_index,则第一个有效的时间片段中的start_time值增加该片段的interval,start_index值增加1,count值减1。作为本方法的进一步改进:查询负荷曲线数据时执行以下步骤:S-1、根据时间片段起始索引start_valid_index和当前时间片段索引cur_index获取当前所有有效的时间片段;S-2、遍历所有有效的时间片段,分别判断时间片段所指向的时间区间[start_time,start_time+count*interval]与查询的时间区间[From_T,To_T]是否有交集;S-3、遍历所有存在交集的时间片段,对于某时间片段,设交集为[T1,T2],则按下式计算出需要返回的负荷数值所在的存储位置区间:然后根据计算出本文档来自技高网
...

【技术保护点】
1.一种负荷曲线数据存取方法,负荷曲线数据包括负荷数值以及与负荷数值相对应的捕获时间,其特征在于:/n存储时:将捕获时间与负荷数值分别存放在时间存储区和数值存储区;其中,捕获时间按时间片段的结构形式存储,每个时间片段对应一个负荷数值集合,负荷数值集合包含一个负荷数值或者两个以上连续的负荷数值;时间片段中包含与负荷数值集合对应的时间区间数据,还包含指向所对应的负荷数值集合在数值存储区中的存储位置的数值索引数据;/n查找时:先将查找的时间段与时间片段的时间区间数据比较,定位到时间片段,再根据时间片段的数值索引数据定位到数值存储区中的目标负荷数值。/n

【技术特征摘要】
1.一种负荷曲线数据存取方法,负荷曲线数据包括负荷数值以及与负荷数值相对应的捕获时间,其特征在于:
存储时:将捕获时间与负荷数值分别存放在时间存储区和数值存储区;其中,捕获时间按时间片段的结构形式存储,每个时间片段对应一个负荷数值集合,负荷数值集合包含一个负荷数值或者两个以上连续的负荷数值;时间片段中包含与负荷数值集合对应的时间区间数据,还包含指向所对应的负荷数值集合在数值存储区中的存储位置的数值索引数据;
查找时:先将查找的时间段与时间片段的时间区间数据比较,定位到时间片段,再根据时间片段的数值索引数据定位到数值存储区中的目标负荷数值。


2.如权利要求1所述的负荷曲线数据存取方法,其特征在于:存储时,先存储负荷数值,如果负荷数值存储成功,则存储或更新对应的时间片段,否则直接结束本次存储。


3.如权利要求1所述的负荷曲线数据存取方法,其特征在于:所述负荷数值在数值存储区中循环存储,即数值存储区存满之后,返回到数值存储区的起始端覆盖最早的数据记录继续存储。


4.如权利要求3所述的负荷曲线数据存取方法,其特征在于:所述时间区间数据包括起始时间start_time和时间间隔interval;起始时间start_time是指该时间片段对应的负荷数值集合中第一条负荷数值对应的捕获时间,时间间隔interval是负荷数值的捕获周期;
所述数值索引数据包括区间起始索引start_index,其指向该时间片段对应的负荷数值集合中第一条负荷数值在数值存储区的存储位置;时间片段还包含条数值count,它是指负荷数值集合中负荷数值的数量。


5.如权利要求4所述的负荷曲线数据存取方法,其特征在于:所述时间片段在时间存储区中循环存储,即时间存储区存满之后,返回到时间存储区的起始端覆盖最早的数据记录继续存储。


6.如权利要求5所述的负荷曲线数据存取方法,其特征在于:使用时间片段起始索引start_valid_index和当前时间片段索引cur_index指向有效的时间片段;其中,时间片段起始索引start_valid_index指向时间存储区中第一条有效的时间片段,当前时间片段索引cur_index指向时间存储区中最新存储的有效的时间片段。


7.如权利要求6所述的负荷曲线数据存取方法,其特征在于:新增负荷曲线数据时执行以下步骤:
A-1、将负荷数值和捕获时间分开;
A-2、将负荷数值保存到数值存储区,如果保存成功,执行步骤A-3,否则结束新增负荷曲线数据的操作;
A-3、判断当前新增的负荷数值的捕获时间capture_time与最新的有效的时间片段是否匹配,判断...

【专利技术属性】
技术研发人员:刘笑菲张学增柳志超张奔胡梦杰姜文浩陈玉伟朱广帅应春达郝志健
申请(专利权)人:烟台东方威思顿电气有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1