一种传感器节点功能自维护方法

文档序号:7926806阅读:113来源:国知局
专利名称:一种传感器节点功能自维护方法
技术领域
本发明涉及一种传感器节点功能自维护方法,属于无线传感器网络技术和嵌入式 技术领域。具体的说,是在无线传感器网络中,使传感器节点能够动态更新自身节点 代码实现其功能自维护的方法。
背景技术
无线传感器网络由大量体型较小、能量受限并且配置有计算能力和无线通信能力的传 感器节点组成。传感器网络的高度自主性特点使其广泛应用于军事、环境检测等危险或人 力无法干预的地方。在实际应用中,无线传感器网络必须长时间自主运行。这个需要提出 了两个问题,首先,随着时间和环境的变化,预测传感器节点可能需要完成的整个动作集 是不可能的。其次,对某个特定的传感器网络,需求可能会发生变化,节点不可避免的要 对已有的应用程序做出修改或变更。另外,对于开发人员来说,在节点程序开发过程中, 需要不断地对节点上的代码进行测试、修改和调整。这些需求都要求传感器网络具有动态 的代码更新功能,能根据需要有效、可靠地更新自己所运行的代码,实现自身功能的更新。 同时,随着传感器节点功能的多样化和复杂化,节点的功能的自维护能力成为传感器网络 的一个重要功能。
无线传感器节点功能的自维护是指网络节点代码更新的过程,是指由sink节点发起的, 通过无线收发装置,向网络中的传感器节点注入程序代码,节点用新代码替换旧代码并运 行新代码的过程。代码更新的过程主要由三部分组成代码分发、代码替换和节点重启。 代码分发是指sink节点将程序代码装入数据包发送到网络中,数据包以单跳或多跳的方式 在网络中传播,传感器节点收到代码包后将其存放在外部程序存储器。代码替换和节点重 启是指用新代码替代旧代码并运行新代码。
传感器网络的代码更新是和节点的软硬件紧密结合的,在更新过程中,必须保证代码 更新的可靠性。目前针对无线传感器网络代码更新技术的研究主要集中在代码分发协议 上,常见的代码分发协议如Xnp协议、MOAP协议、MNP协议等,这些协议主要关注如 何将功能更新代码映像可靠地发送到网络中的每个节点。代码分发是代码更新的前提,只 有代码被可靠、完整地传输到传感器节点,更新过程才是有意义的。现有的研究都是从网 络协议方面去考虑节点功能自维护,这些方法在实现上缺乏灵活性,在传感器节点需要功
能更新的时候,开发人员不仅需要关注所要更新的功能本身,还需要对节点上旧的代码有 一定的了解,无法将节点功能自维护和实现节点功能的用户程序两部分功能独立开来。

