Zigbee建网和入网过程实验(2)

2019-06-02 12:46

应命令,则此节点将成功的和协调器建立连接并可以开始通信。若协调器资源不够,待加入的节点将重新发送请求信息,直到入网成功。

4) 发送数据请求命令。如果协调器在响应时间内同意节点加入,那么将产生关联响应命令

(Associate reponse command)并先存储这个命令。当响应时间过后,节点发送数据请求命令(Data request command)给协调器,协调器收到后立即回复ACK,然后将存储的关联响应命令发给节点。如果在响应时间到后,协议器还没有决定是否同意节点加入,那么节点将试图从协议器的信标帧中提取关联响应命令,成功的话就可以入网成功,否则重新发送请求信息直到入网成功。

5) 回复。节点收到关联响应命令后,立即向协调器回复一个确认帧(ACK),以确认接收到

连接响应命令,此时节点将保存协调器的短地址和扩展地址,并且节点的MLME向上层发送连接确认原语,通告关联加入成功的信息。

上面的完成以后,等待加入网络的节点应该已经收到协调器的加入请求回复。如果该请求通过,该节点将成功和协调器建立连接并获得网络地址和其他节点进行通信。在上述连接过程中,请求建立连接的节点的上层生成连接请求原语发送给节点的MAC层。MAC层的MLME接收到这个原语后,先向物理层发送和原语更新phyCurrentchannel和macPANID的值,然后生成一个含有建立连接请求的命令帧发送给指定的协调器。节点在发送命令帧时使用CSMA-CA(载波侦听多址接入—冲突避免)。如图6-2-4所示为节点连接过程原语时序图。

节点上层MLME-SCAN.request选择合适的PANMLME-SCAN.confirmMLME-ASSOCIATE.request执行CSMAPD-DATA.request连接请求Association.requesrtPD-DATA.confirmt确认AcknowledgementPD-DATA.indicationT_AcWaitPD-DATA.confirmtT_Response Wait TimeMLME-ASSOCIATE-indicationPD-DATA.indicationPD-DATA.requestT_AS_SCAN执行主动扫描节点MAC节点PHYBeacon requestBeacon ...协调器PHY...协调器MAC协调器上层...Send ACKMLME-ASSOCIATE-reponse执行CSMAPD-DATA.requestPD-DATA.confirmt...PD-DATA.indicationPD-DATA.indicationMLME-ASSOCIATE.confirmtPD-DATA.requestPD-DATA.confirmt连接响应Association.response数据请求Data requestStore Associate responsePD-DATA.indicationPD-DATA.requestPD-DATA.confirmt执行CSMAPD-DATA.requestPD-DATA.confirmtSend ACK确认Acknowledgement确认AcknowledgementPD-DATA.indicationT_AcWaitSend ACK 图6-2-4 节点与协调器连接原语时序图

5 节点通过已有节点加入网络

当靠近协调器的FFD节点和协调器关联成功后,处于这个网络范围内的其他节点就以这些FFD节点作为父节点加入网络了,具体加入网络的方式有两种:

①通过关联(association)方式,就是待加入节点发起加入网络;也就是子设备用MAC连接程序来加入网络

②直接方式(direct)方式,子设备直接同一个预先所指定的父设备连接来加入网络。

其中关联方式是ZigBee网络中新节点加入网络的主要途径

对于一个节点来说,只有没有加入网络的才能进行加入网络。在这些节点中,有些是曾经加入过网络,但是却与父节点失去联系(这样的节点称为孤儿节点),而有些则是新节点。当是孤儿节点时,在它的相邻表中存有原父节点的信息,于是它可以直接给源父节点发送加入网络的请求信息。如果父节点有能量同意它加入,于是直接告知它的以前被分配的网络地址,它便入网成功;如果此时它原来的父节点的网络中,子节点数已经达到最大值,也就是说网络地址已经分配满,父节点便无法批准它加入,它只能以新节点身份重新寻找并加入网络。

而对于新节点来说,它首先会在预先设定的一个或多个信道上通过主动或被动扫描周围它可找到的网络,寻找有能批准自己加入网络的父节点,并把可以找到的所有父节点的资料存入自己的相邻表。存入相邻表的父节点的资料包括:ZigBee协议的版本、堆栈的规范、PANID和可以加入的信息。在相邻表中所有的父节点中选择一个发送请求。如果发送的请求被批准,那么父节点同时会被分配给它一个16为的网络地址,此时入网成功,子节点可以开始通信。如果请求失败,那么重新查找相邻表,继续发送请求信息,直到加入网络或者相邻表中没有了合适的父节点。 3)实验步骤

第一步:打开协调器,蓝灯先亮,然后黄灯闪烁几下,既而一直保持亮。 第二步:打开路由器,蓝灯先亮,然后黄灯闪烁几下,既而一直保持亮。 第三步:按动一下协调器的上键,这时路由器的绿灯闪烁四下。 第四步:按动一下路由器的上键,这时协调器的绿灯闪烁四下。 4)程序清单

清单6.2.1 管理协调器的孩子节点,并向这些节点发送关联消息

