成都市炜之峰科技有限公司是一家专业嵌入式系统开发、单片机开发、电子电路设计、开发和销售的高科技企业。产品主要应用在安防、工业控制、医疗电子、机械电子、消费性电子、电力电子以及家电控制方面,我们有丰富的开发经验,为客户提供低廉的成本、高性能的产品设计方案。公司拥有一批的高素质研发,凭着多年的经验、优秀的品质、具有竞争力的价格、准时快捷的交货期,赢的广大客户的肯定。欢迎来电咨询,联系方式:QQ:2117735231, 电话:18040300267,18227649137 网址:www.wzfhost.com

转:ZigBee无线协议学习笔记(2) -续

上一篇 / 下一篇  2012-08-06 14:51:07 / 个人分类:u-boot

2.1.2.      ZigBee设备对象终端绑定请求

这个机制是在指定的时间周期(timeout period)内,通过按下选定设备上的按钮或者类似的动作来绑定。协调器在指定的时间周期内,搜集终端设备的绑定请求信息,然后以配置ID(Profile ID)和群ID(Cluster ID)协议为基础,创建一个绑定表记录作为结果。默认的设备绑定时间(APS_DEFAULT_MAXBINDING_TIME)16秒钟(nwk_globals.h中定义)。但是将它添加到f8wConfig.cfg中,则可以更改。

在“用户指南”中的应用程序就是一个终端设备绑定的例子(在每个设备上按下RIGHT按键)

应该注意到,所有的例程都有处理关键事件的函数(例如:在TransmitApp.c中的TransmitApp_HandleKeys()函数)。调用ZDApp_SendEndDeviceBindReq()(ZDApp.c)。这个函数搜集所有终端节点请求,再调用ZDP_EndDeviceBindReq()函数将这些信息发送给协调器。

协调器调用函数ZDP_IncomingData()ZDProfile.c中】函数接收这些信息,然后再调用ZDApp_ProcessEndDeviceBindReq ()ZDObject.c中】函数分析这些信息,最后调用ZDApp_EndDeviceBindReqCBZDApp.c中】函数,这个函数再调用ZDO_MatchEndDeviceBind()ZDObject.c中】函数来处理这个请求。

当收到两个匹配的终端设备绑定请求,协调器在请求设备中启动创建源绑定记录的进程。假设在ZDO终端设备中发现了匹配的请求,协调器将执行下面的步骤:

发送一个解除绑定请求给第一个设备。这个终端设备锁定进程,这样解除绑定被首先发送来去掉一个已经存在的绑定记录。

等待ZDO解除绑定的响应,如果响应的状态是ZDP_NO_ENTRY,则发送一个ZDO绑定请求在源设备中创建一个绑定记录。如果状态是ZDP_SUCCESS,则继续前进到第一个设备的群ID

等待ZDO绑定响应,如果收到了,则继续前进到第一个设备的下一个群ID

当第一个设备完成后,用同样的方法处理第二个设备。

当第二个设备也完成之后,发送ZDO 终端设备绑定请求消息给两个设备。

2.1.3.      设备程序绑定管理

另一种进入设备绑定记录的方式是应用自己管理绑定表。这就意味着应用程序需要通过调用下面的绑定管理函数在本地进入并且删除绑定记录:

bindAddEntry()——在绑定表中增加一个记录

bindRemoveEntry()——从绑定表中删除一个记录

bindRomoveClusterIdFromList()——从一个存在的绑定表记录中删除一个群ID

bindAddClusterIdToList()——向一个已经存在的绑定记录中增加一个群ID

bindRemoveDev()——删除所有地址引用的记录

bindRemoveSrcDev()——删除所有源地址引用的记录

bindUpdateAddr()——将记录更新为另一个地址

bindFindExisting()——查找一个绑定表记录

bindIsClusterIdInList()——在表记录中检查一个已经存在的群ID

bindNumBoundTo()——拥有相同地址(源或者目的)的记录的个数

