ZigBe入门之基础概念2

设备类型

1.协调器  具备协调功能、路由功能

2.路由器  具备路由功能

3.终端设备  空

Note.一个网络当中,只有且必须有一个协调器,可以有多个路由器,也可以有多个终端设备

协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道(2.4G一共有16个信道)和一个网络

ID(也称之为 PAN ID,即 Personal Area Network ID:个人局域网ID号),随后启动整个网络。协调器也可以用来协

助建立网络中安全层和应用层的绑定(bindings)。协调器功能很强大。

注意,协调器的角色主要涉及网络的启动和配臵。一旦这些都完成后,协调器的工作就像

一个路由器(或者消失 go away)。由于 ZigBee 网络本身的分布特性,因此接下来整个网络的操

作就不在依赖协调器是否存在。

路由器的功能主要是:允许其他设备加入网络,多跳路由(信号中转和中继)和协助它自己的由电池供电的终

端设备的通讯。

通常,路由器希望是一直处于活动状态,因此它必须使用主电源供电。但是当使用树状网

络拓扑结构时,允许路由间隔一定的周期操作一次,这样就可以使用电池给其供电。

终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一个

电池供电设备。通常,终端设备对存储空间(特别是 RAM 的需要)比较小。

协议栈规范( Stack Profile)

协议栈规范由 ZigBee 联盟定义指定。在同一个网络中的设备必须符合同一个协议栈规范

(同一个网络中所有设备的协议栈规范必须一致) 。

ZigBee 联盟为 ZigBee 协议栈 2007 定义了 2 个规范:ZigBee 和 ZigBee PRO。所有的设备只

要遵循该规范,即使在不同厂商买的不同设备同样可以形成网络。

如果应用开发者改变了规范, 那么他的产品将不能与遵循 ZigBee 联盟定义规范的产品组成

网络,也就是说该开发者开发的产品具有特殊性,我们称之为“关闭的网络” ,也就是说它的

设备只有在自己的产品中使用,不能与其他产品通信。更改后的规范可以称之为“特定网络”

规范。

协议栈规范的 ID 号可以通过查询设备发送的 beacon(信标) 帧获得。在设备加入网络之前,首先

需要确认协议栈规范的 ID。 “特定网络” 规范 ID 号为 0; ZigBee 协议栈规范的 ID 号为 1; ZigBee

PRO 协议栈规范的 ID 号为 2。协议栈规范的 ID(STACK_PROFILE_ID)在 nwk_globals.h 中

拓扑结构

ZigBee 网络支持星状、 树状和网状三种网络拓扑结构, 如下图所示, 分别依次是星状网络,

树(簇)状网络和网状网络

星状网络由一个 PAN 协调器和多个终端设备组成,只存在 PAN 协调器与终端的通讯,

终端设备间的通讯都需通过 PAN 协调器的转发。

树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子

节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输。

网状网络是树状网络基础上实现的,与树状网络不同的是,它允许网络中所有具有路由功

能的节点直接互连,由路由器中的路由表实现消息的网状路由。该拓扑的优点是减少了消息延

时,增强了可靠性,缺点是需要更多的存储空间开销。

在 Z-Stack 中网络拓扑结构定义如下:

#define NWK_MODE_STAR 0
#define NWK_MODE_TREE 1
#define NWK_MODE_MESH 2
#if ( STACK_PROFILE_ID == ZIGBEEPRO_PROFILE )
#define NWK_MODE NWK_MODE_MESH
#elif ( STACK_PROFILE_ID == HOME_CONTROLS )
#define NWK_MODE NWK_MODE_MESH
#elif ( STACK_PROFILE_ID == GENERIC_STAR )
#define NWK_MODE NWK_MODE_STAR
#elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
#define NWK_MODE NWK_MODE_MESH
#endif

信标与非信标模式

ZigBee 网络的工作模式可以分为信标(Beaeon)和非信标(Non-beaeon)两种模式。信标

模式实现了网络中所有设备的同步工作和同步休眠,以达到最大限度的功耗节省,而非信标模

式则只允许终端设备进行周期性休眠,协调器 和所有路由器 设备必须长期处于工作状态。

信标模式下,协调器负责以一定的间隔时间(一般在 15ms-4mins 之间)向网络广播信标

帧,两个信标帧发送间隔之间有 16 个相同的时槽,这些时槽分为网络休眠区和网络活动区两

个部分,消息只能在网络活动区的各时槽内发送。

非信标模式下, ZigBee 标准采用父节点为终端设备子节点缓存数据, 终端设备主动向其父

节点提取数据的机制,实现终端设备的周期性(周期可设臵)休眠。网络中所有父节点需为自

己的终端设备子节点缓存数据帧,所有终端设备子节点的大多数时间都处于休眠模式,周期性