发明内容
本发明的目的是提出一种传感器节点功能自维护方法,通过将传感器节点的程序存储 器分层的结构,将节点功能自维护和实现节点功能的用户程序两部分功能独立开来,为传 感器节点自身功能自维护提供了更大的灵活性,并能保证其自维护过程中的可靠性。
为完成本发明的目的,本发明采用的技术方案是传感器节点功能自维护方法,包括 以下步骤
(1) 传感器节点采用分层结构,所述的分层结构是将传感器节点程序存储器分为 微内核区和用户程序区,其中微内核区完成传感器节点硬件的初始化工作和对整个节 点功能自维护过程的控制,微内核区的代码不可更新,为固定区,在传感器节点生产 出来时以标准化的形式烧入节点;
用户程序区为可更新区,中传感器节点实现功能自维护的载体,在该区实现传感 器节点更新的功能;
(2) 传感器网络中sink节点将功能更新代码映像装入数据包并注入传感器网络, 在微内核区的控制下,数据包以逐跳的方式在整个网络中扩散,将功能更新代码映像 传送至传感器网络中的每个节点;
(3) 传感器网络中的节点收到功能更新代码映像后,利用传感器节点的分层结构 实现自身的功能更新,完成节点的功能自维护。
所述步骤(2)中,功能更新代码映像在网络中以逐跳方式传播,所有的代码发送 和接收都在一跳范围内完成,其步骤为首先,由sink节点发起节点功能更新的过程, 以sink节点为源节点,源节点向自己一跳范围内的节点广播所要更新的功能代码映像 的版本号,其一跳范围内的节点将自身的版本号同收到的版本号进行比较,如果自身 版本号小于收到的源节点广播的版本号,则需要功能更新,立即向源节点发送更新请 求消息;如果节点自身的版本号大于或者等于源节点广播的版本号,表明不需要更新, 则不用向源节点回复消息。源节点在收到更新请求消息后,以单播的形式,以请求节 点的节点ID号为优先级发送新版本代码映像的数据包,节点在收到代码映像数据包 后,需要检查是否有丢失,如果有丢失,则回复NACK消息给源节点,请求重传,直 至接收到完整的功能更新代码映像;当sink节点一跳范围内的节点接收新版本的代码 映像完成后,新版本的功能更新代码映像存放在节点外部存储器中,这些节点可以立
即作为源节点,来更新自己一跳范围内的节点,如此循环,直到整个网络中的所有节 点都收到功能更新代码映像。
所述步骤(3)中在微内核区的控制下,保证接收到的功能更新代码映像正确后, 首先擦除用户程序码数据,然后将外部存储器的功能更新代码映像写入程序存储器用 户程序区,保证写入准确无误后,将控制权交给用户程序区,运行更新后的代码,从 而完成节点功能自维护的过程。
本发明与现有技术相比的有益效果是
(1) 本发明将传感器节点的程序存储器分为微内核区和用户程序区,这种分层的机 制为传感器节点功能自维护提供了更好的灵活性,既简化了传感器节点的生产,同时也方 便了开发人员的开发调试。传感器生产厂家只需要向节点内核区注入标准化的微内核程 序,而不用根据节点的不同而注入不同的程序,从而简化了节点的生产。对于开发人员, 则不用去关心代码更新的过程和方式,只用关心所要更新的功能本身。
(2) 本发明的微内核区和用户程序区的分开的机制保证了节点的健壮性,避免了代 码更新过程中,由于代码替换出现问题而导致的节点永久性失效,并能保证其自维护过程 中的可靠性。
(3) 节点代码更新采用逐跳的方式,即所有的更新都在一跳范围内完成,这样进一 步保证了代码更新的可靠性,节点不用维护其它节点的状态信息。节省了网络的能量,同 时使网络代码更新过程中网络负载趋于均衡。