bindNumEntries()——表中记录的个数

bindCapacity()——最多允许的记录个数

bindWriteNV()——NV中更新表

2.2.    配置源绑定

为了在设备中能使源绑定在f8wConfig.cfg文件中包含REFLECTOR编译标志。同时在f8wConfig.cfg文件中查看配置项目NWK_MAX_BINDING_ENTRIESMAX_BINDING_CLUSTER_IDSNWK_MAX_BINDING_ENTRIES是限制绑定表中的记录的最大个数,MAX_BINDING_CLUSTER_IDS是每个绑定记录的群ID的最大个数。

绑定表在静态RAM(未分配),因此绑定表中记录的个数,每条记录中群ID的个数都实际影响着使用RAM的数量。每一条绑定记录是8字节多(MAX_BINDING_CLUSTER_IDS * 2字节)。除了绑定表使用的静态RAM的数量,绑定配置项目也影响地址管理器中的记录的个数。

3.      路由

3.1.    路由概述

路由对于应用层来说是完全透明的。应用程序只需简单的向下发送去往任何设备的数据到栈中,栈会负责寻找路径。这种方法,应用程序不知道操作是在一个多跳的网络当中的。

路由还能够自愈ZigBee网络,如果某个无线连接断开了,路由功能又能自动寻找一条新的路径避开那个断开的网络连接。这就极大的提高了网络的可靠性,同时也是ZigBee网络的一个关键特性。

3.2.    路由协议

ZigBee执行基于用于AODV专用网络的路由协议。简化后用于传感器网络。ZigBee路由协议有助于网络环境有能力支持移动节点,连接失败和数据包丢失。

当路由器从他自身的应用程序或者别的设备那里收到一个单点发送的数据包,则网络层(NWK Layer)根据以下程序将它继续传递下去。如果目标节点是它相邻路由器中的一个,则数据包直接被传送给目标设备。否则,路由器将要检索它的路由表中与所要传送的数据包的目标地址相符合的记录。如果存在与目标地址相符合的活动路由记录,则数据包将被发送到存储在记录中的下一级地址中去。如果没有发现任何相关的路由记录,则路由器发起路径寻找,数据包存储在缓冲区中直到路径寻找结束。

ZigBee终端节点不执行任何路由功能。终端节点要向任何一个设备传送数据包,它只需简单的将数据向上发送给它的父亲设备,由它的父亲设备以它自己的名义执行路由。同样的,任何一个设备要给终端节点发送数据,发起路由寻找,终端节点的父亲节点都以它的名义来回应。

注意ZigBee地址分配方案使得对于任何一个目标设备,根据它的地址都可以得到一条路径。在Z-Stack中,如果万一正常的路径寻找过程不能启动的话(通常由于缺少路由表空间),那么Z-Stack拥有自动回退机制。

此外,在Z-Stack中,执行的路由已经优化了路由表记录。通常,每一个目标设备都需要一条路由表记录。但是,通过把一定父亲节点记录与其所有子结点的记录合并,这样既可以优化路径也可以不丧失任何功能。

ZigBee路由器,包括协调器执行下面的路由函数:(i)路径发现和选择(ii)路径保持维护(iii)路径期满。

3.2.1.      路径的发现和选择

路径发现是网络设备凭借网络相互协作发现和建立路径的一个过程。路由发现可以由任意一个路由设备发起,并且对于某个特定的目标设备一直执行。路径发现机制寻找源地址和目标地址之间的所有路径,并且试图选择可能的最好的路径。

路径选择就是选择出可能的最小成本的路径。每一个结点通常持有跟它所有邻接点的“连接成本(link costs)”。通常,连接成本的典型函数是接收到的信号的强度。沿着路径,求出所有连接的连接成本总和,便可以得到整个路径的“路径成本”。路由算法试图寻找到拥有最小路径成本的路径。

