当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘 要:鉴于国内ZigBee产品协议标准不统一的现状和市场对符合统一标准的ZigBee产品的需求,为了实现基于 Z-stack协议栈且符合HA规范的应用开发,通过对ZigBee联盟制定的相关规范和标准文件的学习和解读,结合Z-stack协议 栈的结构特点及其提供的函数库,总结归纳了基于该协议栈来实现HA规范的ZigBee应用开发的基本流程和相关注意事项。

引言

目前,国内市场上ZigBee产品虽然很多,但大多采用 的都是私有协议栈,阻碍了不同厂家产品之间的互用和替代, 这也是ZigBee市场规模无法迅速扩大的一个重要原因,因 此,开发具有符合标准规范的ZigBee产品成为当务之急。目 前国内的ZigBee行业规范还正在处于形成阶段,但国际上的 ZigBee规范已经建立并受到国际上众多厂商的追随,因此, 本文就如何开发符合ZigBee联盟规定的HA规范的ZigBee 应用进行了探讨。

Z-stack是TI公司推出的ZigBee协议栈系统,这是一个 通过ZigBee联盟认证的符合ZigBee2007规范的平台。借由 TI公司ZigBee芯片及SOC产品在国内的广泛接受,Z-stack 也称为众多芯片厂商提供的协议栈中开发者接受度比较广的一 款ZigBee协议栈。本文探讨的ZigBee产品应用开发是基于 Z-stack协议栈的。

收稿日期:2013-01-30

ZCL 库(ZigBee cluster library)111

在ZigBee协议栈中,簇是一组命令和属性的集合,这些 命令和属性组合起来,构成了实现某一功能的实体。

ZCL是由ZigBee联盟制定的包含了大量功能簇(cluster) 的大集合。在应用开发中,以ZCL中已有的簇作为功能单元 来使用,可以增强通用性,避免重复开发。

ZCL对功能簇进行了分类和描述。每个功能簇都包含有 一个或多个属性及命令,ZCL对每个属性都进行了定义和描 述,包括属性ID、名称、数据类型、数值范围、初始值、可 读写性以及强制性;同时,也对此簇所包含的命令进行了定义, 包括命令ID、命令名称、命令数据帧内容和触发效果等。

ZCL中的通信是基于Client/Server模型的以簇为单位进 行的。两个不同功能设备之间的相互通信,是基于某一个或多 个功能簇的。用来储存这些簇属性的设备,称为Server端; 而用来操作这些簇属性的设备,称为Client端。针对Client/ Server端口类型的不同,同一个簇也具有不同的属性和命令。例如,操作属性的命令,通常由Client端发送给Server 端;而用针对这些操作命令的回复,通常由Server端发送给 Client 端。另外,报告类型的命令(report attribute command) 通常由Server端发送给Client端。以On/Off簇为例,该簇的 作用是实现开关设备的开/关状态的控制,体现在设备上,分 为Client端和Server端两种角色的设备,比如开关是Client端, 而某个具有ZigBee模块的灯节点则代表了相应的Server端。 Server端作为命令的接收者,必须能够识别开/关/切换这几 个来自Client端的命令(在ZCL中,已经规定好这些命令对 应的ID,如0x00代表关,0x01代表开,0x02代表切换),同时, 由于命令操作的是属性,因此,该Server端必须保存有开关 状态这一属性。

另外,ZCL制定了基于cluster的各类命令帧的格式(包 括读、写、报告等);定义了用于寻址的各指示参数(包括规 范ID、设备ID、簇ID、属性ID和命令ID);规定了用于各 属性和命令中各类数据的数据类型;还规定了在通信中可能 会出现的所有状态的枚举数组。

HA(home automation)规范[2]

HA规范是由ZigBee联盟(ZigBee alliance)制定的对用 于住宅环境的各类常见应用的设备描述和操作规范。通过这 一规范,为不同厂商的ZigBee HA设备提供了标准的接口和 定义,确保其相互之间能够相互通信并协同工作。

