[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] 实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。