一种基于TimeWheel的电表升级方法技术

技术编号:31978586 阅读:16 留言:0更新日期:2022-01-20 01:32
本发明专利技术涉及一种基于TimeWheel的电表升级方法,所述方法包括S1、从数据库中加载任务,将任务放入时间轮中,初始化时间轮;S2、判断时间轮的分针所指当前刻度容器内是否存在任务,若是,执行S3,若否,执行S4;S3、判断当前任务所对应的时间轮圈数是否为0,若是,异步进行升级任务,若否,将当前任务所对应的时间轮圈数减1,并执行S4;S4、等待n分钟,并针对下个刻度容器再次执行S2操作,直至完成所有任务的升级操作。该方法降低了系统占用资源,提高了系统稳定性。定性。

【技术实现步骤摘要】
一种基于TimeWheel的电表升级方法


[0001]本专利技术涉及智能
,尤其涉及一种基于TimeWheel的电表升级方法。

技术介绍

[0002]电表升级作为电表数据采集系统MDC的一项重要必备功能,主要实现对现场电表进行远程程序升级,解决了以前需要人工到现场进行升级成本高、效率低的问题。由于升级的时间比较长,当现场网络出现不稳定或者其他原因时,可能会出现升级失败的情况,为了保证升级成功率,MDC系统需要对升级失败的电表,在规定的时间间隔后,尝试对电表重新升级。
[0003]目前的升级流程,由于每只电表的升级进度不一致,所以如果升级失败,在重试升级时,系统会为每只升级失败的电表设置一个定时器,以控制对应的电表在对应时间后进行重新升级。如果升级失败的电表数量比较庞大,则需定时器过多,就会导致系统资源占用严重,甚至出现内存溢出的可能性,大大降低系统的稳定性,且一旦生成了延时任务,系统层面无法取消任务,且无法获知当前系统有多少延时任务等待执行,无法获知单只重试任务还需要等待多久执行,这会在系统层面变成黑匣子,增加系统的不稳定性。
[0004]为了解决上述问题,有研究者采用时间轮对重新尝试升级的电表进行监控,即将时间轮想象成一个时钟表盘,时钟的指针相当于一个定时器,刻度相当于一个一个存放任务的容器,当指针走到相应的刻度上时,就把当前刻度容器里的任务取出来执行。
[0005]时间轮替代了定时器,大大节约了系统内存,同时使得系统更加稳定,但其也存在不足,因为时间轮的最大延迟时间只允许是12小时,倘若需尝试重新升级的电表数量很多,当出现延迟时间相当大,或者对时间刻度要求非常精细时,则时间轮的时间刻度会非常庞大,这将会造成资源的浪费。

技术实现思路