/****************************************************************************** * 函数名 ZDP_NwkAddrReq

* 描述 构建并发送一个网络地址请求帧。利用广播的方式,利用IEEE地址来寻求

网络地址。

* 参数 IEEEAddress:获取的设备IEEE地址;ReqType :两种获取方式。一个是单

一获取(0x0001),一个是扩展获取(0x0002)。StartIndex :开始索引,默认为0;SecurityEnable:安全选项;

* 返回值 afStatus_t

*****************************************************************************/ afStatus_t ZDP_NwkAddrReq( uint8 *IEEEAddress, byte ReqType,

byte StartIndex, byte SecurityEnable ) {

uint8 *pBuf = ZDP_TmpBuf;

byte len = Z_EXTADDR_LEN + 1 + 1; // IEEEAddress + ReqType + StartIndex. zAddrType_t dstAddr;

(void)SecurityEnable; // Intentionally unreferenced parameter

if ( osal_ExtAddrEqual( saveExtAddr, IEEEAddress ) == FALSE ) {

dstAddr.addrMode = AddrBroadcast;

dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVRXON; } else {

dstAddr.addrMode = Addr16Bit;

dstAddr.addr.shortAddr = ZDAppNwkAddr.addr.shortAddr; }

pBuf = osal_cpyExtAddr( pBuf, IEEEAddress );

*pBuf++ = ReqType; *pBuf++ = StartIndex;

return fillAndSend( &ZDP_TransID, &dstAddr, NWK_addr_req, len ); }

6.2.3 实验结果

我们可以通过协议分析仪分析ZigBee数据包来描述实验的结果。以下是利用协议分析仪分析建立ZigBee网络,节点加入及发送数据的实验过程。

图5 协调器上电之后的广播包1

图6协调器上电之后的广播包2

如图5所示,第一行,协调器首先上电,完成网络的初始化,选择一个合适的信道,并且为自己的网络选择一个PAN_ID(0x2053),然后向周围发生beacon request的包。从第二行开始此协调器对信道进行扫描(主动扫描),然后不停的发送广播包(0xFFFF)。广播的内容可以根据APS Cluster确定。此时的APS Cluster为0x0001。它是的意思是将节点要加入网络的IEEE地址发送给协调器。具体实现方式如程序清单6.2.1所示,其中ReqType参数的请求方式类型有两种,一个为单一获取(0x0001),一个为扩展获取(0x0002)。这里的单一获取方式0x0001标识码即为APS Cluster Id。APS Profile Id为不同的应用所定义的不同Profile,这里的sampleApp为0x0F08,可以在SampleApp.h文件中找到。APS Dest. Endpoint

为设备的端口号,这里为0x14。关于端口号前面已经讲过,这里就不再陈述。

在第四行,协调器发送了一个网络层的命令帧,该帧的目的地址为0xFFFC,表示只是所有的协调器和路由器才能接收到该消息。该命令帧是路由请求命令,它允许发送该命令的设备请求其无线覆盖范围的其他设备针对一个特定的目的设备执行路由搜索,在网络中建立状态信息以使得消息能够更方便快捷地传递到目的设备。由于目前没有打开路由设备,所以Count为0,List_status_list也为空。每个路由请求命令帧间隔15秒,利用#define NWK_LINK_STATUS_PERIOD 15 进行的设置,该宏定义在nwk_globals.h文件中。接下来协调器广播3条地址请求信息,广播一条路由请求命令帧,直到新的节点加入。

图7 路由节点0x2B38加入网络

将一个路由节点上电,这样路由节点会首先向周围的环境做一个信道能量扫描选择一个能量比较合适的信道进行网络搜寻。这里需要注意的是信道能量是有一个等级的,在Z-Stack里面会有一个门限值,当这个能量低于这个门限会被认为没有网络。当信道选择好之后,路由节点也会周期性的向周围发送Beacon request的包来寻求协调器的回复,如图7所示。

当协调器接收到路由节点的Beacon request包之后会发送一个包含自己IEEE MAC地址的超帧。主要目的是为了将自己的MAC地址(64位)交给路由器,以便后续的通信。

路由器接收到超帧之后,将协调器的IEEE地址保存起来,并利用这个地址向协调器发生一个Association request的包,这个包目的是寻求加入网络。收到协调器的MAC层的确认帧之后,紧接着发生一个Data Request的包来寻求协调器给其分配的16位网络短地址。 上述工作做完网络就已经建立一大半了,当协调器接收到Data Request之后,首先经过NWK层的算法为其分配一个唯一的网络短地址,然后向路由器发送一个包含其网络短地址的包,这个包是通过MAC地址发送的。因为MAC地址和网络地址都可以进行通信。

当路由器接收到这个包之后,配置自己的短地址为0x2B38,然后就可以利用这个短地址和协调器进行应用层的通信了,走到这步就表示路由器就已经成功加入到网络了。

图8 节点的网络连接状态

1个路由器加入网络之后,如图8所示,第一行,协调器的Nwk Link Status发生了变化,Count变为了1,连接的节点ADDR=0x2B38,路由器的Nwk Link Status也发生了变化,Count变为了1,连接的节点ADDR=0x0000。所以我们通过抓包分析器,可以大致的分析到网络的基本参数。

图9 路由节点0x51EB的加入

路由节点2的加入和路由节点1的加入方式是一样的,这里就不再陈述。加入成功时候,如图9所示,我们可以看到,NWK Link Status发生了变化,每个节点的连接表都发生了变化。第一行是路由节点(0x2B38)的连接表,第二行是协调器(0x000)的连接表,第8行是路由节点(0x51EB)的连接表。


Zigbee建网和入网过程实验(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中考数学总复习培优专题精选经典题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: