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设置

ZigBee模块设置1.ZigBee模块F8913D插入配置基板F8913-EVB(注:基板排针接口与模块插针序号正确对应,不可反插。
否则,模块可能烧坏。
)2.用USB连接线,连接配置基板与电脑。
配置基板通过USB口供电。
电脑端打开3.查看端口号,,,(如何查看端口号,详见备注2)4.参数设置,配置步骤如图。
串口波特率:9600校验:无校验停止位:1个停止位是否启用硬件控制流:不勾选调试等级:0AT命令是否回显:不勾选网络号:自行设置(同一网络内模块和网关的网络号必须相同)节点类型:路由分节点网络地址:自行设置(同一网络内的设备不能有相同网络地址)透传地址:0重新自52A8加入网络:勾选物理信道:26应用模式:透传模块设置关键参数说明:网络号:网络号是ZigBee 判断是否在同一个网络的标志,只有网络号相同的设备才会互相组网,互相通信。
节点类型:同一网络,有且仅有一个协调器。
路由具备转发其他模块数据功能,终端不具有该功能。
分节点网络地址:即 ZigBee 设备本机在网络内的地址标志,协调器不能修改,默认固定为 0,路由或终端可设置为非 0 的其它数值,一个 ZigBee 设备设置完网络地址后这个地址在19 23 45678本网络内就是唯一的,不可再重复加入这个地址的设备。
透传地址:即本 ZigBee 设备串口收到的数据要发送的目标 ZigBee 设备的分节点网络地址,在透传模式下,只要指定了透传地址,那么本设备发出的数据都会发送给那个分节点网络地址的 zibgee 设备。
例如:ZigBee1(分节点网络地址为 10)---ZigBee2(分节点网络地址为 13)ZigBee1 要把串口收到的数据发给 ZigBee2,ZigBee1 的透传地址就要指定为 13,ZigBee2 把串口收到的数据发给 ZigBee1,那 ZigBee2 的透传地址就要设置为 10。
物理信道:要互相通信的设备必须设置为一样的信道,推荐使用 15,20,25,26 信道,可减少 WIFI的干扰。
Zigbee组网流程

1、网络形成组网开始时,网络层首先向MAC层请求分配协议所规定的信道,或者由PHY层进行有效信道扫描,网络层管理实体等待信道扫描结果,然后根据扫描结果选择可允许能量水平的信道。
找到合适的信道后,为这个新的网络选择一个个域网标识符(PANID)。
PANID可由网络形成请求时指定,也可以随机选择一个PANID(除广播PANID固定为0xFFFF外),PANID 在所选信道中应该是唯一的。
PANID一旦选定,无线网关将选择16位网络地址0x0000作为自身短地址,同时进行相关设置。
完成设置后,通过MAC层发出网络启动请求,返回网络形成状态。
2、网络维护网络维护网络维护主要包括设备加入网络和离开网络过程。
当网络形成后,通过网络管理实体设定MAC层连接许可标志来判断是否允许其他设备加设备初始化为协调器入网络。
加入方式有联合方式和直接方式,在协议实现中采取直接加入网络方式。
这种方式下由待加入的设备发送请求加入信标帧,网关接收到后,网络管理实体首先判断这个设备是否已存在于网络。
存在,则使其加入网络;若不存在,则向设备发送信标帧,为这个设备分配一个网络中唯一的16位的短地址。
这里的信标帧是由网关无线协议MAC层生成作为PHY层载荷,它包含PANID、加入时隙分配等信息。
网内设备也可以请求断开网络。
当网关收到设备断开连接请求后,MAC层向网络层发送报告,开始执行断开流程,从设备列表中删除该设备相关信息。
网络层上层请求网络层发现当前在运行的网络:NLME NETWORK DISCOVERY.request(ScanChannels,ScanDuration)ScanChannels:高5为保留(b27~b31),低27为分别表示27个有效信道,该位为1,表示扫描;为0不扫描。
ScanDuration:扫描时间,aBaseSuperframeDuration*(2^n+1),n为ScanDuration值。
网络层在家收到该原语后,将通过检查ScanChannels参数发现网络,如果该设备为一个FFD 设备,则执行主动的扫描。
zigbee变量说明