路径通过一系列的请求和回复数据包被发现。源设备通过向它的所有邻接节点广播一个路由请求数据包,来请求一个目标地址的路径。当一个节点接收到RREQ数据包,它依次转发RREQ数据包。但是在转发之前,它要加上最新的连接成本,然后更新RREQ数据包中的成本值。这样,沿着所有它通过的连接,RREQ数据包携带着连接成本的总和。这个过程一直持续到RREQ数据包到达目标设备。通过不同的路由器,许多RREQ副本都将到达目标设备。目标设备选择最好的RREQ数据包,然后发回一个路径答复数据包(a Route Reply)RREP给源设备。

RREP数据包是一个单点发送数据包,它沿着中间节点的相反路径传送直到它到达原来发送请求的节点为止。

一旦一条路径被创建,数据包就可以发送了。当一个结点与它的下一级相邻节点失去了连接(当它发送数据时,没有收到MAC ACK),该节点向所有等待接收它的RREQ数据包的节点发送一个RERR数据包,将它的路径设为无效。各个结点根据收到的数据包RREQRREP或者RERR来更新它的路由表。

3.2.2.      路径保持维护

网状网提供路径维护和网络自愈功能。中间节点沿着连接跟踪传送失败,如果一个连接被认定是坏链,那么上游节点将针对所有使用这条连接的路径启动路径修复。节点发起重新发现直到下一次数据包到达该节点,标志路径修复完成。如果不能够启动路径发现或者由于某种原因失败了,节点则向数据包的源节点发送一个路径错误包(RERR),它将负责启动新路径的发现。这两种方法,路径都自动重建。

3.2.3.      路径期满

路由表为已经建立连接路径的节点维护路径记录。如果在一定的时间周期内,没有数据通过沿着这条路径发送,这条路径将被表示为期满。期满的路径一直保留到它所占用的空间要被使用为止。这样,路径在绝对不使用之前不会被删除掉的。在配置文件f8wConfig.cfg文件中配置自动路径期满时间。设置ROUTE_EXPIRY_TIME为期满时间,单位为秒。如果设置为0,则表示关闭自动期满功能。

3.3.    表存储

路由功能需要路由器保持维护一些表格。

3.3.1.      路由表

每一个路由器包括协调器都包含一个路由表。设备在路由表中保存数据包与路由所需的信息。每一条路由表记录都包含有目的地址,下一级节点和连接状态。所有的数据包都通过相邻的一级节点发送到目的地址。同样,为了回收路由表空间,可以终止路由表中的那些已经无用的路径记录。

路由表的容量表明一个设备路由表拥有一个自由路由表记录或者说它已经有一个与目标地址相关的路由表记录。在文件“f8wConfig.cfg”中配置路由表的大小。将MAX_RTG_ENTRIES设置为表的大小(不能小于4)

3.3.2.      路径发现表

路由器设备致力于路径发现,保持维护路径发现表。这个表用来保存路径发现过程中的临时信息。这些记录只在路径发现操作期间存在。一旦某个记录到期,则它可以被另一个路径发现使用。这个值决定了在一个网络中,可以同时并发执行的路径发现的最大个数。这个可以在f8wConfig.cfg文件中配置MAX_ RREQ_ENTRIES

3.4.    路径设置快速参考

设置路由表大小

MAX_RTG_ENTRIES,这个值不能小于4 (f8wConfig.cfg文件)

设置路径期满时间

ROUTE_EXPIRY_TIME,单位秒。设置为零则关闭路径期满(f8wConfig.cfg文件)

设置路径发现表大小

MAX_RREQ_ENTRIES,网络中可以同时执行的路径发现操作的个数

4.      ZDO消息请求

ZDO设备对象模型通过发送消息请求和接收响应消息来发现设备和服务发现。下边的流程图解释了ZDO设备通过应用程序来发送IEEE地址请求和接收IEEE地址响应的消息过程。

下边的例子中,某一ZDO设备应用程序想知道有哪些新的设备加入网络,它将接收所有的ZDO设备通知消息。


TAG: 无线 学习

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar
博评网