刘礼建,张广明,唐桂忠,王祥华
(南京工业大学自动化与电气工程学院 南京210009)
随着电子科学和网络通信技术的不断发展以及人民生活水平的提高,人们对居住环境的要求也越来越高,智能家居逐渐成为未来家居生活的发展方向。目前实现智能家居控制的网络技术总体上可以归为3大类:总线技术、无线技术及电力载波技术[1]。总线技术需要重新布线,对于已经装修好的家庭来说重新布线不仅麻烦而且成本较高;电力载波技术由于电力线存在本身固有的脉冲干扰,容易造成信号传输不稳定;ZigBee无线技术具有复杂度低、成本低、功耗低、延迟短、网络容量大和安全性高等诸多优点,适合用于组建智能家居系统的家庭网络。
ZigBee协议是基于标准的7层开放式系统互连(OSI)模型,802.15.4-2006标准定义了物理层(PHY)和介质接入控制子层(MAC);ZigBee联盟提供网络层(NWK)与应用层(APL)的框架构建。802.15.4标准定义了3种设备类型,分为协调器、路由器和终端设备,并且支持星型、树簇型、网状型3种网络拓扑结构。协调器负责建立网络,并为接入网络的每个设备以分布式方式分配一个惟一的16位网络地址,通过树形路由协议和AODVjr路由协议转发数据。
该网络以家庭为单位构建,采用树簇型网络拓扑结构,如图1所示。每个家庭由一个协调器(树形结构的根节点0)建立ZigBee网络,路由器和终端设备向协调器请求加入网络,协调器接受请求则发送允许加入信号,并以分布式方式为其分配一个全网惟一的16位网络地址。
由于协调器和路由器需转发的数据量大,能量消耗快,所以协调器、路由器和终端节点在能量供应上有所区别。协调器和路由器由市电和AC/DC模块对其供电;终端节点转发的数据量小,大部分时间处于休眠状态,能量消耗少,由电池和DC/DC模块对其供电。
ZigBee通信协议帧结构由数据模式、目标地址、数据长度、数据信息、校验和组成,格式如表1所示。
数据模式占用1 byte;目标地址占用2 byte,表明数据发送的地址,即协调器分配的16位网络地址;数据长度占用1 byte,指示数据信息里数据的字节数;数据信息是所有发送的数据,占用字节依发送的数据量而定;校验和占用1 byte,采用逐位异或的方式对帧结构里的数据进行校验[2]。
表1 ZigBee通信协议帧结构
由于在智能家居中,传输的数据信息主要是“三表”数据、用于家电控制的控制信号等,所以将数据信息的结构再次划分为节点号、功能编码、原始数据。节点号是数据最终到达的目的地址 (与帧结构里的目标地址不同的是,帧结构目标地址可能是数据中转过程中的中转节点的地址);功能编码是控制器要求终端节点需要执行哪种功能的功能代号,每种功能都对应惟一的编码;原始数据是传输的实际数据。
对于树簇型网络拓扑结构的网络地址分配采用分布式方式,使网络中的所有节点分配到的网络地址都是惟一的。在该网络拓扑结构中,逻辑树中相连的两个节点形成父子关系,每个进入网络的节点的网络地址都由父节点分配。
设父节点最多可以连接的子节点个数为Cm,子节点最多可以连接的路由节点个数为Rm,父节点所能分配子区段的地址数为Cskip,网络的最大深度为Lm,当前网络深度为d,则:
若Cskip=0,则父节点不能再分配网络地址,不再允许其他节点加入该网络。ZigBee协议规定网络协调器的当前深度为0,网络地址为0。设当前父节点地址为A0,若加入的子节点是路由节点,则加入的第一个路由子节点的地址为A0+1,之后加入的路由子节点依次以Cskip为增量递增[3~4]。第Rn个路由节点网络地址计算如式(2):
若加入的子节点是终端设备,则按式(3)连续分配地址。设En为加入的终端设备,则:
根据上述地址分配方法可推导出当前网络深度为d,网络地址为A0的父节点可分配的地址范围为:AddRange=[A0,A0+Cskip×Rm+(Cm-Rm)]。Cm=4,Rm=4,Lm=3 的簇树形网络,其地址分配如图1所示,如该网络的节点22,当前网络深度为1,它可分配的地址范围为[22,42]。
ZigBee网络支持的路由算法主要有AODVjr算法[5]和Cluster-Tree 算 法[6]。
AODVjr是 Ad hoc按需距离矢量路由协议(AODV)的改进。当源节点要发送信息给目的节点时,首先查看自身的路由表是否有到目的节点的路由,若有则使用该路由直接转发数据。若没有则以洪泛方式向网络发出组播路由请求(route request,RREQ)包,每个收到RREQ的节点都维护着一条到达源节点的信息,同时帮助源节点广播寻找目的节点。当目的节点收到RREQ包后,向源节点以单播方式返回一条RREP包,源节点收到RREP包后通过比较路由代价,建立一条代价最小的路由。该算法可以找到到达目的节点的最优路由,但因为是向全网络洪泛广播RREQ包,大量消耗网络节点能量,可能使有些节点提前变成死亡节点,并且有较大的控制开销。
Cluster-Tree算法是根据目的节点的网络地址来计算下一跳的地址。假设节点地址为A,深度为d的节点要转发数据到目的地址D,根据式(4)判断目的节点是否是该节点的后裔节点,即:
若是后裔节点则根据式(5)计算下一跳N,N=D是终端子节点,其他为路由子节点;若不是后裔节点,则转发给其父节点[7]。该算法适合存储能力受限的节点,不需要路由发现过程,但容易造成业务量分配不均衡。
ZigBee网络节点被分成4种节点:协调器(coordinator)、有路由能力的路由节点(RN+)、没有路由能力的路由节点(RN-)、终端设备节点 (RFD)。RN-和RFD只能使用Cluster-Tree算法进行路由选择;coordinator和RN+可以使用AODVjr或Cluster-Tree算法进行路由选择。
AODVjr算法以洪泛方式广播RREQ包会产生过多的RREQ分组,而有些分组对找到最佳路径的贡献很小但却耗费了资源。如图1中,若22节点要发数据到65节点,由于65节点不是22节点的后裔节点,则22节点向其后裔节点发RREQ分组对找到65节点的最佳路径的贡献很小,但是却耗费了资源,加剧了22节点变成死亡节点的速度。
Cluster-Tree虽然不要维护路由表,可以减少控制开销和能量消耗,但它在选择路径时只考虑父子关系的节点,可能带来更大的路由开销。如图1中,若节点66要发数据到邻居节点28,通过Cluster-Tree父子关系转发要5跳,而将数据直接转发给邻居节点28只需1跳。
针对Cluster-Tree在路径选择时只考虑父子关系的节点,参考文献[6]和参考文献[8]介绍了利用邻居表来减少路由开销的方法,但没有提到如何选择邻居节点,也未考虑到节点的剩余能量。如果节点的剩余能量低于警戒值,继续使用该节点转发数据,很可能使该节点成为死亡节点,造成网络分割,影响网络通信效率,缩短网络寿命。
若两个节点在一跳范围内,则称为邻居节点,如图1中节点2与节点7、43、44之间是邻居节点关系。邻居表条目的信息如表2所示。
表2 邻居表条目信息
为邻居节点的网络地址;NodeType为节点的类型,0表示没有路由功能,1表示有路由功能;NodePower为邻居节点的当前剩余能量值。
[9]对节点最小剩余能量做了详细的描述,假设初始能量为P0,深度为d的节点,最小剩余能量Pmin的计算式如下:
t为网络运行时间;为特定系数,用于减缓Pmin减小的速度。从式(6)看出Pmin与时间t成反比,且时间越大,减缓的速度越慢,这符合网络节点能量的实际情况,开始节点能量充足,Pmin可以减缓得相对较快,当时间越长节点能量较小时,Pmin递减的幅度应该变小[9]。
改进算法为每个节点(除终端节点RFD外)建立一个邻居表,记录邻居节点的信息。对RFD和RN-节点使用Cluster-Tree算法和邻居表选择路由;对coordinator和RN+节点使用AODVjr算法,并对RREQ洪泛方向进行适当的控制。在上述路由选择过程中每个节点都判断自身的剩余能量值,当低于最小剩余能量时告知源节点在路由选择时避开该节点。具体算法如下。
(1)若是RFD节点发送数据,则直接转发给其父节点。
(2)若转发数据的节点不是RFD节点:① 首先检查目的节点是否是它本身,若不是则判断该节点能量P。如果P
(3)当RN-节点转发数据时:①用式(4)检查目的节点是否是该节点的后裔节点,若是后裔节点则按Cluster-Tree转发,并更新自身能量值,否则进入下一步;② 按|D-Ak|搜索邻居节点Ak中到达目的节点D最近的节点A,将数据帧转发给A,并更新自身能量值;③若A为目的节点,则数据帧传递完成,否则在A节点重新开始第(2)步。
(4)当RN+节点转发数据时:①检查目的节点是否是该节点的后裔节点,若是后裔节点则只向子节点发送RREQ包,否则进入下一步;②检查目的节点是否在其父节点或子节点的邻居表内,若在则只向父节点或子节点发送RREQ包,否则进入下一步;③按搜索邻居节点Ak中到达目的节点D最近的节点A,并给节点A发送RREQ包;④根据返回的RREP包建立路由,沿着路由转发数据,并更新自身能量值。
仿真采用Omnet++,网络覆盖面积为200 m×200 m,网络节点数目100个,数据传输率250 KB,数据包长度128 bit,节点初始能量 1 000 J,Cm=4,Rm=4,Lm=5,α=2。仿真实验结果如图2、图3所示。
在相同的网络拓扑结构下比较传统算法和改进算法的性能。由于AODVjr算法可以找到最优的路由(代价是耗费大量网络节点能量),所以在比较平均跳数时只和Cluster-Tree算法比较;同样的Cluster-Tree算法在网络能量消耗上较少(代价是难以找到最优路由),在死亡节点比较上只和AODVjr算法比较。
图2中用平均跳数 (平均跳数=所有数据包被转发的次数/接收到的个数)来表示路由开销。节点数目越多,网络结构越大,平均跳数也越大。由于传统的Cluster-Tree算法只考虑父子关系的节点,需要的跳数较多。改进算法将Cluster-Tree算法和AODVjr算法相结合并借助邻居表的帮助,平均跳数明显小于传统Cluster-Tree算法,且随节点数的增加平均跳数的增加幅度较小。
图3比较了改进算法和传统AODVjr算法的死亡节点数量。初始阶段节点能量充足,不会出现死亡节点,随着时间的增加,节点不断转发数据能量消耗很大,出现了死亡节点。由于改进算法考虑了节点最小剩余能量,其出现死亡节点的时间迟于传统AODVjr算法。同时改进算法避开了能量低的节点,选择能量高的节点转发数据,避免了节点过早死亡,均衡了网络负荷,最大化网络的生存时间。
本文介绍了智能家居中ZigBee网络构建过程中的通信协议和网络地址分配,并重点说明传统的路由算法在路由选择及能量控制上的不足。针对该不足,对传统算法进行改进,将AODVjr和Cluster-Tree算法相结合,引入邻居表,适当控制RREQ转发方向,并考虑节点最小剩余能量。仿真结果比较了传统算法和改进算法在路由选择过程中平均跳数和死亡节点数的不同,结果表明改进算法能够减少路由开销,延长节点的生存时间,均衡网络负荷。在以后的工作中,笔者将重点研究网络过程中多路由的动态选择,进一步优化ZigBee网络的整体性能。
参考文献
1 花铁森.智能家居系统核心技术探讨.智能建筑电气技术,2009,3(1):92~98
2 周游,方滨,王普.基于ZigBee技术的智能家居无线网络系统.电子技术应用,2005(9):37~40
3 Asano Y,ImaiH,Toyoda M,etal.Finding neighbor communities in the Web using an inter-site graph.IEICE Transactions on Information and Systems,2004(9):2 163~2 170
4 Flake G W,Lawrence S,Giles C L,et al.Self organization of the Web and identification of communities.IEEE Computer,2002,35(3):66~71
5 Qiu F,Wang J M,Leng J.Design and implementation of a wireless personal area network based on AODVjr routing.In:Proceeding of the IET International Conference on Wireless Mobile&Multimedia Networks,Beijing,China,2006
6 Kim T,Kim D,Park N,et al.Shortcut tree routing in ZigBee networks.In:Proceedings of the 2nd International Symposium on Wireless Pervasive Computing,San Juan,PR,USA,2007
7 戚剑超,魏臻.ZigBee树型路由算法的改进.合肥工业大学学报(自然科学版),2010,33(4):529~537
8 Qiu Wanzhi,Cheng Qi,Skafidas E.A hybrid routing protocol for wireless sensor networks.In:Proceedings of the 7th International Symposium on Communications and Information Technologies,Sydney,Australia,2007
9 班艳丽,柴乔林,王芳.改进的ZigBee网络路由算法.计算机工程与应用,2009,45(5):95~98