编译选项:宏:系统事件:SYS_EVENT_MSG为用户所保留的消息id(用户自定义)0xE0—0xFF各层簇定义:APP层簇ID void SampleApp_MessageMSGCB( afIncomingMSGPacket_tZDO层簇ID void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t各层事件定义:MAC回调事ZDO层任务事件:UINT16 ZDApp_event_loop( byte重要属性获取或设置标准PIB MAC_MlmeGetReq() //获取属性值MAC_MlmeSetReq() //设置属性值MAC_ACK_WAIT_DURA TION --等待确认帧的最大符号数MAC_ASSOCIATION_PERMIT --协调器允许关联MAC_AUTO_REQUEST --自动发送一个数据请求MAC_BATT_LIFE_EXT --启用电池寿命MAC_BATT_LIFE_EXT_PERIODSMAC_BEACON_PAYLOAD --信标负载内容MAC_BEACON_PAYLOAD_LENGTH --信标负载字节长度MAC_BEACON_ORDER --协调传送信标时间间隔MAC_BEACON_TX_TIMEMAC_BSN --信标帧序列号MAC_COORD_EXTENDED_ADDRESS --协调器扩展地址MAC_COORD_SHORT_ADDRESS --协调器短地址MAC_DSN --命令帧序列号MAC_GTS_PERMIT --PAN协调器接收GTS请求MAC_MAX_CSMA_BACKOFFS --消除信道之前,CSMA尝试抵消数MAC_MIN_BE --如果设置为0,禁用避免碰撞MAC_PAN_ID --PAN标示符,0xFFFF不被关联MAC_PROMISCUOUS_MODE --mac处于混乱模式MAC_RX_ON_WHEN_IDLE --空闲周期启用接收器MAC_SHORT_ADDRESS --设备短地址,协调器在MAC_StartReq()设置,其他设备在关联中分配,MAC_ADDR_USE_EXT设备没有短地址关联。
zigbee组网方案

zigbee组网方案Zigbee组网方案简介Zigbee是一种低功耗、近距离的无线通信技术,主要应用于物联网领域。
它基于IEEE 802.15.4标准,通过无线信号传输数据,可以实现设备之间的互联和通信。
本文将介绍Zigbee组网的原理以及常见的组网方案。
Zigbee组网原理Zigbee组网主要由三个组成部分组成:协调器(Coordinator),路由器(Router)和终端设备(End Device)。
协调器是整个网络的中心,负责管理和控制整个网络,并在必要时与外部网络通信。
路由器可以通过多跳方式将数据传输到不同的节点,终端设备是网络中的终端节点,主要用于数据的采集和传输。
Zigbee网络采用星状拓扑结构,协调器位于网络的中心,路由器和终端设备通过与协调器的连接来建立网状拓扑结构。
这种结构可以保证网络的稳定性和可靠性。
组网过程中,首先需要进行网络的初始化和配置。
协调器将会发出一个网络启动信号,其他设备在接收到信号后可以加入已有网络或创建一个新的网络。
随后,设备会通过Zigbee的网络协议进行数据的传输和交换。
协议包括了设备之间的通信规则、数据的格式和传输的方式。
Zigbee组网方案Zigbee组网方案有两种常见的方式:单主结构和多主结构。
单主结构在单主结构中,只有一个协调器作为网络的中心,其他设备通过与协调器的连接来进行通信。
这种结构的优点是简单和易于部署,适用于规模较小的网络。
然而,由于只有一个协调器,整个网络的稳定性和可靠性会受到限制。
多主结构多主结构中,可以有多个协调器作为网络的中心。
这种结构的优点是能够提供更高的灵活性和可扩展性,并且可以实现区域之间的连接和通信。
每个协调器都可以管理一部分设备和节点,通过多跳方式实现数据的传输。
然而,多主结构的部署和管理相对复杂,需要更多的设备和资源。
Zigbee网络拓扑结构除了单主结构和多主结构之外,Zigbee还支持多种拓扑结构,包括星状、网状、树状和混合结构。
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标准的低功耗、短距离、无线通信技术,广泛应用于物联网、智能家居等领域。
卓岚ZLAN9500 03系列ZigBee无线数传设备用户手册说明书

ZLAN9500/03系列ZigBee无线数传设备用户手册RS232/485/422/以太网转ZigBee版权©2008上海卓岚信息科技有限公司保留所有权力ZL DUI20141016.1.0版权©2008上海卓岚信息科技有限公司保留所有权力版本信息对该文档有如下的修改:修改记录日期版本号文档编号修改内容2014-10-16Rev.1ZL DUI20141016.1.0发布版本2016-02-19Rev.2ZL DUI20141016.2.0更新文档2017-5-18Rev.3ZL DUI20141016.3.0增加Zigbee配置2018-5-13Rev.4ZL DUI20141016.3.0修改图片所有权信息未经版权所有者同意,不得将本文档的全部或者部分以纸面或者电子文档的形式重新发布。
本文档只用于辅助读者使用产品,上海卓岚公司不对使用该文档中的信息而引起的损失或者错误负责。
本文档描述的产品和文本正在不断地开发和完善中。
上海卓岚信息科技有限公司有权利在未通知用户的情况下修改本文档。
目录1.概述 (4)2.功能特点 (7)3.技术参数 (7)4.硬件说明 (8)5.Z IG B EE配置 (12)5.1.配置步骤 (12)5.2.参数含义 (13)5.3.注意事项 (15)6.TCP/IP配置 (15)6.1.参数含义 (15)6.2.修改参数方法 (20)6.3.设备搜索 (21)6.4.参数设置 (22)6.5.透传通信 (23)6.6.虚拟串口 (25)6.7.不同工作模式和参数 (28)7.售后服务和技术支持 (32)上海卓岚信息科技有限公司Tel:(021)643251891.概述上海卓岚的ZigBee产品目前分为两大类,一类是串口转ZigBee,型号ZLAN9500,它包含有3种串口形式,即RS232/485/422;另外一类是以太网(TCP/IP)转ZigBee,型号为ZLAN9503,可将ZigBee和互联网进行联通。
ZigBee技术介绍

ZigBee技术介绍精简功能设备(RFD):RFD只能传送信息给FFD或从FFD接收信息。
附带有限的功能来控制成本和复杂性,在⽹络中通常⽤作终端设备。
ZigBee⽹络定义了三种节点类型:协调器和路由器必须是全功能器件(FFD: Full function device),终端设备可以是全功能器件,也可以是简约器件(RFD: reduce function device)。
协调点是⼀个特殊的FFD,它具有较强的功能,是整个⽹络的主要控制者,它根据⽹络的最⼤深度(nwkMaxDepth),每个路由器能最多连接⼦设备的数⽬(nwkMaxChildren),每个路由器能最多连接⼦路由器的数⽬(nwkMaxRouters)等参数建⽴新的⽹络、収送⽹络信标、管理⽹络中的节点以及存储⽹络信息等。
RFD的应⽤相对简单,例如在传感器⽹络中,它们只负责将采集的数据信息収送给它的协调点,不具备数据转収、路由収现和路由维护等功能。
RFD占⽤资源少,需要的存储容量也⼩,在不収射和接收数据时处于休眠状态,因此成本⽐较低,功耗低。
FFD除具有RFD功能外,还需要具有路由功能,可以实现路由収现、路由选择,并转収数据分组。
⼀个FFD可以和另⼀个FFD或RFD通信,⽽RFD只能和FFD通信,RFD之间是⽆法通信的。
⼀旦⽹络启动,新的路由器和终端设备可以通过路由収现、设备収现等功能加⼊⽹络。
当路由器或终端设备加⼊ZigBee ⽹络时,设备间的⽗⼦关系(或说从属关系)即形成,新加⼊的设备为⼦,允许加⼊的设备为⽗。
⼀个简单的ZigBee⽹络⽗⼦关系如图3-a中的A、B。
ZigBee中每个协调点最多可连接255个节点,⼀个ZigBee⽹络最多可容纳65535个节点。
3.2 ⽹络拓扑ZigBee⽹络的拓扑结构主要有三种,星型⽹、⽹状(mesh)⽹和混合⽹,见图3。
星型⽹(图3-c)是由⼀个协调点和⼀个或多个终端节点组成的。
协调点必须是FFD,它负责収起建⽴和管理整个⽹络,其它的节点(终端节点)⼀般为RFD,分布在协调点的覆盖范围内,直接与协调点迚⾏通信。
实验之前请先设置协调器和终端节点的通道及panid号。由于本套实验

实验之前请先设臵协调器和终端节点的通道及PANID号。
由于本套实验中没有涉及到ZIGBEE协议栈和IAR开发环境的使用,所以在实验箱配臵的时候就已经设定每个实验箱的终端节点的通道和PANID,只要将协调器的参数设臵与终端节点一致即可。
理论上每个实验箱配臵的终端节点以上两个参数不完全相同(也就是至少一个参数不一样)。
一、ZIGBEE组网实验1、硬件环境搭建硬件设备:短距离无线通信实验平台1台、PC1台、ZIGBEE协调器模块1个(板载)、ZIGBEE终端节点1个、2.4G天线1根;硬件连接:首先连接实验设备电源:9V/2A,让实验设备正常启动。
检查确认ZIGBEE协调器模块正常,模块开关拨到ON位臵连接串口调试线2、设臵ZIGBEE协调器参数当系统正常启动后进入WXL-zigbee界面设臵ZIGBEE通道和PANID 备注:由于本套实验中没有涉及到ZIGBEE协议栈和IAR开发环境的使用,所以在实验箱配臵的时候就已经设定每个实验箱的终端节点的通道和PANID,只要将协调器的参数设臵与终端节点一致即可。
理论上每个实验箱配臵的终端节点以上两个参数不完全相同(也就是至少一个参数不一样)。
这里通道设臵为0x0B,PANID为0x0001.3、下载Zigbeenet组网应用程序到LINUX首先检查串口调试线的虚拟串口号:打开超级终端保证嵌入式板子已经正常启动,同时保证各连接线正常。
此时可以再超级终端中按回车建,如果有:出现,表示各方面运行正常。
否则需要检查以上各步骤。
如果是第一次使用ZIGBEE功能,那么此时输入ls命令可以查看各应用程序。
可以看出里面没有ZIGBEE应用程序。
此时在超级终端菜单上选择“传送---发送文件”浏览目录\zigbee-cc2530\net到我们编译后的文件:点击发送即可发送完毕可以通过ls命令查看。
可以看到已经有zigbeenet的应用程序在其中了。
4、实验项目进入ZIGBEE组网应用程序:ls查看应用程序进入ZIGBEE应用程序只需要在超级终端中连续输入以下两行命令即可chmod 775 zigbeenet./ zigbeenet此时会自动去格式化并建立网络,建立网路后ZIGBEE协调器模块的红色LED 会被点亮:ZIGBEE网络启动命令为:对应LINUX代码如下:上电终端节点当模块红色LED被点亮时,表示加入网络成功,此时可以在超级终端上看到加入节点信息。
F8914 ZigBee终端使用说明书

文 档 编 号
产品版本 V1.12
密级
产品名称: F8914
共 49 页
F8914 使用说明书
此说明书适用于下列型号产品: 型号
F8914-N F8914-E
产品类别
ZigBee 数传终端 ZigBee 数传终端(带 PA)
厦门四信通信科技有限公司
Add:中国厦门市软件园观日路 44 号 3 楼 客户热线:400-8838 -199 电话:+86-592-6300320 传真:+86-592-5912735 网址
厦门四信通信科技有限公司
Add:中国厦门市软件园二期观日路 44 号 3 层 http:// 客服热线:400-8838-199 Tel: 0592-6300320
Page 2 of 49 Fax:0592-5912735
F8914 系列使用说明书
著作权声明
本文档所载的所有材料或内容受版权法的保护, 所有版权由厦门四信通信科技有限公司 拥有,但注明引用其他方的内容除外。未经四信公司书面许可,任何人不得将本文档上的任 何内容以任何方式进行复制、经销、翻印、连接、传送等任何商业目的的使用,但对于非商 业目的的、个人使用的下载或打印(条件是不得修改,且须保留该材料中的版权说明或其他 所有权的说明)除外。
F8914 系列使用说明书
目录
目录 .................................................................................................................................................. 5 第一章 产品简介.....................
上海智蜂通信技术 ZT-Tool 配置软件 说明书

上海智蜂通信技术有限公司ZT-Tool配置软件用户手册撰写人:Abel 日期:2011-8-17版本:V1.0目录目录 (3)插图目录 (4)1文档说明 (5)2ZT-Tool与Easy-Bee开发套件 (5)3ZT-Tool主界面及各部分功能 (5)4ZT-Tool中各参数的详细定义及用法 (8)4.1串口参数设置 (8)4.2用户设备信息 (8)4.3网络参数 (9)4.4GPIO端口设置 (9)5使用ZT-Tool对ZT200Dx进行配置的流程 (10)5.1配置为协调器器 (11)5.2配置为路由器 (11)5.3配置为终端设备 (12)附录 (13)附一安装串口驱动程序 (13)附二安装ZT-TOOL (14)附三连接PC机和ZT200Dx (15)附四查看端口编号 (15)插图目录图 1 ZT-Tool工具软件用户界面 (5)图 2 设置协调器 (11)图 3 设置路由器 (12)图 4 配置终端设备 (13)图 5 串口驱动程序安装 (14)图 6 串口驱动安装完成 (14)图7 ZT-EVB实物图 (15)图8 打开设备管理器 (15)图9 设备管理器--查看端口号 (16)1文档说明详细介绍智蜂通信的Easy-Bee开发套件中ZT-Tool软件的使用方法。
以ZT200Dx模块和ZT-EVB为例,详细说明了如何使用ZT-Tool读取/写入ZT系列模块的参数以及各参数的意义。
2ZT-Tool与Easy-Bee开发套件ZT-Tool工具配合Easy-Bee开发套件使用,用户使用它可以快速完成模块参数的设置,从而搭建起一个自组织的ZigBee网络,使用GPIO端口设置端口的输出,控制继电器等开关元件的工作;设置GPIO端口为AD采样输入可以采集端口上的电压,完成对传感器数据的收集。
3ZT-Tool主界面及各部分功能ZT-Tool是我司开发的ZigBee模块配置软件,用户用它可以完成一般的配置工作。
物联网技术基础(试卷编号1101)

物联网技术基础(试卷编号1101)1.[单选题]Internet网络是一种()结构的网络。
A)星型B)环型C)树型D)网型答案:D解析:2.[单选题]计算机病毒是一种( )。
A)微生物感染B)化学感染C)程序D)幻觉答案:C解析:3.[单选题]4块SW256B板最多可处理()条PCM的时隙交换业务。
A)256B)512C)1024D)2048答案:C解析:4.[单选题]NB-IoT技术终端基于AA电池可使用( )年A)3年B)4年C)5年D)10年答案:D解析:5.[单选题]处理NBAP、RANAP、RNSAP、RRC协议的单元是( )。
A)ICSUB)RSMUC)DMCUD)OMU6.[单选题]在windows95/98的dos窗口下,能用以下命令察看主机的路由表().A)NETSTAT-RB)ARP-AC)TRACEROUTED)ROUTEPRINT答案:D解析:7.[单选题]物联网数据的海量性主要表现为()A)不同感知对象有不同类型的表征数据B)物联网拥有海量对象C)数据本身不确定,语义匹配不确定D)网络存储不稳定答案:A解析:8.[单选题]智能配变终端的后备电源宜采用(),并集成于终端内部。
A)单相交流B)蓄电池C)超级电容D)太阳能答案:C解析:9.[单选题]美国的 DARPA 已经启动了传感信息计划(SensIT), 目的是将多种( )、可重编程的通 用处理器和无线通信技术结合起来,建立一个廉价的无所不在的网络系统,用以监测光 学、声学、震动、磁场、污染、毒物、温度等物理量.A)传感器;B)执行器;C)CPU;D)基站答案:A解析:10.[单选题]ZigBee():无需人工千预,网络节点能够感知其他节点的存在,并确定连结关系,组成结构化的网络。
A)自愈功能B)自组织功能C)碰撞避免机制11.[单选题]无线传输网络中负责数据处理的不包括()A)微控制器B)嵌入式操作系统C)无线通信协议D)通信线路答案:C解析:12.[单选题]NPUSCH format2 的调制方式为什么?A)BPSKB)QPSKC)16QAMD)64QAM答案:A解析:13.[单选题]为落实公司全面建设智能配电网工作部署,促进配电网向新一代电力系统转型升级,国网设备部探索实践了以()为核心的配电物联网技术A)智能配电终端B)智能配变终端C)智能馈线终端D)智能柱上开关答案:B解析:14.[单选题]机栋建筑物,周围还有其他电力电缆,若需将该几栋建筑物连接起来构成骨干型园区网,则采用( )比较合适。
ZigBee技术简介

