2.1 设备类型(Device Types)
在ZigBee网络中存在三种逻辑设备类型:Coordinator(协调器),Router(路由器)和End-Device(终端设备)。 ZigBee网络由一个Coordinator以及多个Router和多个End_Device组成。
2.1.1 Coordinator(协调器)
协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络ID(也称之为PAN ID,即Personal Area Network ID),随后启动整个网络。协调器也可以用来协助建立网络中安全层和应用层的绑定(bindings)。
注意,协调器的角色主要涉及网络的启动和配臵。一旦这些都完成后,协调器的工作就像一个路由器(或者消失go away)。由于ZigBee网络本身的分布特性,因此接下来整个网络的操作就不在依赖协调器是否存在。
2.1.2 Router(路由器)
路由器的功能主要是:允许其他设备加入网络,多跳路由和协助它自己的由电池供电的终端设备的通讯。
通常,路由器希望是一直处于活动状态,因此它必须使用主电源供电。但是当使用树状网络拓扑结构时,允许路由间隔一定的周期操作一次,这样就可以使用电池给其供电。‘’
2.1.3 End-Device(终端设备)
终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一个电池供电设备。通常,终端设备对存储空间(特别是RAM的需要)比较小。
2.2 协议栈规范(Stack Profile)
协议栈规范由ZigBee联盟定义指定。在同一个网络中的设备必须符合同一个协议栈规范(同一个网络中所有设备的协议栈规范必须一致)。
ZigBee联盟为ZigBee协议栈2007定义了2个规范:ZigBee和ZigBee PRO。所有的设备只要遵循该规范,即使在不同厂商买的不同设备同样可以形成网络。
如果应用开发者改变了规范,设备只有在自己的产品中使用,不能与其他产品通信。称之为“特定网络”规范。协议栈规范的 ID 号可以通过查询设备发送的 beacon 帧获得。在设备加入网络之前,首先需要确认协议栈规范的 ID。
“特定网络” 规范 ID 号为 0;ZigBee 协议栈规范的 ID 号为 1;ZigBee PRO 协议栈规范的ID 号为 2。协议栈规范的 ID(STACK_PROFILE_ID)在nwk_globals.h 中定义:
#define NETWORK_SPECIFIC 0
#define HOME_CONTROLS 1
#define ZIGBEEPRO_PROFILE 2
#define GENERIC_STAR 3
#define GENERIC_TREE 4
#if defined ( ZIGBEEPRO )
#define STACK_PROFILE_ID ZIGBEEPRO_PROFILE
#else
#define STACK_PROFILE_ID HOME_CONTROLS
#endif
2.3 拓扑结构
ZigBee 网络支持星状、树状和网状三种网络拓扑结构,
星状网络由一个PAN 协调器和多个终端设备组成,只存在PAN 协调器与终端的通讯,终端设备间的通讯都需通过PAN 协调器的转发。
树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输。
网状网络是树状网络基础上实现的,与树状网络不同的是,它允许网络中所有具有路由功能的节点直接互连,由路由器中的路由表实现消息的网状路由。该拓扑的优点是减少了消息延时,增强了可靠性,缺点是需要更多的存储空间开销。
2.4 信标与非信标模式
ZigBee网络的工作模式可以分为信标(Beaeon)和非信标(Non-beaeon)两种模
式。信标模式实现了网络中所有设备的同步工作和同步休眠,以达到最大限度的功耗节省,而非信标模式则只允许终端设备进行周期性休眠,协调器 和所有路由器 设备必须长期处于工作状态。
信标模式下,协调器负责以一定的间隔时间(一般在15ms-4mins 之间)向网络广播信标帧,两个信标帧发送间隔之间有16 个相同的时槽,这些时槽分为网络休眠区和网络活动区两个部分,消息只能在网络活动区的各时槽内发送。
非信标模式下,ZigBee 标准采用父节点为终端设备子节点缓存数据,终端设备主动向其父节点提取数据的机制,实现终端设备的周期性(周期可设臵)休眠。
2.5 地址
2.5.1 地址定义
ZigBee设备有两种类型的地址。一种是64位IEEE地址,即MAC地址,另一种是16位网络地址。
数据包可以单点传送(unicast),多点传送(multicast)或者广播传送,所以必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传送给一组设备,而广播数据包则要发送给整个网络的所有节点。
2.5.2网络地址分配
使用分布式寻址方案来分配网络地址,保证在整个网络中所有分配的地址是唯一的。保证一个特定的数据包能够发给它指定的设备,而不出现混乱。寻址算法本身的分布特性保证设备只能与他的父辈设备通讯来接受一个网络地址。不需要整个网络范围内通讯的地址分配,这有助于网络的可测量性
2.5.3 寻址
为了向一个在ZigBee网络中的设备发送数据,应用程序通常使用AF_DataRequest()函数。
数据包将要发送给一个afAddrType_t(在ZComDef.h中定义)类型的目标设备。
数据包可以单点传送(unicast),多点传送(multicast)或者广播传送,所以必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传送给一组设备,而广播数据包则要发送给整个网络的所有节点。
单点传送(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()函数)。
注意组可以用来关联间接寻址。再绑定表中找到的目标地址可能是是单点传送或者是一个组地址。另外,广播发送可以看做是一个组寻址的特例。
2.5.4重要设备地址(Important Device Addresses)
应用程序可能需要知道它的设备地址和父亲地址。使用下面的函数获取设备地址(在ZStackAPI中定义):
NLME_GetShortAddr()——返回本设备的16位网络地址
NLME_GetExtAddr()—— 返回本设备的64位扩展地址
使用下面的函数获取该设备的父亲设备的地址:
NLME_GetCoordShortAddr()——返回本设备的父亲设备的16位网络地址
NLME_GetCoordExtAddr()—— 返回本设备的父亲设备的64位扩展地址
2.6 ZigBee术语
2.6.1 属性
属性Attribute是一个反映物理数量或状态的数据值,比如开关值(On/Off),温度值、百分比等。
2.6.2 群集
群集Cluster是包含一个或多个属性(attribute)的群组。简单的说,群集就是属性的集合。
每个群集都被分配一个唯一的群集ID 且每个群集最多有65536个属性。
2.6.3 设备描述
指定群集是输入还是输出。描述符有:节点描述符、电源描述符、简单描述符、端点描述符。
端点描述符: typedef struct
{
byte endPoint;
byte *task_id; // Pointer to location of the
Application task ID.
SimpleDescriptionFormat_t
*simpleDesc;
afNetworkLatencyReq_t latencyReq;
} endPointDesc_t;
简单描述符:
typedef struct
{
byte EndPoint;
uint16 AppProfId;
uint16 AppDeviceId;
byte AppDevVer:4;
byte Reserved:4; // AF_V1_SUPPORT uses for AppFlags:4.
byte AppNumInClusters;
cId_t *pAppInClusterList;
byte AppNumOutClusters;
cId_t *pAppOutClust
} SimpleDescriptionFormat_t;
2.6.4端点
端点EndPoint是协议栈应用层的入口,也可以理解应用对象(Application Object)存在的地方,它是为实现一个设备描述而定义的一组群集。每个ZigBee设备可以最多支持240这样的端点,这也意味着在每个设备上可以定义240个应用对象。端点0被保留用于与ZDO接口,这是每个ZigBee设备必须使用的端点,而端点255被保留用于广播,端点241-254则被保留用于将来做扩展使用。
2.6.5节点
节点Node也可以理解为一个容器,包含一组ZigBee设备,分享一个无线信道。每个节点有且只有一个无线信道使用。
2.7 绑定(banding)
在zigaee协议中定义了一种特殊的操作,叫做绑定(binding)操作。它能够通过使用ClusterID为不同节点上的独立端点建立一个逻辑上的连接。