实验10节点的建网与入网分析-精.

上传人:今*** 文档编号:105854342 上传时间:2019-10-13 格式:DOC 页数:22 大小:1.83MB
返回 下载 相关 举报
实验10节点的建网与入网分析-精._第1页
第1页 / 共22页
实验10节点的建网与入网分析-精._第2页
第2页 / 共22页
实验10节点的建网与入网分析-精._第3页
第3页 / 共22页
实验10节点的建网与入网分析-精._第4页
第4页 / 共22页
实验10节点的建网与入网分析-精._第5页
第5页 / 共22页
点击查看更多>>
资源描述

《实验10节点的建网与入网分析-精.》由会员分享,可在线阅读,更多相关《实验10节点的建网与入网分析-精.(22页珍藏版)》请在金锄头文库上搜索。

1、 ZigBee实验十节点的建网与入网分析10.1 实验简介在前面实验中,我们都是直接的去使用了一个网络,如果不是想对内核进行深入研究,完全可以不用去考虑TI协议栈的工作细节,只要懂得关键使用部分也一样可以对ZIGBEE进行开发。为了对协议栈有更深入的了解认识,本实验对“协调器”的建网以及“路由器”“终端”的入网,做个简单的逻辑性介绍。实验目的10.2 训练目的 10.2.1 通过本实验了解Z-STACK启动的过程中建网与入网的一个流程。10.3实验设备10.3.1 硬件:(1) ZIGBEE 调试底板2个:可调电阻ZigBee_DEBUG指示灯红外发射ZigBee复位ZigBee按键拨码开关节

2、点按键复位传感器接口1J-LINK接口传感器接口3传感器接口2电源开关电源图10-1 ZIGBEE调试底板(2) UART转接板与转接线各1个:UART转接线转接串口输入,连接到ZIGBEE调试底板转接串口输出,连接到电脑串口图10-2 UART转接板与转接线(3) ZIGBEE仿真器1个;10PIN下载接口电源(上)和状态指示灯USB接口图10-3 ZIGBEE仿真器(4) ZIGBEE模块2个;图10-4 ZIGBEE模块(5) 电源2个图10-5 电源(6) 串口延长线1根图10-6 串口延长线(7) 硬件连接图连接电脑串口ZigBee调试底板与串口转接板连接电源连接电脑USBZIGBE

3、E DeBug连接口图10-7 硬件连接10.3.2 软件(1) IAR Embedded Workbench for MCS-51 7.51A集成开发环境;(2) TI Z-STACK;(3) 仿真器驱动;(4) 串口调试助手。实验知识10.4 10.4.1 网络形成每个设备都有一组能被配置的参数(如被PC工具或者外部处理器配置),整个配置参数在代码中已经定义了默认值(在f8wconfig.cfg中)。在同一个网络中,所有设备的“网络细节”配置参数(如PANID,Channel等)应该被配置成一样的值。每个设备的“设备细节”配置参数(Coordinator,Router,Enddevice等

4、)可以配置为不同的值。但是,ZCD_NV_LOGICAL_TYPE必须被设置,确保:1、 有正确的一个设备作为协调器被配置;2、 所有电池供电的设备作为终端设备被配置。一旦这些工作都完成,这个设备就可以以任意方式启动。协调器设备将建立网络,其他设备将发现和加入到这个网络中。10.4.2 协调器格式化网络协调器将扫描DEFAULT_CHANLIST(在f8wConfig.cfg里定义)指定的通道,最后在其中之一上形成网络。设备的PANID值与ZDAPP_CONFIG_PAN_ID值设置有关(ZDAPP_CONFIG_PAN_ID这个参数在配置文件f8wConfig.cfg)。如果协调器的ZDAP

5、P_CONFIG_PAN_ID设置为OxFFFF,则协调器将产生一个随机的PANID,如果协调器的ZDAPP_CONFIG_PAN_ID设置为非0xFFFF值,则协调器根据自身的网络长地址(IEEE地址)或ZDAPP_CONFIG_PAN_ID值随机产生一个PANID,如果协调器的PANID的设置值为小于等于0x3FFF的有效值,协调器就会以这个特定的PANID值建立网络,但是,如果在默认的信道上已经有了该PANID值的网络存在,则协调器会继续搜寻其他的PANID,直到找到网络不冲突为止。当所有参数配置好后,可以调用下面函数来格式化网络(以下函数不开源):ZStatus_t NLME_Netw

6、orkFormationRequest( uint16 PanId,uint8* ExtendedPANID, uint32 ScanChannels,byte ScanDuration, byte BeaconOrder,byte SuperframeOrder, byte BatteryLifeExtension );但一般不直接使用上面的函数建立网络,而是使用ZDO_StartDevice()函数来启动一个设备10.4.3 路由器和终端设备加入网络路由器和终端设备启动后,将扫描DEFAULT_CHANLIST指定的频道,如果ZDAPP_CONFIG_PAN_ID没有被定义为0xFFFF,