ZigBee技术—让无线无所不在ZigBee无线数据通信模块工业级高品质无线通信深圳市金图旭昂通讯科技有限公司 内容概要ZigBee技术简介ZigBee技术—让无线无所不在旭昂电子ZigBee无线通信模块介绍ZigBee技术专业开发商ZigBee技术应用解决方案ZigBee技术应用:无线传感器网络、数据采集、 工业控制、智能楼宇、医疗设备…ZigBee技术简介—什么是ZigBeeZigBee是一种新兴的短距离、低功耗、低数据速率、低成本、低复杂度的无线网络技术。
ZigBee 采取了IEEE 802.15.4强有力的无线物理层所规定的全部优点:省电、简单、成本又低的规格;ZigBee增加了逻辑网络、网络安全和应用层。
ZigBee联盟预测的主要应用领域包括工业控制、消费性电子设备、 汽车自动化、家庭和楼宇自动化、医用设备控制等。
ZigBee技术简介—ZigBee与IEEE 802.15.4 ZigBee是一组基于IEEE802.15.4无线标准研制开发的、有关组网、安全和应用软件方面的技术,IEEE 802.15.4仅处理MAC层和物理层协议,ZigBee联盟对其网络层协议和API进行了标准化。
ZigBee是由ZigBee Alliance所主导的标准,定义了网络层(Network Layer)、安全层(Security Layer)、应用层(Application Layer)、以及各种应用产品的资料(Profile);而由国际电子电机工程协会(IEEE)所制订的802.15.4标准,则是定义了物理层(PHY Layer)及媒体存取层(Media Access Control Layer;MAC Layer)。
ZigBee技术简介—ZigBee物理信道ZigBee技术简介—ZigBee网络设备类型网络协调器:包含所有的网络消息,是3种设备类型中最复杂的一种,存储容量最大、计算能力最强。
发送网络信标、建立一个网络、管理网络节点、存储网络节点信息、寻找一对节点间的路由消息、不断地接收信息。
Zigbee设置

