上海第二工业大学 本科课程机器人3(论文)
上图是一个简单的ZigBee网络示意图。其中黑色节点为Coordinator,红色节点为Router,白色节点为End-Device。
协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络ID(也称之为PAN ID,即Personal Area Network ID),随后启动整个网络。协调器也可以用来协助建立网络中安全层和应用层的绑定(bindings)。 注意,协调器的角色主要涉及网络的启动和配置。一旦这些都完成后,协调器的工作就像一个路由器(或者消失go away)。由于ZigBee网络本身的分布特性,因此接下来整个网络的操作就不在依赖协调器是否存在。
路由器的功能主要是:允许其他设备加入网络,多跳路由和协助它自己的由电池供电的儿子终端设备的通讯。通常,路由器希望是一直处于活动状态,因此它必须使用主电源供电。但是当使用树群这种网络模式时,允许路由间隔一定的周期操作一次,这样就可以使用电池给其供电。
终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一个电池供电设备。通常,终端设备对存储空间(特别是RAM的需要)比较小。
Zigbee网络支持三种拓扑结构:星型、树型和网状型结构。在星型拓扑结构中,所有的终端设备只和协调器之间进行通信。树型网络由一个协调器和多个星型结构连接而成,设备除了能与自己的父节点或子节点相互通信外,其他只能通过网络中的树型路由完成通信。网状型网络是在树型网络的基础上实现的。与树型网络不同的是,它允许网络中所有具有路由功能的节点相互通信,由路由器中的路由表完成路由查询过程。
2.3 Z-Stack协议栈介绍
TI公司的协议栈Z-Stack符合ZigBee2006规范,功能强大,协议栈底层已实现,对于简单的应用,开发者只需要在应用层开发即可。Z-Stack还可通过ZigBee网络无线下载节点更新程序,具备定位感知功能等等。下面对Z-Stack的功能进行介绍。 2.3.1寻址 (1)地址类型
ZigBee设备有两种类型的地址。一种是64位IEEE地址,即MAC地址,另
6
上海第二工业大学 本科课程机器人3(论文)
一种是16位网络地址。
64位IEEE地址是一个全球唯一的地址,并且一经分配就将跟随设备一生。它通常由制造商或者被安装时设置。这些地址由IEEE组织来维护和分配。 16位网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送数据。 (2)网络地址分配
ZigBee使用分布式寻址方案来分配网络地址。这个方案保证在整个网络中所有分配出去的网络地址是唯一的。这一点是必须的,因为这样才能保证一个具体的数据包能够发送到它指定的设备,而不出现混乱。同时,这个寻址算法本身的分布特性保证设备只能与他的父辈设备通讯来接收一个唯一的网络地址。不需要整个网络范围内通讯的地址分配,这有助于网络的可测量性。
在每个路由加入网络之前,寻址方案需要知道和配置一些参数。这些参数是
MAX_DEPTH,MAX_ROUTERS和MAX_CHILDREN。这些参数是栈配置的一部分,ZigBee2007协议栈已经规定了这些参数的值:MAX_DEPTH = 5,MAX_ROUTERS = 6和MAX_CHILDREN = 20。
MAX_DEPTH决定了网络的最大深度。协调器(Coordinator)位于深度0,它的
儿子位于深度1,他的儿子的的儿子位于深度2,以此类推。MAX_DEPTH参数限制了网络在物理上的长度。
MAX_CHILDREN决定了一个路由(Router)或者一个协调器节点可以处理的儿
子节点的最大个数。
MAX_ROUTER决定了一个路由(Router)或者一个协调器(Coordinator)节点可以处理的具有路由功能的儿子节点的最大个数。这个参数是MAX_CHILDREN的一个子集,终端节点使用(MAX_CHILDREN – MAX_ROUTER)剩下的地址空间。在Z-Stack中网络结构和网络深度可在nwk_globals.c文件中设置,默认设置为HOME_CONTROLS。
7
上海第二工业大学 本科课程机器人3(论文)
图2.3 网络深度设置程序图
(3)Z-Stack寻址
应用程序通常使用AF_DataRequest()函数向一个ZigBee网络中的设备发送数据。数据包要发送给一个zAddrType_t(在ZComDef.h中定义)类型的目标设备。
图2.4 zAddrType_t结构图
注意,除了网路地址之外,还要指定地址模式参数。目的地址模式可以设置为以下几个值:
图2.5 afAddrMode_t结构图
8
上海第二工业大学 本科课程机器人3(论文)
因为在Zigbee中,数据包可以点对点传送(Point To Point),组播传送(Flash)或者广播传送,所以必须有地址模式参数。 Point To Point传送数据包只发送给一个设备,
图2.6 点播程序图
Flash传送数据包则要传送给一组设备,
图2.7 组播程序图
Periodic广播数据包则要发送给整个网络的所有节点,
图2.8 广播程序图
2.3.2绑定
绑定是指一个节点与另外一个或几个节点间建立地址映射的一种寻址方式。在节点建立绑定之后,发送数据的时候并不需要知道目的地址是什么,应用支持子层会根据绑定ID查询它的绑定表来决定目的地址,然后把信息发送给目的节点。
在Z-Stack中,绑定是通过如下函数实现的:
dstAddr.addrMode=Addr16Bit;//首先设置寻址模式为网络地址寻址 dstAddr.addr.shortAddr=0x0000;//目的地址为协调器的网络地址 ZDP_EndDeviceBindReq();//发起绑定请求 2.3.3路由协议
ZigBee执行基于用于AODV专用网络的路由协议。简化后用于传感器网络。ZigBee路由协议有助于网络环境有能力支持移动节点,连接失败和数据包丢失。
当路由器从他自身的应用程序或者别的设备那里收到一个单点发送的数据包,则网络层(NWK Layer)根据一下程序将它继续传递下去。如果目标节点是它
9
上海第二工业大学 本科课程机器人3(论文)
相邻路由器中的一个,则数据包直接被传送给目标设备。否则,路由器将要检索它的路由表中与所要传送的数据包的目标地址相符合的记录。如果存在与目标地址相符合的活动路由记录,则数据包将被发送到存储在记录中的下一级地址中去。如果没有发现任何相关的路由记录,则路由器发起路径寻找,数据包存储在缓冲区中知道路径寻找结束。
ZigBee终端节点不执行任何路由功能。终端节点要向任何一个设备传送数据包,它只需简单的将数据向上发送给它的父亲设备,由它的父亲设备以它自己的名义执行路由。同样的,任何一个设备要给终端节点发送数据,发起路由寻找,终端节的的父亲节点都已它的名义来回应。
注意ZigBee地址分配方案使得对于任何一个目标设备,根据它的地址都可以得到一条路径。在Z-Stack中,如果万一正常的路径寻找过程不能启动的话(通常由于缺少路由表空间),那么Z-Stack拥有自动回退机制。
此外,在Z-Stack中,执行的路由已经优化了路由表记录。通常,每一个目标设备都需要一条路由表记录。但是,通过把一定父亲节点记录与其子所有子结点的记录合并,这样既可以优化路径也可以不丧失任何功能。 2.3.4数据发送函数
在Z-Stack中,如果给一个节点发送消息,可以用AF_DataRequest( )函数:
图2.9 AF_DataRequest()函数
2.3.5网络组建过程
协调器首先从DEFAULT_CHANLIST列表中选择使用的信道,如果ZDAPP_CONFIG_PAN_ID的值不等于0xFFFF则选取ZDAPP_CONFIG_PAN_ID为
10