Z-Stack_开发指南

上传人:枫** 文档编号:458279794 上传时间:2022-08-12 格式:DOC 页数:17 大小:335KB
返回 下载 相关 举报
Z-Stack_开发指南_第1页
第1页 / 共17页
Z-Stack_开发指南_第2页
第2页 / 共17页
Z-Stack_开发指南_第3页
第3页 / 共17页
Z-Stack_开发指南_第4页
第4页 / 共17页
Z-Stack_开发指南_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《Z-Stack_开发指南》由会员分享,可在线阅读,更多相关《Z-Stack_开发指南(17页珍藏版)》请在金锄头文库上搜索。

1、2. ZigBee2.1 设备类型(Device Types)在ZigBee网络中存在三种逻辑设备类型:Coordinator(协调器),Router(路由器)和End-Device(终端设备)。ZigBee网络由一个Coordinator以及多个Router和多个End_Device组成。上图是一个简单的ZigBee网络示意图。其中黑色节点为Coordinator,红色节点为Router,白色节点为End-Device。2.1.1 Coordinator(协调器)协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络ID(也称之为PAN ID,即Personal Are

2、a Network ID),随后启动整个网络。协调器也可以用来协助建立网络中安全层和应用层的绑定(bindings)。注意,协调器的角色主要涉及网络的启动和配置。一旦这些都完成后,协调器的工作就像一个路由器(或者消失go away)。由于ZigBee网络本身的分布特性,因此接下来整个网络的操作就不在依赖协调器是否存在。2.1.2 Router(路由器)路由器的功能主要是:允许其他设备加入网络,多跳路由和协助它自己的由电池供电的儿子终端设备的通讯。通常,路由器希望是一直处于活动状态,因此它必须使用主电源供电。但是当使用树群这种网络模式时,允许路由间隔一定的周期操作一次,这样就可以使用电池给其供电

3、。2.1.3 End-Device(终端设备)终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一个电池供电设备。通常,终端设备对存储空间(特别是RAM的需要)比较小。注意:在Z-Stack 1.4.1中一个设备的类型通常在编译的时候通过编译选项(ZDO_COORDINATOR 和RTR_NWK)确定。所有的应用例子都提供独立的项目文件来编译每一种设备类型。2.2 栈配置(Stack Profile)栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置。ZigBee联盟定义了这些由栈配置组成的栈参数。网络中的所有设备必须遵循同样的栈配置。为了促进互用性这个目

4、标,ZigBee联盟为ZigBee2006规范定义了栈配置。所有遵循此栈配置的设备可以在其他开发商开发的遵循同样栈配置的网络中。3. 寻址(Addressing)3.1 地址类型(Address types)ZigBee设备有两种类型的地址。一种是64位IEEE地址,即MAC地址,另一种是16位网络地址。64位IEEE地址是一个全球唯一的地址,并且一经分配就将跟随设备一生。它通常由制造商或者被安装时设置。这些地址由IEEE组织来维护和分配。16位网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送数据。3.2 网络地址分配(Network address assig

5、nment)ZigBee使用分布式寻址方案来分配网络地址。这个方案保证在整个网络中所有分配出去的网络地址是唯一的。这一点是必须的,因为这样才能保证一个具体的数据包能够发送到它指定的设备,而不出现混乱。同时,这个寻址算法本身的分布特性保证设备只能与他的父辈设备通讯来接收一个唯一的网络地址。不需要整个网络范围内通讯的地址分配,这有助于网络的可测量性。在每个路由加入网络之前,寻址方案需要知道和配置一些参数。这些参数是MAX_DEPTH,MAX_ROUTERS和MAX_CHILDREN。这些参数是栈配置的一部分,ZigBee2006协议栈已经规定了这些参数的值:MAX_DEPTH = 5,MAX_RO

6、UTERS = 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)剩下的

7、地址空间。如果开发人员想改变这些值,则需要完成以下几个步骤:首先,你要保证赋给这些参数的新值要合法。即整个地址空间不能超过,这就限制了参数能够设置的最大值。可以使用projectsZStacktools文件夹下的CSkip.xls文件来确认这些值是否合法。当在表格中输入了要修改的数据后,如果数据不合法的话就会出现错误信息。当选择了合法的数据后,开发人员还要保证不再使用标准的栈配置,取而代之的是使用网络自定义栈配置(例如:在nwk_globals.h文件中将STACK_PROFILE_ID改为NETWORK_SPECIFIC),然后设置nwk_globals.h文件中的MAX_DEPTH参数为一