[0006]鉴于上述问题,本专利技术的目的在于提供一种占用内存资源少,可确保系统性能稳定,且便于查看系统任务情况,使系统任务透明化,提升系统的易用性的基于TimeWheel的电表升级方法。
[0007]为了实现上述目的,本专利技术的技术方案为:一种基于TimeWheel的电表升级方法,其特征在于:所述方法包括,
[0008]S1、从数据库中加载任务,将任务放入时间轮中,初始化时间轮;
[0009]S2、判断时间轮的分针所指当前刻度容器内是否存在任务,若是,执行S3,若否,执行S4;
[0010]S3、判断当前任务所对应的时间轮圈数是否为0,若是,异步进行升级任务,若否,将当前任务所对应的时间轮圈数减1,并执行S4;
[0011]S4、等待n分钟,并针对下个刻度容器再次执行S2操作,直至完成所有任务的升级操作。
[0012]进一步的,所述方法还包括,在执行S1的将任务放入时间轮前,还进行如下操作:
[0013]S10、判断任务的下次执行时间是否小于当前时间,若是,则异步执行任务,若否,执行S1中的将任务放入时间轮中这一操作。
[0014]进一步的,所述时间轮圈数=int((第i块待升级电表的升级设定时间

当前时间)/m),其中,i和m均为不为0的自然数。
[0015]进一步的,所述方法还包括,在执行完异步进行升级任务后,还将当前被执行完的任务从数据库中删除。
[0016]进一步的,所述方法还包括,在将当前被执行完的任务从数据库中删除后,还从时间轮的刻度容器中删除当前被执行完的任务。
[0017]进一步的,所述方法还包括在电表完成升级操作后,判断升级是否成功,若不成功,则安排下次补充升级时间,若升级成功,则返回结束信息。
[0018]进一步的,所述安排下次补充升级时间具体包括,将失败次数S加1,并判断累加后的失败次数S是否超过阈值,若是,则返回升级任务失败信息,若否,依据重新升级固定间隔时间和累加后的失败次数S设定下次升级时间,S初始取值为1。
[0019]进一步的,所述依据重新升级固定间隔时间和累加后的失败次数设定下次升级时间具体为,下次升级时间=重新升级固定间隔时间+累加后的失败次数S*1h+确定电表升级失败时所对应的当前时间。
[0020]进一步的,所述重新升级固定间隔时间取值为2h。
[0021]进一步的,所述n取值为1,所述m取值60,所述阈值取值5。
[0022]与现有技术相比,本专利技术的优点在于:
[0023]通过将电表的补充升级时间转换成时间轮圈数,能支持任意的补充升级延时时间和精度要求,避免了因补充升级电表数量多或时间轮时间刻度要求精细而导致的时间轮时间刻度庞大,资源浪费问题,减少了资源的占用,提高了升级效率;同时,完成补充升级后对数据库和时间轮中的任务进行对应删除操作,使得任务操作可视化,提高了系统稳定性和易用性,也进一步保障了占用资源的最小化
附图说明
[0024]图1为本申请采用TimeWheel进行电表升级操作流程图。
[0025]图2为本申请中电表升级失败后确定下次升级时间的流程图。
具体实施方式
[0026]下面详细描述本专利技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本专利技术,而不能理解为对本专利技术的限制。
[0027]图1示出了本申请基于TimeWheel的电表升级方法流程图,如图所示,该基于TimeWheel的电表升级方法包括,
[0028]S1、从数据库中加载任务,将任务放入时间轮中,初始化时间轮;
[0029]S2、判断时间轮的分针所指当前刻度容器内是否存在任务,若是,执行S3,若否,执行S4;
[0030]S3、判断当前任务所对应的时间轮圈数是否为0,若是,异步进行升级任务,若否,将当前任务所对应的时间轮圈数减1,并执行S4;
[0031]S4、等待n分钟,并针对下个刻度容器再次执行S2操作,直至完成所有任务的升级操作。
[0032]在本申请中,该时间轮以分钟为最小刻度,故而,当发现当前刻度容器内无任务时,需等待时间继续往前走,直至走到下一个刻度容器,继续进行是否存在任务的判断。为了便于操作,本实施例中的n取值为1,也即本申请在设置时间刻度时,以1分钟为基准单位。
[0033]同时,在本申请中,时间轮圈数=int((第i块待升级电表的升级设定时间

当前时间)/m),其中,i和m均为不为0的自然数。其中,本实施例中的m取值60,也即圈数的获取以60分钟为一个换算单位量,当然,此处的“圈”仅是人为定义的一个完整圈,也可根据实际需要,将此处的“圈”定义为时钟走了半圈,也即将时钟走了半圈定义为一个“圈”的单位量,具体还是以实际需要决定。
[0034]由于系统在升级电表过程中,可能存在故障异常等,导致系统被重启,这就会存在一个现象,电表升级的设定时间小于当前系统重启后对应的时间,比如,电表A、B、C被设定的升级时间分别为1:20、3:20、5:20,而运行过程中系统本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于TimeWheel的电表升级方法,其特征在于:所述方法包括,S1、从数据库中加载任务,将任务放入时间轮中,初始化时间轮;S2、判断时间轮的分针所指当前刻度容器内是否存在任务,若是,执行S3,若否,执行S4;S3、判断当前任务所对应的时间轮圈数是否为0,若是,异步进行升级任务,若否,将当前任务所对应的时间轮圈数减1,并执行S4;S4、等待n分钟,并针对下个刻度容器再次执行S2操作,直至完成所有任务的升级操作。2.根据权利要求1所述基于TimeWheel的电表升级方法,其特征在于:所述方法还包括,在执行S1的将任务放入时间轮前,还进行如下操作,S10、判断任务的下次执行时间是否小于当前时间,若是,则异步执行任务,若否,执行S1中的将任务放入时间轮中这一操作。3.根据权利要求2所述基于TimeWheel的电表升级方法,其特征在于:所述时间轮圈数=int((第i块待升级电表的升级设定时间

当前时间)/m),其中,i和m均为不为0的自然数。4.根据权利要求2所述基于TimeWheel的电表升级方法,其特征在于:所述方法还包括,在执行完异步进行升级任务后,还将当前被执行完的任务从数据库中删除。5.根据权利要求4所述基于TimeWhee...

【专利技术属性】
技术研发人员:周善勇
申请(专利权)人:宁波三星智能电气有限公司
类型:发明
国别省市:

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

1