概述
在一个zigbee协调器设备建立网络后,路由器设备或者终端设备(end device),可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联(association)方式,就是待加入的设备发起加入网络,具体实现方式后面讨论,另一中是直接(direct)方式,就是待加入的设备具体加入到那个设备下,作为该设备的子节点,由以前网络中的设备,想待加入的设备作为其子设备决定。 下面重点讨论第一种方式,也是实际中用的最多的方式 通过关联方式加入一个网络: 加入一个设备,是两个设备的事,即子设备和待定父设备 对于子设备,首先子设备调用NLME-NETWORK-DISCOVERY.request 原语,设定待扫描的信道,以及每个信道扫描的时间,网络层收到这个原语,将要求MAC层执行被动或主动扫描。 具体发送到设备外的是一个becon request 帧,当在这个信道中的设备收到该帧,将会发送becon帧,这是子设备通过BEACON-NOTIFY.indication 原语,告知该设备的MAC层,该becon帧包含了发送该帧的地址信息,以及是否允许其他设备以其子节点的方式加入。待加入的设备,在网络层,将检查该becon帧 协议 ID是否是zigbee ID 。如果不是,将 忽略;如果是,该设备将复制收到每个becon帧的相关信息到其关联表中(neighbor table)。 一旦MAC层完成了扫描,将发送 MLME-SCAN.confirm 原语,告知网络层,网络层将发送NLME-NETWORK-DISCOVERY.confirm 原语,告知应用层。 应用层收到该原语,应用层将根据情况,要么重新要求扫描,或者从关联表中选择所发现的网络加入。调用NLME-JOIN.request 原语,原语中各个参数的设置参看协议(可以在本站下载栏找到)非常容易。如果在关联表中找不到合适的准父节点,将调用原语告知应用层,如果由多个设备可以满足要求,将选择到协调器节点深度最低的设备,如果有几个设备的深度相同,且都是最小深度,将从中随机选择一个。 一旦潜在的父节点确定,网络层将调用MLME-ASSOCIATE.request 原语到MAC层。具体设置参看协议相关部分(213页),连接状态将通过MLME-ASSOCIATE.confirm 原语反馈。 如果试图加入不成功,网络层将收到MAC层通过MLME-ASSOCIATE.confirm告知的加入失败,如果收到的是潜在父节点拒绝该设备加入,这时候,网络层将会在关联表中,把该潜在父节点的相应部分,潜在父节点位(potential parent bit)置为零,确保网络层,不再给这个设备二次发送加入请求。 如果一次加入没成功,将选择另一个潜在的父节点加入,指导找到一个合适的设备加入或者所有的设备都不适合。 如果加入成功,网络层收到的MLME-ASSOCIATE.confirm 原语,将含有该设备可用的16 唯一的逻辑地址, 网络层将在关联表中设置与其父节点的关系,同时,这个父节点也会在其关联表中加入这个新设备。 如果是以路由器(router)形式成功加入网络,该设备的应用层将发送NLME-STAT_ROUTER. request 原语,网络层将发送MLME-STAT.request 原语到MAC层。收到了MLME-START.confirm 原语,网络层 将发送 NLME-START-ROUTER.confirm 原语,含有同样的状态值。 对于父节点设备: 只有协调器或路由器,可以加入设备,进行该操作,首先从MAC层开始,MAC接收到一帧(ASSOCIATE)数据 ,通过MLME_ASSOCIATE.indication原语传到网罗层,潜在的父节点收到这帧数据,首先判断该设备是否已经存在其关联表中,如果找到,NLME将获取相应的16位网络地址,并发送 association response 到MAC层,如果没有找到,将分配一个在这个网络中唯一的地址给待加入的设备,如果潜在父节点已经用完了地址分配,NLME将中止,通过MLME-ASSOCIATE.reponse 原语,告知该设备,不能接收子设备了,在多跳网络中,其他的设备还可以接收。 如果设备加入得到许可,这时候,将在关联表中创建一个表项,作为其子节点,并通过MLME-ASSOCIATE.reponse 原语,告知该设备,已经成功加入网络。 | |
zigbee设备加入网络(方式二 直接加入)
直接方式加入网络(directly)
下面讲述如何一个子设备,在其潜在父节点预先指派的情况下加入网络.
以这种方式加入网络的过程中,首先由父节点发起,下面根据建网的过程来讲述
父节点:
首先调用NLME-DIRECT-JOIN.requese 原语,在目的地址部分设置成要求加入网络设备的IEEE地址,当这个过程初始化后,在父节点的网络层要判断该子设备是否已经加入网络,如果在其关联表中找到了这个设备,将终止操作,并通过NLME-DIRECT-JOIN.confirm原语告诉应用层,设备已经加入网络,如果没有找到匹配的,在网络层,如果可能 ,将分配一个在这个 网络中唯一的16位网络地址,将在其关联表中为这个子节点创建一个表项,如果不可以,NLME-DIRECT-JOIN.confirm原语告诉应用层表已满,如果可以,NLME-DIRECT-JOIN.confirm原语告诉应用层创建成功.注意,这个过程父节点设备是没有向空中发射信息,只是在自己设备内处理.但是,在子设备要求加入时,以孤节点方式实现,因为该过程和孤节点方式重新加入实现方式一样.
子节点:
子节点通过孤节点方式加入
首先子设备调用NLME-JOIN.request原语,并在RejoinNetwork项设置为真,然后网络层要求MAC执行孤节点扫描,对设置的信道,该步由MLME-SCAN.request初始化,通过MLME-SCAN.comfirm原语返回结果.
如果扫描成功,网络层将通过调用NLME-JOIN.confirm 原语告之应用层,加入成功.
如果扫描没有成功,网络层将终止操作,并告之应用层,没有找到网络,该步通过调用NLME-JOIN.confirm 原语实现.
子节点要求加入后,父节点将做如下处理
在MAC层收到MLME-ORPHAN.indication原语,只有协调器或路由器将做进一步处理.
当这一过程完成后,网络层将首先查找看其子设备是否为孤节点,如果有,将比较IEEE地址,如果匹配,将获取相应的16位网络地址,通过MAC层MLME-ORPHAN.reponse原语告之子设备.
最后
以上就是懦弱月亮为你收集整理的ZIgbee设备加入网络过程(方式一 关联加入)的全部内容,希望文章能够帮你解决ZIgbee设备加入网络过程(方式一 关联加入)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复