一种多任务软件看门狗的实现方法
【专利摘要】本发明具体公开了一种多任务软件看门狗的实现方法,所述多任务软件看门狗由每个任务的软件看门狗子程序,以及多任务软件看门狗喂狗子程序构成;每个任务的软件看门狗子程序主要负责该任务软件看门狗的初始化,并在主循环中更新该任务软件看门狗的计数器;多任务软件看门狗喂狗子程序则在每个系统时钟周期内检查每个任务的软件看门狗是否已超时,只要某个任务的软件看门狗超时,就通过硬件看门狗完成对系统的复位。实现了多任务软件看门狗,保证了系统不会因为外部强干扰导致系统死机。
【专利说明】一种多任务软件看门狗的实现方法
【技术领域】
[0001]本发明涉及无线通信【技术领域】,具体公开了一种多任务软件看门狗的实现方法。
【背景技术】
[0002]在光伏电站、风电场等恶劣的工业应用场合,为了保证现场设备的可靠运行,需要对这些设备进行远程监控。GPRS是物联网应用中最重要的数据传输方式之一,现已广泛应用于工业自动化、智能电网、智能交通、智能家居、物流、水文、气象等行业领域。采用GPRS技术可方便地构建现场设备远程智能监控系统,用于满足用户的需求。一方面,设备生产厂家通过该监控系统可方便地实现设备运行状态的长期监测及远程升级,从而实现设备的远程维护,不断地提高产品的可靠性,节省大量出差费用和人力成本;另一方面,现场设备的使用者也能够通过该远程监控系统方便地查看设备的运行状态,配置设备参数,从而降低设备运行的维护成本,并获得更好的用户体验。
[0003]但是,在实际的工业应用场合如光伏电站、风电场等工业现场,恶劣的物理环境及各种电磁干扰可能导致布置于工业现场的GPRS监控终端不能正常工作,即工业现场对GPRS监控终端的可靠性具有很高的要求。
【发明内容】
[0004]本发明所要解决的技术问题是提供一种多任务软件看门狗的实现方法,通过给软件系统的每个任务分配一个软件看门狗,并与硬件看门狗结合,实现了多任务软件看门狗,保证了系统不会因为外部强干扰导致系统死机。
[0005]为解决上述技术问题,本发明采用了以下计数方案:
一种多任务软件看门狗的实现方法,所述多任务软件看门狗由每个任务的软件看门狗子程序,以及多任务软件看门狗喂狗子程序构成;
每个任务的软件看门狗子程序主要负责该任务软件看门狗的初始化,并在主循环中更新该任务软件看门狗的计数器;多任务软件看门狗喂狗子程序则在每个系统时钟周期内检查每个任务的软件看门狗是否已超时,只要某个任务的软件看门狗超时,就通过硬件看门狗完成对系统的复位。
[0006]进一步的,每个任务的软件看门狗子程序主要包括定时器的初始值的赋值以及计数器的更新,具体的:在每个任务起始处都需要初始化该任务的软件看门狗,包括将软件看门狗定时器的初始值赋值为该任务的超时值,并开启该任务的软件看门狗;此外,在每个任务的主循环中都要对该任务软件看门狗的计数器进行更新。
[0007]进一步的,多任务软件看门狗喂狗子程序位于系统时钟节拍钩子函数,在每个系统时钟周期内被调用一次;
多任务软件看门狗喂狗子程序流程如下:
进入多任务软件看门狗喂狗子程序后,首先检查“停止喂硬件看门狗标志位”是否为真,如果为真,则直接结束多任务软件看门狗喂狗子程序;如果不为真,则依次对每个任务的软件看门狗状态进行检查,步骤如下:检查该任务软件看门狗计数器是否已更新,若已更新,则重置该任务软件看门狗定时器的值为该任务的超时值,并继续进行下一个任务的软件看门狗状态检查;若未更新,则首先将该任务软件看门狗定时器的值减1,然后判断该任务软件看门狗定时器的值是否为零,为零则说明该任务软件看门狗定时器已超时,置位“停止喂硬件看门狗标志位”为真,直接结束多任务软件看门狗喂狗子程序,不为零则继续进行下一个任务的软件看门狗状态检查。按照上述步骤依次完成对每个任务软件看门狗的状态检查,然后执行喂硬件看门狗的步骤,最后结束多任务软件看门狗喂狗子程序。
[0008]本发明与现有技术相比的有益效果是:
通过给软件系统的每个任务分配一个软件看门狗,并与硬件看门狗结合,实现了多任务软件看门狗,保证了系统不会因为外部强干扰导致系统死机。
【专利附图】
【附图说明】
[0009]图1为本发明涉及的一种高可靠性GPRS监控终端的硬件系统结构。
[0010]图2为本发明的GPRS电源管理模块电路。
[0011]图3本发明的多任务应用程序的多任务交互示意图。
[0012]图4为本发明的GPRS链路建立及保持状态机流程图。
[0013]图5为本发明的GPRS Modem初始化程序流程图。
[0014]图6为本发明多任务软件看门狗喂狗流程图。
[0015]图7为本发明的壳体结构。
[0016]其中,附图标记为:1为上壳体,2为下壳体,3为接插件安装位置,4为上壳体凹槽(密封条安装位置)。
【具体实施方式】
[0017]以下结合附图对本发明的一种高可靠性GPRS监控终端进行进一步描述。
[0018]如图1所示,本实例涉及的一种高可靠性GPRS监控终端,其硬件电路包括嵌入式微控制器、GPRS无线通信模块、电源模块、GPRS电源管理模块、存储模块、输入输出模块、硬件看门狗及指示灯;其中,GPRS无线通信模块通过串口与嵌入式微控制器相连接,GPRS电源管理模块通过通用1 口与嵌入式微控制器相连接,电源模块分别与嵌入式微控制器、GPRS电源管理模块相连接,嵌入式微控制器还与存储模块、输入输出模块、硬件看门狗及指示灯相连接,嵌入式微控制器通过控制GPRS电源管理模块开启或停止对GPRS无线通信模块的供电。
[0019]如图2所示,GPRS电源管理模块电路的输入端为GPRS_PWR_D0WNn,与嵌入式微控制器的通用1 口相连接,输出端为VCC_GPRS,与GPRS无线通信模块的电源输入端相连接。嵌入式微控制器根据软件系统的控制指令控制嵌入式微控制器的通用1 口的输出电平,进而控制GPRS电源管理模块电路的输入端的电平。当GPRS电源管理模块电路输入端为低电平时,GPRS电源管理模块电路输出端VCC_GPRS电压为零,即此时切断对GPRS无线通信模块的电源供应;iGPRS电源管理模块电路输入端为高电平时,GPRS电源管理模块电路输出端VCC_GPRS电压为3.8V,S卩此时对GPRS无线通信模块提供3.8V的电源供应。通过上述控制机制,实现了软件指令控制GPRS无线通信模块重上电的操作,从而保证GPRS监控终端在断网后能够恢复到正常工作状态,可靠连接至网络。
[0020]如图3所示,GPRS监控终端上电后,软件系统自动启动并进入Main函数,在Main函数中,首先初始化串口、指示灯、存储模块等外设,然后控制GPRS电源管理模块给GPRS无线通信模块上电,接着初始化嵌入式操作系统,并创建开始任务,最后启动多任务调度。
[0021]开始任务中,首先启动GPRS无线通信模块,接着检测嵌入式微控制器本地配置串口是否接收到进入配置状态的指令,若在设定时间内未检测到该指令,则进入系统正常启动状态,否则进入系统参数配置状态。在系统参数配置状态下,用户可以通过配置串口向系统发送配置指令,系统在接收到配置指令后,进行指令解析及参数修改、存储。用户也可以通过指令查看最新的系统参数值。在接收到用户发来的配置完成指令后,系统进入正常启动状态。在软件系统进入正常启动状态后,首先初始化多任务软件看门狗,然后创建相关的信号量、消息邮箱及消息队列,接着创建Modem串口接收任务、GPRS调度任务、数据解析转换任务、GPRS链路建立及保持任务、系统监控告警任务、设备数据采集存储上传任务,最后开始任务将自身挂起。之后,操作系统就开始进行Modem串口接收任务、GPRS调度任务、数据解析转换任务、GPRS链路建立及保持任务、系统监控告警任务、设备数据采集存储上传任务的调度。
[0022]Modem串口接收任务主要负责定期查询与GPRS无线通信模块相连接的嵌入式微控制器的串口缓冲区中是否有GPRS无线通信模块发来的数据,若有,则取出并送入Modem接收数据消息队列。
[0023]GPRS调度任务完成GPRS无线通信模块数据、短信息的接收,以及GPRS数据、短消息的发送。GPRS调度任务定期查询Modem接收数据消息队列中是否有消息,若有,则取出该消息并进行解析,若消息内容为TCP/UDP数据或短消息,则进行相应的数据提取并置位相应的标志位,若消息内容为AT指令应答数据,则通过消息邮箱将该数据传递给GPRS链路建立及保持任务进行处理。GPRS调度任务还定期查询Modem发送数据消息队列中是否有消息,若有,则取出该消息,并检测GPRS链路是否畅通,若畅通,则进行数据的无线发送,否贝U,累计重发次数并延时等待、重发。若重发次数超过3次,则放弃该数据的无线发送。此夕卜,GPRS调度任务定期查询短消息发送标志位,若该标志位为真,则进行短消息的发送。
[0024]数据解析转换任务定期依次进行如下标志位的查询,并执行相应的动作:
(O若有新的TCP/UDP数据,则进行相应的解析。若该TCP/UDP数据为服务器远程操作命令(如远程查询、设置命令等),则按照预定义规约构建相应的应答帧,并将该应答帧加入Modem发送数据消息队列,等待GPRS调度任务进行无线发送;若该TCP/UDP数据为服务器应答帧(如登录应答帧、心跳包应答帧等),则置位相应的标志位。
[0025](2)若有新的远程操作短消息,则进行解析,并按照预定义规约构建应答短消息并置位短消息发送标志位,等待GPRS调度任务进行查询及短消息的无线发送。
[0026](3)在网络连接正常时,进行登录数据包、心跳数据包、设备实时数据包、系统告警数据包、设备告警数据包等发送标志位的检测,若某种数据包发送标志位为真,则按照预定义规约构建该数据包,并将其送入待发送消息队列,等待GPRS调度任务进行无线发送。
[0027]系统监控告警任务完成对系统状态及采集到的设备实时数据的异常监测,通过定时检测系统的运行状态,从而及时发现系统异常,并在检测到异常事件时置位相应的告警标志位,并置位发送系统异常告警数据包的标志位,以便数据解析转换任务进行查询、构建并传递系统告警数据包至GPRS调度任务进行无线发送。此外,系统监控告警任务在检测到有新的设备实时数据时,对其进行异常检测,与系统异常的处理类似,在检测到设备实时数据异常事件时置位相应的告警标志位,并置位发送设备异常告警数据包的标志位,以便数据解析转换任务进行查询、构建并传递设备告警数据包至GPRS调度任务进行无线发送。
[0028]设备数据采集存储上传任务:设备数据采集存储上传任务定期完成对设备实时数据的采集、存储及上传。
[0029]GPRS链路建立及保持任务:GPRS链路建立及保持任务完成GPRS通信链路的建立及维持,该任务采用了状态机实现,该状态机由“GPRS Modem初始化”状态、“建立GPRS PPP连接”状态、“建立GPRS TCP/UDP连接”状态、“登录远程服务器”状态、“检测GPRS PPP连接状态”状态、“检测GPRS TCP/UDP连接状态”状态、“GPRS Modem硬件复位”状态、“GPRSModem重上电”状态及“软件系统软复位”状态构成。
[0030]如图4所示,所述GPRS链路建立及保持任务的状态机的状态转换机制如下:
a、进入“GPRSModem初始化”状态,在此状态下进行GPRS Modem初始化,在初始化的每一个Modem的AT指令操作时,均采用了“确定性的Modem AT指令操作机制”;若Modem初始化成功则进入“建立GPRS PPP连接”状态,若初始化失败,则进入“GPRS Modem硬件复位”状态;
b、在“建立GPRSPPP连接”状态下,通过向GPRS Modem发送AT指令尝试建立PPP连接,若建立连接成功,则进入“建立GPRS TCP/UDP连接”状态,若连续3次尝试建立PPP连接失败,则进入“GPRS Modem硬件复位”状态;
C、在“建立GPRS TCP/UDP连接”状态下,根据系统参数的配置选择尝试与指定的服务器端口建立TCP连接或UDP连接,若建立连接成功,则进入“登录远程服务器”状态,若连续3次尝试建立TCP/UDP连接失败,则进入“GPRS Modem硬件复位”状态;
d、在“登录远程服务器”状态下,采用“可靠登录GPRS网络机制”进行服务器的远程登录操作;置位向服务器发送登录数据包的标志位,等待数据解析转换任务进行检测并构建、传递登录数据包至GPRS调度任务进行无线发送,并等待服务器的登录数据包反馈,若在指定的等待时间内接收到服务器的登录数据包反馈,则说明登录服务器成功,进入“检测GPRSPPP连接状态”状态,否则说明登录服务器失败,若连续3次登录服务器失败,则进入“GPRSModem硬件复位”状态;
e、在“检测GPRSPPP连接状态”状态下,实现了“终端实时在线检测机制”。通过定期向GPRS Modem发送AT指令检测GPRS PPP连接的状态,若GPRS PPP连接正常,则进入“检测GPRS TCP/UDP连接状态”状态,若连续3次检测到GPRS PPP连接断开,则进入“建立GPRSPPP连接”状态,重新建立GPRS PPP连接;之所以需要定期检测GPRS PPP连接状态,是由于GPRS网络本身的网络状况会导致GPRS无线监控节点掉线,为了保证GPRS无线监控节点与服务器的正常通信,GPRS无线监控节点必须知道何时从GPRS网络上掉线,从而及时重新建立PPP连接以及TCP/UDP连接。
[0031 ] f、在“检测GPRS TCP/UDP连接状态”状态下,采用“心跳机制”实现TCP/UDP链路的连接状态检测。通过定期向服务器发送心跳数据包来检测GPRS TCP/UDP连接的状态,若GPRS TCP/UDP连接正常,则进入“检测GPRS PPP连接状态”状态,若连续3次检测到GPRSTCP/UDP连接断开,则进入“建立GPRS TCP/UDP连接”状态,重新建立GPRS TCP/UDP连接。其中,向服务器发送心跳数据包的实现方式与发送登录数据包类似,通过置位向服务器发送心跳数据包的标志位,等待数据解析转换任务进行检测并构建、传递心跳数据包至GPRS调度任务进行无线发送,并等待服务器的心跳数据包反馈,若在指定的等待时间内接收到服务器的心跳数据包反馈,则说明TCP/UDP连接正常,否则认为TCP/UDP连接断开。
[0032]g、在“GPRS Modem硬件复位”状态下,执行GPRS Modem硬件复位动作,并累计GPRS Modem硬件复位的次数,若GPRS Modem硬件复位的次数超过3次,则进入“GPRS Modem重上电”状态,否则进入“GPRS Modem初始化”状态;
h、在“GPRSModem重上电”状态下,依次执行GPRS Modem关机、断电、上电、开机操作,并累计GPRS Modem重上电的次数,若GPRS Modem重上电的次数超过3次,则进入“软件系统软复位”状态,否则进入“GPRS Modem初始化”状态;
1、在“软件系统软复位”状态下,执行软件系统软复位动作,重启软件系统,进而在建立GPRS链路建立及保持任务后,进入“GPRS Modem初始化”状态。
所述Modem AT指令操作机制是针对GPRS无线通信模块对不同AT指令的响应时间不一致,采用超时机制,即根据每个AT命令不同的响应时间设置不同的等待时间,若指定时间内获得返回值则结束等待,超时则自动结束等待,保证Modem AT指令操作的可靠性。
[0033]所述可靠登录GPRS网络机制采用超时机制进行登录,即监控节点登录时,若等待登录反馈超时,则认为登录失败,多次登录失败后,则重新复位GPRS无线通信模块。
[0034]所述心跳机制为GPRS监控终端定时向后台服务器发送心跳包,若保活时间内未收到心跳包反馈,则认为链路已断开,自动断开现有连接并重新建立链路;尽管GPRS有一直在线的特点,但当GPRS长时间在线却无数据传输时,数据业务级别会自动被降低,采用心跳机制即当系统长时间没有有效数据传输的时候,监控节点按照一定的时间间隔向服务器发送一帧无效数据,从而保持数据传输业务处于较高的优先级别,维持GPRS数据链路。
[0035]所述终端实时在线检测机制是通过周期性检测GPRS PPP连接状态,可及时检测到节点是否从GPRS网络掉线,若掉线则执行尝试重新拨号连接操作,从而保证监控节点实时在线;由于GPRS网络本身的不稳定性可能会导致GPRS无线监控节点掉线,为了保证监控节点与服务器的正常通信,监控节点必须知道何时从GPRS网络上掉线,进而重新建立PPP连接以及TCP/UDP连接。
[0036]所述“GPRS Modem硬件复位”、“GPRS Modem重上电”、“软件系统软复位”三种状态构成了 GPRS链路建立及保持任务的三重重启机制;保证监控节点在掉线后能够恢复与后台服务器的连接,从而实现GPRS无线监控节点的可靠联网。
[0037]如图5所示,GPRS Modem初始化流程如下:
(I)首先对GPRS Modem进行AT指令测试,若测试成功则关闭Modem的AT指令回显功能,接着进行SIM卡测试;若连续3次测试失败则结束GPRS Modem初始化,并返回初始化失败信息。
[0038](2)若SM卡测试成功则进行GPRS信号质量测试;若连续3次SM卡测试失败,贝IJ结束GPRS Modem初始化,并返回初始化失败信息。
[0039](3)若GPRS信号质量好则进行GPRS Modem网络注册;若GPRS信号不可用,则结束GPRS Modem初始化,并返回初始化失败信息。
[0040](4)若GPRS Modem网络注册成功,则进行短消息(SMS)相关参数初始化;若连续3次GPRS Modem网络注册失败,则结束GPRS Modem初始化,并返回初始化失败信息。
[0041](5)若短消息(SMS)相关参数初始化成功,则读取GPRS Modem信息,结束GPRSModem初始化,并返回初始化成功信息;若短消息(SMS)相关参数初始化失败,则结束GPRSModem初始化,并返回初始化失败信息。
[0042]以上初始化过程中的各种测试或操作的次数并不限于3次,可根据实际的应用场合进行调整。
[0043]如图6所示,所述多任务应用程序实现了多任务软件看门狗,该多任务软件看门狗由每个任务的软件看门狗子程序,以及多任务软件看门狗喂狗子程序构成;每个任务的软件看门狗子程序主要负责该任务软件看门狗的初始化,并在主循环中更新该任务软件看门狗的计数器;多任务软件看门狗喂狗子程序则在每个系统时钟周期内检查每个任务的软件看门狗是否已超时,只要某个任务的软件看门狗超时,就通过硬件看门狗完成对系统的复位。
[0044]其中,每个任务的软件看门狗子程序主要包括定时器的初始值的赋值以及计数器的更新,具体地:在每个任务起始处都需要初始化该任务的软件看门狗,包括将软件看门狗定时器的初始值赋值为该任务的超时值,并开启该任务的软件看门狗。此外,在每个任务的主循环中都要对该任务软件看门狗的计数器进行更新。
[0045]多任务软件看门狗喂狗子程序位于系统时钟节拍钩子函数,在每个系统时钟周期内被调用一次。多任务软件看门狗喂狗子程序流程说明如下:
进入多任务软件看门狗喂狗子程序后,首先检查“停止喂硬件看门狗标志位”是否为真,如果为真,则直接结束多任务软件看门狗喂狗子程序;如果不为真,则依次对每个任务的软件看门狗状态进行检查,步骤如下:检查该任务软件看门狗计数器是否已更新,若已更新,则重置该任务软件看门狗定时器的值为该任务的超时值,并继续进行下一个任务的软件看门狗状态检查;若未更新,则首先将该任务软件看门狗定时器的值减1,然后判断该任务软件看门狗定时器的值是否为零,为零则说明该任务软件看门狗定时器已超时,置位“停止喂硬件看门狗标志位”为真,直接结束多任务软件看门狗喂狗子程序,不为零则继续进行下一个任务的软件看门狗状态检查。按照上述步骤依次完成对每个任务软件看门狗的状态检查,然后执行喂硬件看门狗的步骤,最后结束多任务软件看门狗喂狗子程序。
[0046]如图7所示,壳体采用内上外下的壳体结构,材料为铝合金;上下壳体之间采用密封条进行密封,密封条为硅橡胶材料,安装于上壳体内的凹槽中;上下壳体采用螺纹进行连接并压紧上下壳体之间的密封条,达到密封的效果;接插件选用PG7电缆防水接头,安装位置均布置于壳体两侧;硬件电路板通过螺纹连接固定在下壳体内。
[0047]对于【具体实施方式】的理解的描述仅仅是为帮助理解本发明,而不是用来限制本发明的。本领域技术人员均可以利用本发明的思想进行一些改动和变化,只要其技术手段没有脱离本发明的思想和要点,仍然在本发明的保护范围之内。
【权利要求】
1.一种多任务软件看门狗的实现方法,其特征在于:所述多任务软件看门狗由每个任务的软件看门狗子程序,以及多任务软件看门狗喂狗子程序构成; 每个任务的软件看门狗子程序主要负责该任务软件看门狗的初始化,并在主循环中更新该任务软件看门狗的计数器;多任务软件看门狗喂狗子程序则在每个系统时钟周期内检查每个任务的软件看门狗是否已超时,只要某个任务的软件看门狗超时,就通过硬件看门狗完成对系统的复位。
2.根据权利要求1所述的一种多任务软件看门狗的实现方法,其特征在于:每个任务的软件看门狗子程序主要包括定时器的初始值的赋值以及计数器的更新,具体的:在每个任务起始处都需要初始化该任务的软件看门狗,包括将软件看门狗定时器的初始值赋值为该任务的超时值,并开启该任务的软件看门狗;此外,在每个任务的主循环中都要对该任务软件看门狗的计数器进行更新。
3.根据权利要求1所述的一种多任务软件看门狗的实现方法,其特征在于: 多任务软件看门狗喂狗子程序位于系统时钟节拍钩子函数,在每个系统时钟周期内被调用一次; 多任务软件看门狗喂狗子程序流程如下: 进入多任务软件看门狗喂狗子程序后,首先检查“停止喂硬件看门狗标志位”是否为真,如果为真,则直接结束多任务软件看门狗喂狗子程序;如果不为真,则依次对每个任务的软件看门狗状态进行检查,步骤如下:检查该任务软件看门狗计数器是否已更新,若已更新,则重置该任务软件看门狗定时器的值为该任务的超时值,并继续进行下一个任务的软件看门狗状态检查;若未更新,则首先将该任务软件看门狗定时器的值减1,然后判断该任务软件看门狗定时器的值是否为零,为零则说明该任务软件看门狗定时器已超时,置位“停止喂硬件看门狗标志位”为真,直接结束多任务软件看门狗喂狗子程序,不为零则继续进行下一个任务的软件看门狗状态检查; 按照上述步骤依次完成对每个任务软件看门狗的状态检查,然后执行喂硬件看门狗的步骤,最后结束多任务软件看门狗喂狗子程序。
【文档编号】G06F11/00GK104199746SQ201410440660
【公开日】2014年12月10日 申请日期:2014年9月1日 优先权日:2014年9月1日
【发明者】徐立强, 张帆, 尚留记, 肖唐杰, 董娜, 吴建东 申请人:中国东方电气集团有限公司