ZigBee模块设置1.ZigBee模块F8913D插入配置基板F8913-EVB(注:基板排针接口与模块插针序号正确对应,不可反插。
否则,模块可能烧坏。
)2.用USB连接线,连接配置基板与电脑。
配置基板通过USB口供电。
电脑端打开ZigBeeConfig.exe3.查看端口号,,,(如何查看端口号,详见备注2)4.参数设置,配置步骤如图。
串口波特率:9600校验:无校验停止位:1个停止位是否启用硬件控制流:不勾选调试等级:0AT命令是否回显:不勾选网络号:自行设置(同一网络内模块和网关的网络号必须相同)节点类型:路由 分节点网络地址:自行设置(同一网络内的设备不能有相同网络地址) 透传地址:0 重新自52A8加入网络:勾选 物理信道:26 应用模式: 透传模块设置关键参数说明:网络号:网络号是ZigBee 判断是否在同一个网络的标志,只有网络号相同的设备才会互相组网,互相通信。
节点类型:同一网络,有且仅有一个协调器。
路由具备转发其他模块数据功能,终端不具有该功能。
1 92 34 5 67 8分节点网络地址:即ZigBee 设备本机在网络内的地址标志,协调器不能修改,默认固定为0,路由或终端可设置为非0 的其它数值,一个ZigBee 设备设置完网络地址后这个地址在本网络内就是唯一的,不可再重复加入这个地址的设备。
透传地址:即本ZigBee 设备串口收到的数据要发送的目标ZigBee 设备的分节点网络地址,在透传模式下,只要指定了透传地址,那么本设备发出的数据都会发送给那个分节点网络地址的zibgee 设备。
例如:ZigBee1(分节点网络地址为10)---ZigBee2(分节点网络地址为13)ZigBee1 要把串口收到的数据发给ZigBee2,ZigBee1 的透传地址就要指定为13,ZigBee2 把串口收到的数据发给ZigBee1,那ZigBee2 的透传地址就要设置为10。
物理信道:要互相通信的设备必须设置为一样的信道,推荐使用15,20,25,26 信道,可减少WIFI的干扰。
Zigbee无线通信技术

