专利名称:一种软件在线升级的方法
技术领域:
本发明涉及软件下载领域,具体涉及动力设备与环境集中监控领域中的软件下载方法。
动力设备及环境集中监控系统多采用分布式计算机控制系统,一般分为本地网监控中心、县级监控站、远端被控局监控单元和远端监控终端模块。其中,远端监控终端模块与被监控设备直接连接,用于对被监控设备工作状态的监视和运行参数的采集,并将结果送往监控单元和监控中心,并实时接收和执行来自监控中心和监控单元的监测和控制命令。为了提高终端监控模块的可靠性和灵活性,终端模块除了具备上述基本功能外,还具备软件在线升级功能,即当远端监控终端模块的运行软件需要升级时,只需在监控中心进行软件在线升级,而不必到每个端局对每个终端模块进行升级,大大减少软件升级的工作量。
具有软件在线升级功能的终端模块的硬件设计以CPU为核心,并配备存储出厂程序的可擦可编程只读存储器(EPROM)和存储配置内容和升级程序的快可擦可编程只读存储器,简称闪存(FLASHEPROM)以及监视程序运行情况的看门狗(WATCHDOG)。软件升级模块的设计一般都集中在保证升级软件在从监控中心到终端模块的传输过程中正确传输以及在升级程序和出厂程序之间可重复切换等方面。其工作原理是,当终端模块上电运行后,CPU首先执行EPROM中的程序读取FLASH EPROM中的配置内容,然后根据配置内容运行出厂程序或下载程序。无论是运行出厂程序还是升级程序,程序都必须在规定的时间内对WATCHDOG进行操作,否则WATCHDOG就会复位CPU,使系统重新运行。当监控中心需要进行软件升级时,终端模块的软件升级模块首先将升级程序存放到单板的FLASHEPROM中,并对FLASH EPROM中配置区进行配置,表明单板将运行FLASH EPROM中的下载程序,然后就停止对WATCHDOG操作,当WATCHDOG规定时间到后,WATCHDOG就复位CPU,使系统重新运行。当系统重新运行并读取FLASH EPROM配置内容后,就会执行升级程序,以后无论什么原因,程序重启后都将运行FLASHEPROM中的升级程序,除非对FLASH EPROM中的配置区重新配置。
上述具有软件在线升级功能的终端模块的技术方案虽然保证了升级软件在从监控中心到终端模块的传输过程中正确传输以及在升级程序和出厂程序之间可重复切换,但对升级程序内在的可靠性却较少考虑,如果由于升级软件设计人员失误,升级程序本身存在致命性错误,就可能导致错误的升级程序被正确地传输到终端模块,然后成功地与出厂程序切换,终端模块最后运行错误的升级程序。当终端模块运行错误的升级程序时,因无法在规定时间内对WATCHDOG进行操作,WATCHDOG就会复位CPU,使系统重新运行。当系统重新运行后,又运行错误的升级程序,WATCHDOG又会复位CPU,使系统重新运行。这样,终端模块就陷入了复位、重启又复位的死循环,和监控中心失去了联系。监控中心既无法重新升级程序,也无法命令终端模块切回出厂程序,终端模块自己也无法再切换回正确的出厂程序,而必须等待维护人员亲自到远端现场进行恢复,使软件在线升级功能的作用大打折扣。
发明内容
本发明所要解决的技术问题在于克服上述的软件在线升级功能所具有的缺陷,结合目前具有软件在线升级功能的终端模块的特点,在其现有的硬件设计基础上,使得终端模块不会因为升级程序的设计错误和监控中心失去联系,维护人员也不必因此远赴现场解决问题。
本发明提出的软件在线升级的方法包括如下步骤第1步、在终端模块可配置区域(如FLASH EPROM)划出一个区域以存储下载程序监控结构变量Monitor_Upgrade,该结构变量包括升级程序变量EnableUpgrade、监控变量EnableMonitor、异常复位变量Abend等成员变量;第2步、当监控中心进行软件升级时,按照现有具有软件在线升级功能的终端模块的升级方法将升级程序正确地传输到终端模块并保存到存储升级程序的可配置区域中;第3步、对下载程序监控结构变量Monitor_Upgrade各成员变量赋值,即将升级程序变量EnableUpgrade、监控变量EnableMonitor均置为“是”,异常复位变量Abend置为“否”,然后将已赋值的下载程序监控结构变量存储到可配置区域;第4步、停止对看门狗WATCHDOG的操作,等WATCHDOG规定时间到来后,使CPU复位,终端模块重新启动;第5步、终端模块重新启动后读取已赋初值的下载程序监控结构变量Monitor_Upgrade,根据其结构成员取值情况确定程序下一步流程,即1)、若升级程序变量EnableUpgrade为“是”,则开始运行升级程序,否则运行出厂程序;2)、若监控变量EnableMonitor置为“是”,则进入3);否则就退出判断而直接运行升级程序或出厂程序;3)、判断此次程序复位是否属于异常复位,即如果Abend是“否”,则属于程序正常复位,否则就是异常复位;若属于正常复位,则重新对Abend赋值“是”,然后运行升级程序;若属于异常复位,则可以判断升级程序存在错误,不再执行升级程序,而是先将升级程序变量EnableUpgrade置为“否”,然后运行出厂程序,等待监控中心重新进行软件升级;第6步、监控中心对运行升级软件的监控模块运行情况进行监测,发现运行无误后,下发取消监控命令;第7步、监控模块收到取消监控命令后,将监控变量EnableMonitor置为“否”,以后终端再重新启动时,就直接运行升级程序,而不再判断是否异常复位。
采用本发明所述方法较以往软件升级方法增加了对升级程序运行情况的监控,可以自动区分终端模块的CPU复位属于正常复位还是异常复位,可避免因升级程序本身错误导致终端模块和监控中心失去联系而无法恢复,而且是可控的,不影响运行升级程序后因为其他原因导致终端模块复位后又重新运行出厂程序的情况发生。此外,该方法只须通过软件设计即可实现,不需要进行任何硬件改动。因此本发明所述的具有自恢复功能的软件在线升级方法在提高终端模块软件设计可靠性方面取得了明显进步,达到了真正无须维护人员远赴现场进行维护的效果,提高了工作效率。
图2是实现本发明方法的具体硬件框图。
如图2所示,硬件部分以Intel 386TMEX嵌入式微处理器作为CPU,并配以EPROM、FLASH EPROM、RAM、WATCHDOG等基本电路以及遥测、遥信、遥控等功能单元和通讯单元。其中EPROM存储出厂程序,FLASH EPROM存储配置信息和升级程序,WATCHDOG对程序运行情况进行监控,通信单元负责和监控中心联系,并接受监控中心发送的升级程序和各种命令。
软件部分除了保证升级程序可靠下载和正确存储等基本功能外,还要对升级程序在终端模块的运行情况进行监控,为此要在终端模块可配置区域(FLASH EPROM)划出一个区域专门存储对升级程序运行情进行监控的下载程序监控结构变量Monitor_Upgrade,其定义如下struct MonitorOfUpgrade{unsigned char EnableUpgrade, ∥是否运行升级程序标志unsigned char EnableMonitor; ∥是否进行监控标志unsigned char Abendt, ∥是否异常复位标志unsigned int NumOfAbent ∥CPU允许异常复位次数(可选)}Monitor_Upgrade下载程序监控结构变量Monitor_Upgrade存储在单板FLASHEPROM中的一个指定地址,如#define AddMonitorOfDownloadInFlash((unsigned char*)0x7f6000L)每次对它进行操作前必须先将其从FLASH EPROM中读出,操作完成后必须再向FLASH EPROM中写入。
在应用程序中对下载程序监控结构变量Monitor_Upgrade的操作分三次进行,一次在升级程序完全正确地写入到FLASH EPROM之后,从FLASH EPROM中将下载程序监控结构变量Monitor_Upgrade读出,然后对它的结构成员进行如下赋值运算Monitor_Upgrade.EnableUpgrade=1;∥引导升级程序Monitor_Upgrade.EnableMonitor=1; ∥进行监控Monitor_Upgrade.Abendt=0; ∥正常复位Monitor_Upgrade.NumOfAbent=3; ∥允许异常复位次数然后将已赋值的结构变量重新写入FLASH EPROM中,并停止对WATCHDOG的操作,直至WATCHDOG使CPU复位。
对下载程序监控结构变量Monitor_Upgrade的第二次操作在终端模块重新启动后,主程序首先读取存储在FLASH EPROM中的下载程序监控结构变量Monitor_Upgrade,并对其结构成员进行访问和判断,以确定程序流向。
值得注意的是,无论程序在何种情况下,只要对下载程序监控结构变量Monitor_Upgrade各结构成员变量进行了操作,都要将已重新赋值后的结构变量重新写入FLASH EPROM中。
对下载程序监控结构变量Monitor_Upgrade的第三次操作依据升级程序是否正确而定。如果程序继续运行后,监控中心通过观察终端模块的运行情况确认其已满足设计要求时,则发送升级程序正确的确认命令。终端模块收到确认命令后,对结构变量Monitor_Upgrade进行第三次操作MonitorOfDownload.EnableMonitor=0; ∥通过确认,取消监控,然后重新写入FLASH EPROM中并继续运行升级程序。
如果升级程序存在错误而导致WATCHDOG动作使CPU复位,则会在终端模块重新启动后对结构变量Monitor_Upgrade进行第三次操作Monitor_Upgrade.EnableUpgrade=0;∥运行出厂程序然后重新写入FLASH EPROM中并继续运行出厂程序。
由于升级程序从监控中心传输到终端模块花费的传输资源比较多,若由于现场其他原因在监控中心下发取消监控命令之前而使CPU复位,则升级程序监控模块也会误判断为升级程序错误,而切换回出厂程序,这样就必须重新将升级程序传输到终端模块,为避免浪费传输资源,可以在第5步判断系统属于异常复位后进行计数,当增加了允许异常复位次数选项后,则会在每次异常复位时先判断其是否为零,如果为零则切换回出厂程序,否则将异常复位次数减1Monitor_Upgrade.NumOfAbent--;然后重新写入FLASH EPROM中并继续运行升级程序。
权利要求
1.一种软件在线升级的方法,包括如下步骤第1步、在终端模块可配置区域划出一个区域以存储下载程序监控结构变量,该结构变量包括升级程序变量、监控变量、异常复位变量等成员变量;第2步、当监控中心进行软件升级时,按照现有具有软件在线升级功能的终端模块的升级方法将升级程序正确地传输到终端模块并保存到存储升级程序的可配置区域中;第3步、对下载程序监控结构变量各成员变量赋值,然后将已赋值的下载程序监控结构变量存储到可配置区域;第4步、停止对看门狗的操作,等看门狗规定时间到来后,使CPU复位,终端模块重新启动;第5步、终端模块重新启动后读取已赋初值的下载程序监控结构变量,根据其结构成员取值情况确定程序下一步流程,即1)、若升级程序变量为“是”,则开始运行升级程序,否则运行出厂程序;2)、若监控变量置为“是”,则进入3);否则就退出判断而直接运行升级程序或出厂程序;3)、判断此次程序复位是否属于异常复位,若属于正常复位,则重新对异常复位变量赋值“是”,然后运行升级程序;若属于异常复位,则可以判断升级程序存在错误,不再执行升级程序,而是先将升级程序变量置为“否”,然后运行出厂程序,等待监控中心重新进行软件升级;第6步、监控中心对运行升级软件的监控模块运行情况进行监测,发现运行无误后,下发取消监控命令;第7步、监控模块收到取消监控命令后,将监控变量置为“否”,以后终端再重新启动时,就直接运行升级程序,而不再判断是否异常复位。
2.根据权利要求1所述的一种软件在线升级的方法,其特征在于在第5步判断系统属于异常复位后进行计数,在每次异常复位时先判断允许异常复位次数选项是否为零,如果为零则切换回出厂程序,否则将异常复位次数减1,然后重新写入可配置区域中并继续运行升级程序。
全文摘要
软件在线升级的方法,涉及软件下载领域,包括步骤在终端模块可配置区域划出一个区域以存储下载程序监控结构变量;当监控中心进行软件升级时,按照现有具有软件在线升级功能的终端模块的升级方法将升级程序传输到终端模块并保存到可配置区域中;对下载程序监控结构变量各成员变量赋值,将其存储到可配置区域;停止对看门狗操作,等其规定时间到来后使CPU复位,终端模块重新启动;读取已赋初值的下载程序监控结构变量,据其结构成员取值确定程序下一步流程;监控中心对运行升级软件的监控模块进行监测,无误后下发取消监控命令;监控模块将监控变量置为“否”,终端再重新启动时直接运行升级程序;本发明提高了工作效率。
文档编号G06F9/48GK1464394SQ02112209
公开日2003年12月31日 申请日期2002年6月21日 优先权日2002年6月21日
发明者常国强 申请人:深圳市中兴通讯股份有限公司