8、个适当的值。此外,还必须设置nwk_globals.c文件中的Cskipchldrn数组和CskipRtrs数组。这些数组的值由MAX_CHILDREN和MAX_ROUTER构成。3.3 Z-Stack寻址(Addressing in z-stack)应用程序通常使用AF_DataRequest()函数向一个ZigBee网络中的设备发送数据。数据包要发送给一个zAddrType_t(在ZComDef.h中定义)类型的目标设备。typedef structunionuint16 shortAddr; addr;afAddrMode_t addrMode;byte endPoint; afAddr

9、Type_t;注意,除了网路地址之外,还要指定地址模式参数。目的地址模式可以设置为以下几个值:typedef enumafAddrNotPresent = AddrNotPresent,afAddr16Bit = Addr16Bit,afAddrGroup = AddrGroup,afAddrBroadcast = AddrBroadcast afAddrMode_t;因为在Zigbee中,数据包可以单点传送(unicast),多点传送(multicast)或者广播传送,所以必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传送给一组设备,而广播数据包则要发送给整个网络

10、的所有节点。这个将在下面详细解释。3.3.1 单点传送(Unicast)Uicast是标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设备。将afAddrMode设置为Addr16Bit并且在数据包中携带目标设备地址。3.3.2 间接传送(Indirect)当应用程序不清楚数据包的最终目标的时候使用间接传送。将模式设置为AddrNotPresent并且不指定目标地址。取而代之的是,从发送设备的栈的绑定表中查找到的目标。这种特点称之为源绑定(在后面的绑定一节详细介绍)。当数据向下发送到栈中,从绑定表中查找并且使用该目标地址。这样,数据包将被处理成为一个标准的单点传送数据包。如果在绑定表中

11、找到多个设备,则向每个设备都发送一个数据包的拷贝。上一个版本的ZigBee(ZigBee04),有一个选项可以讲绑定表保存在协调器(Coordinator)当中。发送设备将数据包发送给协调器,协调器查找它栈中的绑定表,然后将数据发送给最终的目标设备。这个附加的特性叫做协调器绑定(Coordinator Binding)。3.3.3 广播传送(broadcast)当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式。地址模式设置为AddrBroadcast。目标地址可以设置为下面广播地址的一种:NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)数据包将被传送到网

12、络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时(NWK_INDIRECT_MSG_TIMEOUT在f8wConifg.cfg中)。NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)数据包将被传送到网络上的所有的打开接收的空闲设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)数据包发送给所有的路由器,包括协调器。3.3.4 组寻址(Group Addressing)当应用程序需要将数据包发送给网络上的一组设备时,使用该

13、模式。地址模式设置为afAddrGroup并且addr.shortAddr设置为组ID。在使用这个功能之前,必须在网络中定义组。(参见Z-stack API文档中的aps_AddGroup()函数)。注意组可以用来关联间接寻址。再绑定表中找到的目标地址可能是是单点传送或者是一个组地址。另外,广播发送可以看做是一个组寻址的特例。下面的代码是一个设备怎样加入到一个ID为1的组当中:aps_Group_t group;/ Assign yourself to group 1group.ID = 0x0001;group.name0 = 0; / This could be a human reada

14、ble stringaps_AddGroup( SAMPLEAPP_ENDPOINT, &group );3.4 重要设备地址(Important Device Adresses)应用程序可能需要知道它的设备地址和父亲地址。使用下面的函数获取设备地址(在ZStack API中定义):l NLME_GetShortAddr()返回本设备的16位网络地址l NLME_GetExtAddr() 返回本设备的64位扩展地址使用下面的函数获取该设备的父亲设备的地址:l NLME_GetCoordShortAddr()返回本设备的父亲设备的16位网络地址l NLME_GetCoordExtAddr() 返

15、回本设备的父亲设备的64位扩展地址4. 绑定(Binding)绑定是一种两个(或者多个)应用设备之间信息流的控制机制。在ZigBee2006发布版本中,它被称为资源绑定,所有的设备都必须执行绑定机制。绑定允许应用程序发送一个数据包而不需要知道目标地址。APS层从它的绑定表中确定目标地址,然后将数据继续向目标应用或者目标组发送。注意:在ZigBee的1.0版本中,绑定表是保存在协调器(Coordinator当中)。现在所有的绑定记录都保存在发送信息的设备当中。4.1 建立绑定表(Building a Binding Table)有三种方法可以建立一个绑定表:l Zigbee Device Object Bind Request一个启动工具可以告诉设备创建一个绑定记录l Zigbee Device Object End Device Bind Request两个设备可以告诉协调器它们想要建立一个绑定表记录。协调器来协调并在两个设备中创建绑定表记录。l Device Application一个设备上的应用程序建立或者管理一个绑定表4.1.1 ZigBee Device Object Binding Request任何一个设备都可以发送一个ZDO信息给网络中的另一个设备,用来建立绑定表。称之为援助绑定,它可以为一个发送设备创建一

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号