7、则路由器将强制加入ZDAPP_CONFIG_PAN_ID定义的网络。发现一个网络将调用下面函数(以下函数不开源):ZStatus_t NLME_NetworkDiscoveryRequest( uint32 ScanChannels, byte scanDuration);该函数要求网络层去发现邻居路由器节点,并且应该在进行网络扫描之前调用,扫描的结果由ZStatus_t ZDO_NetworkDiscoveryConfirmCB()函数返回,其中:ScanChannels-准备扫描的信道号(信道号的范围1126,即仅对2.4GHz频段有效)。scanDuration-规定了在新的网络开始建立

8、之前,其他网络可以扫描每个信道的时间长度。发现网络存在后,就调用下面的函数加入网络。ZStatus_t NLME_OrphanJoinRequest( uint32 ScanChannels, byte ScanDuration )。该函数要求网络层以孤节点的形式加入网络。函数调用的结果由ZDO_JoinConfirmCB()函数返回。注意:如果协调器和路由器或终端设备都没定义ZDAPP_CONFIG_PAN_ID为0xFFFF,则两者之间不一样的定义可能会出现一些意外的结果;如果ZDAPP_CONFIG_PAN_ID被定义为一个正确的值(小于或等于0x3FFFF),那么协调器就只在指定的PA

9、N ID上试图建立网络。实验步骤10.510.5.1 在开始本实验的仿真前,参看配套源资料中“关于节点板串口使用的统一说明”,先按照本说明去配置好串口,波特率38400,以便往下实验能正常使用串口。图10-8 节点板串口使用的统一说明10.5.2 启动IAR Embedded Workbench,打开对应配套实验源码中“协调器”的SampleApp.eww工程:图10-9 工程文件图10-10 打开工程界面10.5.3 编译链接程序代码Make,这一步可以省略,因为进行DeBug前,IAR软件会先编译再下载代码到目标板上去仿真,但对于编译检查错误,这一步也很有必要。如果正确编译后文件右侧的红星

10、会消失。在Make之前,最好Clean一下,如下图所示:图10-11 编译链接代码文件红色星星编译后变没有了编译后生成图10-12 编译前后对比如果正确建立工程并正确配置了工程,则此时编译是无错误的,编译无错误如图 图10-13 编译链接无错误图10-14 编译连接有错误10.5.4 按照前面“实验设备”小节中的“硬件连接图”连接好硬件并打开电源,点击DEBUG按钮或者”Project-Debug”或者快捷键“Ctrl + D”进行程序下载并Debug。如有出错,请检查硬件连接或拔掉仿真器USB再重接图10-15 Debug 调试图10-16 程序正在下载到目标板10.5.5 正确进入DeBu

11、g界面,如下图:图10-17 仿真调试界面10.5.6 通过以上步骤已将协调器程序下载到节点,此时的节点叫“协调器”。10.5.7 在配套资料“提高实验”文件夹下找到“超级单片机工具软件.exe”,如果是WIN7系统,右键“以管理员身份运行”,选择电脑对应的端口,设置和程序对应的波特率“38400”,数据位“8”,停止位“1”,校验位“NONE”,然后点击“打开串口”图10-18 超级单片机工具软件图10-19 超级单片机工具软件界面10.5.8 按下“全速运行”按钮进行试验验证,串口打印出协调器启动过程中的第几步。具体参看“实验验证”。步出函数步入函数单步运行复位全速运行按钮图10-20 调

12、试功能按钮10.5.9 此时一个“协调器”的启动过程已经验证完。将仿真器从“协调器”中拆下,让“协调器”成为一个单独个体,重启运行,让协调器处于一直运行状态。再将另一个节点按照“硬件连接图”连接好,再按“实验步骤”将“路由器”的程序下载到节点中,然后全速运行验证串口打印出来的结果。10.5.10 实验完毕。实验验证10.6 10.6.1 查看串口调试助手打印出来的设备启动步骤:图10-21 协调器启动过程图10-22 路由器启动过程实验部分参考程序解析(完整程序见源程序文件)10.7代码解释:10.7.1 协调器建网过程:STEP 1: zigbee设备应用层初始化ZDApp_Init ()【

13、ZDApp.c】:在任务初始化osalInitTasks()中,调用了ZIGBEE设备应用层初始化函数:void osalInitTasks( void ) uint8 taskID = 0; tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt); macTaskInit( taskID+ ); / MAC初始化,MAC任务ID为0,此函数不开源无法查看源码。 nwk_init( taskID

14、+ ); / nwk初始化,nwk任务ID为1,此函数不开源无法查看源码。 Hal_Init( taskID+ ); / Hal初始化,hal(硬件抽象层)任务ID为2,仅赋值ID号。#if defined( MT_TASK ) MT_TaskInit( taskID+ ); / MT(monitortest监视器)初始化,如果有使用,则此任务ID为3,如果要使用UART串口,必须要初始化此任务.本程序没使用。#endif APS_Init( taskID+ );/ APS(应用支持子层)初始化,APS任务ID为3,此函数不开源无法查看源码。#if defined ( ZIGBEE_FRAGMENTATION ) APSF_Init( taskID+ ); / 应用支持子层消息分割层,此处没编

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

当前位置:首页 > 高等教育 > 大学课件

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