的醒来与父节点握手以确认自己仍处于网络中,其从休眠模式转入数据传输模式一般只需要

15ms。(一般采用非信标模式)

地址

地址定义

ZigBee 设备有两种类型的地址。一种是 64 位 IEEE 地址(全球唯一,制造商生产时就分配好),即 MAC 地址,另一种是 16 位

网络地址(协调器在建立网络时,对其他设备进行网络地址分配)。

网络 地址 分配

ZigBee2006 和 ZigBee 2007 使用分布式寻址方案来分配网络地址。ZigBee 2007 PRO 使用的随机地址分配机制。

分布式寻址方案保证在整个网络中所有分配的地址是唯一的。这一点是必须的,因为这样才能保证一个特定的数据包能够发

给它指定的设备,而不出现混乱。同时,这个寻址算法本身的分布特性保证设备只能与他的父

辈设备通讯来接受一个网络地址。不需要整个网络范围内通讯的地址分配,这有助于网络的可

测量性。

ZigBee 2007 PRO 使用的随机地址分配机制,对新加入的节点使用随机地址分配,为保证

网络内地址分配不重复,使用其余的随机地址再进行分配。当一个节点加入时,将接收到父节

点的随机分配地址,然后产生“设备声明” (包含分配到的网络地址和 IEEE 地址)发送至网

络中的其余节点。如果另一个节点有着同样的网络地址,则通过路由器广播“网络状态-地址

冲突”至网络中的所有节点。所有发生网络地址冲突的节点更改自己的网络地址,然后再发起

“设备声明”检测新的网络地址是否冲突。

寻址

为了向一个在 ZigBee 网络中的设备发送数据,应用程序通常使用 AF_DataRequest()函数。

数据包将要发送给一个 afAddrType_t(在 ZComDef.h 中定义)类型的目标设备。

typedef struct
{
	union//联合体
	{
		uint16 shortAddr;//短地址
		ZLongAddr_t extAddr;//长地址
	} addr;
	afAddrMode_t addrMode;//地址类型
	byte endPoint;//端点值
	uint16 panId; // used for the INTER_PAN feature//个域网ID号
} afAddrType_t;

注意,除了网路地址之外,还要指定地址模式参数。目的地址模式可以设臵为以下几个值:

typedef enum
{
afAddrNotPresent = AddrNotPresent,
afAddr16Bit = Addr16Bit,//16位短地址
afAddr64Bit = Addr64Bit,//64位长地址
afAddrGroup = AddrGroup,//组播地址
afAddrBroadcast = AddrBroadcast//广播地址
} afAddrMode_t;

因为在 Zigbee 中,数据包可以单点传送(unicast)(从一个设备发到另一个设备),多点传送(multicast)

(发到group里的所有成员)或者广播传送(发给所有的成员),所以

必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传送给一

组设备,而广播数据包则要发送给整个网络的所有节点。这个将在下面详细解释。

单点传送(Unicast)

Uicast 是标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设备。将

afAddrMode 设臵为 Addr16Bit 并且在数据包中携带目标设备地址。

间接传送(Indirect)

当应用程序不知道数据包的目标设备在哪里的时候使用的模式。将模式设臵为

AddrNotPresent并且目标地址没有指定。 取代它的是从发送设备的栈的绑定表中查找目标设备。

这种特点称之为源绑定。

当数据向下发送到达栈中,从绑定表中查找并且使用该目标地址。这样,数据包将被处理

成为一个标准的单点传送数据包。如果在绑定表中找到多个设备,则向每个设备都发送一个数

据包的拷贝。

广播传送(broadcast)

当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式。地址模式设臵为

AddrBroadcast。目标地址可以设臵为下面广播地址的一种:

NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送到网络上的所有设

备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或

者消息超时(NWK_INDIRECT_MSG_TIMEOUT 在 f8wConifg.cfg 中)。

NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——数据包将被传送到网络上的所

有在空闲时打开接收的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。

NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——数据包发送给所有的路由器,包

括协调器。

组寻址(Group Addressing)

当应用程序需要将数据包发送给网络上的一组设备时,使用该模式。地址模式设臵为

afAddrGroup 并且 addr.shortAddr 设臵为组 ID。

在使用这个功能呢之前,必须在网络中定义组。(参见 Z-stack API 文档中的 aps_AddGroup()函

数)。

注意组可以用来关联间接寻址。 再绑定表中找到的目标地址可能是是单点传送或者是一个组地

址。另外,广播发送可以看做是一个组寻址的特例。

下面的代码是一个设备怎样加入到一个 ID 为 1 的组当中:

aps_Group_t group;
// Assign yourself to group 1
group.ID = 0x0001;
group.name[0] = 0; // This could be a human readable string
aps_AddGroup( SAMPLEAPP_ENDPOINT, &group );//SAMPLEAPP_ENDPOINT:端点号,&group :地址

