一种用于休眠无线传感网络全网时间同步的通信方法
【专利摘要】本发明公开了一种用于休眠无线传感网络全网时间同步的通信方法。该方法包含以下四步:第一步,全网产生临时根节点;第二步,根节点产生后网络内节点和新加入节点时间同步的维持;第三步,全网比较确定工作周期开始时间;第四步,全网节点在工作周期内时间同步的维持。本发明的实现全网时间同步的通信方法的鲁棒性强,并且只消耗较少的存储资源。
【专利说明】—种用于休眠无线传感网络全网时间同步的通信方法
【技术领域】
[0001]本发明涉及一种消耗存储资源少、鲁棒性强的用于部署时间较长的休眠无线传感网络全网时间同步的通信方法,属于无线传感网络【技术领域】。
【背景技术】
[0002]无线传感网络中,节点之间晶振周期的差异造成的时钟误差不可避免,休眠网络能最大程度减少收发模块开启的时间以节省节点有限的能量,实现休眠网络的前提是设计好所有节点在整个运行时间内的时间同步方法以实现所有节点同时开启和关闭收发模块。
[0003]存储资源少是无线传感网络节点的重要特点,对于部署时间较长的休眠无线传感网络,新加入节点要与已有的节点交换信息以告知其他节点自身所处状态,全网要在达到时间同步后同时开启无线模块工作,这些都需要设计复杂的逻辑以考虑各种情况,因此,常见的全网节点达到并维持时间同步的通信方法的逻辑都很复杂,这样设计的通信方法的鲁棒性较好,但不足之处是编译好的二进制文件容量较大,下载到节点后将大量消耗无线传感网络节点有限的存储资源。
[0004]避免大量消耗节点存储资源的方法是降低通信方法(协议)的复杂程度,但其代价是通信方法只考虑了比较少的情况,逻辑设计较简单,因此鲁棒性将变差。
[0005]由此可见,一般情况下,部署时间较长的休眠无线传感网络的通信方法消耗较多存储资源和保持通信方法的鲁棒性存在着矛盾,如何设计复杂度较低的全网节点达到并维持时间同步的通信方法(这样只需消耗无线传感网络节点较少的存储资源),同时保持通信方法的鲁棒性,是通信方法设计和实现中非常困难的问题。
【发明内容】
[0006]针对部署时间较长的休眠无线传感网络,本发明提供了一种用于休眠无线传感网络全网时间同步的通信方法,该通信方法具有消耗存储资源少、鲁棒性强的优点。
[0007]一种用于休眠无线传感网络全网时间同步的通信方法,
包含以下四步:
第一步,全网产生临时根节点:全网内所有已启动的节点达到时间同步并维持时间同
I K
少;
第二步,根节点产生后网络内节点和新加入节点时间同步的维持:全网在维持同步的基础上通过单向通信确认一个唯一根节点;
第三步,全网比较确定工作周期开始时间:通过广播,以时间同步为前提确定全网节点在工作周期内第一次关闭无线收发模块的时间;
第四步,全网节点在工作周期内时间同步的维持:在周期性关闭/开启无线模块的工作周期内,以确定的根节点发送时间同步消息、全网节点接收并广播的模式维持工作周期内的时间同步。
[0008]所述的第一步,全网产生临时根节点,具体如下: 全网内已启动的节点采用泛洪时间同步协议的方法,竞争产生临时根节点,最终结果如下:由一个临时根节点定时,记定时器是Tl,向其他节点发送全网产生临时根节点阶段中的时间同步包,记为I型时间同步包,包中包含根节点号、序列号、本地时间、全局时间,该包中的根节点号就是临时根节点的节点号,序列号表示临时根节点连续发送I型时间同步包的序列号,本地时间表示临时根节点发送该包时的本地时间,全局时间表示临时根节点估计本地时间对应的全局时间,其他节点收到时间同步包后给该包打时间戳并读取全局时间,用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新估计本节点用本地时间计算全局时间的公式的参数,该公式的形式为
GlobalTime=skew*LocalTime+offset,
其中,GlobalTime是全局时间,LocalTime是本地时间,skew和offset是参数,其他每个节点也设置一个周期性触发的定时器,记为定时器Tl,定时器Tl触发之后就构造一个I型时间同步包,将该包的序列号取为上次触发到本次触发的时间内接收到的序列号最小的I型时间同步包的序列号,将包的本地时间记为本节点发送该包的本地时间,将包的全局时间取值为本节点估计的包的本地时间所对应的全局时间,然后广播出去,其余节点接收到这一时间同步包后也进行相同处理,这样,临时根节点发送I型时间同步包后,在全网范围内,节点会将该时间同步包逐次向全网内其他节点广播,因此,通过广播I型时间同步包,所有节点可产生并更新时间同步条目表中的条目,这些条目可用于估计本地时间和全局时间的表达式的参数,这样,可以维持全网节点的时间同步。
[0009]所述的第二步,根节点产生后网络内节点和新加入节点时间同步的维持,
节点号最小的节点在竞争成为临时的根节点后,如果定时器TI触发超过RootCertifySelfLimit次,没收到节点号小于自身节点号的I型时间同步包,则初步判定自己是根节点并设置一个定时器,记为定时器T2 ;
初步判定自己是根节点的节点发送根节点产生后的时间同步包,记为II型时间同步包,包中包含根节点号、序列号、本地时间、全局时间,该包中的根节点号就是本节点的节点号、序列号表示本节点连续发送II型时间同步包的序列号、本地时间表示本节点发送该包时的本地时间、全局时间表示本节点估计本地时间对应的全局时间,其他节点接收到该II型时间同步包后,首先给该包打时间戳并读取全局时间,用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新计算本节点用本地时间计算全局时间的公式的参数,然后判断本节点是否连续接收到NewComerListenLimit个根节点号相同的II型时间同步包,是则判定自己已被同步,否则判定自己未被同步并继续接收II型时间同步包;
在所述的第一步和第二步中,判定自己已被同步但不是初步判定自己是根节点的节点广播确认根节点消息RootCertifyMessage,该包中的发送节点号就是本节点号、根节点号就是本节点记录的根节点号,其他节点收到并记录该消息,对于发送节点号和根节点号相同的确认根节点消息,每个节点只广播RootCertifyTimes次;
初步判定自己是根节点的节点在定时器T2触发后判断自己是否收到过根节点号为其他节点号的确认根节点消息RootCertifyMessage,如未收到,则节点判定自己已是根节点。
[0010]所述的第三步,全网比较确定工作周期开始时间具体如下:
若某节点在定时器Tl触发SetRootLimit次后没有收到根节点号小于本节点记录的根节点号的II型时间同步包,就判定本节点记录的根节点是全网的根节点并判定自己已被同步,否则判定自己未被同步;
如节点判定自己已被同步,则将自己工作周期内第一次关闭无线收发模块的时间设置在当前时间加上LocalSleepTimeDelay的时间点上,这一时间点记为LocalSleepTime ;然后,该节点计算LocalSleepTime这一时间点对应的全局时间,构造一个本地关闭收发模块消息,该消息包含本节点记录的根节点号、LocalSleepTime对应的全局时间,并广播LocalSleepTimeBroadcastTimes次;判定自己已被同步的节点发送确认根节点消息RootCertifyMessage,该包中的发送节点号就是本节点号、根节点号就是本节点记录的根节点号,其他节点收到该消息后对该消息进行记录,对于发送节点号和根节点号相同的节点只广播 RootCertifyTimes 次;
其他未判定自己已经被同步的节点忽略该本地关闭收发模块消息,判定自己已被同步的节点收到后根据该消息记录的根节点号判断是否和自己是同一根节点,如不是则忽略该本地关闭收发模块消息,如是则判断自己的LocalSleepTime对应的全局时间的数据是否比本地关闭收发模块消息的全局时间的数据大,是则忽略该消息,否则将自己工作周期内第一次关闭无线收发模块的时间设置为本地关闭收发模块消息中的全局时间,并重新构造本地关闭收发模块消息,然后重新广播新构造的本地关闭收发模块消息LocalSleepTimeBroadcastTimes 次。
[0011]所述的第四步,全网节点在工作周期内时间同步的维持具体如下:
根节点在全网节点开启无线模块的时间内设置定时器T3,并仅设置T3触发TimeSynchTimerFiredTime次,T3触发后发送工作周期内的时间同步包,记为III型时间同步包,包中包含根节点号、序列号、本地时间、全局时间,根节点号就是根节点的节点号、序列号表示根节点连续发送III型时间同步包的次数、本地时间表示根节点发送该包时的本地时间、全局时间表示根节点估计的本地时间对应的全局时间,其他节点收到时间同步包后给该包打时间戳并读取消息中的根节点号和全局时间,如本节点记录的根节点号和读取的消息中的根节点号相同,则用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新计算本节点用本地时间计算全局时间的公式的参数;
其他节点也在全网节点开启无线模块的时间内设置定时器T3,并仅设置T3触发TimeSynchTimerFiredTime次,定时器T3触发后就构造一个III型时间同步包,序列号取值为本次触发和上次触发之间的时间内接收到的序列号最小的III型时间同步包的序列号,本地时间记取值为本节点发送该包的本地时间,全局时间取值为本节点估计的本地时间对应的全局时间;接收到这一时间同步包的节点也进行相同处理,这样,根节点发送III型时间同步包后,在全网范围内,该时间同步包会逐次向其他节点广播。
[0012]本发明的有益效果:
在TinyOS-2.1.0操作系统中,用nesC和C语言实现本发明的通信方法,加上简单的路由协议以及简单的数据传输的应用层程序组成完整的通信协议,编译成的Telosb平台下的ihex文件的容量应小于67kb,因此发明的实现时间同步的通信方法将消耗无线传感网络节点较少的存储资源。
[0013]本发明的通信方法,节点计算出的每条消息的接收时间对应的全局时间都很近似,对于实验中慢速部署的休眠无线传感网络,全网节点已经达到时间同步了,并且,具有较强的鲁棒性。
【专利附图】
【附图说明】
[0014]图1是全网产生临时根节点的流程图;
图2是根节点产生后网络内节点和新加入节点时间同步的维持的流程图;
图3是全网内所有节点周期性关闭/开启无线模块示意图。
【具体实施方式】
[0015]本发明针对的技术问题:部署时间较长的休眠无线传感网络的特殊性在于,节点先后开启无线模块,这一时间通常为数小时,如某节点启动后马上转入关闭/开启无线模块这种循环的工作状态,则另一节点启动后需处理很多种情况,如需要考虑能否和关闭无线模块的节点通信以及如何安排自己下一次开启无线模块的时间等问题,这大大增加了通信方法(协议)复杂度。在保证通信方法鲁棒性的前提下解决这些问题的方法之一是:在节点启动后延长其开启无线模块的时间,不与现有的时间同步通信方法一样(立即转入关闭/开启无线模块的工作状态),这样,新加入节点只需考虑与开启无线模块的节点进行通信,而无需考虑监听关闭无线模块的节点,通信方法逻辑的复杂度可降低,由于最长的模块开启时间有限(这取决于最后一个部署的节点启动的时间),所以不会过多降低节点的能量效率。
[0016]本发明针对部署时间较长的休眠无线传感网络,为达到在消耗存储资源少情况下保证通信协议的鲁棒性的目的,本发明提供了一种用于休眠无线传感网络全网时间同步的通信方法。
[0017]该方法包含以下四步:
第一步,全网产生临时根节点:全网内所有已启动的节点达到时间同步并维持时间同止/J/ O
[0018]第二步,根节点产生后网络内节点和新加入节点时间同步的维持:全网在维持同步的基础上通过单向通信确认一个唯一根节点。
[0019]第三步,全网比较确定工作周期开始时间:通过广播,以时间同步为前提确定全网节点在工作周期内第一次关闭无线收发模块的时间。
[0020]第四步,全网节点在工作周期内时间同步的维持:在周期性关闭/开启无线模块的工作周期内,以确定的根节点发送时间同步消息、全网节点接收并广播的模式维持工作周期内的时间同步。
[0021]第一步,全网产生临时根节点。
[0022]图1为全网产生临时根节点的流程图。
[0023]步骤101:全网内已启动的节点采用泛洪时间同步协议的方法,竞争产生临时根节点,该方法具体过程不再详述。
[0024]步骤102:泛洪时间同步协议的最终结果如下:由一个临时根节点定时(记定时器是Tl)向其他节点发送全网产生临时根节点阶段中的时间同步包(记为I型时间同步包,包中包含根节点号、序列号、本地时间、全局时间),该包中的根节点号就是临时根节点的节点号、序列号表示临时根节点连续发送I型时间同步包的序列号、本地时间表示临时根节点发送该包时的本地时间、全局时间表示临时根节点估计本地时间对应的全局时间,其他节点收到时间同步包后给该包打时间戳并读取全局时间,用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新估计本节点用本地时间计算全局时间的公式的参数,该公式的形式为
GlobalTime=skew*LocalTime+off set
其中,GlobalTime是全局时间,LocalTime是本地时间,skew和offset是参数。
[0025]步骤103:其他每个节点也设置一个周期性触发的定时器(记为定时器Tl),定时器Tl触发之后就构造一个I型时间同步包,将该包的序列号取为上次触发到本次触发的时间内接收到的序列号最小的I型时间同步包的序列号,将包的本地时间记为本节点发送该包的本地时间,将包的全局时间取值为本节点估计的包的本地时间所对应的全局时间,然后广播出去。
[0026]步骤104:其余节点接收到这一时间同步包后也进行相同处理,这样,临时根节点发送I型时间同步包后,在全网范围内,节点会将该时间同步包逐次向全网内其他节点广播,因此,通过广播I型时间同步包,所有节点可产生并更新时间同步条目表中的条目,这些条目可用于估计本地时间和全局时间的表达式的参数,这样,可以维持全网节点的时间同步。
[0027]第二步,根节点产生后网络内节点和新加入节点时间同步的维持。
[0028]图2是根节点产生后网络内节点和新加入节点时间同步的维持的流程图。
[0029]步骤201:节点号最小的节点在竞争成为临时的根节点后,如果定时器Tl触发超过RootCertifySelfLimit次(一般可取为35)没收到节点号小于自身节点号的I型时间同步包,则初步判定自己是根节点并设置一个定时器(记为定时器T2,周期一般可取为300秒)。
[0030]步骤202:初步判定自己是根节点的节点发送根节点产生后的时间同步包(记为II型时间同步包,包中包含根节点号、序列号、本地时间、全局时间),该包中的根节点号就是本节点的节点号、序列号表示本节点连续发送II型时间同步包的序列号、本地时间表示本节点发送该包时的本地时间、全局时间表示本节点估计本地时间对应的全局时间,其他节点接收到该II型时间同步包后,首先给该包打时间戳并读取全局时间,用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新计算本节点用本地时间计算全局时间的公式的参数,然后判断本节点是否连续接收到NewComerListenLimit (—般可取为20)个根节点号相同的II型时间同步包,是则判定自己已被同步,否则判定自己未被同步并继续接收II型时间同步包。
[0031]步骤203:在第一步和第二步中,判定自己已被同步但不是初步判定自己是根节点的节点广播确认根节点消息RootCertifyMessage,该包中的发送节点号就是本节点号、根节点号就是本节点记录的根节点号,其他节点收到并记录该消息,对于发送节点号和根节点号相同的确认根节点消息,每个节点只广播RootCertifyTimes (—般可取为5)次。
[0032]初步判定自己是根节点的节点在定时器T2触发后判断自己是否收到过根节点号为其他节点号的确认根节点消息RootCert i fyMessage (该消息中包含发送节点号、根节点号),如未收到,则节点判定自己已是根节点。这种单向通信方法(即仅通过其他节点广播发送确认根节点消息)可以克服双向通信(即先由根节点发送询问,再由其他节点广播发送确认根节点消息)的不可靠性。
[0033]第三步,全网比较确定工作周期开始时间。
[0034]若某节点在定时器Tl触发SetRootLimit (—般可取为20)次后没有收到根节点号小于本节点记录的根节点号的II型时间同步包,就判定本节点记录的根节点是全网的根节点并判定自己已被同步,否则判定自己未被同步。
[0035]如节点判定自己已被同步,则将自己工作周期内第一次关闭无线收发模块的时间设置在当前时间加上LocalSleepTimeDelay的时间点(这一时间点记为LocalSleepTime)上,因为本发明针对慢速部署网络,所以LocalSle印TimeDelay通常大于3600s。然后,该节点计算LocalSleepTime这一时间点对应的全局时间,构造一个本地关闭收发模块消息(该消息包含本节点记录的根节点号、LocalSleepTime对应的全局时间)并广播LocalSleepTimeBroadcastTimes (一般可取为6)次。判定自己已被同步的节点发送确认根节点消息RootCertifyMessage,该包中的发送节点号就是本节点号、根节点号就是本节点记录的根节点号,其他节点收到该消息后对该消息进行记录,对于发送节点号和根节点号相同的节点只广播RootCertifyTimes (—般可取为5)次。
[0036]其他未判定自己已经被同步的节点忽略该本地关闭收发模块消息,判定自己已被同步的节点收到后根据该消息记录的根节点号判断是否和自己是同一根节点,如不是则忽略该本地关闭收发模块消息,如是则判断自己的LocalSleepTime对应的全局时间的数据是否比本地关闭收发模块消息的全局时间的数据大,是则忽略该消息,否则将自己工作周期内第一次关闭无线收发模块的时间设置为本地关闭收发模块消息中的全局时间(即将自己的LocalSleepTime直接修改为本地关闭收发模块消息中的全局时间对应的本地时间),并重新构造本地关闭收发模块消息(将本节点发送的本地关闭收发模块消息中的LocalSleepTime对应的全局时间修改为修改后的LocalSleepTime对应的全局时间),然后重新广播新构造的本地关闭收发模块消息LocalSleepTimeBroadcastTimes次。
[0037]第四步,全网节点在工作周期内时间同步的维持。
[0038]通过以上三步,全网内所有节点的LocalSle印Time都对应于同一个全局时间,如图3所示,从这一全局时间起,全网内所有节点周期性关闭/开启无线模块(关闭和开启无线模块的时间分别是OffTime和OnTime,一般可取为2400s和25s),也就是进入工作周期。由于所有节点能维持同步(也就是能计算全局时间对应的本地时间),因此,所有节点能准确在同一时刻关闭/开启无线模块。
[0039]保证同时关闭/开启无线模块的前提是时间同步,全网节点在工作周期内维持时间同步的方法如下:
根节点在全网节点开启无线模块的时间内设置定时器T3 (周期一般可设置为:T4s内的随机数),并仅设置T3触发TimeSynchTimerFiredTime次(一般可取为3), T3触发后发送工作周期内的时间同步包(记为III型时间同步包,包中包含根节点号、序列号、本地时间、全局时间),根节点号就是根节点的节点号、序列号表示根节点连续发送III型时间同步包的次数、本地时间表示根节点发送该包时的本地时间、全局时间表示根节点估计的本地时间对应的全局时间,其他节点收到时间同步包后给该包打时间戳并读取消息中的根节点号和全局时间,如本节点记录的根节点号和读取的消息中的根节点号相同,则用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新计算本节点用本地时间计算全局时间的公式的参数。
[0040]其他节点也在全网节点开启无线模块的时间内设置定时器T3(周期一般可设置为3?4s内的随机数),并仅设置T3触发TimeSynchTimerFiredTime次,定时器T3触发后就构造一个III型时间同步包,序列号取值为本次触发和上次触发之间的时间内接收到的序列号最小的III型时间同步包的序列号,本地时间记取值为本节点发送该包的本地时间,全局时间取值为本节点估计的本地时间对应的全局时间。接收到这一时间同步包的节点也进行相同处理,这样,根节点发送III型时间同步包后,在全网范围内,该时间同步包会逐次向其他节点广播,因此,所有节点都可通过III型时间同步包产生并更新时间同步条目表中的条目,这些条目可用于估计本节点用本地时间计算全局时间的公式的参数,进而可根据本地时间计算全局时间,或根据全局时间计算本地时间,也就是全网节点都能继续维持时间同步。
[0041]本发明的通信方法(协议)与ZigBee通信协议在消耗存储资源方面的对比:在TinyOS-2.1.0操作系统中,用nesC和C语言实现本发明的通信方法,编译成的Telosb平台(国际上无线传感网络标准硬件平台之一)下的ihex文件容量为47kb,添加有简单的数据传输的应用层程序的ZigBee通信协议编译后的ihex文件容量为8f86kb。通常,添加简单的路由协议和数据传输的应用层程序需增加小于20kb的容量,因此,可以估计:如用本通信方法和简单的路由协议以及简单的数据传输的应用层程序组成完整的通信协议,编译成的Telosb平台下的ihex文件的容量应小于67kb,比添加有简单的数据传输的应用层程序的ZigBee通信协议小,因此将消耗无线传感网络节点较少的存储资源。
[0042]本发明的通信方法的鲁棒性:在TinyOS-2.1.0操作系统中,用nesC和C语言实现本发明的通信方法,编译成Telosb平台下的程序,下载到20个Telosb节点中(每个节点的节点号不通),20个Telosb节点在4小时内均匀部署(每12分钟部署一个节点),组成一个网络。网络部署好后,用5个Telosb节点分散部署在网络中,作为参考节点,这5个节点每15s广播发送一条消息,其他20个节点接收并根据接收消息的本地时间计算接收时的全局时间,存入flash中,网络运行3天后读取每个节点flash中的数据,重复上述实验3次,由对比结果可知,节点计算出的每条消息的接收时间对应的全局时间都很相近,由此可知,对于实验中慢速部署的休眠无线传感网络,全网节点已经达到时间同步了,并且,由3次重复性实验后全网节点都可达到时间同步状态可知,本发明的通信方法有较强的鲁棒性。
【权利要求】
1.一种用于休眠无线传感网络全网时间同步的通信方法,其特征在于, 包含以下四步: 第一步,全网产生临时根节点:全网内所有已启动的节点达到时间同步并维持时间同I K少; 第二步,根节点产生后网络内节点和新加入节点时间同步的维持:全网在维持同步的基础上通过单向通信确认一个唯一根节点; 第三步,全网比较确定工作周期开始时间:通过广播,以时间同步为前提确定全网节点在工作周期内第一次关闭无线收发模块的时间; 第四步,全网节点在工作周期内时间同步的维持:在周期性关闭/开启无线模块的工作周期内,以确定的根节点发送时间同步消息、全网节点接收并广播的模式维持工作周期内的时间同步。
2.根据权利要求1所述的通信方法,其特征在于, 所述的第一步,全网产生临时根节点,具体如下: 全网内已启动的节点采用泛洪时间同步协议的方法,竞争产生临时根节点,最终结果如下:由一个临时根节点定时,记定时器是Tl,向其他节点发送全网产生临时根节点阶段中的时间同步包,记为I型时间同步包,包中包含根节点号、序列号、本地时间、全局时间,该包中的根节点号就是临时根节点的节点号,序列号表示临时根节点连续发送I型时间同步包的序列号,本地时间表示临时根节点发送该包时的本地时间,全局时间表示临时根节点估计本地时间对应的全局时间,其他节点收到时间同步包后给该包打时间戳并读取全局时间,用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新估计本节点用本地时间计算全局时间的公式的参数,该公式的形式为GlobalTime=skew*LocalTime+offset, 其中,GlobalTime是全局时间,LocalTime是本地时间,skew和offset是参数,其他每个节点也设置一个周期性触发的定时器,记为定时器Tl,定时器Tl触发之后就构造一个I型时间同步包,将该包的序列号取为上次触发到本次触发的时间内接收到的序列号最小的I型时间同步包的序列号,将包的本地时间记为本节点发送该包的本地时间,将包的全局时间取值为本节点估计的包的本地时间所对应的全局时间,然后广播出去,其余节点接收到这一时间同步包后也进行相同处理,这样,临时根节点发送I型时间同步包后,在全网范围内,节点会将该时间同步包逐次向全网内其他节点广播,因此,通过广播I型时间同步包,所有节点可产生并更新时间同步条目表中的条目,这些条目可用于估计本地时间和全局时间的表达式的参数,这样,可以维持全网节点的时间同步。
3.根据权利要求2所述的通信方法,其特征在于, 所述的第二步,根节点产生后网络内节点和新加入节点时间同步的维持, 节点号最小的节点在竞争成为临时的根节点后,如果定时器TI触发超过RootCertifySelfLimit次,没收到节点号小于自身节点号的I型时间同步包,则初步判定自己是根节点并设置一个定时器,记为定时器T2 ; 初步判定自己是根节点的节点发送根节点产生后的时间同步包,记为II型时间同步包,包中包含根节点号、序列号、本地时间、全局时间,该包中的根节点号就是本节点的节点号、序列号表示本节点连续发送II型时间同步包的序列号、本地时间表示本节点发送该包时的本地时间、全局时间表示本节点估计本地时间对应的全局时间,其他节点接收到该11型时间同步包后,首先给该包打时间戳并读取全局时间,用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新计算本节点用本地时间计算全局时间的公式的参数,然后判断本节点是否连续接收到NewComerListenLimit个根节点号相同的II型时间同步包,是则判定自己已被同步,否则判定自己未被同步并继续接收II型时间同步包; 在所述的第一步和第二步中,判定自己已被同步但不是初步判定自己是根节点的节点广播确认根节点消息RootCertifyMessage,该包中的发送节点号就是本节点号、根节点号就是本节点记录的根节点号,其他节点收到并记录该消息,对于发送节点号和根节点号相同的确认根节点消息,每个节点只广播RootCertifyTimes次; 初步判定自己是根节点的节点在定时器T2触发后判断自己是否收到过根节点号为其他节点号的确认根节点消息RootCertifyMessage,如未收到,则节点判定自己已是根节点。
4.根据权利要求3所述的通信方法,其特征在于, 所述的第三步,全网比较确定工作周期开始时间具体如下: 若某节点在定时器Tl触发SetRootLimit次后没有收到根节点号小于本节点记录的根节点号的II型时间同步包,就判定本节点记录的根节点是全网的根节点并判定自己已被同步,否则判定自己未被同步; 如节点判定自己已被同步,则将自己工作周期内第一次关闭无线收发模块的时间设置在当前时间加上LocalSleepTimeDelay的时间点上,这一时间点记为LocalSleepTime ;然后,该节点计算LocalSleepTime这一时间点对应的全局时间,构造一个本地关闭收发模块消息,该消息包含本节点记录的根节点号、LocalSleepTime对应的全局时间,并广播LocalSleepTimeBroadcastTimes次;判定自己已被同步的节点发送确认根节点消息RootCertifyMessage,该包中的发送节点号就是本节点号、根节点号就是本节点记录的根节点号,其他节点收到该消息后对该消息进行记录,对于发送节点号和根节点号相同的节点只广播 RootCertifyTimes 次; 其他未判定自己已经被同步的节点忽略该本地关闭收发模块消息,判定自己已被同步的节点收到后根据该消息记录的根节点号判断是否和自己是同一根节点,如不是则忽略该本地关闭收发模块消息,如是则判断自己的LocalSleepTime对应的全局时间的数据是否比本地关闭收发模块消息的全局时间的数据大,是则忽略该消息,否则将自己工作周期内第一次关闭无线收发模块的时间设置为本地关闭收发模块消息中的全局时间,并重新构造本地关闭收发模块消息,然后重新广播新构造的本地关闭收发模块消息LocalSleepTimeBroadcastTimes 次。
5.根据权利要求4所述的通信方法,其特征在于, 所述的第四步,全网节点在工作周期内时间同步的维持具体如下: 根节点在全网节点开启无线模块的时间内设置定时器T3,并仅设置T3触发TimeSynchTimerFiredTime次,T3触发后发送工作周期内的时间同步包,记为III型时间同步包,包中包含根节点号、序列号、本地时间、全局时间,根节点号就是根节点的节点号、序列号表示根节点连续发送III型时间同步包的次数、本地时间表示根节点发送该包时的本地时间、全局时间表示根节点估计的本地时间对应的全局时间,其他节点收到时间同步包后给该包打时间戳并读取消息中的根节点号和全局时间,如本节点记录的根节点号和读取的消息中的根节点号相同,则用时间戳和全局时间更新时间同步条目表中条目,表中条目全部更新一遍后就重新计算本节点用本地时间计算全局时间的公式的参数; 其他节点也在全网节点开启无线模块的时间内设置定时器T3,并仅设置T3触发TimeSynchTimerFiredTime次,定时器T3触发后就构造一个III型时间同步包,序列号取值为本次触发和上次触发之间的时间内接收到的序列号最小的III型时间同步包的序列号,本地时间记取值为本节点发送该包的本地时间,全局时间取值为本节点估计的本地时间对应的全局时间;接收到这一时间同步包的节点也进行相同处理,这样,根节点发送III型时间同步包后,在全网范围内,该时间同步包会逐次向其他节点广播。
【文档编号】H04W56/00GK104320844SQ201410581179
【公开日】2015年1月28日 申请日期:2014年10月27日 优先权日:2014年10月27日
【发明者】鲁琛 申请人:浙江科技学院