图1为本发明的方法实现流程图2为本发明的基于分层结构的传感器节点功能更新的流程图3为本发明的一跳范围内传感器节点功能更新处理过程;
图4为本发明的一跳范围内网络节点功能更新源节点广播更新版本号示意图5为本发明的一跳范围内需要功能更新的节点向源节点发送更新请求示意图6为本发明的一跳范围内源节点以单播形式向要更新节点发送新版本代码映像示意图。
具体实施例方式
如图1所示,本发明具体可划分为三个步骤(1)传感器节点采用分层结构,程序 存储器分为微内核区和用户程序区,微内核区为固定区,用户代码区为不可更新区。 (2)传感器网络中sink节点将功能更新代码映像装入数据包并注入网络,在微内核
区的控制下,数据包以逐跳的方式在整个网络中扩散,传送至网络中的每个节点。(3) 传感器节点利用分层结构来实现自身的功能更新,完成节点的功能自维护。以下对这 三个方面分别进行说明。
(1) 传感器节点硬件组织 本发明的重要特点是提出一种适用于传感器网络节点功能更新的分层结构,将传感器
节点的程序存储器分为微内核区和用户程序区,这样做的目的主要是使代码更新和用户程 序独立开来。在实现上,将程序存储器分为两块, 一块作为微内核区,另一块作为用户程 序区,两个区的分界为一特定地址。微内核区为节点的固定部分,独立于用户程序区,微 内核区主要完成传感器节点上硬件的初始化和节点代码更新控制的功能。由于微内核运行 的程序比较固定,可以将其标准化,所以微内核部分的程序在传感器节点生产出来的时候 由厂家烧入。程序存储器用户程序区主要作为传感器网络所要更新代码的载体,即存储完 成传感器网络节点本身功能的代码。它是节点的可变部分,独立于微内核区。传感器节点 生产完成之后,用户存储区为空,用户程序版本号标识为0。在传感器网络需要代码更新 的时候,节点接收到需要更新的代码映像后,首先存入外部存储器,在确认代码映像接收 无误,即在外部存储器接收到了完整的代码映像后,将外部存储器中映像写入用户程序区, 然后进入用户程序区运行。
(2) 功能更新代码在网络中的传送。 整个网络的功能更新涉及到传感器网络中所有的节点,在更新的时候要保证整个网络
中每个节点上的代码都被更新。本部分的实现采用逐跳的方式。
首先如图2所示,在源节点上,所要更新的代码映像以数据包的形式来组织,代码映 像可以分为若干数据包。通过无线收发装置发送至要更新的节点。
每个传感器节点都保存着自己结点上的代码的版本号,整个网络的更新步骤如下
2.1) 更新首先从sink节点开始,sink节点广播要更新的代码的版本号,^f有节点进入 待更新状态,然后以sink节点为源节点,采用数据包的形式将新版本的代码映像广播给自 己一跳范围的节点,源节点一跳范围的节点收到版本号之后,首先比较收到的版本号与自 己版本号的大小,判断是否需要更新。如图3所示,源节点A将所要更新的版本号广播给 自己周围一跳范围内的节点B、 C、 D、 E。
2.2) 节点B、 C、 D、 E收到源节点A的要更新的节点版本号之后,同自身代码版本 号比较,从说明书附图2看出,节点C、 D、 E需要更新,如说明书附图3,节点C、 D、 E向节点A发送回复消息,而B则不用向A发送回复。
2.3) 节点A收到回复消息后,以单播的形式将新版本的代码映像以单播方式分别发送 给C、 D、 E。发送优先级按照节点的ID号排序,如说明书图5所示,优先发给C节点, 然后发给D节点,最后为E节点。
2.4) 节点在收到代码映像后,需要检査是否有数据包丢失,如果有丢失,则回复NACK 给源节点,请求重传,直至接收到完整的代码映像。
2.5) 当网络中某个节点接收完完整的代码映像后,它可以立即作为源节点,向自己一 跳范围内的节点广播自己的版本号,回到步骤3.1,如此循环,直至全网更新完毕。
通过以上5步实现了整个网络的代码更新,所有的更新都在一跳范围内完成。从更新 机制上保证了更新的可靠性。
(3)传感器节点功能自维护。
采用将节点程序存储器分区的机制后,保证了传感器节点本身代码更新过程中代码替 换的可靠性,避免了由于代码替换出现问题而导致的传感器节点永久性失效。
如图2所示,传感器节点在加电启动后,首先进入微内核区运行,其步骤描述如下-
3.1) 初始化。完成传感器节点硬件初始化工作。
3.2) 判断版本号,决定是否需要更新。Version代表传感器节点上当前代码版本号, Cur一ver代表传感器节点上将要更新的代码的版本号。首先判断这两个版本号的大小,如 果Version < Cur—ver代表当前节点上的代码需要更新,进入步骤3.3),否则代表当前传感 器节点代码不需要更新,进入步骤3.4)。
3.3) 当前传感器节点代码需要更新,首先判断Version是否为0,为0代表节点用户 程序区为空,则传感器节点立即进入休眠状态,等待更新消息。如果收到更新消息,则唤 醒节点,接收要更新的代码,同时将代码存储到外部存储器中,同时更新版本号。如果 Version不为0,代表节点已经接收到更新的消息,则需要将下面接收到的数据作为要更新 的代码存储到外部存储器,同时更新版本号。
3.4) 传感器节点代码不需要更新,则首先擦除用户程序区数据,然后将外部存储区的 数据移动到用户程序区。数据移动完成后,则进入用户应用程序区运行。
3.5) 运行应用程序代码,完成传感器网络本身的任务。如果接收到需要代码更新的消 息,则将Cur一ver设置为所要更新的版本号,然后重新启动节点。
通过以上5步,完成了传感器节点本身的功能更新过程,主要是通过外部存储器作为 中转,每次将要更新的代码首先存入外部存储器,保证正确后将其写入用户区,然后进入 用户区运行更新后的代码。
本发明未详细阐述的部分属于本领域技术人员的公知技术。
以上所述仅是本发明的默认实施方式,应当指出,对于本技术领域的普通技术人员来 说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视 为本发明的保护范围。
权利要求
1、一种传感器节点功能自维护方法,其特征在于包括以下步骤(1)传感器节点采用分层结构,所述的分层结构是将传感器节点程序存储器分为微内核区和用户程序区,其中微内核区完成传感器节点硬件的初始化工作和对整个节点功能自维护过程的控制,微内核区的代码不可更新,为固定区,在传感器节点生产出来时以标准化的形式烧入节点;用户程序区为可更新区,中传感器节点实现功能自维护的载体,在该区实现传感器节点更新的功能;(2)传感器网络中sink节点将功能更新代码映像装入数据包并注入传感器网络,在微内核区的控制下,数据包以逐跳的方式在整个网络中扩散,将功能更新代码映像传送至传感器网络中的每个节点;(3)传感器网络中的节点收到功能更新代码映像后,利用传感器节点的分层结构实现自身的功能更新,完成节点的功能自维护。
2、 根据权利要求1所述的传感器节点功能自维护方法,其特征在于所述步骤(2) 中,功能更新代码映像在网络中以逐跳方式传播,所有的代码发送和接收都在一跳范 围内完成,其步骤为首先,由sink节点发起节点功能更新的过程,以sink节点为源 节点,源节点向自己一跳范围内的节点广播所要更新的功能代码映像的版本号,其一 跳范围内的节点将自身的版本号同收到的版本号进行比较,如果自身版本号小于收到 的源节点广播的版本号,则需要功能更新,立即向源节点发送更新请求消息;如果节 点自身的版本号大于或者等于源节点广播的版本号,表明不需要更新,则不用向源节 点回复消息;源节点在收到更新请求消息后,以单播的形式,以请求节点的节点ID号 为优先级发送新版本代码映像的数据包,节点在收到代码映像数据包后,需要检査是 否有丢失,如果有丢失,则回复NACK消息给源节点,请求重传,直至接收到完整的 功能更新代码映像;当sink节点一跳范围内的节点接收新版本的代码映像完成后,新 版本的功能更新代码映像存放在节点外部存储器中,这些节点可以立即作为源节点, 来更新自己一跳范围内的节点,如此循环,直到整个网络中的所有节点都收到功能更 新代码映像。
3、 根据权利要求1所述的传感器节点功能自维护方法,其特征在于所述步骤(3) 中在微内核区的控制下,保证接收到的功能更新代码映像正确后,首先擦除用户程序区数据,然后将外部存储器的功能更新代码映像写入程序存储器用户程序区,保证 写入准确无误后,将控制权交给用户程序区,运行更新后的代码,从而完成节点功能 自维护的过程。
4、根据权利要求3所述的传感器节点功能自维护方法,其特征在于所述的具体 实现过程为-在微内核区a. 初始化完成传感器节点硬件初始化工作;b. 判断版本号,决定是否需要更新Version代表传感器节点上当前代码版本号, Cu!Lver代表传感器节点上将要更新的代码的版本号,首先判断这两个版本号的大小, 如果Version < Cur—ver代表当前节点上的代码需要更新,进入步骤c,否则代表当前 传感器节点代码不需要更新,进入步骤d;c. 当前传感器节点代码需要更新,首先判断Version是否为0,为0代表节点用 户程序区为空,则传感器节点立即进入休眠状态,等待更新消息;如果收到更新消息, 则唤醒节点,接收要更新的代码,同时将代码存储到外部存储器中,同时更新版本号; 如果Version不为O,代表节点已经接收到更新的消息,则需要将下面接收到的数据作 为要更新的代码存储到外部存储器,同时更新版本号;d. 传感器节点代码不需要更新,则首先擦除用户程序区数据,然后将外部存储区 的数据移动到用户程序区,数据移动完成后,则进入用户程序区运行;在用户程序区e. 运行用户程序代码,完成传感器网络本身的任务如果接收到需要代码更新的 消息,则将Cur一ver设置为所要更新的版本号,然后重新启动节点。
全文摘要
一种传感器节点功能自维护方法,通过传感器网络,采用逐跳的机制将功能更新代码发送至网络中的每个节点,保证了功能更新代码分发的可靠性。通过将传感器节点的程序存储器分为微内核区和用户程序区的分层结构,使得传感器节点自身的功能更新有了更大的灵活性,并且更加可靠。其步骤如下(1)传感器节点采用分层结构,程序存储器分为微内核区和用户程序区,微内核区为固定区,用户程序区为不可更新区。(2)传感器网络中sink节点将功能更新代码映像装入数据包并注入网络,在微内核区的控制下,数据包以逐跳的方式在整个网络中扩散,传送至网络中的每个节点。(3)传感器节点利用分层结构来实现自身的功能更新,完成节点的功能自维护。本发明提出的分层结构为传感器节点的功能自维护提供了更大的灵活性,并能保证其自维护过程中的可靠性。
文档编号H04L29/08GK101355592SQ20081022203
公开日2009年1月28日 申请日期2008年9月8日 优先权日2008年9月8日
发明者刘智武, 威 吴, 涛 尚, 苏金钊 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1