技术领域
[0001] 本
发明属于无线传感网络领域,特别涉及了一种基于分时休眠的
无线传感器网络通信方法。
背景技术
[0002] 目前,关于ZigBee网络节能的一大研究方向是休眠,大多数文献都采用了终端
节点周期性休眠而路由节点和汇聚节点持续工作的方式。这是因为汇聚节点是网络的中心,一直采用外接电源供电方式,无需对其进行休眠,而路由节点充当着网络的
中继器,时刻负责网络中信息的转发,若其休眠,则会丢失部分需要转发的数据,因此一般情况下路由节点也是长期处于不休眠的工作状态下。终端节点则可周期性被唤醒,将采集到的数据发送出去,发送结束后等待一段时间,若无其它收发命令则再次进入休眠模式,以此降低能耗。
[0003] 但在实际使用中,大部分路由节点由于实际环境条件限制,一般情况下都采用
电池供电,此时可根据实际需求对路由节点进行适当地休眠,以降低能耗。ZigBee的MAC层通过CSMA/CA机制竞争选择信道,当终端节点较多时,同一时刻很有可能出现多个节点有数据发送,互相竞争信道容易造成信道阻塞,部分节点为获取空闲信道,不断地侦听,浪费了大量的
能量,也有可能造成数据的丢失,从而引发网络故障。
发明内容
[0004] 为了解决上述背景技术提出的技术问题,本发明旨在提供一种基于分时休眠的无线传感器网络通信方法,通过分时休眠机制,减少数据时延,降低网络能耗,延长网络生命周期。
[0005] 为了实现上述技术目的,本发明的技术方案为:
[0006] 一种基于分时休眠的无线传感器网络通信方法,其特征在于,包括以下步骤:
[0007] (1)汇聚节点建立网络;
[0008] (2)各路由节点依次加入网络,直到全部路由节点加入网络;
[0009] (3)终端节点依次
申请入网,并得到路由节点分配的网络短地址,直到全部终端节点加入网络;
[0010] (4)汇聚节点向路由节点、终端节点发出休眠信标
帧;
[0011] (5)各终端节点接收到休眠信标帧后,相隔Δt时间依次进入休眠模式,直到全部终端节点休眠;
[0012] (6)待全部终端节点休眠后,各路由节点随即依次进入休眠模式,直到全部路由节点休眠;
[0013] (7)汇聚节点向路由节点、终端节点发出唤醒信标帧;
[0014] (8)各路由节点首先依次被唤醒;
[0015] (9)全部路由节点被唤醒后,各终端节点随即相隔Δt时间依次被唤醒,进行
数据采集和发送的任务,并在任务完成后再次进入休眠模式;
[0016] (10)待全部终端节点任务完成后,路由节点接收并转发终端节点发送过来的数据;
[0017] (11)路由节点接收到来自汇聚节点的休眠信标帧后,再次进入休眠模式;
[0018] (12)不断重复步骤(4)-(11)。
[0019] 进一步地,终端节点的工作过程如下:
[0020] (101)终端节点初始化,发送入网
请求命令帧Becon request;
[0021] (102)收到路由节点回复的允许入网命令帧Association confirm,并获取16位网络短地址;
[0022] (103)等待汇聚节点的休眠信标帧;
[0023] (104)收到休眠信标帧,回复确认帧ACK至汇聚节点;
[0024] (105)终端节点进入休眠模式,休眠周期为T;
[0025] (106)休眠周期T结束,终端节点唤醒,退出低功耗模式;
[0026] (107)读取传感器的数值,打包处理数据;
[0027] (108)侦听信道是否空闲,若空闲进入步骤(109),否则继续重复步骤(109);
[0028] (109)发送RTS至路由节点,寻求建立连接;
[0029] (110)若收到CTS回复,发送数据帧至路由节点,由路由节点将数据帧转发至汇聚节点;若没收到CTS回复,则重复步骤(109);
[0030] (111)等待tm的时间后,若收到路由节点的应答帧,则说明数据发送完毕,跳转步骤(112);若没收到应答帧,则重复发送数据;
[0031] (112)等待tn的时间后,若收到来自汇聚节点的确认帧ACK,则跳转步骤(113);若没有收到ACK则跳转步骤(108),重新发送数据;
[0032] (113)数据发送时间结束,无论数据是否成功发送,立即进入步骤(105)。
[0033] 进一步地,路由节点包含两种不同的工作方式:面向终端节点收发数据和面向路由节点转发数据;路由节点收发数据的过程如下:
[0034] (201)路由节点初始化,发送入网请求命令帧Becon request;
[0035] (202)收到来自汇聚节点或深度较低的路由节点回复的Association confirm,并获取16位网络短地址;
[0036] (203)监听信道,处理各节点入网申请并分配16位网络短地址;
[0037] (204)若收到汇聚节点广播的休眠信标帧,回复确认帧ACK,进入步骤(205),否则跳转步骤(203);
[0038] (205)读取休眠信标帧中休眠周期,进入休眠模式;
[0039] (206)休眠周期结束,节点唤醒,并发送此刻时间t1至汇聚节点;
[0040] (207)监听信道,若收到来自终端节点的RTS,则回复CTS,进入步骤(208),否则重复步骤(207);
[0041] (208)接收终端节点发送来的数据帧,回复应答帧;
[0042] (209)查看数据帧中的目的节点的地址,寻找路由表中是否有到目的节点的路径,若存在路径,则发送数据,跳转步骤(211);若路由表中不存在相应路径或路径失效,则进入步骤(210);
[0043] (210)发起RREQ路由请求,寻找路由路径,若收到目的节点的RREP路由回复,则按路由路径转发数据帧,否则重复步骤(210);
[0044] (211)等待汇聚节点回复的确认帧ACK,将其转发至终端节点;
[0045] (212)若收到来自汇聚节点的休眠信标帧,则跳转步骤(205);若未收到休眠信标帧,则跳转步骤(207);
[0046] 路由节点转发数据的过程如下:
[0047] (301)路由节点初始化,发送入网请求命令帧Becon request;
[0048] (302)收到来自汇聚节点或深度较低的路由节点回复的Association confirm,并获取16位网络短地址;
[0049] (303)监听信道,处理各节点入网申请并分配16位网络短地址;
[0050] (304)若收到汇聚节点广播的休眠信标帧,回复确认帧ACK,进入步骤(305),否则跳转步骤(303);
[0051] (305)读取休眠信标帧中休眠周期,进入休眠模式;
[0052] (306)休眠周期结束,节点唤醒,并发送此刻时间至汇聚节点;
[0053] (307)监听信道,若有数据转发进入步骤(308);若有RREQ控制分组转发跳转步骤(310);否则重复步骤(307);
[0054] (308)读取数据帧中的目的地址,将数据转发至目的节点;
[0055] (309)对比自身剩余能量与能量
阈值,若剩余能量低于设定能量阈值,则广播告知所有经过该路由节点路径的源节点,跳转步骤(315);
[0056] (310)判断是否第一次收到该RREQ,若是则进入步骤(311),若不是则进入步骤(312);
[0057] (311)更新路由发现表,跳转步骤(313);
[0058] (312)若该RREQ分组中路由代价小于路由发现表中已存在的路由代价,则跳转步骤(311),否则丢弃该RREQ分组,跳转步骤(315);
[0059] (313)对比自身剩余能量与能量阈值,若剩余能量低于设定能量阈值,则将RREQ分组中Count值加1并延迟Td时间;
[0060] (314)更新RREQ控制分组并转发;
[0061] (315)是否收到休眠信标帧,若是则转入步骤(305),若否则转入步骤(307)。
[0062] 进一步地,汇聚节点的工作过程如下:
[0063] (401)汇聚节点初始化,信道扫描,选取空闲的信道,
选定PAN标识符,网络建立成功;
[0064] (402)收到各路由节点入网请求,分配16位网络地址;
[0065] (403)收到各终端节点入网信息,为第一个入网的终端节点设置编号为1,后续终端节点以此类推;
[0066] (404)距离最后一个终端节点入网后tq时间内仍未有新节点的加入,则开始向各终端节点发送休眠信标帧,休眠时间设为T;
[0067] (405)首先发送休眠信标帧至1号终端节点,若收到终端节点的ACK帧,则隔Δt的时间再次发送休眠信标帧至下一终端节点;若没收到则ACK帧,则重复步骤(405);
[0068] (406)发送休眠信标帧至最后一个终端节点并收到ACK帧后,立刻广播休眠信标帧至所有路由节点,休眠时间设为TS1;
[0069] (407)若没有收到全部路由节点的ACK帧,则持续广播,直至全部收到为止;
[0070] (408)监听信道,记录第一个路由节点醒来的时刻t1;
[0071] (409)接收路由节点传来的信息,若为数据帧,则回复确认ACK,并跳转步骤(412),若为RREQ分组,则等待一段时间tp,进入步骤(410);
[0072] (410)时间tp过后,若收到多组来自同一目的地址的RREQ分组,则比较各组路由代价,选取路由代价最低的路径,进入步骤(411),若只收到一组来自同一目的地址的RREQ分组,则直接进入步骤(411);
[0073] (411)回复RREP至源节点;
[0074] (412)距离最后一个终端节点发来的数据后mΔt的时间内仍未收到新数据,m为网络的最大跳数,则记录此时刻为t2,进入步骤(413),否则跳转步骤(409);
[0075] (413)广播休眠信标帧至各路由节点,休眠时间为TS2,跳转步骤(408)。
[0076] 进一步地,在步骤(406)中,休眠时间TS1=T-(n-1)*Δt-Δt2,其中T为终端节点休眠周期,n为终端节点个数,Δt为终端节点分时休眠间隔,Δt2为路由节点先于终端节点唤醒的时间。
[0077] 进一步地,在步骤(413)中,休眠时间TS2=T-(t2-t1)-Δt2,其中T为终端节点休眠周期,Δt2为路由节点先于终端节点唤醒的时间,t1为第一个路由节点的唤醒时刻,t2为终端节点全部传输完成的时刻。
[0078] 采用上述技术方案带来的有益效果:
[0079] 本发明综合考虑了实时性要求不高、也无需各节点同时将数据传送至汇聚节点的监测系统的特点,各终端节点分时休眠,在不同时刻被唤醒并传输数据,以此避免不必要的数据冲突现象,并且当终端节点全部休眠之后,路由节点也进入休眠模式,减少不必要的侦听,以减少数据时延、降低网络能耗、延长了网络的生命周期。
附图说明
[0080] 图1是为本发明的节点初始入网及分时休眠方式图;
[0081] 图2是本发明的系统工作时序图;
[0083] 图4是本发明的路由节点收发数据工作流程图;
[0084] 图5是本发明的的路由节点转发数据工作流程图;
[0085] 图6是本发明汇聚节点工作流程图;
[0086] 图7是实验测试节点分布示意图。
具体实施方式
[0087] 以下将结合附图,对本发明的技术方案进行详细说明。
[0088] 1、节点加入网络
[0089] 如图1所示为本发明各节点初始入网及分时休眠图。路由节点先于各终端节点加入ZigBee网络,终端节点先后在不同时间点申请入网,各路由节点为相应的终端节点分配16位网络短地址,并汇报至汇聚节点,汇聚节点标记最先入网的终端节点为1号节点,后续入网的终端节点编号以此类推。当汇聚节点不再收到新入网节点信息时,等待一段时间tq,若仍未有新节点加入,则判定各节点入网完成。
[0090] 2、数据传输
[0091] 如图1和2所示为本发明的系统工作时序图。系统周期T主要划分为终端节点工作时期T1和终端节点休眠时期T2两大部分。
[0092] 网络组网完成后,汇聚节点以间隔Δt时间的
频率发送休眠信标帧至各终端节点,终端节点收到休眠信标帧后回复确认帧ACK并立即进入休眠模式,休眠周期为T2。若汇聚节点未收到某终端节点的ACK,则在的时间内再次发送信标帧,直至收到为止,若时间已到达仍未收到该节点的ACK,则放弃该节点,继续发送休眠信标帧至下一节点。
[0093] 当发送休眠信标帧至所有终端节点后(即(n-1)*Δt的时间后),汇聚节点广播休眠信标帧至各路由节点,路由节点收到信标帧后立即进入休眠模式,休眠周期为TS1:
[0094] TS1=T2-(n-1)*Δt-Δt2
[0095] 其中,n为终端节点个数,T2为终端节点休眠周期,Δt2为路由节点先于终端节点唤醒的时间,Δt为各终端节点分时休眠间隔。
[0096] 采用非时隙CSMA/CA机制竞争入网,退避周期为当节点侦测到空闲信道时,随机退让一段时间后发送数据,以免各节点同时发送数据而产生的冲突。由于网络无需数据同时收发,因此可以使得各终端节点分时发送数据,保证每个的时间内只有一个终端节点工作,从而减少不必要的信道竞争,减少监听能耗,并且当节点监听到信道空闲时,无需退避周期,直接发送数据,使得传输更加高效、便捷。
[0097] 同时,路由节点先于终端节点Δt2被唤醒,唤醒后路由节点发送命令至汇聚节点,告知汇聚节点路由节点唤醒时刻,并由汇聚节点记录第一个路由节点的唤醒时刻t1。路由节点提前Δt2的时间被唤醒以保证全部路由节点都进入工作模式。之后,各终端节点相隔Δt的时间分时唤醒并进入工作模式,但在实际使用过程中,由于
硬件等因素,节点内部时钟可能会出现漂移现象,虽然在一开始的数据传输中,时间漂移带来的影响可以忽略不计,但随着时间的积累,很有可能会出现终端节点先于路由节点醒来的情况。若终端节点唤醒后发现自己先于路由节点醒来,则下次休眠周期为T+tk,其中tk为补偿时间,目的是略微延长终端节点的休眠时长,补偿时钟漂移,若下个周期该终端节点后于路由节点醒来,则休眠周期恢复为T,否则休眠周期仍为T+tk。
[0098] 终端节点分时唤醒的时间间隔为Δt,其为终端节点采集、发送数据的工作时间(Δt的时间内可以至少重复发送数据3次)。在Δt的时间内,终端节点完成数据采集及发送的任务,若数据发送成功,则会收到来自汇聚节点发回的确认帧ACK,若没有收到ACK,则重复发送,若节点的工作时间达到Δt时,无论数据是否成功发送,终端节点立即进入休眠模式。此时下一个节点醒来,进行数据的采集和发送,由于每次信道中一般只有一个终端节点发送数据,因此当采用CSMA/CA机制监听到信道空闲时,立即发送数据,无需退避一定的时间,从而提高节点的传输效率。当汇聚节点最后一次收到终端节点的数据后mΔt的时间内仍没有收到新的终端节点传来的数据,则认为终端节点全部传输完成,记录此时的实际为t2,并立即广播休眠信标帧至所有路由节点,路由节点收到休眠信标帧后进入休眠模式,休眠时长为TS2:
[0099] TS2=T2-(t2-t1)-Δt2
[0100] 其中,T2为终端节点休眠周期,Δt2为路由节点先于终端节点唤醒的时间,t1为第一个路由节点的唤醒时刻,t2为终端节点全部传输完成的时刻。
[0101] 路由节点并没有采用固定的休眠时间,而是每次休眠前都需收到汇聚节点发来的命令才进入休眠模式,这是因为网络节点部署可能发生变化,当网络节点部署结构不变的情况下,路由节点的休眠时间是固定的;当网络节点部署结构发生了变化,即有旧节点的退出和新节点的加入,此时路由节点的休眠时间则会发生变化,具体休眠时间由汇聚节点决定。由于各终端节点间隔的时间相继工作,所以当汇聚节点在长达mΔt的时间内仍未收到新数据时,则可判定网络数据传输完毕,此时路由节点收到汇聚节点发送的休眠信标帧,进入休眠模式。
[0102] 在ZigBee网络运行中,若有新的终端节点需要加入网络,管理人员需要观察路由节点的工作状态,可通过路由节点的工作指示灯判断其是否处于工作状态,只有在路由节点处于工作状态的情况下,才能允许终端节点上电入网,否则无法成功入网。当汇聚节点收到新终端节点的入网信息后,立即回复休眠信标帧,终端节点收到休眠信标帧后立即进入休眠模式,休眠时长为T。
[0103] 3、通信协议
[0104] 通讯协议分别对终端节点、路由节点和汇聚节点分别描述。
[0105] 如图3为本发明的终端节点工作流程图。具体步骤如下:
[0106] (1)终端节点初始化,发送入网请求命令帧Becon request;
[0107] (2)收到路由节点回复的允许入网命令帧Association confirm,并获取16位网络短地址;
[0108] (3)等待汇聚节点的休眠信标帧;
[0109] (4)收到休眠信标帧,回复确认帧ACK至汇聚节点;
[0110] (5)终端节点进入休眠模式LPM3,休眠周期为T;
[0111] (6)休眠周期T结束,终端节点唤醒,退出低功耗模式;
[0112] (7)读取传感器SHT11的数值,打包处理数据;
[0113] (8)侦听信道是否空闲,若空闲进入步骤(9),否则继续重复步骤(8);
[0114] (9)发送RTS(Requset to send)至路由节点,寻求建立连接;
[0115] (10)若收到CTS(Clear to send)回复,发送数据帧至路由节点,由路由节点将数据帧转发至汇聚节点;若没收到CTS指令,则重复步骤(9);
[0116] (11)等待tm的时间后,若收到路由节点的应答帧,则说明数据发送完毕,跳转步骤(12);若没收到应答帧,则重复发送数据;
[0117] (12)等待tn的时间后,若收到来自汇聚节点的确认帧ACK,则跳转步骤(13);若没有收到ACK则跳转步骤(8),重新发送数据;
[0118] (13)时间到,无论数据是否成功发送,立即进入步骤(5)。
[0119] 路由节点具有两种不同的工作方式,一种是面向终端节点收发数据的,另一种是面向路由节点转发数据的。
[0120] 如图4为本发明的路由节点收发数据工作流程图。具体步骤如下:
[0121] (1)路由节点初始化,发送入网请求命令帧Becon request;
[0122] (2)收到来自汇聚节点或深度较低的路由节点回复的Association confirm,并获取16位网络短地址;
[0123] (3)监听信道,处理各节点入网申请并分配16位网络短地址;
[0124] (4)若收到汇聚节点广播的休眠信标帧,回复确认帧ACK,进入步骤(5),否则跳转步骤(3);
[0125] (5)读取休眠信标帧中休眠周期,进入休眠模式LPM3;
[0126] (6)休眠周期结束,节点唤醒,并发送此刻时间t1至汇聚节点;
[0127] (7)监听信道,若收到来自终端节点的RTS,则回复CTS,进入步骤(8),否则重复步骤(7);
[0128] (8)接收终端节点发送来的数据帧,回复应答帧;
[0129] (9)查看数据帧中的目的节点的地址,寻找路由表中是否有到目的节点的路径,若存在路径,则发送数据,跳转步骤(11);若路由表中不存在相应路径或路径失效,则进入步骤(10);
[0130] (10)发起RREQ路由发现,寻找路由路径,若收到目的节点的RREP,则按路由路径转发数据帧,否则重复步骤(10);
[0131] (11)等待汇聚节点回复的确认帧ACK,将其转发至终端节点;
[0132] (12)若收到来自汇聚节点的休眠信标帧,则跳转步骤(5);若未收到休眠指令,则跳转步骤(7)。
[0133] 如图5为本发明的路由节点转发数据工作流程图。具体步骤如下:
[0134] (1)路由节点初始化,发送入网请求命令帧Becon request;
[0135] (2)收到来自汇聚节点或深度较低的路由节点回复的Association confirm,并获取16位网络短地址;
[0136] (3)监听信道,处理各节点入网申请并分配16位网络短地址;
[0137] (4)若收到汇聚节点广播的休眠信标帧,回复确认帧ACK,进入步骤(5),否则跳转步骤(3);
[0138] (5)读取休眠信标帧中休眠周期,进入休眠模式LPM3;
[0139] (6)休眠周期结束,节点唤醒,并发送此刻时间至汇聚节点;
[0140] (7)监听信道,若有数据转发进入步骤(8);若有RREQ控制分组转发跳转步骤(10);否则重复步骤(7);
[0141] (8)读取数据帧中的目的地址,将数据转发至目的节点;
[0142] (9)对比自身剩余能量与能量阈值,若剩余能量低于设定能量阈值,则广播告知所有经过该路由节点路径的源节点,跳转步骤(15);
[0143] (10)判断是否第一次收到该RREQ,若是则进入步骤(11),若不是则进入步骤(12);
[0144] (11)更新路由发现表,跳转步骤(13);
[0145] (12)若该RREQ分组中路由代价小于路由发现表中已存在路径代价,则跳转步骤(11),否则丢弃该RREQ分组,跳转步骤(15);
[0146] (13)对比自身剩余能量与能量阈值,若剩余能量低于设定能量阈值,则将RREQ分组中Count值加1并延迟Td的时间;
[0147] (14)更新RREQ控制分组并转发;
[0148] (15)是否收到休眠信标帧,若是则转入步骤(5),若否则转入步骤(7)。
[0149] 如图6为本发明的汇聚节点工作流程图,具体步骤如下:
[0150] (1)汇聚节点初始化,信道扫描,选取空闲的信道,选定PAN标识符,网络建立成功;
[0151] (2)收到各路由节点入网请求,分配16位网络地址;
[0152] (3)收到各终端节点入网信息,为第一个入网的终端节点设置编号为1,后续终端节点以此类推;
[0153] (4)距离最后一个终端节点入网后tq时间内仍未有新节点的加入,则开始向各终端节点发送休眠信标帧,休眠时间设为T;
[0154] (5)首先发送休眠信标帧至1号终端节点,若收到终端节点的ACK帧,则隔Δt的时间再次发送休眠信标帧至下一终端节点;若没收到则ACK帧,则重复步骤(5);
[0155] (6)发送休眠信标帧至最后一个终端节点并收到ACK帧后,立刻广播休眠信标帧至所有路由节点,休眠时间设为TS1;
[0156] (7)若没有收到全部路由节点的ACK帧,则持续广播,直至全部收到为止;
[0157] (8)监听信道,记录第一个路由节点醒来的时刻t1;
[0158] (9)接收路由节点传来的信息,若为数据帧,则回复确认ACK,并跳转步骤(12),若为RREQ分组,则等待一段时间tp,进入步骤(10);
[0159] (10)时间tp过后,若收到多组来自同一目的地址的RREQ分组,则比较各组路由代价,选取路由代价最低的路径,进入步骤(11),若只收到一组来自同一目的地址的RREQ分组,则直接进入步骤(11);
[0160] (11)回复RREP至源节点;
[0161] (12)距离最后一个终端节点发来的数据后mΔt的时间内仍未收到新数据,则记录此时刻为t2,进入步骤(13),否则跳转步骤(9);
[0162] (13)广播休眠信标帧至各路由节点,休眠时间为TS2,跳转步骤(8)。
[0163] 4、实验
[0164] ZigBee网络寿命的长短受多种因素影响,如电源电池容量、节点工作模式、数据传输量、路由协议等。实验采用
电压为3.6V、容量为2600mAh的锂电池为终端节点和路由节点供电,终端节点每隔60s采集一次数据并发送,其余时间进入低功耗休眠模式,终端节点分时休眠间隔为3s,路由节点休眠时间大约为30s。实验共采用10个终端节点,6个路由节点和1个汇聚节点和1个管理节点。
[0165] 如图7所示是本发明的实验测试节点分布示意图。各路由节点之间实际距离在40~70米之间。本实验测试目的是验证分时休眠策略和优化后的路由
算法是否可以节约网络能量、均衡网络能耗,整体延长网络寿命,因此本实验主要测量各路由节点的工作时长。实验结果如下表1所示:
[0166] 表1
[0167]
[0168] 在本实验测试中,当网络中最先出现能耗殆尽的路由节点时,设此时的天数为网络寿命周期,因为当ZigBee网络中出现“死亡”节点时,会有部分节点成为“孤立”节点,网络不再完整,会出现部分信息丢失情况。
[0169] 从表1中可以看出,在本发明的通信方法,各路由节点寿命有显著提高,网络整体寿命也得到了提高,说明分时休眠策略成功延长了网络寿命。并且网络各节点寿命更加接近,说明网络能耗得到了均衡。
[0170]
实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案
基础上所做的任何改动,均落入本发明保护范围之内。