本发明涉及数据处理,特别涉及一种智能开关的任务调度方法。
背景技术:
1、智能量测开关(简称智能开关)是一种在常规开关/断路器上增加了电表量测(抄表)功能的智能电气设备。这里提及的电表量测(抄表)功能至少需支持三类量测任务:搜表任务、抄表任务和透传任务;其中,搜表任务是指由智能量测开关出发向所有与之连接的电表发送约定的搜表指令,并基于所有电表的反馈信息在开关侧构建一个对应的电表清单;抄表任务是指由智能量测开关出发定期向所有与之连接的电表发送约定的抄指令,并基于所有电表的反馈信息在开关侧持续存储最新的抄表记录;透传任务是指另外两个设备(一个远程服务端与一个电表、或一个远程服务端与另一个远程服务端、或一个电表与另一个电表等情况)通过当前智能量测开关进行指令数据转发时,当前智能量测开关将源设备发送的透传指令数据向目标设备进行转发。
2、智能量测开关上都会安装一个嵌入式操作系统来处理所有任务,目前大多数智能量测开关的嵌入式操作系统在处理上述多类量测任务时都采用一种顺序执行方式进行处理,即:基于每类任务的处理过程创建对应的任务实例,并对任务实例进行循环执行,并在该循环执行过程中只有在前一个任务实例完成一次完整的任务处理过程之后才能执行下一个任务实例。我们通过实践应用发现,这种顺序执行的任务调度机制存在任务响应实时性差的问题。例如,在处理抄表任务时收到了某个远程服务端发送的透传指令,此时并不能对该透传指令进行及时转发,只能等到抄表任务的任务处理过程完成之后才能转发。
3、而实际上许多嵌入式操作系统(例如,rtos)都是支持基于时间片进行并发任务调度(也称为分时调度机制)的,如能将该项功能利用起来就能提高智能量测开关的任务响应实时性。而如何在智能量测开关上基于分时调度机制进行任务调度也就是本发明需要解决的技术问题。
技术实现思路
1、本发明的目的,就是针对现有技术的缺陷,提供一种智能开关的任务调度方法。本发明的智能开关在开关启动时先对六类任务参数(时间同步任务参数、运行闪灯任务参数、告警闪灯任务参数、搜表任务参数、抄表任务参数和透传任务参数)进行初始化;再创建对应的六类任务实例(时间同步任务实例、运行闪灯任务实例、告警闪灯任务实例、搜表任务实例、抄表任务实例和透传任务实例);再将六类任务实例加入到一个任务队列中,并将该任务队列中时间同步任务实例、运行闪灯任务实例、告警闪灯任务实例、搜表任务实例对应的任务状态初始化为就绪状态,抄表任务实例、透传任务实例对应的任务状态初始化为挂起状态;然后基于分时调度机制对任务队列中所有任务状态为就绪状态或阻塞状态的任务实例进行循环任务调度;并在循环任务调度过程中发现搜表任务实例已从该任务队列中删除时立即将队列内抄表任务实例对应的任务状态重置为就绪状态,并在抄表任务实例切换成就绪状态之后的循环任务调度过程中基于透传任务参数中的透传开断状态对队列内抄表任务实例和透传任务实例进行实例挂起切换。通过本发明一方面可以对多类任务进行并发调度,达到提高智能开关整体任务响应实时性的目的;另一方面在执行抄表任务实例时若收到某个远程服务端(或电表)发送的透传指令,会及时通过切换抄表/透传任务状态的方式将透传任务实例的执行优先级提高,达到进一步提高透传任务响应实时性的目的;再一方面,还对开关的两类led灯(运行led灯和告警led灯)增加了两类对应的灯控任务实例(运行闪灯任务实例、告警闪灯任务实例),并通过这两类灯控任务实例达到提高智能开关直观预警实时性的目的。
2、为实现上述目的,本发明实施例提供了一种智能开关的任务调度方法,所述方法包括:
3、第一智能开关在开关启动时,对六类任务参数进行初始化;所述六类任务参数包括时间同步任务参数、运行闪灯任务参数、告警闪灯任务参数、搜表任务参数、抄表任务参数和透传任务参数;
4、并在所有任务参数初始化完成时,创建对应的六类任务实例;所述六类任务实例包括时间同步任务实例、运行闪灯任务实例、告警闪灯任务实例、搜表任务实例、抄表任务实例和透传任务实例;所述六类任务实例的每类任务实例各自对应一个任务状态;所述任务状态包括就绪状态、运行状态、阻塞状态、挂起状态和结束状态;
5、并在所有任务实例创建完成时,将所述六类任务实例加入第一任务队列;并将所述第一任务队列的所述时间同步任务实例、所述运行闪灯任务实例、所述告警闪灯任务实例、所述搜表任务实例对应的所述任务状态初始化为就绪状态;并将所述第一任务队列的所述抄表任务实例、所述透传任务实例对应的所述任务状态初始化为挂起状态;
6、并在所有任务实例的所述任务状态完成初始化后,基于分时调度机制对所述第一任务队列中所有所述任务状态为就绪状态或阻塞状态的任务实例进行循环任务调度;并在循环任务调度过程中发现所述搜表任务实例已从所述第一任务队列中删除时,将所述第一任务队列内的所述抄表任务实例对应的所述任务状态重置为就绪状态;并在所述抄表任务实例切换成就绪状态之后的循环任务调度过程中基于所述透传任务参数的透传开断状态对所述第一任务队列的所述抄表任务实例和所述透传任务实例进行实例挂起切换管理。
7、优选的,所述第一智能开关包括内部计时模块、led灯模块、非易失性存储模块和开关通信模块;
8、所述内部计时模块为一个自带电池的内部模块,用于对实时时间进行持续计时;
9、所述led灯模块包括运行led灯和告警led灯;所述运行led灯的亮灭状态设为在开关启动时默认设为亮灯状态;所述告警led灯的亮灭状态设为在开关启动时默认设为灭灯状态;所述运行led灯和所述告警led灯的闪灯频率都包括第一闪灯频率和第二闪灯频率;所述第一闪灯频率大于所述第二闪灯频率;
10、所述非易失性存储模块的存储介质类型包括eeprom和flash;
11、所述开关通信模块包括有线通信接口和无线通信接口;所述有线通信接口包括hplc通信接口和串口通信接口;所述无线通信接口包括wifi通信接口、蓝牙通信接口、nfc通信接口、rf通信接口和4g/5g/lte通信接口;
12、所述第一智能开关通过所述开关通信模块与多个第一电表和第一远程服务端进行通信数据连接;所述第一远程服务端为一个远程的模块、装置、设备、终端、服务器、系统或平台。
13、优选的,所述时间同步任务参数包括开关时间和开机时长;所述开关时间为一个实时时间;所述开机时长为一个用于记录从本次开关启动到当前时间之间的时间间隔;所述时间同步任务参数在初始化时,所述开关时间被设为0、所述开机时长被设为0;
14、所述运行闪灯任务参数为一个预设的时间长度参数;所述运行闪灯任务参数在初始化时默认被设为2秒;
15、所述告警闪灯任务参数包括故障标志和告警标志;所述故障标志包括有故障和无故障;所述告警标志包括有告警和无告警;所述告警闪灯任务参数在初始化时,所述故障标志被设为无故障、所述告警标志被设为无告警;
16、所述搜表任务参数包括搜表状态和第一存储区参数;
17、所述搜表状态包括未完成和已完成;所述搜表任务参数在初始化时,所述搜表状态被设为未完成;
18、所述第一存储区参数与所述非易失性存储模块中的一个预设的第一存储区对应;所述第一存储区用于对最新的第一电表清单进行存储;所述第一存储区参数包括第一存储区起始地址和第一存储区大小;所述第一存储区起始地址为所述第一存储区的预设起始地址;所述第一存储区大小为所述第一存储区的预设数据区大小;所述搜表任务参数在初始化时,所述第一存储区起始地址被设为所述第一存储区对应的预设起始地址、所述第一存储区大小被设为所述第一存储区对应的预设数据区大小;
19、所述抄表任务参数包括抄表间隔时长、抄表轮次、前轮抄表结束时间和第二存储区参数;
20、所述抄表间隔时长为一个预设的时间长度参数;所述抄表任务参数在初始化时,所述抄表间隔时长默认被设为15分钟;
21、所述抄表轮次用于记录从本次开关启动到当前时间之间已经完成的抄表轮次总数;所述抄表任务参数在初始化时,所述抄表轮次被设为0;
22、所述前轮抄表结束时间为上一轮抄表的结束时间;所述抄表任务参数在初始化时,所述前轮抄表结束时间参数被设为0;
23、所述第二存储区参数与所述非易失性存储模块中的一个预设的第二存储区对应;所述第二存储区用于对历史抄表记录进行存储,所述第二存储区中抄表记录的存储方式为顺序存储方式;所述第二存储区参数包括第二存储区起始地址、第二存储区大小和下轮抄表起始地址;所述第二存储区起始地址为所述第二存储区的预设起始地址;所述第二存储区大小为所述第二存储区的预设数据区大小;所述下轮抄表起始地址为所有已存储的历史抄表记录占用的最后一个存储地址的下一个存储地址;所述抄表任务参数在初始化时,所述第二存储区起始地址被设为所述第二存储区对应的预设起始地址、所述第二存储区大小被设为所述第二存储区对应的预设数据区大小、所述下轮抄表起始地址被设为所述第二存储区中所有历史抄表记录占用的最后一个存储地址的下一个存储地址;
24、所述透传任务参数包括所述透传开断状态、透传目标标识和透传指令数据;所述透传开断状态包括开启和断开;所述透传目标标识为一个所述第一电表的唯一标识或所述第一远程服务端的唯一标识;所述透传指令数据为当次需要向所述透传目标标识对应的所述第一电表或所述第一远程服务端转发的透传数据;所述透传任务参数在初始化时,所述透传开断状态被设为断开、所述透传目标标识和所述透传指令数据都被设为空。
25、优选的,所述方法还包括:
26、所述第一智能开关还在开关工作过程中基于预设的一类或多类故障中断或事件处理机制对开关工作过程中发生的故障中断或事件进行确认;并在确认发生任一类故障中断或事件时,将所述告警闪灯任务参数中对应的所述故障标志设为对应的有故障;
27、所述第一智能开关还在开关工作过程中对所有已发生的故障中断或事件是否已取消进行确认;并在确认所有已发生的故障中断或事件已取消时,将所述告警闪灯任务参数中对应的所述故障标志设为对应的无故障;
28、所述第一智能开关还在开关工作过程中基于预设的一类或多类告警中断或事件处理机制对开关工作过程中发生的告警中断或事件进行确认;并在确认发生任一类告警中断或事件时,将所述告警闪灯任务参数中对应的所述告警标志设为对应的有告警;
29、所述第一智能开关还在开关工作过程中对所有已发生的告警中断或事件是否已取消进行确认;并在确认所有已发生的告警中断或事件已取消时,将所述告警闪灯任务参数中对应的所述告警标志设为对应的无告警;
30、所述第一智能开关还在开关工作过程中基于预设的一类或多类透传指令接收中断或事件处理机制对开关是否收到任一个所述第一电表或所述第一远程服务端发送的透传指令进行确认;并在确认收到一个透传指令时,将当次收到的透传指令作为对应的当次透传指令数据,并将与所述当次透传指令数据的发送目标对应的另一个所述第一电表或所述第一远程服务端的唯一标识作为对应的当次透传目标标识,并基于所述当次透传指令数据和所述当次透传目标标识对所述透传任务参数中对应的所述透传指令数据和所述透传目标标识进行设置;并将所述透传任务参数的所述透传开断状态设为开启。
31、优选的,所述六类任务实例的每类任务实例都各自对应一个任务执行过程;每个所述任务执行过程都由多个单步程序步骤顺序组成;
32、所述六类任务实例的每类任务实例在对应的所述任务状态被设为就绪状态时,将对应的所述任务执行过程的第一个所述单步程序步骤对应的程序指针作为对应的起始步骤程序指针并备份;并在对应的所述任务状态被设为运行状态时,将对应的所述任务执行过程中与当前备份的所述起始步骤程序指针对应的所述单步程序步骤作为对应的当前起始程序步骤,并从所述当前起始程序步骤开始向下执行;并在对应的所述任务状态被设为阻塞状态或挂起状态时,暂停任务执行并将当前待执行的下一个所述单步程序步骤对应的程序指针作为最新的所述起始步骤程序指针并备份。
33、优选的,所述时间同步任务实例对应的所述任务执行过程具体包括:
34、将所述时间同步任务参数的所述开关时间作为对应的旧时间;并将所述时间同步任务参数的所述开机时长作为对应的旧时长;并获取所述内部计时模块生成的最新计时时间作为对应的新时间;并将所述新时间减去所述旧时间得到的时间间隔作为对应的新增时长;并将所述旧时长和所述新增时长的和作为对应的新时长;并基于所述新时间对所述开关时间进行重置;并基于所述新时长对所述开机时长进行重置;最后将对应的所述任务状态重置为就绪状态。
35、优选的,述运行闪灯任务实例对应的所述任务执行过程具体包括:
36、将所述运行led灯的亮灭状态设为亮灯状态;并对所述时间同步任务参数的所述开机时长是否已超过所述运行闪灯任务参数进行识别;若未超过,则将所述led灯模块的所述运行led灯的闪灯频率设为所述第一闪灯频率;若已超过,则将所述运行led灯的闪灯频率设为所述第二闪灯频率;最后将对应的所述任务状态重置为就绪状态。
37、优选的,所述告警闪灯任务实例对应的所述任务执行过程具体包括:
38、对所述告警闪灯任务参数的所述故障标志进行识别;若所述故障标志为有故障,则将所述led灯模块的所述告警led灯的亮灭状态设为亮灯状态并将闪灯频率设为所述第一闪灯频率;若所述故障标志为无故障,则对所述告警闪灯任务参数的所述告警标志是否为有告警进行识别,若是则将所述告警led灯的亮灭状态设为亮灯状态并将闪灯频率设为所述第二闪灯频率,若否则将所述告警led灯的亮灭状态设为灭灯状态;最后将对应的所述任务状态重置为就绪状态。
39、优选的,所述搜表任务实例对应的所述任务执行过程具体包括:
40、通过所述开关通信模块向所有所述第一电表群发预设的搜表指令;并通过所述开关通信模接收各个所述第一电表回发的第一电表标识和对应的第一电表基础信息;并由各个所述第一电表标识和对应的所述第一电表基础信息组成一个对应的第一电表记录;并由得到的所有所述第一电表记录组成最新的所述第一电表清单;并将最新的所述第一电表清单的数据长度作为对应的第一数据长度;
41、并对所述第一数据长度是否未超过所述搜表任务参数的所述第一存储区参数的所述第一存储区大小进行识别;
42、若所述第一数据长度未超过所述第一存储区大小,则将所述第一存储区参数的所述第一存储区起始地址作为电表清单起始存储地址对最新的所述第一电表清单进行存储;
43、若所述第一数据长度超过所述第一存储区大小,则基于所述第一存储区大小对最新的所述第一电表清单进行裁剪,并将所述第一存储区参数的所述第一存储区起始地址作为电表清单起始存储地址对裁剪后的所述第一电表清单进行存储;
44、最后将对应的所述任务状态重置为结束状态。
45、优选的,所述抄表任务实例对应的所述任务执行过程具体包括:
46、步骤101,对所述时间同步任务参数的所述开关时间与所述抄表任务参数的所述前轮抄表结束时间的间隔时长进行计算得到对应的第一间隔时长;
47、步骤102,并对所述第一间隔时长是否超过所述抄表任务参数的所述抄表间隔时长进行识别;若所述第一间隔时长超过所述抄表间隔时长,则转至步骤103;若所述第一间隔时长未超过所述抄表间隔时长,则转至步骤109;
48、步骤103,通过所述开关通信模块向所有所述第一电表群发预设的抄表指令;并通过所述开关通信模接收各个所述第一电表回发的第二电表标识和对应的第一电表抄表信息;并由各个所述第二电表标识和对应的所述第一电表抄表信息组成一个对应的第一抄表记录;并由得到的所有所述第一抄表记录组成对应的第一抄表记录清单;并将所述第一抄表记录清单的数据长度作为对应的第二数据长度;
49、步骤104,并基于所述第二存储区参数的所述第二存储区起始地址、所述第二存储区大小和所述下轮抄表起始地址计算对应的剩余存储区大小=第二存储区大小-(下轮抄表起始地址-第二存储区起始地址);并将所述抄表任务参数的所述第二存储区参数的所述下轮抄表起始地址作为对应的当前起始地址;
50、步骤105,并对所述第二数据长度是否未超过所述剩余存储区大小进行识别;若所述第二数据长度未超过所述剩余存储区大小,则转至步骤106;若所述第二数据长度超过所述剩余存储区大小,则转至步骤107;
51、步骤106,将所述当前起始地址作为抄表记录清单起始存储地址对所述第一抄表记录清单进行存储;并在存储成功时基于所述当前起始地址和所述第二数据长度重置所述下轮抄表起始地址=当前起始地址+第二数据长度;转至步骤109;
52、步骤107,基于所述剩余存储区大小将所述第一抄表记录清单拆分成两个子清单,并将其中数据长度与所述剩余存储区大小匹配的子清单记为对应的第一子清单、将另一个子清单记为对应的第二子清单;
53、步骤108,并将所述当前起始地址作为抄表记录清单起始存储地址对所述第一子清单进行存储;并在存储成功时将所述第二存储区参数的所述下轮抄表起始地址以及所述当前起始地址都重置为对应的所述第二存储区起始地址;并将所述第二子清单的数据长度作为对应的第三数据长度;并将所述当前起始地址作为抄表记录清单起始存储地址对所述第二子清单进行存储;并在存储成功时基于所述当前起始地址和所述第三数据长度重置所述下轮抄表起始地址=当前起始地址+第三数据长度;
54、步骤109,对所述抄表任务参数的所述抄表轮次加1;并基于所述时间同步任务参数的所述开关时间对所述抄表任务参数的所述前轮抄表结束时间进行重置;并在最后将对应的所述任务状态重置为就绪状态。
55、优选的,所述透传任务实例对应的所述任务执行过程具体包括:
56、将所述透传任务参数的所述透传指令数据向所述透传目标标识对应的所述第一电表或所述第一远程服务端转发;并在转发结束时将所述透传任务参数的所述透传开断状态设为断开、并将所述透传目标标识和所述透传指令数据都设为空;最后将对应的所述任务状态重置为挂起状态。
57、优选的,所述基于分时调度机制对所述第一任务队列中所有所述任务状态为就绪状态或阻塞状态的任务实例进行循环任务调度,具体包括:
58、所述第一智能开关将开关主控芯片的未来执行时段分成顺序排列的多个第一时间片;并对所述第一任务队列的所有所述任务状态为就绪状态或阻塞状态的任务实例进行循环遍历;并在遍历过程中,将当前遍历的任务实例作为对应的当前任务实例;并将所述当前任务实例对应的所述任务状态作为对应的当前任务状态;并将以当前时刻作为时间片起始时刻的所述第一时间片作为对应的当前时间片;并将所述当前任务状态设为运行状态;并使所述当前任务实例在所述当前时间片内占用cpu进行任务执行;并在所述当前时间片的结束时刻对所述当前任务状态进行识别;若所述当前任务状态仍为运行状态,则将所述当前任务状态重置为阻塞状态;若所述当前任务状态为结束状态,则将所述当前任务实例从所述第一任务队列中删除;其中,所述开关主控芯片为所述第一智能开关上用于执行所有任务实例的所有所述任务执行过程的控制芯片。
59、优选的,所述在所述抄表任务实例切换成就绪状态之后的循环任务调度过程中基于所述透传任务参数的透传开断状态对所述第一任务队列的所述抄表任务实例和所述透传任务实例进行实例挂起切换管理,具体包括:
60、所述第一智能开关在所述抄表任务实例切换成就绪状态之后的循环任务调度过程中,对所述透传开断状态进行实时监测;
61、并在监测到所述透传开断状态从断开转为开启时,将所述第一任务队列中所述抄表任务实例对应的所述任务状态重置为挂起状态,并将所述第一任务队列中所述透传任务实例对应的所述任务状态重置为就绪状态;
62、并在监测到所述透传开断状态从开启转为断开时,将所述第一任务队列中所述抄表任务实例对应的所述任务状态重置为阻塞状态,并将所述第一任务队列中所述透传任务实例对应的所述任务状态重置为挂起状态。
63、本发明实施例提供了一种智能开关的任务调度方法。通过上文内容可知,本发明实施例的智能开关在开关启动时先对六类任务参数(时间同步任务参数、运行闪灯任务参数、告警闪灯任务参数、搜表任务参数、抄表任务参数和透传任务参数)进行初始化;再创建对应的六类任务实例(时间同步任务实例、运行闪灯任务实例、告警闪灯任务实例、搜表任务实例、抄表任务实例和透传任务实例);再将六类任务实例加入到一个任务队列中,并将该任务队列中时间同步任务实例、运行闪灯任务实例、告警闪灯任务实例、搜表任务实例对应的任务状态初始化为就绪状态,抄表任务实例、透传任务实例对应的任务状态初始化为挂起状态;然后基于分时调度机制对任务队列中所有任务状态为就绪状态或阻塞状态的任务实例进行循环任务调度;并在循环任务调度过程中发现搜表任务实例已从该任务队列中删除时立即将队列内抄表任务实例对应的任务状态重置为就绪状态,并在抄表任务实例切换成就绪状态之后的循环任务调度过程中基于透传任务参数中的透传开断状态对队列内抄表任务实例和透传任务实例进行实例挂起切换。通过本发明实施例一方面可以对多类任务进行并发调度,提高了智能开关的整体任务响应实时性;另一方面在执行抄表任务实例时若收到某个远程服务端(或电表)发送的透传指令,会及时通过切换抄表/透传任务状态的方式将透传任务实例的执行优先级提高,进一步提高了智能开关对透传任务的响应实时性;再一方面,还对开关的两类led灯(运行led灯和告警led灯)增加了两类对应的灯控任务实例(运行闪灯任务实例、告警闪灯任务实例),并通过这两类灯控任务实例提高了智能开关的直观预警实时性。