[0065] 以下将结合附图,对本发明的技术方案进行详细说明。
[0066] 无线传感器网络多采用TDMA的时隙分配方式进行时隙部署,本发明在TDMA思想的基础上,结合分簇链状网络拓扑结构,提出一种更适应该结构的簇内和簇间的时间同步和调度传输机制。该机制主要采用WOR模式,使簇成员节点周期性地醒来侦听汇聚节点发出的信标帧;在簇内周期,通过簇内信标帧的调度以及时隙部署的原理,实现簇首节点与簇成员节点的数据传输;在簇间周期,通过簇间信标帧的调度,实现2个相邻簇首节点的数据传输以及1号簇首节点和汇聚节点的数据传输。簇成员节点完成数据传输后,根据情况进入低功耗的WOR状态或休眠状态,从而节省能量。同时,由于每个节点只在属于自己的时隙内醒来,使得数据传输有序进行,大大降低了数据碰撞的可能性,进一步减少了节点的能耗。
[0067] 如图1所示为本发明的网络结构图。汇聚节点位于网络的一端,以汇聚节点为起始点、以簇首节点为位置点形成链状的拓扑结构。每个簇首节点周围围绕着若干簇成员节点,形成分簇结构。
[0068] 如图2所示为本发明的簇首节点编号图,距离汇聚节点越远编号越大。
[0069] 1、帧格式定义
[0070] 无线传感器网络是以能量为生命,能耗越低,网络生命周期越长。高精度的时间同步方法成本高,不适合实际应用。为此,在不增加成本的前提下,如何实现整个网络全部传感器节点的同步,是目前着重研究的问题。为此,本发明采用粗粒度的时间同步方法,设计网络的通讯协议。在协议中,我们采用信标帧和数据帧两种帧格式,信标帧用来实现传感器节点的时间同步,以及调度两个节点之间数据传输;数据帧用以区分信标帧,是传感器所采集到的数据的载体。汇聚节点按照递增的顺序,持续发送编号依次为1至m的时间同步信标帧。
[0071] 如图3所示为本发明的信标帧帧格式定义图,信标帧由前导码、同步词汇等组成,其中前导码设为4个字节,同步词汇设为2个字节,长度字节为1个字节,帧类型为2个比特位,帧序号为6个比特位,帧位号为1个字节。
[0072] 信标帧由总是汇聚节点广播出去,用于簇内同步和簇间同步,所以不需要地址字节,此外信标帧上需要有表示帧类型的位,用于说明该次时间同步是簇间还是簇内。帧类型占用两个比特,该位为00时表示簇间同步,该位为01时表示簇内同步。
[0073] 此外,信标帧上还需要有帧序号位,该位用来表示在汇聚节点发送的一轮信标帧中,该信标帧所在的位置。帧位号只有在簇间同步时才会用到,用于表示该条信标帧是汇聚节点发送的第几轮信标帧,因为在簇间同步中,发送一轮信标帧只是用来同步两个簇首节点,所以结合帧位号就能判断该轮是来同步哪两个节点。
[0074] 如图4所示为本发明的数据帧帧格式定义图,数据帧用于节点间传递数据。数据帧的长度不固定。一个数据帧包括前导码、同步词汇、长度字节等,其中前导码设为4个字节,同步词汇设为2个字节,长度字节为1个字节,簇号为5个比特位,簇内号为3个比特位,数据位占3个字节,整个数据长度是4字节的倍数。
[0075] 2、时间同步与数据传输
[0076] 时间同步是无线传感器网络中的重要基础,只有网络内的节点都能准确地同步到同一时间基准,才能实现全网的数据传输。本发明出于降低功耗的考虑,节点在非工作状态处于休眠模式,只有在处于分配的时隙中才会收发数据,在侦听信标帧时则处于WOR模式。
[0077] 如图5所示是本发明的MAC协议流程图,当到达需要采集数据的时刻时,即一个系统周期的开始,汇聚节点先发送信标帧进行所有簇的簇内同步,即簇首节点把该簇内的数据汇总到一起,并进行简单的处理。簇内同步后,数据都储存在各个簇首节点上,之后汇聚节点再向所有的簇首节点广播信标帧进行簇间同步。每发送一轮信标帧,两个相邻的簇首节点实现数据的传输,最后数据传送到汇聚节点,至此一个完整的数据采集周期结束,之后系统休眠一定的时间后再开始新一轮的工作。
[0078] 在本发明的应用环境中,通常汇聚节点是用电力线供电,可认为能量不限,簇首节点和簇间节点则是通过电池供电,能量是有限的。各个节点的部署按照分簇式的星链形结构,以汇聚节点为端点,簇首节点按照链式结构排开,然后再以单个簇首节点为中心,簇内节点以星型结构部署。此外,对于节点的部署距离还有要求,即以簇为单位,一个簇内的所有簇内节点都应该在簇首节点的通信范围之内,而各个簇之间的距离则需要超过簇内节点的通信范围,即各个簇之间只有簇首节点可以通信,而簇内节点无法与其他簇首节点通信,这样的部署可以避免各个簇内通信的干扰。要实现这样的部署,需要调节簇首节点的发射功率和簇内节点的发射功率。
[0079] 部署好节点后,需要给各个节点设置一个ID,来表明该节点在网络中的位置。该ID由两部分组成,簇号和簇内成员号。该字节的高5位表示簇号,低3位表示簇内成员号。汇聚节点的簇号和簇内成员号都为0,其他簇首节点的簇内成员号也为0。在一簇内,所有节点的簇首号都相同。
[0080] 一个完整的大周期由三个部分组成:簇内同步周期Tin和簇间同步周期Tbetween和睡眠周期Tsleep。运行的顺序是先完成簇内同步周期,把簇内节点采集的数据汇总到簇首节点,然后运行簇间同步周期,把簇首节点上的数据通过多条传送到汇聚节点,再运行睡眠周期,节点都处于休眠模式,一直到下一个大周期的开始。
[0081] 节点初始化完成后,就开始了一个新的大周期。网络的所有节点初始化完成后,都处于WOR模式等待唤醒,汇聚节点广播一轮用于簇内同步的信标帧,所有节点接收到同步词汇后被唤醒,继续接收完整的一个信标帧,之后根据接收到的信标帧中的帧序号信息,所有的节点进入休眠模式并延时到信标帧发送结束的时候。到达所有信标帧发送完成的时刻,簇首节点进入接收模式,簇内节点按照簇内成员的顺序在对应的时隙内采集数据,然后发送给簇首节点。由于各个簇的距离超出簇内节点的通信范围,因此各个簇内部通信不会互相干扰,所以簇内同步可以是所有的簇同时进行。至此,簇内同步完成,每个簇内节点采集的数据都汇总到簇首节点,簇内节点都进入休眠模式,簇首节点进入WOR模式。然后汇聚节点广播一轮用于簇间同步的信标帧,所有的簇首节点被唤醒,接收到其中一个信标帧。接收到信标帧以后,根据信标帧中的帧位号判断该轮信标帧是同步哪两个簇首节点,非同步节点继续进入WOR模式,而同步节点则根据帧序号信息,延时到本轮广播信标帧结束,然后两个节点传送数据。至此,一轮簇间同步完成,之后进行下一轮簇间同步,直至数据传送到汇聚节点。数据汇总到汇聚节点后,一个工作周期结束,所有的节点进入休眠模式至下一个工作周期的开始。
[0082] 1)簇内周期
[0083] 如图6所示为本发明的簇内同步示意图。节点初始化完成后,首先进行簇内同步,汇聚节点先发送一轮信标帧,信标帧的帧类型位为01,表明该轮所有的信标帧用于簇内同步,信标帧的帧序号按照发送的顺序依次递增,从帧序号可以推算广播信标帧阶段结束的时间。网络中所有节点,包括簇首节点,会在本轮信标帧中接收到一个信标帧,根据信标帧的帧序号和发送一个信标帧的时间,可以推算出广播阶段结束的时间点,接收的信标帧的帧序号越小,延迟的时间越长。然后所有节点都进入休眠模式并延迟到广播阶段结束的时间点,从而实现了同步过程的第一步。然后进入簇内汇总数据的阶段。该阶段中,簇首节点一直处于接收状态,每个簇内节点都会被分配一个时隙,用于单个节点采集数据,并将数据发送给簇首节点。在单个时隙内,只有一个簇内节点在工作,其他节点都处于休眠模式。时隙的分配与节点的簇内成员号对应,例如1号簇内成员分配的是第1个时隙。所有从广播阶段结束的时间开始,节点根据簇内成员号和每个时隙的时间长度可以推算出需要延迟的时间。
[0084] 假设一个簇内有N个簇,每个簇内有1个簇首节点和n个簇内节点,每个节点的簇内成员编号为0~n(簇首节点的簇内成员号为0),其中簇内成员编号代表了每个节点提前分配的时隙序号。汇聚节点广播一系列信标帧,用m表示广播的信标帧数目,广播一个信标帧的时间为tbeacon。广播的信标帧的帧位号是从1到m逐渐增加的。接收到信标帧后,节点转入休眠模式,延迟一定时间后醒来,延迟的时间在下面介绍。簇内同步实现的效果是所有节点休眠结束后,簇首节点和1号簇内节点同时醒来,1号节点在分配的时隙内,采集传感器数据,并发送给簇首节点,然后1号节点休眠,同时2号节点醒来,重复以上流程,直到n号节点完成任务。
[0085] 考虑到唤醒的时间和采集传感器数据的时间无法忽略,为了保证传送数据的稳定性,每个时隙的长度稍大于tbeacon。这里用tslot表示一个时隙的长度。
[0086] 当簇内普通节点采集数据时,采集的数据会与上一个数据周期采集的数据进行对比,如果两次数据相同,说明没有新数据产生,为了节省能量,该节点在时隙内不发送数据,而是直接休眠。此外当节点能量耗尽时,也会出现连续几轮周期没有接收到该节点数据的情况,为防止这两种情况混淆,规定从第一次没有新数据产生的周期开始记数,记数到达特定值后,节点必须强制发送一次数据,以此来证明该节点是正常工作的。
[0087] 如图所示图7是本发明的簇内时间同步方法示意图。假设簇内成员号为ni(0<=ni<=n)
[0088] 的节点接受到一个信标帧,帧序号为mj。需要进行如下判断:
[0089] 当ni为0时,该节点为簇首节点。该节点则休眠一段时间,然后进入接收模式。休眠时间trest1为:
[0090] trest1=(m-mj)tbeacon
[0091] 其中,trest1为簇首节点的休眠时间,m为汇聚节点发送信标帧的个数,mj为簇首节点接收到的一个完整的信标帧的帧序号,tbeacon为汇聚节点广播一个信标帧的时间。
[0092] 然后节点进入接收模式,保持trest2的时间为:
[0093] trest2=n*tslot
[0094] 其中,trest2为簇首节点接收数据的时间,n为该簇成员个数,tslot为簇成员节点发送一个数据帧的时隙长度。
[0095] 至此该簇内的数据都汇集到簇首节点上,簇内同步完成。然后该节点进入WOR模式,等待汇聚节点的唤醒,之后就进入簇间同步周期。
[0096] 当ni不为0时,该节点为簇内节点。该节点则休眠一段时间,然后醒来,在自己的时隙内采集数据并发送给簇首节点。休眠的时间trest3为:
[0097] trest3=(m-mj)tbeacon+(ni-1)tslot
[0098] 其中trest3为簇成员节点的休眠时间,m为汇聚节点发送信标帧的个数,mj为该簇成员节点接收到的一个完整的信标帧的帧序号,tbeacon为汇聚节点广播一个信标帧的时间,ni为该成员节点的簇内号,tslot为簇成员节点发送一个数据帧的时隙长度。
[0099] 该节点醒来后判断是否有新数据,有新数据则在对应的时隙内发送数据,发送完成后休眠至下一个数据采集周期,没有新数据则直接休眠至下一个大周期。其中如果有新数据发送,发送完后休眠的时间trest4为:
[0100] trest4=(n-ni)tslot+Tbetween+Tsleep
[0101] 其中trest4为簇成员节点的休眠时间,n为该簇成员个数,ni为该成员节点的簇内号,tslot为簇成员节点发送一个数据帧的时隙长度,Tbetween为一个簇间同步周期时间,Tsleep为一个睡眠周期时间。
[0102] 如果没有新数数据发送,休眠的时间trest5为:
[0103] trest5=(n-ni+1)tslot+Tbetween+Tsleep
[0104] 其中trest4为簇成员节点的休眠时间,n为该簇成员个数,ni为该成员节点的簇内号,tslot为簇成员节点发送一个数据帧的时隙长度,Tbetween为一个簇间同步周期时间,Tsleep为一轮数据采集周期之间的休眠的时间。
[0105] 2)簇间周期
[0106] 如图8所示是本发明的簇间同步示意图。簇内同步完成后,所有簇内节点都进入休眠状态,簇首节点进入WOR状态并等待汇聚节点的唤醒。汇聚节点先发送第一轮信标帧,信标帧的帧类型号为00,表明该轮信标帧为簇间同步,信标帧的帧位号为i,表明该轮信标帧是同步簇号为i和i-1的簇首节点。所有簇首节点接收到同步词汇后就被唤醒,然后接收完整的一个信标帧,比较节点ID中的簇号和信标帧中的帧位号,可以判断该轮信标帧是否是来同步本节点。只有节点簇号为i和i-1的簇首节点会休眠延迟一段时间,之后i号簇首节点先i-1号簇首节点发送数据。完成后i号节点休眠至下一个大周期的开始,i-1号节点继续进入WOR状态。其他的节点直接进入WOR状态,等待下一轮信标帧唤醒。假设共有N个簇首节点,要完成数据汇总到汇聚节点,汇聚节点共需要发送N轮信标帧。
[0107] 在一轮信标帧广播完,且两个簇首节点实现同步后,两个节点就进行数据传输,从簇号高的簇首节点传输到簇号低的簇首节点。传输数据所需要的时间是不是一个固定值,随着簇号的减小,传输数据所需的时间越长。这是因为每传输一次,当前网络链尾的簇首节点上存储的数据量就要增加一次。假设簇号为N的簇首节点向簇号为N-1的簇首节点传输数据所需的时间为tcluster,则簇号为N-1的簇首节点发送数据所需的时间为2tcluster。簇号每减小1位,发送所需的时间增加一个tcluster。
[0108] 如图9所示为本发明的簇间时间同步方法示意图。假设有N个簇首节点,它们的簇号为1~N。汇聚节点需要广播N轮信标帧,假设每轮广播m个信标帧,广播一个信标帧的时间为tbeacon。在其中某一轮簇间同步中,簇号为Ni的簇首节点接收到一个信标帧,其帧位号为Nk(1<=Nk<=N),帧序号为mj,该节点需要进行以下判断:
[0109] 当Ni=N-Nk+1时,该节点是本轮同步针对的节点之一,为同步后的发送节点,该节点需要延迟trest6时间:
[0110] trest6=(m-mj)tbeacon
[0111] 其中,trest6为簇首节点Ni的延迟时间,m为汇聚节点发送信标帧的个数,mj为簇首节点接收到的一个完整的信标帧的帧序号,tbeacon为汇聚节点广播一个信标帧的时间。
[0112] 之后进入发送模式,发送完数据后该节点本周期的任务已经完成,直接休眠到下个大周期的开始即可。休眠的时间trest7为:
[0113]
[0114] 其中,trest7为簇首节点Ni的休眠时间,m为汇聚节点发送信标帧的个数,tbeacon为汇聚节点广播一个信标帧的时间,Ni为该簇首节点的簇号,N为簇的个数,Tsleep为一轮数据采集周期之间的休眠的时间,tcluster为N号簇首节点向N-1号簇首节点传输数据所需的时间,i为运算变量。
[0115] 当Ni=N-Nk时,该节点也是本轮同步针对的节点之一,为同步后的接收节点,该节点需要延迟trest8时间:
[0116] trest8=(m-mj)tbeacon
[0117] 其中,trest8为簇首节点Ni的延迟时间,m为汇聚节点发送信标帧的个数,mj为簇首节点接收到的一个完整的信标帧的帧序号,tbeacon为汇聚节点广播一个信标帧的时间。
[0118] 之后进入接收模式,接收模式持续的时间tlast为:
[0119] tlast=(N-Nk+1)*tcluster
[0120] 其中,tlast为簇首节点Ni的接收数据的时间,N为簇的个数,Nk为簇首节点Ni接收到的信标帧的帧位号,tcluster为Ni号簇首节点向Ni-1号簇首节点传输数据所需的时间。
[0121] 接收完数据后,该节点直接进入WOR模式,准备开始接收下一轮信标帧。
[0122] 当Ni为其他值时,节点收到信标帧后忽略信标帧的信息,直接进入WOR模式,等待下一轮信标帧的唤醒,延时时trest9为:
[0123] trest9=m*tbeacon+(N-Nk+1)*tcluster
[0124] 其中,trest9为簇首节点Ni的延时时间,m为汇聚节点发送信标帧的个数,tbeacon为汇聚节点广播一个信标帧的时间,N为簇的个数,Nk为簇首节点Ni接收到的信标帧的帧位号,tcluster为Ni号簇首节点向Ni-1号簇首节点传输数据所需的时间。
[0125] 以上为常规的簇首节点的同步,当Nk=N时,说明数据已经传送到1号簇首节点,需要从该节点传送到汇聚节点,此时1号节点还是按照上面的判断操作,不同的是接收的节点不再是簇首节点,而是汇聚节点。
[0126] 3、通信协议
[0127] 整个无线传感器网络内共有N个簇首节点,每个簇内有n个簇内节点,汇聚节点发送一轮信标帧的个数m,发送一个信标帧需要的时间为tbeacon,所以发送一轮信标帧的时间为mtbeacon,在簇内同步中,单个传感器节点分配的时隙长度为tslot,在簇间同步中,用于簇首节点间传送数据的时间是成比例变化的,假设链上最末端的簇首节点发送数据需要的时间为tcluster,数据采集周期之间的休眠的时间为Tsleep,称为睡眠周期。
[0128] 对于汇聚节点,算法过程如下:
[0129] 1)初始化节点,初始化记数变量i为N,该变量用于簇间同步记数,进入步骤2);
[0130] 2)开始簇内同步,发送一轮用于簇内同步的信标帧,然后等待n*tslot的时间(在该时间内,各个簇内进行数据汇总),进入步骤3);
[0131] 3)开始簇间同步,发送一轮用于簇间同步的信标帧,然后等待(N-j+1)*tcluster时间(在该时间内,簇号为N的簇首节点正在向簇号为N-1的簇首节点发送数据),之后进入步骤4);
[0132] 4)N减1,然后判断N是否等于1,如果不等于,则进入步骤3),如果等于,则进入步骤5);
[0133] 5)簇间同步已经进行到1号簇首节点,汇聚节点应该进入接收模式,持续N*tcluster时间后进入步骤6);
[0134] 6)进入空闲状态,开始睡眠周期的计时,计时到达了则进入步骤2),没有则继续等待;
[0135] 对于传感器节点,算法过程如下:
[0136] 1)初始化节点,进入步骤2);
[0137] 2)先进入WOR模式,准备开始簇内同步,接收到信标帧后进入步骤3);
[0138] 3)提取有效负载中的帧序号mj,结合该节点的簇内标号ni进行如下判断,当ni为0时,该节点为簇首节点,则进入步骤4),当ni不为0时,该节点为簇内节点,进入步骤5);
[0139] 4)作为簇首节点,休眠(m-mj)tbeacon时间后进入接收模式,并维持n*tslot的时间,接收该簇内所有簇内节点的数据,之后进入步骤9);
[0140] 5)作为簇内节点,该节点休眠(m-mj)tbeacon+(ni-1)tslot时间后进入步骤6);
[0141] 6)采集数据,并判断是否有新的数据,有则进入步骤7),没有则进入步骤8);
[0142] 7)节点把采集的数据在tslot时间内发送完,然后进入步骤9);
[0143] 8)节点把缺省数据记数变量inodata加1,并判断是否大于最大缺省值inodata-max,如果大于则进入步骤7),如果不大于则进入步骤9);
[0144] 9)进入WOR状态,开始准备簇间同步,接收到信标帧,则进入步骤10),[0145] 10)提取出信标帧的帧位号Nk和帧序号mj,并结合该节点的簇间编号Ni进行以下判断。在Nk不为N的情况中进行如下判断,当Ni=N-Nk+1时,该节点是同步后的发送节点,进入步骤11),当Ni=N-Nk时,该节点是同步后的接收节点,进入步骤13),当Ni为其他值时,该节点不是本轮信标帧所针对的节点,进入步骤15)。当Nk为N时,该节点为1号簇首节点,进入步骤16);
[0146] 11)该节点为同步后的发送节点,休眠(m-mj)tbeacon时间后进入步骤12);
[0147] 12)该节点进入发送模式,发送完数据后进入步骤17);
[0148] 13)该节点是同步后的接收节点,休眠(m-mj)tbeacon时间后进入步骤14);
[0149] 14)节点接入接收模式,持续(N-NK+1)tcluster接收时间后进入步骤9),准备下一轮的簇间同步;
[0150] 15)该节点不是本轮簇间同步针对的节点,直接休眠m*tbeacon+(N-NK+1)tcluster时间后进入步骤9);
[0151] 16)该节点为1号簇首节点,等信标帧发送完后,节点发送数据给汇聚节点,延时trest=(m-mj)tbeacon时间后进入步骤17);
[0152] 17)节点进入休眠模式,开始睡眠周期的计时,计时到达了则进入步骤2),没有则继续等待。
[0153] 4、系统丢包率测试
[0154] 在实验环境中,取六个传感器节点(其中两个簇首节点,四个簇内节点)和一个汇聚节点,组成一个无线传感器网络,按照本文设计的通信协议,传感器节点在接收到信标帧之后依次传送固定的数据帧,四个簇内节点传送的数据帧内容都不相同,便于汇聚节点分开统计。该测试做三组实验,每组发送3000次。三组数据结果如表1所示。
[0155] 表1多点通信测试结果
[0156]
[0157] 通过述实验可以看出,多点通信中的丢包率比单点通信的要高出不少,但仍然能保持在1%以下,可以满足实际应用的标准。多点通信丢包率上升的原因有很多,可能是组网同步时出现了轻微的误差,从而影响了个别节点发送数据的时间,也有可能是节点用于计时的时钟受到干扰从而影响了准确性。
[0158] 以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。