Zigbee无线通信技术Zigbee在中国被译为"紫蜂",是一种基于IEEE802.15.4协议的最近发展起来的一种短距离无线通信技术,功耗低,被业界认为是最有可能应用在工控场合的无线方式。
Zigbee 是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,在整个网络范围内,每一个Zigbee网络数传模块之间可以相互通信,每个网络节点间的距离可以从标准的75m无限扩展。
与移动通信的CDMA网或GSM网不同的是,Zigbee网络主要是为工业现场自动化控制数据传输而建立,因而,它必须具有简单,使用方便,工作可靠,价格低的特点。
而移动通信网主要是为语音通信而建立,每个基站价值一般都在百万元人民币以上,而每个Zigbee“基站”却不到1000元人民币。
每个Zigbee网络节点不仅本身可以作为监控对象,例如其所连接的传感器直接进行数据采集和监控,还可以自动中转别的网络节点传过来的数据资料。
除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。
Zigbee起源2002年10月 ZigBee Alliance成立。
2004年11月 ZigBee V1.0诞生,它是zigbee的第一个规范,但由于推出仓促,存在一些错误。
2005年06月 zigbee V1.0正式发布。
2006年11月推出ZigBee 2006,比较完善。
2007年底 ZigBee PRO推出。
在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。
对工业,家庭自动化控制和工业遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化,对无线数据通信的需求越来越强烈,而且,对于工业现场,这种无线数据传输必须是高可靠的,并能抵抗工业现场的各种电磁干扰。
因此,经过人们长期努力,ZigBee协议在2003年正式问世。
ZigBee协议栈初始化网络启动流程

