ZigBee协议栈初始化网络启动流程
Zigbee组网流程——理论
星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。
组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。
加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。
一、协调器初始化网络协调器建立一个新网络的流程如图1所示。
图1 协调器建立一个新网络1、检测协调器建立一个新的网络是通过原语NLME_NETWORK_FORMATION.request发起的,但发起NLME_NETWORK_FORMATION.request原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。
任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原语来通知上层这是一个非法请求。
2、信道扫描协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。
信道扫描包括能量扫描和主动扫描两个过程。
首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。
网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。
接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。
如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。
zigbee协议栈流程
上节刚刚讲了主函数,在那已经提到了osal_init_system和osal_start_system函数。
而协议栈是通过操作系统来维持运行的,所以就从这开始。
先说明:默认地,ZDApp_Init()[ZDApp.c]开始了设备在ZB网络中的启动,但是应用程序可以覆盖这个默认的行为。
应用程序要想掌控设备网络的开启,它必须将HOLD_AUTO_START包括为一个编译选项,并且推荐NV_RESTORE也为编译选项(用来在NV中保存ZB网络状态)本文的一些说法可能不严谨,敬请大家注意!1、采集节点启动并建立网络本文是针对ZStack-1.4.3-1.2.1\Projects\zstack\Samples\下的SimpleApp例程。
这个例子就是应用程序掌控设备网络的开启。
在主函数初始化OSAL调用osal_init_system函数的以后,函数见下:void osalInitTasks( void ){uint8 taskID = 0;tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));macTaskInit( taskID++ );nwk_init( taskID++ );Hal_Init( taskID++ );#if defined( MT_TASK )MT_TaskInit( taskID++ );#endifAPS_Init( taskID++ );ZDApp_Init( taskID++ );SAPI_Init( taskID );}这个函数是给每一层分配任务ID,优先级越高的ID越低,在此假设系统已经做好了所有的准备,并且想用应用程序掌控网络的建立,现在即将建立网络。
那我们就可以直接跳到SAPI_Init( taskID );这个函数。
Zigbee工程启动流程解析
Zigbee工程启动流程解析1、Zigbee工程启动流程解析初始化流程:main() -> osal_init_system() -> osalInitTasks() -> GenericApp_Init()事件流程: main() -> osal_start_system() -> (tasksArr[idx])( idx, events ) -> GenericApp_ProcessEvent()2、GenericApp_ProcessEvent()中if ( events & SYS_EVENT_MSG ):SYS_EVENT_MSG是协议栈已经定义好的系统事件if ( events & GENERICAPP_SEND_MSG_EVT ):GENERICAPP_SEND_MSG_EVT就是用户自定义的事件事件号是一个16bit的常量,使用独热码(one-hot code)编码,方便进行event的提取,这样一个task中最多可以有16个event,SYS_EVENT_MSG已经占用了0x8000,故自定义的事件只能有16个。
事件提取events & GENERICAPP_SEND_MSG_EVT,事件清除events ^ GENERICAPP_SEND_MSG_EVT。
用户可以自定义系统事件的消息范围为0xE0~0xFF3、AF_INCOMING_MSG_CMD:当模块接收到属于自己的无线数据信息时就会触发消息ZDO_STATE_CHANGE:当网络状态改变时就会触发此消息4、osal_start_timerEx( GenericApp_TaskID,GENERICAPP_SEND_ MSG_EVT,GENERICAPP_SEND_MSG_TIMEOUT )osal_start_timerEx()的作用是启动一系统定时器,当其溢出(GENERICAPP_SEND_MSG_TIMEOUT)时,会触发task (GenericApp_TaskID)的事件(GENERICAPP_SEND_MSG_EVT)。
zigbee无线通信模块通信流程
zigbee无线通信模块通信流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!深入理解Zigbee无线通信模块的通信流程Zigbee,一种基于IEEE 802.15.4标准的低功耗、短距离、无线通信技术,广泛应用于物联网、智能家居等领域。
zigbee网络建立过程简介
星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。
组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。
加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。
一、协调器初始化网络协调器建立一个新网络的流程如图1所示。
图1 协调器建立一个新网络1、检测协调器建立一个新的网络是通过原语发起的,但发起原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。
任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的的原语来通知上层这是一个非法请求。
2、信道扫描协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。
信道扫描包括能量扫描和主动扫描两个过程。
首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。
网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。
接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。
如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的的原语来通知上层初始化启动网络失败。
3、配置网络参数如果扫描到一个合适的信道,网络层管理实体将为新网络选择一个PAN描述符,该PAN描述符可以是由设备随机选择的,也可以是在里指定的,但必须满足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所选信道内是唯一的PAN描述符,没有任何其它PAN描述符与之是重复的。
ZigBee设备入网流程之关联方式
ZigBee设备⼊⽹流程之关联⽅式ZigBee设备⼊⽹流程ZigBee设备⼊⽹有关联⽅式和直接⽅式两种,我所熟悉的是关联⽅式,这也是最常⽤的⽅式。
关联⽅式step1 设备发出Beacon Request设备会在预先设置的⼏个信道⾥⾯按照指定的顺序逐信道发出这个包,看到Dest PAN ID,Dest Address都是0xFFFF,说明这是个⼴播包,在这些信道⾥⾯的⽹络都会收到它。
step2 route节点发出Beacon回复这个回复⾥⾯有五个关键的值Source PAN ID :回复Beacon的这个设备所处⽹络的PAN IDSource Address:回复Beacon的这个设备所处⽹络的短地址Association Permit:关联许可是否开放Router Capacity:可否接⼊Route节点End Device Capacity:可否接⼊End Device能收到⼊⽹设备发出的Beacon Request的⽹络都会回复Beacon,并且同⼀个⽹络⾥⾯能收到⼊⽹设备Beacon Request的FFD设备都会回复Beacon。
这样⼀来,⼀般⼊⽹设备会受到多个Beacon回复。
那么它会按照下列的顺序,并且结合这帧Beacon的Link Quality来进⾏下⼀步动作:1. ⼊⽹设备⾸先判断Association Permit是否开放,这个是需要协调器发出全⽹⼴播,通知所有route节点这个许可开放了。
2. 如果关联许可是开放的,再根据⾃⼰所属的设备类型来判断Router Capacity、End Device Capacity。
3. 如果可以接⼊,再筛选最佳Link Quality的设备发出Association Request,这个时候就需要⽤Beacon⾥⾯的Source PAN ID和SourceAddress发出⼀个MAC层的单播包。
step3 设备发出Association Requeststep4 route发出Association Responsestep5 秘钥传输step5 Device AnnounceDevice Announce的⼴播数据主要是通知全⽹相关节点有⼀个新设备进来了,给⼤家做个⾃我介绍,⼤家刷新下路由表这类的信息。
zigbee协议栈的使用流程
Zigbee协议栈的使用流程1. 什么是Zigbee协议栈Zigbee协议栈是一种基于IEEE 802.15.4标准的低功耗、自组织的无线通信协议。
它被广泛应用于物联网设备、智能家居、工业自动化等领域。
Zigbee协议栈提供了一套完整的网络协议和通信机制,方便开发者在无线传感器网络中进行通信和数据交换。
2. Zigbee协议栈的使用流程Zigbee协议栈的使用流程可以分为以下几个步骤:步骤一:选择Zigbee协议栈在开始使用Zigbee协议栈之前,首先需要选择合适的Zigbee协议栈。
目前市面上有许多不同的Zigbee协议栈提供商,可以根据自己的需求选择适合的协议栈。
步骤二:准备开发环境在开始使用Zigbee协议栈之前,需要准备好相应的开发环境。
这包括硬件设备、开发工具以及相应的驱动程序。
一般来说,开发者需要购买Zigbee芯片和开发板,并安装相应的开发工具和驱动程序。
步骤三:编写应用程序一旦准备好开发环境,就可以开始编写Zigbee应用程序了。
首先,需要了解Zigbee协议栈的API和接口,理解Zigbee网络的特点和通信机制。
然后,根据具体需求,设计和实现相应的功能模块,例如网络配置、数据传输和安全性等。
步骤四:测试和调试编写完应用程序后,需要进行测试和调试,以确保程序的正确性和稳定性。
可以通过模拟器或者实际的Zigbee设备进行测试。
测试过程中需要注意检查网络连接、数据传输和异常情况处理等方面的功能。
步骤五:部署和运行在完成测试和调试后,就可以将应用程序部署到真实的Zigbee设备上了。
根据具体的部署场景,可能需要进行设备安装、网络配置和数据监控等工作。
一旦部署完成,就可以正式运行Zigbee协议栈,并进行数据交换和通信了。
3. 使用Zigbee协议栈的注意事项在使用Zigbee协议栈的过程中,需要注意以下几个方面:•理解Zigbee网络的拓扑结构和层次关系,合理设计网络拓扑和路由规划。
•注意设备之间的信号强度和信号干扰的问题,确保通信质量和稳定性。
zigbee协议规范及时间
竭诚为您提供优质文档/双击可除zigbee协议规范及时间篇一:zigbee协议规范zigbee协议概述1.1.1zigbee堆栈层zigbee堆栈是在ieee802.15.4标准基础上建立的,定义了协议的mac和phy层。
zigbee设备应该包括ieee802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的phy和mac层,以及zigbee堆栈层:网络层(nwk)、应用层和安全服务提供层。
图1-1给出了这些组件的概况。
图1-1zigbe堆栈框架每个zigbee设备都与一个特定模板有关,可能是公共模板或私有模板。
这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。
公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。
设备是由模板定义的,并以应用对象(applicationobjects)的形式实现(见图1-1)。
每个应用对象通过一个端点连接到zigbee堆栈的余下部分,它们都是器件中可寻址的组件从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。
端点之间的通信是通过称之为簇的数据结构实现的。
这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。
图1-1-2就是设备及其接口的一个例子:每个接口都能接收(用于输入)或发送(用于输出)簇格式的数据。
一共有二个特殊的端点,即端点0和端点255。
端点0用于整个zigbee设备的配置和管理。
应用程序可以通过端点0与zigbee堆栈的其它层通信,从而实现对这些层的初始化和配置。
附属在端点0的对象被称为zigbee设备对象(zd0)。
端点255用于向所有端点的广播。
端点241到254是保留端点。
所有端点都使用应用支持子层(aps)提供的服务。
aps通过网络层和安全服务提供层与端点相接,并为数据传送、安全和绑定提供服务,因此能够适配不同但兼容的设备,比如带灯的开关。
如何恢复Zigbee出厂设置
如何恢复Zigbee出厂设置
工业级Zigbee按照恶劣环境要求设计,具有极强的抗干扰能力、低功耗、组网灵活,性能可靠稳定等优点和特性。
Zigbee是一个将RS232串口设备的串口通信立即转换为Zigbee无线网络通信的双向转换传输设备。
Zigbee根据用户自己的实际需要进行选定。
Zigbee包括三种类型:协调器(Coordinator)、路由器(Router)、终端节点(End Device),这三类设备具备不同的网络功能,协调器时网络的中心节点,负责网络的发起组织、网络维护和管理功能;路由器负责数据的路由中继转发;终端节点只进行本节点数据的发送和接收。
在一个Zigbee 应用网络中,必须有且只有一个协调器和多个路由器或者终端节点组成。
1、打开”配置工具”。
2、在“产品型号选择区域”中,根据要配置的产品型号来选择相应的“zigbee”和“CM5XX(P_EP)”,如下:
3、在”配置工具工作状态切换区域”中选择”配置状态”,如下:
4、在“串品参数设置区域”中,选择“串口号”为Zigbee与电脑相接的串口号;选择“波特率”为38400;选择“数据位”为8;选择“校验位”为NONE;选择“停止位”为1;选择“流控制”为NONE。
然后点击打开串口。
5、在“过程日志显示区域”中会出现给Zigbee上电提示,如下:
这个时候给Zigbee上电。
6、直到“过程日志显示区域”提示“读取配置参数:完成!”就可以对参数进行配置了。
7、在”功能按钮区域”中点击,即可恢复出厂设置。
zigbee网络建立过程简介
星形网络和树型网络可以看成是网状网络的一个特殊子集;所以接下来分析如何组建一个Zigbee网状网络..组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络..加入网络又有两种方法;一种是子设备通过使用MAC层的连接进程加入网络;另一种是子设备通过与一个先前指定的父设备直接加入网络..一、协调器初始化网络协调器建立一个新网络的流程如图1所示..图1 协调器建立一个新网络1、检测协调器建立一个新的网络是通过原语NLME_NETWORK_FORMATION.request发起的;但发起NLME_NETWORK_FORMATION.request原语的节点必须具备两个条件;一是这个节点具有ZigBee协调器功能;二是这个节点没有加入到其它网络中..任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止;网络层管理实体将通过参数值为INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原语来通知上层这是一个非法请求..2、信道扫描协调器发起建立一个新网络的进程后;网络层管理实体将请求MAC子层对信道进行扫描..信道扫描包括能量扫描和主动扫描两个过程..首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描;以排除干扰..网络层管理实体将根据信道能量测量值对信道进行一个递增排序;并且抛弃能量值超过了可允许能量值的信道;保留可允许能量值内的信道等待进一步处理..接着在可允许能量值内的信道执行主动扫描;网络层管理实体通过审查返回的PAN描述符列表;确定一个用于建立新网络的信道;该信道中现有的网络数目是最少的;网络层管理实体将优先选择没有网络的信道..如果没有扫描到一个合适的信道;进程将被终止;网络层管理实体通过参数仠为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败..3、配置网络参数如果扫描到一个合适的信道;网络层管理实体将为新网络选择一个PAN描述符;该PAN描述符可以是由设备随机选择的;也可以是在NLME_NETWORK_FORMATION.request里指定的;但必须满足PAN描述符小于或等于0x3fff;不等于0xffff;并且在所选信道内是唯一的PAN描述符;没有任何其它PAN描述符与之是重复的..如果没有符合条件的PAN描述符可选择;进程将被终止;网络层管理实体通过参数值为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败..确定好PAN描述符后;网络层管理实体为协调器选择16位网络地址0x0000;MAC子层的macPANID参数将被设置为PAN描述符的值;macShortAddress PIB参数设置为协调器的网络地址..4、运行新网络网络参数配置好后;网络层管理实体通过MLME_START.request原语通知MAC层启动并运行新网络;启动状态通过MLME_START.confirm原语通知网络层;网络层管理实体再通过NLME_NETWORK_FORMATION.confirm原语通知上层协调器初始化的状态..5、允许设备加入网络只有ZigBee协调器或路由器才能通过NLME_PERMIT_JOINING.request原语来设置节点处于允许设备加入网络的状态..当发起这个进程时;如果PermitDuration参数值为0x00;网络层管理实体将通过MLME_SET.request原语把MAC层的macAssociationPermit PIB属性设置为FALSE;禁止节点处于允许设备加入网络的状态;如果PermitDuration参数值介于0x01和0xfe之间;网络层管理实体将通过MLME_SET.request原语把macAssociationPermit PIB属性设置为TRUE;并开启一个定时器;定时时间为PermitDuration;在这段时间内节点处于允许设备加入网络的状态;定时时间结束;网络层管理实体把MAC层的macAssociationPermit PIB属性设置为FALSE;如果PermitDuration参数的值为0xff;网络层管理实体将通过MLME_SET.request原语把macAssociationPermit PIB属性设置为TRUE;表示节点无限期处于允许设备加入网络的状态;除非有另外一个NLME_PERMIT_JOINING.request原语被发出..允许设备加入网络的流程如图2所示..图2 允许设备加入网络通过以上流程协调器就建立了一个网络并处于允许设备加入网络的状态;然后等待其它节点加入网络..二、节点加入网络一个节点加入网络有两种方法;一种是通过使用MAC层关联进程加入网络;另一种是通过与先前指定父节点连接而加入网络..1 通过MAC层关联加入网络子节点请求通过MAC关联加入网络进程如图3所示..父节点响应通过MAC关联加入网络进程如图4所示..1、子节点发起信道扫描子节点通过NLME_NETWORK_DISCOVERY.request原语发起加入网络的进程;网络层接收到这个原语后通过发起MLME_SCAN.request原语请求MAC层执行一个主动扫描或被动扫描以接收包含了PAN标志符的信标帧;扫描的信道以及每个信道的扫描时间分别由NLME_NETWORK_DISCOVERY.request原语的参数ScanChannels和ScanDuration决定..2、子节点存储各PAN信息MAC层通过MLME_BEACONNOTIFY.indication原语将扫描中接收到的信标帧信息发送到网络层管理实体;信标帧信息包括信标设备的地址、是否允许连接以及信标净载荷..如果信标净载荷域里的协议ID 域与自己的协议ID相同;子设备就将每个匹配的信标帧相关信息保存在邻居表中..信道扫描完成后;MAC层通过MLME_SCAN.confirm原语通知网络层管理实体;网络层再通过NLME_NETWORK_DISCOVERY.confirm原语通知上层;该原语包含了每个扫描到的网络的描述符;以便上层选择一个网络加入..3、子节点选择PAN如果上层需要发现更多网络;则可以重新执行网络发现;如果不需要;则通过NLME_JOIN.request原语从被扫描到的网络中选择一个网络加入..参数PANID设置为被选择网络的PAN标识符..4、子节点选择父节点一个合适的父节点需要满足三个条件:匹配的PAN标志符、链路成本最大为3、允许连接;为了寻找合适的父节点;NLME_JOIN.request原语请求网络层搜索它的邻居表;如果邻居表中不存在这样的父节点则通知上层;如果存在多个合适的父节点则选择具有最小深度的父节点;如果存在多个具有最小深度的合适的父节点则随机选择一个父节点..5、子节点请求MAC关联确定好合适的父节点后;网络层管理实体发送一个MLME_ASSOCIATE.request原语到MAC层;地址参数设置为已选择的父节点的地址;尝试通过父节点加入网络..6、父节点响应MAC关联父节点通过MLME_ASSOCIATE.indication原语通知网络层管理实体一个节点正尝试加入网络;网络层管理实体将搜索它的邻居表查看是否有一个与尝试加入节点相匹配的64位扩展地址;以便确定该节点是否已经存在于它的网络中了..如果有匹配的扩展地址;网络层管理实体获取相应的16位网络地址并发送一个连接响应到MAC层..如果没有匹配的扩展地址;在父节点的地址分配空间还没耗尽的条件下网络层管理实体将为尝试加入的节点分配一个16位网络地址..如果父节点地址分配空间耗尽;将拒绝节点加入请求..当同意节点加入网络的请求后;父节点网络层管理实体将使用加入节点的信息在邻居表中产生一个新的项;并通过MLME_ASSOCIATE.response原语通知MAC层连接成功..7、子节点响应连接成功如果子节点接收到父节点发送的连接成功信息;发送一个传输成功响应信息以确认接收;然后子节点MAC层将通过MLME_ASSOCIATE.confirm原语通知网络层;原语包含了父节点为子节点分配的网内唯一的16位网络地址;然后网络层管理实体设置邻居表相应邻居设备为它的父设备;并通过NLME_JOIN.confirm原语通知上层节点成功加入网络..8、父节点响应连接成功父节点接收到子节点的传输成功响应信息后;将通过MLME_COMM_STATUS.indication原语将传输成功的响应状态发送给网络层;网络层管理实体通过NLME_JOIN.indication原语通知上层一个节点已经加入了网络..图3 子节点请求加入网络进程图4 父节点响应加入网络进程2 通过与先前指定父节点连接加入网络子节点通过与指定的父节点直接连接加入网络;这个时候父节点预先配置了子节点的64位扩展地址..父节点处理一个直接加入网络的进程如图5所示..子节点通过孤立方式加入网络进程如图6所示..1、父节点处理子设备直接加入网络父节点通过NLME_DIRECT_JOIN.request原语开始处理一个设备直接加入网络的进程..父节点网络层管理实体将首先搜索它的邻居表查看是否存在一个与子节点相匹配的64位扩展地址;以便确定该节点是否已经存在于它的网络中了..如果存在匹配的扩展地址;网络层管理实体将终止这个进程并告诉上层该设备已经存在于设备列表中了..如果不存在匹配的扩展地址;在父节点的地址分配空间还没耗尽的条件下网络层管理实体将为子节点分配一个16位网络地址;并使用子节点的信息在邻居表中产生一个新的项..然后通过NLME_DIRECT_JOIN.confirm原语上层设备已经加入网络..2、子节点连接父节点确认父子关系子节点通过NLME_JOIN.request原语发起孤立扫描来建立它与父节点之间的关系..这时网络层管理实体将通过MLME_SCAN.request请求MAC层对物理层所默认的所有信道进行孤立扫描;如果扫描到父设备;MAC层通过MLME_SCAN.confirm原语通知网络层;网络层管理实体再通过NLME_JOIN.confirm原语通知上层节点请求加入成功;即与父节点建立了父子关系;可以互相通信..图5 父节点处理一个直接加入网络进程图6 子节点通过孤立方式加入网络进程设备的MAC 层向上层发送MLME-ORPHAN.indication 原语告知一个孤立设备的存在..只有ZigBee 协调器或ZigBee 路由器才可以接受MLME-ORPHAN.indication 原语;其他设备收到MLME-ORPHAN.indication 原语时NLME 将中止该过程..ZigBee 协调器或ZigBee路由器收到MLME-ORPHAN.indication 原语后;首先判断孤立设备是否是它的子设备..这个判断过程是通过比较孤立设备与近邻表中子设备的扩展地址来实现的..如果ZigBee 协调器或ZigBee 路由器发现孤立设备是它的子设备;NLME 将获取该子设备的16 位网络地址并通过孤立响应发送给MAC 子层..孤立响应时通过向MAC 层发送MLME-ORPHAN.response原语来实现的;孤立响应命令向子设备传送的结果状态通过MLME-COMMSTATUS.indication 原语反馈给NLME..如果ZigBee 协调器或ZigBee 路由器发现孤立设备不是它的子设备;NLME 就通过孤立响应原语把这一情况反映给MAC 层..下图是父设备把孤立的子设备加入或重新加入到网络过程的信息流程..图7父设备把孤立的子设备加入或重新加入到网络。
Zigbee协议栈工作流程
Zigbee 协议栈工作流程
1、消息处理流程
首先,简介一下消息处理机制,一般都利用回调函数实现的,当某一个事件发生,比如 按键,它就会调用 按键的回调函数(或者叫响应函数),通过回调函数生成一个任务,并通 过任务发送 osal_msg_send 函数,发送消息处理循环,并注册事件,等待处理。应用层的事 件处理函数检测到事件后,调用相应的处理函数。
每次任务处理,都有一个时隙,如果处理不完,则保留该任务,到下一个周期再进行处 理。您可以通过设置断点来观察程序的运行情况,单步跟踪是没有用的,因为,整个协议栈 是消息处理机制,采用定时器控制的,单步运行无法控制定时器。下面以按键处理说明消息 处理机制,其它都是一样的,另外,不要深究无线数据是如何接收和发送的,协议栈有好多 分层,底层是 802.15.4,深究下去没必要,你只管 API 函数就行了。
osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100); } #endif // HAL_KEY
return events ^ HAL_KEY_EVENT; } …………………
} HalKeyPoll();这函数使用查询功能实现检测按键,并获得了键值,然后调用按键的回调函数 OnBoard_KeyCallback,将按键事件发送出去,送到应用层去处理。
6
希望微控工作室
附:zigbee 试验内容
7
希望微控工作室
8Leabharlann 2希望微控工作室
这个函数里,找到 osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr ); 这个函数将按键发送到消息处理循环。 再看这个函数里的 //消息队列管理 osal_msg_enqueue( &osal_qHead, msg_ptr ); //设置按键事件 osal_set_event( destination_task, SYS_EVENT_MSG ); 在设置按键这个函数里,我们看到: tasksEvents[task_id] |= event_flag;
Zigbee设备入网过程
Zigbee设备加入网络过程---关联加入在一个zigbee协调器设备建立网络后,路由器设备或者终端设备(end device),可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联(association)方式,就是待加入的设备发起加入网络,具体实现方式后面讨论,另一中是直接(direct)方式,就是待加入的设备具体加入到那个设备下,作为该设备的子节点,由以前网络中的设备,想待加入的设备作为其子设备决定。
下面重点讨论第一种方式,也是实际中用的最多的方式通过关联方式加入一个网络:加入一个设备,是两个设备的事,即子设备和待定父设备对于子设备,首先子设备调用NLME-NETWORK-DISCOVERY.request 原语,设定待扫描的信道,以及每个信道扫描的时间,网络层收到这个原语,将要求MAC层执行被动或主动扫描。
具体发送到设备外的是一个becon request 帧,当在这个信道中的设备收到该帧,将会发送becon帧,这是子设备通过BEACON-NOTIFY.indication 原语,告知该设备的MAC 层,该becon帧包含了发送该帧的地址信息,以及是否允许其他设备以其子节点的方式加入。
待加入的设备,在网络层,将检查该becon帧协议 ID是否是zigbee ID 。
如果不是,将忽略;如果是,该设备将复制收到每个becon帧的相关信息到其关联表中(neighbor tabl e)。
一旦MAC层完成了扫描,将发送 MLME-SCAN.confirm 原语,告知网络层,网络层将发送NLME-NETWORK-DISCOVERY.confirm 原语,告知应用层。
应用层收到该原语,应用层将根据情况,要么重新要求扫描,或者从关联表中选择所发现的网络加入。
调用NLME-JOIN.request 原语,原语中各个参数的设置参看协议(可以在本站下载栏找到)非常容易。
如果在关联表中找不到合适的准父节点,将调用原语告知应用层,如果由多个设备可以满足要求,将选择到协调器节点深度最低的设备,如果有几个设备的深度相同,且都是最小深度,将从中随机选择一个。
工业级4G、3GDTU网络初始化和节点加入网络
Zigbee组建一个完整的网络包含两个步骤:网络初始化和节点加入网络。
其中,节点加入网络可以分为通过协调器直接连接入网和通过已有父节点入网。
下面来依次说明。
1. 网络初始化ZigBee网络初始化只能是由网络协调器发起的,在组建网络前,需要判断本节点还没与其他网络连接。
如果节点已经与其他网络连接时,此节点只能作为该网络的子节点。
一个ZigBee网络中有且仅有一个ZigBee协调器,一旦网络建立好了,协调器就退化成路由器的角色,甚至是可以去掉协调器的,这一切得益于ZigBee网络的分布式特性。
网络初始化流程图如下:每层详细解释:1 .协调器通过主动扫描,发送信标请求命令(Beacon request command),设置一个扫描期限(T_scan_duration),如果在期限内没检测到回应信标,则认为在其范围内没有其他协调器,那么此时可以建立自己的ZigBee网络,并且作为网络的协调器。
非信标网络的设备会等待请求,信标网络的设备会周期性的产生信标并且广播出去。
2.2.1 能量扫描对指定信道或者默认信道进行能量检测,以避免可能的干扰,以递增的方式对所检测的信道能量值进行排序,抛弃那些能量值超出范围的信道。
选择一系列可用信道。
2.2主动扫描接着通过主动扫描的方式,获取节点通讯半径内的网络信息,然后根据这些信息,找一个最好的、相对安静的信道。
最后选择的信道应该是存在最少的ZigBee网络,最好是没有ZigBee 网络。
3.在所选定的信道上,网络ID(PAN ID)必须是唯一的,不能和其他ZigBee网络冲突,不能为广播地址(0xFFFF)。
可以使用设定的PAN ID,也可以通过监听其他网络的ID来随机选择一个不会冲突的ID号.当路由节点或者设备入网时,协调器会给节点分配短地址来通讯。
对于协调器来说,网络地址始终为0x00002.ZigBee入网流程ZigBee设备的入网流程,详见下图:每层详细解释4节点入网将选择范围内信号最强的父节点加入网络,成功加入后,会得到一个网络短地址,并通过这个地址进行数据的收发。
ZIGBEE协议栈初始化网络启动流程
if ( devState == DEV_HOLD ) {
// Initialize the RAM items table, in case an NV item has been updated. zgInitItems( FALSE ); }
ZDConfig_InitDescriptors(); //devtag.071807.todo - fix this temporary solution _NIB.CapabilityInfo = ZDO_Config_Node_Descriptor.CapabilityFlags;
1.1 进入程序入口 main()。
ZMain.c 中
C++ Code
int main( void ) { // Turn off interrupts osal_int_disable( INTS_ALL );
// Initialization for board related stuff such as LEDs HAL_BOARD_INIT();
1.4 初始化设备(启动网络和设置网络类型)
ZDApp.c
C++ Code
uint8 ZDOInitDevice( uint16 startDelay ) { uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; uint16 extendedDelay = 0;
devState = DEV_INIT; // Remove the Hold state
这个值
// 函数读取 NV 项目 ZCD_NV_LEAVE_CTRL 的值,ZDApp_LeaveCtrl 指向 // Initialize leave control logic
Zigbee组网原理详解
Zigbee组网原理详解1.组网概述组建一个完整的zigbee网状网络包括两个步骤:网络初始化、节点加入网络。
其中节点加入网络又包括两个步骤:通过与协调器连接入网和通过已有父节点入网。
2. 网络初始化预备Zigbee网络的建立是由网络协调器发起的,任何一个zigbee节点要组建一个网络必须要满足以下两点要求:(1)节点是FFD节点,具备zigbee协调器的能力;(2)节点还没有与其他网络连接,当节点已经与其他网络连接时,此节点只能作为该网络的子节点,因为一个zigbee网络中有且只有一个网络协调器。
FFD:Full FuncTIon Device 全功能节点RFD:Reduced FuncTIonDevice 半功能节点3.网络初始化流程3.1 确定网络协调器:首先判断节点是否是FFD节点,接着判断此FFD节点是否在其他网络里或者网络里是否已经存在协调器。
通过主动扫描,发送一个信标请求命令(Beaconrequest command),然后设置一个扫描期限(T_scan_duraTIon),如果在扫描期限内都没有检测到信标,那么就认为FFD在其pos内没有协调器,那么此时就可以建立自己的zigbee网络,并且作为这个网络的协调器不断地产生信标并广播出去。
注意:一个网络里,有且只能有一个协调器(coordinator)。
3.2 进行信道扫描过程。
包括能量扫描和主动扫描两个过程:首先对指定的信道或者默认的信道进行能量检测,以避免可能的干扰。
以递增的方式对所测量的能量值进行信道排序,抛弃那么些能量值超出了可允许能量水平的信道,选择可允许能量水平的信道并标注这些信道是可用信道。
接着进行主动扫描,搜索节点通信半径内的网络信息。
这些信息以信标帧的形式在网络中广播,。
Zigbee设备入网过程
Zigbee设备加入网络过程---关联加入在一个zigbee协调器设备建立网络后,路由器设备或者终端设备(end device),可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联(association)方式,就是待加入的设备发起加入网络,具体实现方式后面讨论,另一中是直接(direct)方式,就是待加入的设备具体加入到那个设备下,作为该设备的子节点,由以前网络中的设备,想待加入的设备作为其子设备决定。
下面重点讨论第一种方式,也是实际中用的最多的方式通过关联方式加入一个网络:加入一个设备,是两个设备的事,即子设备和待定父设备对于子设备,首先子设备调用NLME-NETWORK-DISCOVERY.request 原语,设定待扫描的信道,以及每个信道扫描的时间,网络层收到这个原语,将要求MAC层执行被动或主动扫描。
具体发送到设备外的是一个becon request 帧,当在这个信道中的设备收到该帧,将会发送becon帧,这是子设备通过BEACON-NOTIFY.indication 原语,告知该设备的MAC 层,该becon帧包含了发送该帧的地址信息,以及是否允许其他设备以其子节点的方式加入。
待加入的设备,在网络层,将检查该becon帧协议 ID是否是zigbee ID 。
如果不是,将忽略;如果是,该设备将复制收到每个becon帧的相关信息到其关联表中(neighbor tabl e)。
一旦MAC层完成了扫描,将发送 MLME-SCAN.confirm 原语,告知网络层,网络层将发送NLME-NETWORK-DISCOVERY.confirm 原语,告知应用层。
应用层收到该原语,应用层将根据情况,要么重新要求扫描,或者从关联表中选择所发现的网络加入。
调用NLME-JOIN.request 原语,原语中各个参数的设置参看协议(可以在本站下载栏找到)非常容易。
如果在关联表中找不到合适的准父节点,将调用原语告知应用层,如果由多个设备可以满足要求,将选择到协调器节点深度最低的设备,如果有几个设备的深度相同,且都是最小深度,将从中随机选择一个。
zigbee无线通信协议程序流程
zigbee无线通信协议程序流程关键信息项:合同双方信息项目名称及描述协议目的及范围Zigbee协议技术要求项目实施计划及时间表合同金额及支付方式风险管理及保障措施变更及调整条款违约责任及处理措施保密条款知识产权归属争议解决方式合同的有效期及终止条件其他条款签署日期及地点1. 合同双方信息1.1 委托方(购买方)名称:____________________________1.2 委托方法定代表人或授权代表姓名:____________________________1.3 委托方联系地址:____________________________1.4 承包方(服务提供方)名称:____________________________1.5 承包方法定代表人或授权代表姓名:____________________________1.6 承包方联系地址:____________________________2. 项目名称及描述2.1 项目名称:____________________________2.2 项目描述及范围:____________________________2.3 项目实施地点:____________________________3. 协议目的及范围3.1 协议目的:确定Zigbee无线通信协议的应用及实施细节,确保双方对协议的理解和执行一致。
3.2 协议范围:包括Zigbee协议的技术实现、系统集成、测试及维护等方面的内容。
4. Zigbee协议技术要求4.1 Zigbee协议版本:____________________________4.2 技术规格和标准:____________________________4.3 设备兼容性要求:____________________________4.4 数据传输要求及网络安全标准:____________________________5. 项目实施计划及时间表5.1 实施计划:____________________________5.2 关键时间节点及里程碑:____________________________5.3 各阶段完成时间及验收时间:____________________________6. 合同金额及支付方式6.1 合同总金额:____________________________6.2 支付方式(如银行转账、支票等):____________________________6.3 支付时间及安排:____________________________6.4 其他费用及支付安排:____________________________7. 风险管理及保障措施7.1 风险识别与评估:____________________________7.2 风险管理计划及措施:____________________________7.3 履约保证金及其使用条件:____________________________7.4 意外情况处理及紧急预案:____________________________8. 变更及调整条款8.1 项目范围及技术要求变更的条件:____________________________8.2 变更申请及审批程序:____________________________8.3 变更导致的费用调整及时间安排:____________________________9. 违约责任及处理措施9.1 委托方违约责任:若委托方未按合同规定付款或提供必要的支持,承包方有权要求赔偿违约损失。
zigbee网络建立过程简介(G1)知识讲解
zi gbee 网络建立过程简介( G1)星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。
组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。
加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。
一、协调器初始化网络协调器建立一个新网络的流程如图1所示。
WliE-N ETWORK-FORW MION 啲TMJ^E-SCAN requestMLWE-SDAK confamMLME-SCAN.requestMLWE-SCAN contfni畝外站it PM ID.MUML-5C.1「eqestHL ME ShT cenfinnMLK1E-5TAr(T requestmiE-STARTanfirmNLM:'. NETWCftK-rORMMlON infirmAPL NWK MAC图1协调器建立一个新网络1、检测协调器建立一个新的网络是通过原语NLME_NETWORK_FORMATION.reqi发起的,但发起NLME_NETWORK_FORMATION.reqi原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。
任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUES的NLME_NETWORK_FORMATION.con的原语来通知上层这是一个非法请求。
2、信道扫描协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。
信道扫描包括能量扫描和主动扫描两个过程。
首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。
网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。
ZigBee协议栈-Z-Stack API介绍(ZDO网络启动)
Z-Stack API
10
ZigBee 设备对象(ZDO
返回值:这个函数将返回下面值之一:
Z-Stack API
7
ZigBee 设备对象(ZDO)
网络管理服务提供了检索设备管理信息的功能,包括网络发现结果、 路由表内容、到周边节点的链路质量以及绑定表内容。它还提供了 通过断开与个人区域网络设备的联系来控制网络联系的功能。网络 管理服务主要是针对用户或调试工具而设计,用来管理网络。
以上三种功能的API将在下面分别讨论。
ZDP描述了ZDO内部一般性的ZigBee 设备功能是如何实现的。它定义了使用命令和 响应对的设备描述和簇。通过定义命令结构体的信息,ZDP为ZDO和应用程序提供了 如下功能:
• 设备网络启动 • 设备和服务发现 • 终端设备绑定、绑定和取消绑定服务 • 网络管理服务
Z-Stack API
5
ZigBee 设备对象(ZDO)
Z-Stack API
6
ZigBee 设备对象(ZDO)
典型的绑定用于网络配置期间,即当用户需要将控制设备绑定到被控制设 备(比如开关和灯光)时。特别地,终端设备绑定支持一个简化的绑定方 法,即使用用户的输入来识别控制或被控制的设备对。绑定和取消绑定服 务提供了创建和删除绑定表条目的功能,其中绑定表的功能是记录控制信 息及其各自的目的地。
Z-Stack API
3
层次)的API 提供一般性的支持服务,能同时用 于ZDO 层和制造商定义的应用对象 NWK 层 ZigBee 网络层(NWK)为更高层次的(应用层)组件提供管理 和数据服务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ZigBee协议栈初始化网络启动流程
ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络。
基本流程:main()->osal_init_system()->osalInitTasks()->ZDApp_Init(),进协议栈初始化函数ZDApp_Init()。
进入程序入口main()。
中
C++ Code
int main( void )
{
*/
WatchDogEnable( WDTIMX );
#endif
osal_start_system(); }
ZDO_Init();
afRegister( (endPointDesc_t
*)&ZDApp_epDesc );
#if defined( ZDO_USERDESC_RESPONSE )
ZDApp_InitUserDesc();
#endif
zgInitItems( FALSE );
}
ZDConfig_InitDescriptors();
zgWriteStartupOptions( ZG_STARTUP_SET,
ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
}
#if defined ( NV_RESTORE )
if ( HalKeyRead() == SW_BYPASS_NV )
networkStateNV =
ZDO_INITDEV_NEW_NETWORK_STATE;
else
{
On these devices or routers that have
If the
zgDefaultChannelList = MAX_CHANNELS_24GHZ;
}
#endif If the PAN is not found, an scan should be completed
// When devices rejoin the network and the PAN is not found from
zgDefaultChannelList = MAX_CHANNELS_24GHZ;
}
#endif // ZIGBEE_COMMISSIONING
#endif
}
else if ( startMode == MODE_RESUME )
{
if
( logicalType == NODETYPE_ROUTER )
{ ZMacScanCnf_t scanCnf;
devState = DEV_NWK_ORPHAN;
/* if router and nvram is available, fake successful orphan scan */ = ZSUCCESS;
= ZMAC_ORPHAN_SCAN;
= 0;
= 0;
nwk_ScanJoiningOrphan(&scanCnf);
ret = ZSuccess;
}
else
{ devState = DEV_NWK_ORPHAN;
ret = NLME_OrphanJoinRequest( zgDefaultChannelList,
zgDefaultStartingScanDuration );
}
}
else
{
#if defined( LCD_SUPPORTED )
HalLcdWrite Screen( "StartDevice ERR", "MODE unknown" );
#endif
}
}
if ( ret != ZSuccess )
osal_start_timerEx(ZDAppTaskID,
ZDO_NETWORK_INIT, NWK_RETRY_DELAY );
}
开启网络事件
C++ Code
void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )
{
nwkStatus = (byte)Status;
if ( Status == ZSUCCESS )
{
// LED on shows Coordinator started
HalLedSet ( HAL_LED_3,
HAL_LED_MODE_ON );
// LED off forgets
HOLD_AUTO_START
HalLedSet (HAL_LED_4,
HAL_LED_MODE_OFF);
#if defined ( ZBIT )
SIM_SetColor(0xd0ffd0);
#endif
if ( devState == DEV_HOLD )
{
// Began with HOLD_AUTO_START
devState = DEV_COORD_STARTING;
}
}
#if defined(BLINK_LEDS)
else
HalLedSet ( HAL_LED_3, HAL_LED_MODE_FLASH ); // Flash LED to show failure
#endif
osal_set_event( ZDAppTaskID,
ZDO_NETWORK_START );
}。