HA规范的范围主要集中在对家用设备进行的实时操 作,该规范可以构筑在ZigBee2007的两个子规范(ZigBee、 ZigBee pro)之上。

HA规范可以简单分成围绕网络特性的参数设置和围绕 功能实现的设备描述分类(包括相应设备的簇以及特性和功 能)这两大部分的内容。

2.1参数设置

HA规范对涉及到协议栈各功能方面的一些参数进行 了明确的规定,例如用于设备启动时的启动参数集(startup attribute sets),要求每个设备都必须内置这些参数,例如将 PAN ID设置成0xffff等。还有比如用于网络重连接的时间间 隔、安全中心连接秘钥等等参数。

在安全参数的设置方面,HA规范中规定,设备的初始 网络安全秘钥(network key)是空的,即每个设备的网络安全 秘钥必须由安全中心来统一分配;而安全中心连接秘钥(trust center link key)是每个设备都预置好的。

2.2设备描述

HA规范对可能会用到的设备进行了划分并设置了相应的 ID,在HA网络中的每个终端都必须符合至少一项该分类图 中给出的设备描述分类(如果同时符合多个设备描述的话,需 要在自己的设备描述中枚举这些设备类型)。

在HA规范中,每个设备描述都详细规定了其所支持的 簇,以及所支持的特性和功能。以通用设备中的开关(On/Off Switch)设备为例。其所支持的簇如表1所列。

基于Z-stack协议栈ZCL库且符合HA规范的ZigBee应用开发

也就是说,如果某个设备是开关的Client端节点,则必 须具有On/Off簇,用以发出控制On/Off属性的命令。

针对每一类设备,HA规范都通过特性和功能描述对其 进行行为上的描述,而通过其所包含的cluster来对其进行程 序层面上功能域与接口的界定。从整体上来讲,HA规范中为 一个设备应该实现什么以及如何实现进行了明确的说明。

Z-stack中的ZCL库及使用

Z-stack协议栈中包含有针对ZigBee联盟的ZCL规范进 行编写的ZCL库,用以在自己的协议栈中支持ZCL的实现叫 ZCL层API封装了大量针对ZCL的包括帧格式、命令ID等 细节,而只是向开发者提供了简单明了的命令函数,通过引入 ZCL层API,可以大大简化标准化应用的开发。在Z-stack中, 利用ZCL层API开发符合HA规范的应用的步骤如下叫 3.1 ZCL层的注册及初始化

首先,必须将ZCL层初始化并注册到任务列表中 去。ZCL的初始化是在osalInitTasks函数中添加zcl_Init( taskID++ )语句,用来给ZCL层的事件分配一个任务ID ;注 册即是在OSAL的任务列表tasksArr[]中,添加zcl_event_ loop, zcl_event_loop是在zcl.c里定义的用来处理ZCL层事 件的一个任务循环函数。

ZCL层的注册和初始化必须放在应用层之前。

3.2应用层的注册和初始化

用ZCL来构建基于HA规范的应用层,与ZCL层的注 册和初始化相类似,也必须在任务列表里添加应用层的任务 循环,并在初始化函数中进行初始化。

应用层的初始化主要包括以下几个方面。

3.2.1终端节点的注册

通过zclHA_Init函数对终端节点进行注册,表明该节点 是HA规范中的一个节点,该注册过程同时也包括了该节点相 应功能簇的注册。

3.2.2 ZCL回调函数集的注册

ZCL中每一类设备都会包含一系列与其实现功能相关的命令(包括自身发出的和来自其他设备的),ZCL回调函数集 用以接收并处理这些来自其他设备发出的命令。

HA规范中每个功能域都有不同的回调函数集,用以接收 不同种类的命令。以HA规范中的General功能域为例,其所 包含的回调函数类型如下:

typedef struct