ZigBee协议栈初始化网络启动流程ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络。
基本流程:main()->osal_init_system()->osalInitTasks()->ZDApp_Init(),进协议栈初始化函数ZDApp_Init()。
1.1 进入程序入口main()。
ZMain.c中C++ Codeint main( void ){// Turn off interruptsosal_int_disable( INTS_ALL );// Initialization for board related stuff such as LEDsHAL_BOARD_INIT();// Make sure supply voltage is high enough to runzmain_vdd_check();// Initialize board I/OInitBoard( OB_COLD );// Initialze HAL driversHalDriverInit();// Initialize NV Systemosal_nv_init( NULL );// Initialize the MACZMacInit();// Determine the extended addresszmain_ext_addr();// Initialize basic NV itemszgInit();#ifndef NONWK// Since the AF isn't a task, call it's initialization routine afInit();#endif// Initialize the operating systemosal_init_system();// Allow interruptsosal_int_enable( INTS_ALL );// Final board initializationInitBoard( OB_READY );// Display information about this devicezmain_dev_info();/* Display the device info on the LCD */#ifdef LCD_SUPPORTEDzmain_lcd_init();#endif#ifdef WDT_IN_PM1/* If WDT is used, this is a good place to enable it. */ WatchDogEnable( WDTIMX );#endifosal_start_system(); // No Return from herereturn 0; // Shouldn't get here.} // main()1.2 给任务添加IDsapi.c中C++ Codevoid osalInitTasks( void ) //为各自进程添加ID 用于任务的查找{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 );}1.3 初始化ZigBee协议栈网络ZDApp.cC++ Codevoid ZDApp_Init( uint8 task_id ){// Save the task ID// Initialize the ZDO global device short address storageZDAppNwkAddr.addrMode = Addr16Bit;ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;(void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.// Check for manual "Hold Auto Start"//检测到有手工设置HAL_KEY_SW_1则会设置devState = DEV_HOLD,从而避开网络初始化ZDAppCheckForHoldKey();// Initialize ZDO items and setup the device - type of device to create.ZDO_Init(); //通过判断预编译来开启一些函数功能// Register the endpoint description with the AF// This task doesn't have a Simple description, but we still need// to register the endpoint.afRegister( (endPointDesc_t *)&ZDApp_epDesc );#if defined( ZDO_USERDESC_RESPONSE )ZDApp_InitUserDesc();#endif // ZDO_USERDESC_RESPONSE// Start the device?if ( devState != DEV_HOLD ){ZDOInitDevice( 0 );}else{// Blink LED to indicate HOLD_STARTHalLedBlink ( HAL_LED_4, 0, 50, 500 );}} /* ZDApp_Init() */如果设置devState为DEV_HOLD,则不会执行ZDOInitDevice;反之,系统会调用此函数是设备组网或者入网。
17_ZigBee组网实验说明-WiFi模块

16_ZigBee传感器组网——WiFi模块实验现象:此实验只在协调器节点上进行,下载程序后,ZigBee节点的串口与电脑连接,节点上的WiFi模块与路由器连接,实现ZigBee串口和服务器透传。
传感器介绍:W-003 WiFi模块是蜂汇物联科技基于Espressif公司的ESP8266EX芯片研发的,模块集成了透传功能,支持微信Airkiss 2.0协议,即拿即用,支持串口AT 指令集,服务器AT指令集,用户通过串口即可使用网络访问的功能,模块支持标准的IEEE802.11 b/g/n 协议和完整的TCP/IP 协议栈,支持STA/AP/STA+AP工作模式、支持SmartConfig、串口透传、IO口控制等功能.实现平台:ZigBee传感器节点硬件说明:WiFi模块通过串口与CC2530通信,WiFi模块已经烧写了固件,操作比较简单,具体的使用方法参考手册;当模块连接上路由器时,D1指示灯会亮;当模块连接上Server时,D2指示灯亮。
实验过程:分三个步骤,如下:一:设置好PC端的IP,然后下载CoordinatorEB至ZigBee节点二:打开串口调试助手,启动设备;打开网络调试助手,选择UDP,设置好IP和端口;串口发送转发到网络中,网络发送后在串口中显示。
一:下载CoordinatorEB至ZigBee节点打开例程,修改SampleApp_ProcessEvent函数中SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件,下载器连接好ZigBee传感器节点,下载CoordinatorEB至ZigBee节点。
运行程序,ZigBee节点通过USB连接到电脑,打开电脑串口,串口设置如下:波特率:115200,数据位:8位,停止位:1位,无奇偶校验位。
二:ZigBee串口和WiFi模块实现透传。
打开串口调试助手,启动设备;打开网络调试助手,选择UDP,设置好IP和端口;串口发送转发到网络中,网络发送后在串口中显示。
ZigBee基础知识讲解

ZigBee基础知识讲解目录一、ZigBee技术概述 (2)二、ZigBee网络结构 (3)2.1 网络拓扑结构 (4)2.2 设备角色 (5)2.3 基本网络模式 (6)三、ZigBee协议栈 (7)3.1 物理层 (8)3.2 链路层 (10)3.3 网络层 (11)3.4 应用层 (12)四、ZigBee设备类型 (13)4.1 网络协调器 (14)4.2 节点设备 (15)4.3 外部设备 (17)五、ZigBee通信机制 (18)5.1 数据传输方式 (19)5.2 通信协议 (21)5.3 数据传输速率与容量 (22)六、ZigBee安全机制 (23)6.1 认证机制 (25)6.2 隐私保护 (26)6.3 安全服务与应用 (27)七、ZigBee设备配置与调试 (29)7.1 设备初始化 (30)7.2 网络参数设置 (32)7.3 设备状态监控与维护 (33)八、ZigBee应用案例分析 (35)8.1 智能家居系统 (36)8.2 工业自动化控制系统 (38)8.3 智能交通系统 (39)8.4 公共安全监测系统 (41)九、ZigBee发展趋势与挑战 (42)9.1 技术发展趋势 (44)9.2 应用前景展望 (45)9.3 面临的挑战与应对策略 (47)一、ZigBee技术概述定义与特点:ZigBee是基于IEEE 标准的无线通信技术,具有低功耗、低数据速率、低成本和可靠性的特点。
ZigBee联盟通过扩展IEEE标准,增加了网络、安全和应用层的功能。
该技术主要适用于需要长时间工作且电池寿命非常关键的应用。
应用领域:ZigBee技术广泛应用于智能家居、工业自动化、智能农业、智能交通等领域。
智能家居中的照明控制、安防系统。
网络结构:ZigBee网络主要由协调器(Coordinator)、路由器(Router)和终端设备(End Device)组成。
协调器负责创建和加入网络,路由器负责路由和数据转发,终端设备则执行特定的任务。
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网络设备启动—主要函数说明2010-07-09 20:32:17| 分类:Zigbee|字号订阅使用的协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.11、ZDApp_Init()及其中几个函数的说明.(1)ZDApp_Init()****************************************void ZDApp_Init( byte task_id ){uint8 capabilities;// Save the task IDZDAppTaskID = task_id;// Initialize the ZDO global device short address storage ZDAppNwkAddr.addrMode = Addr16Bit;ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;//0xFFFE(void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.// Check for manual"Hold Auto Start"//检测到有手动设置SW_1则会设置devState = DEV_HOLD,从而避开网络初始化ZDAppCheckForHoldKey();// Initialize ZDO items and setup the device - type of device to create.ZDO_Init(); //通过预编译来初始化一些功能函数.// Register the endpoint description with the AF// This task doesn't have a Simple description, but we still need // to register the endpoint.afRegister( (endPointDesc_t *)&ZDApp_epDesc );#if defined( ZDO_USERDESC_RESPONSE )ZDApp_InitUserDesc();#endif // ZDO_USERDESC_RESPONSE// set broadcast address mask to support broadcast filteringNLME_GetRequest(nwkCapabilityInfo, 0, &capabilities);NLME_SetBroadcastFilter( capabilities );// Start the device?if ( devState != DEV_HOLD ){ZDOInitDevice( 0 );} /*如果devState=DEV_HOLD,则不会调用ZDOInitDevice()来初始化网络不组网也不进网.LED4闪烁指示这是一个非自动启动模式,等待应用程序来开启是网络设备*/else{// Blink LED to indicate HOLD_STARTHalLedBlink ( HAL_LED_4, 0, 50, 500 );}ZDApp_RegisterCBs();}****************************************这里说明三个函数: ZDAppCheckForHoldKey()ZDO_Init()ZDOInitDevice( 0 )(1)ZDAppCheckForHoldKey()**************************void ZDAppCheckForHoldKey( void ){#if (defined HAL_KEY) && (HAL_KEY == TRUE)//个人认为:可以直接通过读取按键来看是否需要采用HOLD_START模式//如果发现SW_1按下(普通按键吧)/向上(Joystick up),则设置DEV_HOLD;// Get Keypad directly to see if a HOLD_START is needed.// Hold down the SW_BYPASS_START key (see OnBoard.h)// while booting to avoid starting up the device.if ( HalKeyRead () == SW_BYPASS_START) //HAL_KEY_SW_1{// Change the device state to HOLD on start updevState = DEV_HOLD;}#endif // HAL_KEY}参见基本问题说明3.*************************(2)、ZDO_Init()*************************void ZDO_Init( void ){/*//REFLECTOR如果定义了这个编译选项则使用“源绑定”,In the Zigbee 2006 release,the binding mechanism is implemented in all devices and is called source binding.绑定机制可以在所有设备中实现, 04版的只能在协调器中实现.*/// Initialize ZD items#if defined ( REFLECTOR )ZDO_EDBind = NULL;#endif// Setup the device - type of device to create.ZDODeviceSetup();}*************************看下ZDODeviceSetup(),具体见各节点启动流程记录.*************************//Call set functions depending on the type of device compiled.//根据编译选项来设置;比如simpleApp中的灯节点,预编译了ZDO_COORDINATOR和//REFLECTOR和SOFT_START,因此会根据这些来选择开启一些函数功能. static void ZDODeviceSetup( void ){#if defined( ZDO_COORDINATOR ) //编译了ZDO_COORDINATOR NLME_CoordinatorInit();#endif#if defined ( REFLECTOR ) //编译了REFLECTOR#if defined( ZDO_COORDINATOR ) //编译了REFLECTOR且编译了ZDO_COORDINATOR APS_ReflectorInit( APS_REFLECTOR_PUBLIC ); #else //编译了REFLECTOR且编译了路由器或终端APS_ReflectorInit( APS_REFLECTOR_PRIVATE ); //路由器/终端#endif #endif//没有编译ZDO_COORDINATOR或者编译了SOFT_START#if !defined( ZDO_COORDINATOR ) || defined( SOFT_START ) NLME_DeviceJoiningInit();#endif}*************************(3)、ZDOInitDevice()*************************uint8 ZDOInitDevice( uint16 startDelay ){//初始化设备网络状态为ZDO_INITDEV_NEW_NETWORK_STATE:新的网络状态.//可能意味着ZCD_NV_STARTUP_OPTION不能恢复,或没有任何网络状态恢复uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; uint16 extendedDelay = 0;devState = DEV_INIT; // Remove the Hold state//----------------------------------// Initialize leave control logic//函数读取NV项目ZCD_NV_LEAVE_CTRL的值,ZDApp_LeaveCtrl指向这个值ZDApp_LeaveCtrlInit();// Check leave control reset settings//设备的断开会造成DEV_HOLD状态,这里面设置的.ZDApp_LeaveCtrlStartup( &devState, &startDelay );// Leave may make the hold state come back//以上两个函数设置了对设备离开时的控制,如果有延时则延时,没有则//把设备状态设为DEV_HOLDif ( devState == DEV_HOLD )//ZDO_INITDEV_LEAVE_NOT_STARTED:该设备没有在网络中,下次调用才启用.return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); // Don't join - (one time). //----------------------------------#if defined ( NV_RESTORE )// Get Keypad directly to see if a reset nv is needed.// Hold down the SW_BYPASS_NV key (defined in OnBoard.h)// while booting(引导) to skip past NV Restore.if ( HalKeyRead() == SW_BYPASS_NV )//SW_BYPASS_NV按键处于按下状态时,则避开网络层的NV存储networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; //设备网络状态为新的网络状态else{// Determine if NV should be restored//函数返回的设备网络状态要么是新的网络状态;要么是恢复的网络状态;以此//来确定要不要读取NV里相应条目来恢复网络先前状态networkStateNV = ZDApp_ReadNetworkRestoreState();}//如果设备的网络状态为恢复的网络状态if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE ) {//恢复设备先前的网络状态参数//设置devStartMode = MODE_RESUME!!!!networkStateNV = ZDApp_RestoreNetworkState();}else //如果设备的网络状态为新的网络状态,在下面进行处理{// Wipe out(清除) the network state in NV NLME_InitNV();NLME_SetDefaultNV(); //设置默认NV条目}#endif//如果设备的网络状态为新的网络状态if ( networkStateNV ==ZDO_INITDEV_NEW_NETWORK_STATE ){//根据预编译来设置设备新的网络状态参数ZDAppDetermineDeviceType(); /*!!!!*/// Only delay if joining network - not restoring network state extendedDelay = (uint16)((NWK_START_DELAY + startDelay)+ (osal_rand() & EXTENDED_JOINING_RANDOM_MASK)); }// Initialize device securityZDApp_SecInit( networkStateNV );// Trigger the network startZDApp_NetworkInit( extendedDelay );return ( networkStateNV );}*************************看下五个函数:ZDApp_LeaveCtrlInit()ZDApp_ReadNetworkRestoreState()ZDApp_RestoreNetworkState()ZDAppDetermineDeviceType()ZDApp_NetworkInit( extendedDelay )(3.1)ZDApp_LeaveCtrlInit()*************************void ZDApp_LeaveCtrlInit( void ){uint8 status;// Initialize control stateZDApp_LeaveCtrl = ZDAPP_LEAVE_CTRL_INIT; //0//初始化一个NV条目.这个函数检查一个NV条目的存在与否.//如果不存在,它将被建立和初始化随着数据一起传给函数,//这个函数必须在调用osal_nv_read() or osal_nv_write()之前被调用status = osal_nv_item_init( ZCD_NV_LEAVE_CTRL, //用户定义的条目ID sizeof(ZDApp_LeaveCtrl), //条目的大小&ZDApp_LeaveCtrl ); //指向条目初始化的数据if ( status == ZSUCCESS ) //这个NV条目存在,则把这个条目值读出来,ZDApp_LeaveCtrl指向它{// Read saved controlosal_nv_read( ZCD_NV_LEAVE_CTRL, //用户定义的项目ID0, //Memory offset into item in bytes.sizeof( uint8 ),//条目长度&ZDApp_LeaveCtrl); //数据保存缓冲区指针}}*************************(3.2)ZDApp_ReadNetworkRestoreState()如果预编译了NV_RESTORE并且没有手工设置避开NV存储机制,则通过这个函数来判断是否需要恢复设备原先的网络状态.*************************//返回要么是新的网络状态;要么是恢复的网络状态//返回默认为恢复的状态,但如果从读取ZCD_NV_STARTUP_OPTION这个NV 条目中//读取出来的设备网络状态是ZCD_STARTOPT_DEFAULT_NETWORK_STATE,则返回//新的网络状态ZDO_INITDEV_NEW_NETWORK_STATE uint8ZDApp_ReadNetworkRestoreState( void ){ //设备的网络状态为恢复的网络状态uint8 networkStateNV = ZDO_INITDEV_RESTORED_NETWORK_STATE;// Look for the New Network State option. 默认的网络状态if( zgReadStartupOptions() & ZCD_STARTOPT_DEFAULT_NETWORK_STATE ) {//网络状态初始化,即新的网络状态,可能意味着没有任何网络状态恢复networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;}return ( networkStateNV );}*************************(3.3)ZDApp_RestoreNetworkState()如果3.2的函数得到的networkStateNV为恢复的网络状态,则通过这个函数来读取存储在NV里的先前的网络状态.*************************uint8 ZDApp_RestoreNetworkState( void ){…………// Initialize NWK NV itemsnvStat = NLME_InitNV();if ( nvStat != NV_OPER_FAILED ){if ( NLME_RestoreFromNV() ){// Are we a coordinator//设备的网络状态为恢复的网络状态则恢复先前网络状态参数//先判断如果短地址是0则设置设备逻辑类型为协调器,并设置//devStartMode = MODE_RESUME,其它情况设置devStartMode = MODE_RESUME ZDAppNwkAddr.addr.shortAddr =NLME_GetShortAddr();if ( ZDAppNwkAddr.addr.shortAddr == 0 ) //如果短地址是0,即协调器{ZDO_Config_Node_Descriptor.LogicalType =NODETYPE_COORDINATOR; //!!!!!}devStartMode = MODE_RESUME; //MODE_RESUME!!!!!!!!}elsenvStat = NV_ITEM_UNINIT;…………if ( nvStat == ZSUCCESS )return ( ZDO_INITDEV_RESTORED_NETWORK_STATE );//说明设备的网络状态已经恢复elsereturn ( ZDO_INITDEV_NEW_NETWORK_STATE );}*************************(3.4)ZDAppDetermineDeviceType()如果设备的网络状态为新的网络状态(第一种情况:未编译NV_RESTORE则在ZDOInitDevice()开头初始化为ZDO_INITDEV_NEW_NETWORK_STATE;第二种情况:编译了NV_RESTORE但ZDApp_ReadNetworkRestoreState()得到的设备网络状态为ZDO_INITDEV_NEW_NETWORK_STATE,即不能恢复或无状态恢复.).这个函数仅适用于编译了SOFT_START的设备,不支持终端设备.比如对于自动启动模式的SampleApp,没有编译SOFT_START.因此本函数对其没作用.具体见各类型设备启动流程.************************** @fn ZDAppDetermineDeviceType()** @brief Determines the type of device to start. Right now* this only works with the SOFT_START feature. So it doesn't * support the end device type.* //终端逻辑类型只能作为终端*///像simpleApp这个例子中,灯节点和中心收集节点都同时预编译了//SOFT_START和HOLD_AUTO_START;而开关节点和传感器节点都只预编译了//HOLD_AUTO_START;//开关节点和传感器节点无论按哪个键都是作为终端设备启动的//而灯节点和中心收集节点可以选择作为协调器或路由器.void ZDAppDetermineDeviceType( void ){/*像simpleApp中灯节点和中心收集节点都编译了SOFT_START, zgDeviceLogicalType在ZGlobals.h中被初始化为ZG_DEVICETYPE_SOFT.而像开关节点和传感器节点没有编译SOFT_START,则zgDeviceLogicalType被初始化为ZG_DEVICETYPE_ENDDEVICE.之前卡在这里很长时间,因为像灯节点和中心收集节点编译过SOFT_START,那zgDeviceLogicalType不就等于ZG_DEVICETYPE_SOFT,最终在这个函数里也只能执行devStartMode = MODE_JOIN这一句,这与灯节点和中心收集节点可以通过按键来选择作为协调器或路由器不符,纠结了很久,最后才发现,在按键选择设备的逻辑类型后,会把这个逻辑类型值写入NV条目ZCD_NV_LOGICAL_TYPE,而ZDO全局变量zgDeviceLogicalType等于NV条目ZCD_NV_LOGICAL_TYPE的值,通过按键选择逻辑类型会改变zgDeviceLogicalType的值.比如灯节点按K1选择设备的逻辑类型为协调器ZG_DEVICETYPE_COORDINATOR,写入NV条目ZCD_NV_LOGICAL_TYPE存储,则此时zgDeviceLogicalType的值即为ZG_DEVICETYPE_COORDINATOR!!!见基本问题说明5. */if ( zgDeviceLogicalType == ZG_DEVICETYPE_ENDDEVICE )return;#if defined ( SOFT_START )//if ( zgDeviceLogicalType == ZG_DEVICETYPE_COORDINATOR ){devStartMode = MODE_HARD; // Start as a coordinatorZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR; }else{if ( zgDeviceLogicalType == ZG_DEVICETYPE_ROUTER ){softStartAllowCoord = FALSE; // Don't allow coord to start continueJoining = TRUE;}devStartMode = MODE_JOIN; // Assume joining}#endif // SOFT_START}*************************(3.5)ZDApp_NetworkInit( extendedDelay )函数设置触发事件ZDO_NETWORK_INIT.*************************void ZDApp_NetworkInit( uint16 delay ){if ( delay ){// Wait awhile before starting the deviceosal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay ); //需要延时}else{osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT ); //不需延时} }*****************************************************************2、ZDO_StartDevice()ZDApp_event_loop()对事件ZDO_NETWORK_INIT处理如下:*************************if ( events & ZDO_NETWORK_INIT ){// Initialize apps and start the networkdevState = DEV_INIT;ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,DEFAULT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER );// Return unprocessed eventsreturn (events ^ ZDO_NETWORK_INIT);}*************************两个重要的网络状态参数:ZDO_Config_Node_Descriptor.LogicalType和devStartMode,ZDO_Config_Node_Descriptor.LogicalType的初始化见基本问题说明6.devStartMode的初始化见4.但两个参数的值可以通过函数(3.3)ZDApp_RestoreNetworkState()[如果编译了NV_RESTORE]和函数(3.4)ZDAppDetermineDeviceType()来改变.*************************void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder ){ZStatus_t ret;ret = ZUnsupportedMode;#if defined(ZDO_COORDINATOR)if ( logicalType == NODETYPE_COORDINATOR ){if ( startMode == MODE_HARD ) //MODE_HARD{devState = DEV_COORD_STARTING; //Started as Zigbee Coordinator ret =NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,zgDefaultStartingScanDuration, beaconOrder,superframeOrder, false );}else if ( startMode == MODE_RESUME ) //MODE_RESUME 恢复{// Just start the coordinator devState =DEV_COORD_STARTING;ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );}else //错误,启动模式未知{…………}#endif// !ZDO_COORDINATORif ( logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE ){if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) ) {devState = DEV_NWK_DISC; //Discovering PAN's to join#if defined( MANAGED_SCAN )ZDOManagedScan_Next();ret =NLME_NetworkDiscoveryRequest( managedScanChannelMask, BEACON_ORDER_15_MSEC );#elseret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration );#endif}else if ( startMode == MODE_RESUME )//MODE_RESUME 恢复if ( logicalType == NODETYPE_ROUTER ){…………nwk_ScanJoiningOrphan(&scanCnf);ret = ZSuccess;}else{devState = DEV_NWK_ORPHAN; //孤儿ret =NLME_OrphanJoinRequest( zgDefaultChannelList,zgDefaultStartingScanDuration );}}else{…………}}…………}*************************3、协调器建网,路由器/终端入网的回调函数(1)ZDO_NetworkFormationConfirmCB():协调器建立网络请求的回调函数* @brief This function reports the results of the request to* initialize a coordinator in a network.** @param Status - Result of NLME_NetworkFormationRequest()(2)ZDO_StartRouterConfirmCB():作为路由器启动请求的回调函数* @brief This function reports the results of the request to* start functioning as a router in a network.** @param Status - Result of NLME_StartRouterRequest()(3)ZDO_JoinConfirmCB():路由器/终端加入网络请求的回调函数* @brief This function allows the next hight layer to be notified * of the results of its request to join itself or another* device to a network.** @param Status - Result of NLME_JoinRequest()(4) ZDO_NetworkDiscoveryConfirmCB():路由器/终端发现网络请求的回调函数* @fn ZDO_NetworkDiscoveryConfirmCB** @brief This function returns a choice of PAN to join.** @param ResultCount - Number of routers discovered* @param NetworkList - Pointer to list of network descriptors四种回调函数会分别触发ZDAppTaskID相应事件:ZDO_NetworkFormationConfirmCB():osal_set_event( ZDAppTaskID, ZDO_NETWORK_START );ZDO_StartRouterConfirmCB():osal_set_event( ZDAppTaskID,ZDO_ROUTER_START );ZDO_JoinConfirmCB():ZDApp_SendMsg( ZDAppTaskID,ZDO_NWK_JOIN_IND, sizeof(osal_event_hdr_t), (byte*)NULL );ZDO_NetworkDiscoveryConfirmCB(): ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_DISC_CNF, sizeof(ZDO_NetworkDiscoveryCfm_t), (byte *)&msg );参照上面ZDO_StartDevice()函数,可以看到相应功能的请求函数.回调函数具体调用流程参见种类型设备的启动流程.。