重要设备地址 (Important Device Ad dr esses)

应用程序可能需要知道它的设备地址和父亲地址。 使用下面的函数获取设备地址(在 ZStack

API 中定义):

NLME_GetShortAddr()——返回本设备的 16 位网络地址

NLME_GetExtAddr()—— 返回本设备的 64 位扩展地址

使用下面的函数获取该设备的父亲设备的地址:

NLME_GetCoordShortAddr()——返回本设备的父亲设备的 16 位网络地址

NLME_GetCoordExtAddr()—— 返回本设备的父亲设备的 64 位扩展地址

时间: 2024-10-01 08:06:02

ZigBe入门之基础概念2的相关文章

ZigBee入门之基础概念3

第三讲: zigbee术语 射频收发器:如cc2420 一个节点可以对应多个设备 一个设备包含多个端点 每个端点又有很多群集(输出群集.输入群集) 每个群集有一个或多个属性 属性 Attribute 是一个反映物理数量或状态的数据值,比如开关值(On/Off) ,温度值.百 分比等. 群集(簇) Cluster 是包含一个或多个属性(attribute)的群组.简单的说,群集就是属性的集合. 每个群集都被分配一个唯一的群集 ID 且每个群集最多有 65536 个属性 设备描述 Device De

Zigbee入门之基础概念

大二就开始接触ZigBee硬件开发确实是一个不小的挑战,尤其是对一个计算机专业的同学而言. 最近开始写项目申请书,各种资料看的头都大了.为了以后更好的进行开发,这次记录了一些名词和解释 上位机和下位机 上位机是指可以直接发出操控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等).下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcompute

足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一)

在足球赛事数据库以及统计分析预测平台中,有很多概念,如果不搞懂,很难进行下一步的工作.所以为了配合团队人员的学习和任务进行,特意编写这篇文章.如果有其他问题和不懂的,请留言,将根据情况进行更新. 本文原文地址:足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一) 1.指数1/2/3.... 我在 足彩基础知识入门(3)足彩赔率的本质 一文中介绍了赔率的概念,那么指数的概念和赔率以及结果是相关的.我们举个例子: 如上图的比赛,前面是竞彩非让球的赔率:1.74-3.25-4.15,也就是说

MongoDB入门系列(一):基础概念和安装

概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Version:3.4 一.安装 1.下载解压 在官网下载对应操作系统版本的安装包,然后解压:我这里使用Windows环境安装测试. 2.在D盘创建Mongodb\data\db目录 3.初始化数据 最好先将bin目录加入到环境变量,否则要到命令目录下执行. mongod --dbpath D:\mongod

一步步AS400-Cobol 上手自学入门教程01 - 基础概念(原创)

先学习基础概念 1.COBOL字符:包含: User-defined words 用户定义字符 ?System-names ?Reserved words 关键字 2.用户定义字符User-defined words:合法的定义: ? A - Z ? a - z ? 0 - 9 ? - (连字符). 3.系统名 System-names Computer-names ?Language-names ?Implementor-names: Environment-name Assignment-n

【Cocos2d入门教程二】Cocos2d-x基础概念

上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: 环境设定(帧率 初始化openGl和渲染器) 场景管理 执行主循环 游戏就是个死循环 不断不断的渲染  就跟视频没两样 一帧一帧的绘制出来  话说提一下一帧为1/60秒  也就是说coco里一秒渲染60次 导演的管理:   计时器  事件管理器  动作管理器 导演继承于REF  一个单例类 获得导演类Director实例语句 au

控制台基础概念

一.引言 控制台程序(Console Application)相信是很多人接触编程的第一个界面,比如C/C++入门的Hello World程序,黑色的字符界面窗口,windows最经典的控制台程序是cmd(命令行窗口),如下图. MSDN上对控制台描述如下:用于管理基于字符的应用程序(不提供GUI界面)的输入输出. 本文主要参考MSDN上关于Console的资料,并加以整理扩充.原始资料可参考:http://msdn.microsoft.com/en-us/library/windows/des

【嵌入式4412开发板学习教程】Uboot教程之uboot基础概念和框架

[4412开发板教程]Uboot教程之uboot基础概念和框架 正在学习uboot,教程讲解的很详细,先上个笔记,视频上传到网盘后再补上...... 知识点: 1.操作系统分层的概念 Windows:bios→内核模式→用户模式→用户程序 linux:bootloader→内核→文件系统→用户程序 2.bootboader种类介绍 U-boot是最通用的bootboader.(210,4412等等) vivi 针对三星的ARM来定制2440上有用到 3.4412休眠问题 它可以直接跳过uboot

HBase入门修行基础篇

HBase入门修行基础篇 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力.HBase是Apache的Hadoop项目的子项目.HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是H