{

zclGCB_BasicReset_t pfnBasicReset; // Basic Reset zclGCB_Identify _t pfnIdentify; // Identify Response zclGCB_IdentifyQueryRsp_t pfnIdentifyQueryRsp; // Identify Query Rsp

zclGCB_OnOff_t pfnOnOff; // On/Off cluster zclGCB_LevelControlMoveToLevel_t pfnLevelControlMoveTbLevel; // MoveToLevel

zclGCB_LevelControlMove_t pfnLevelControlMove; // Move

zclGCB_LevelControlStep_t pfnLevelControlStep; // Step zclGCB_LevelControlStop_t pfnLevelControlStop; // Stop zclGCB_GroupRsp_t pfnGroupRsp; // Group Response zclGCB_SceneStoreReq_t pfnSceneStoreReq; // Scene Store Request

zclGCB_SceneRecallReq_t pfnSceneRecallReq; // Scene Recall Request

zclGCB_SceneRsp_t pfnSceneRsp; // Scene Response zclGCB_Alarm_t pfnAlarm; // Alarm Req & Rsp zclGCB_Location_t pfnLocation; // RSSI Location zclGCB_LocationRsp_t pfnLocationRsp; // RSSI Location Rsp

} zclGeneral_AppCallbacks_t;

每个节点根据功能域的划分来选择对应的回调函数集的 类型(例如节点用到的是General功能域下的某些功能簇,则 使用zclGeneral_AppCallbacks_t类型来构建回调函数集),并 根据实际功能的需要来裁剪和自定义自己的回调函数集。

在完成回调函数集的构建之后,通过调用相应功能 域的注册函数来注册该功能域的回调函数集(如要注册 zclGeneral_AppCallbacks_t类型的回调函数集,则需要使用 相应的 zclGeneral_RegisterCmdCallbacks 函数)。

3.2.3 ZCL属性的注册

每个簇都有相应的一个或者多个属性,在Z-stack中, 簇属性由zclAttribute_t类型来表征。具体结构如下所示:

typedef struct

{

uintl6 attrId; // Attribute ID

uint8 dataType; // Data Type - defined in AF.h

uint8 accessControl; // Read/write - bit field

void *dataPtr; // Pointer to data field

} zclAttribute_t;

由于每个簇可能有多个属性,并且每个节点可以有多个功 能簇,因此,通过属性列表zclAttrRec_t类型来表征一个节 点所具有的属性集合。

typedef struct

{

uint16 clusterID; // Cluster ID

zclAttribute_t attr; // Attribute record

} zclAttrRec_t;

开发人员在构建了该应用节点的属性列表之后,通过zcl_ registerAttrList函数完成这些属性的注册。

3.2.4 ZCL层消息的注册

由于ZCL是一个中间层,其负责接收并初步处理的一些 消息需要上传至应用层来处理。为了实现这一功能,需要调用 zcl_registerForMsg函数来在应用层进行注册,确保经ZCL层 预加工的消息能够传达到应用层。

3.2.5其他注册

其他注册包括一般应用都需要的按键事件的注册、ZDO 层消息的注册[5]以及一些非HA规范节点的注册等。

3.3应用层逻辑的实现

应用层逻辑的开发与一般应用开发的区别,主要就是 使用ZCL层API来进行命令的发送,比如当触发开关按 键时,使用ZCL库的API来发送相应的命令zclGeneral_ SendOnOff_CmdOn,可以看到,在应用层只需写入这种标准 命令函数,协议栈会自动调用下层的函数库来进行相应的操作 并实现命令的发送。

另外还需要注意的一点是,在应用层的节点行为以及网 络层的参数设置上,也必须符合HA规范给出的限定,例如 PAN ID的设置、安全相关的一些秘钥的初始值设置以及终端 设备向父节点轮询的时间间隔等参数和行为的设定。

4结语

可以看到,通过在协议栈中引入ZCL层,可以大大简化 符合HA标准的ZigBee应用的开发:来自应用层的数据通过 ZCL层的封装处理后,实现了数据和命令格式的标准化;同样, 来自其他设备或节点的消息通过ZCL层的分析和提取,能够 将应用层敏感的命令和相关数据直接呈现给应用层,从而保 证应用层只需关注于其节点自身功能的实现,而将繁琐的标准 化通信任务交给下层来处理。

20211020_61702baf2afa0__基于Z

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