NXP ZigBee如何增加自定义Cluster

合集下载

ZigBee绑定指南

ZigBee绑定指南

一、绑定(Binding)绑定是一种控制两个或者多个设备应用层之间信息流传递的机制。

在ZigBee2006发布版本中,它被称为源绑定,所有的设备都可以执行绑定机制。

绑定允许应用程序发送一个数据包而不需要知道目标设备的短地址(此时将目标设备的短地址设置为无效地址0xFFFE)。

应用支持子层(APS)从它的绑定表中确定目标设备的短地址,然后将数据发送给目标应用或者目标组。

如果在绑定表中找到的短地址不止一个,协议栈会向所有找到的短地址发送数据。

说明:绑定是基于设备应用层端点的绑定,而且绑定只能在互为"补充的"设备间被创建。

也就是说,当两个设备已经在他们的简单描述符结构中登记为一样的命令ID,并且一个作为输入另一个作为输出时,绑定才能成功。

图1:绑定图示上图为两个设备建立的绑定关系,从上图我们理解绑定是基于端点(endpoint)的绑定。

在设备1中端点号(endpoint)为3的开关1与设备2中端点号(endpoint)为5、7、8的灯建立了绑定。

设备1中端点号(endpoint)为2的开关与设备2中端点号(endpoint)为17的灯建立了绑定。

二、建立绑定表(Building a Binding Table)有三种方法可以建立一个绑定表:●Zigbee Device Object Bind Request(ZDO绑定请求)——通过一个命令告诉设备创建一个绑定表记录●Zigbee Device Object End Device Bind Request(ZDO终端绑定请求)——两个设备可以告诉协调器它们想要建立一个绑定表记录。

协调器来协调并在两个设备中创建绑定表记录。

●Device Application(设备应用)—一个设备上的应用程序建立或者管理一个绑定表三、绑定表的建立TI的Zstack2006协议栈中提供两种可用的机制来配置设备绑定:(1)如果目的设备的扩展地址是已知的(2)如果目的设备的扩展地址是未知的3.1、已知扩展地址的绑定如果已经知道要绑定目标设备的扩展地址,那么在源设备端只需通过函数zb_BindDevice ()函数便可以进行绑定,zb_BindDevice ()中地址要设置为目标设备的扩展地址。

ZigBee网络中Cluster—Tree路由算法优化

ZigBee网络中Cluster—Tree路由算法优化
泛 关 注… 1 、
关键 词 : 无线 传感 器 网络 ziBe 路 由协 议 g e 中图 分类 号 : N9 9 T 2 文献标识 码 : A
文章 编 号 : 0 79 1 (0 20 — 1 20 l 0 —4 6 2 1 ) 40 1 —2
1 iB e的相 关概 念 、Z g e
算法分析
]l应 。苎 f竺 用 与
Zg e iB e网络 中 lse ・—r e 由算法优化 C u tr— T e - - - 路
彭 设 强 王 为
( 国防信 息 学 院 湖北 武 汉 40 1) 30 0
摘要: 随着 无线 通信 、 成 电路 和计 算机技 术的 不断 发展 , 集 出现 了无 线传 感 器 网- Wi l sSno t ok W S 通信 技术 。 线传 感 器  ̄( r e e sr es New r , N) 无 网络 是 一种 无 中心 的 全分 布 系统 。 过 随机 投放 的方 式 , 多传 感 器 节点 被部 署 于指 定 的 区域 中; 通 众 他们 通 过 无线 信道 相 连 , 自组织 构 成 网络 系 统。 由于其 组 网 高效 灵 活 , 易于使 用等特 性 。 年 来 无线 传 感 器 网络 在 民用和 军 用等 诸 多领 域取 得 了显 著的 成就 , 近 引起 了相 关学 者和 专 家 的广
11z g e 技 术 的 定 义 . iB e 收 并且采用了休眠模式 群 蜜 蜂 通 过  ̄ Zg a 形 较短 、 发信息功率低 , iB e 一 iZ g 个 年 状的舞蹈交换各种信息 , 来告 知 同伴发现食物的距离 、 方向和具体 长达 6 月 N 2 左 右 的 使 用 时 间 。
用 的A E 2 ̄密算法 。 S -18 H () 能 性 。 iB e 备 为 低 功 耗 设 备 , 络 节 点设 备 工 作 周 期 5节 Zg e设 网

cluster安装配置手册范本

cluster安装配置手册范本

一、操作系统配置1. 操作系统版本:Red Hat Enterprise Linux 5 Advanced Platform update 3 x86_642. 主机名:10台主机主机名分别是:websvr1 websvr23. 管理员帐户:root 密码:1234564.分区情况:5. 网络配置为保证双网卡的冗余性,系统已配置了bonding,eth0和eth1作为slave设备,配置文件模板如下:ifcfg-eth0:DEVICE=eth0USERCTL=noONBOOT=yesMASTER=bond0SLAVE=yesBOOTPROTO=noneifcfg-eth1:DEVICE=eth1USERCTL=noONBOOT=yesMASTER=bond0SLAVE=yesBOOTPROTO=noneifcfg-bond0:DEVICE=bond0IPADDR=xx.xx.xx.xxNETMASK=xx.xx.xx.xxONBOOT=yesBOOTPROTO=noneUSERCTL=no为bond0设备加载bonding模块,在/etc/modprobe.conf文件中添加如下记录:alias bond0 bondingoptions bond0 mode=1 miimon=100其中mode=1表示bond0的工作模式为互备模式,miimon=100表示系统每100ms监测一次链路状态,如果不同则转入另一条链路。

6. 安装包选择在websvr1上已经建立好安装源,所有的安装介质都已经发到了/var/ftp/pub下,并通过FTP共享出来,有需要的包可以直接进入安装。

或者通过yum命令进行安装。

例如:yum list 列出安装源所有安装包yum install httpd 安装httpd软件包yum remove httpd 删除httpd软件包yum grouplist 列出所有安装包组名yum groupinstall ‘Development Tools’安装Development Tools工具包yum groupremove ‘Development Tools’删除Development Tools工具包二、系统简单安装过程1、硬件要求安装Red Hat Linux的硬件要求如下。

ZigBee中Profile(规范),Cluster(簇)的认识

ZigBee中Profile(规范),Cluster(簇)的认识

ZigBee中Profile(规范),Cluster(簇)的认识我对profile, cluster的一点认识参考资料1.TI官方资料2.飞比论坛/thread-2618-1-2.html3.ZigBee无线传感器网络设计与实现.王小强等著.化学工业出版社引言在zigbee规范中,引入了profile, cluster的概念。

profile和cluster的翻译没有统一的标准,这里暂时定为规范和簇。

个人认为,ZigBee引入profile,cluster的概念,是为了统一应用,使不同厂家、不同设计者的产品可以兼容使用。

Profile说明ZigBee网络进行数据传输都是建立在应用规范的基础上。

规范profile可以理解成一套规定,每个应用应该是对应一个profile ID,每个profile ID可以应用于某项具体的应用,例如自动家居、楼宇自动化等。

ZigBee联盟已经规定了profile的使用,整个应用规范可以分为公共规范(Public profile)和制造商规范(Manufacturer Specific profile)。

公共规范的ID号为:0x0000-0x7FFF,制造商的为:0xBF00-0xFFFF。

其中公共规范已经规定了常见的各种应用,以下是摘录的部分公共规范。

比如home automation public profile就规定了智能家居都要做什么,当然用户也可以规定一个自己的profile。

协议栈本身也有一个profile,就是Zigbee Device Profile,也就是ZDP了,这里规范了一个zigbee节点都要具备那些功能,比如路由能力啊,网络发现能力啊,各个协议层都要做什么啊。

——摘抄Cluster说明ZigBee在一个profile的规范下,又提出了cluster的概念。

综合profile和cluster,可以这样理解,一个具体的应用(例如智能家居系统)有大量细节上的小规范(例如电灯的控制:开灯、关灯等),这个规范即成为簇(cluster)。

cluster配置方法

cluster配置方法

Redhat Cluster安装
软件环境:
Redhat Cluster4、Redhat Cluster 5
操作步骤:
1.编辑:/etc/hosts:复制到各个节点中相应位置:/etc/
设置IP与相对应的主机名(包括节点、fence设备、浮动IP)2.安装Cluster套件:
运行system-config-cluster
建立新配置:
选择加锁模式,为DLM方式:
3.设置cluster基本属性
4.将两个节点加入到Cluster Nodes(节点名同主机名)中,Quornm V otes不需要设置:
片,要在服务器中事先做好设置,ibm和dell服务器在这个选项中选择ipmi lan
6.将各节点和相应的Fence Device关联起来
7.建立一个Failover Domain域,将两节点加入到Domain中
8.添加资源
9.组建服务,向服务中添加资源
注意右上角的Failover Domain,使用下拉键选择刚刚建立的域
10.保存集群配置文件,文件将放在/etc/cluster/中
11.将配置文件拷入到其他节点中的相应位置:/etc/cluster/
12.在每个节点中依次起一下服务:
RHEL5下启动/停止
service cman start/stop
service rgmanager start/stop
RHEL4下启动/停止
service ccsd start/stop
service cman start/stop
service fenced start/stop
service rgmanager start/stop。

zigbee z-stack如何添加自己的新任务

zigbee z-stack如何添加自己的新任务

进行的,讲的真不错/viewthread.php?tid=89&from=indexheats下一次要自己加以个发上来在Zstack(TI的Zigbee协议栈)中,对于每个用户自己新建立的任务通常需要两个相关的处理函数,包括:(1).用于初始化的函数,如:SampleApp_Init(), 这个函数是在osalInitTasks()这个osal(Zstack中自带的小操作系统)中去调用的,其目的就是把一些用户自己写的任务中的一些变量,网络模式,网络终端类型等进行初始化;(2).用于引起该任务状态变化的事件发生后所需要执行的事件处理函数,如:SampleApp_ProcessEvent(),这个函数是首先在const pTaskEventHandlerFn tasksArr[ ] 中进行设置(绑定),然后在osalInitTasks()中如果发生事件进行调用绑定的事件处理函数.在Zstack(TI的Zigbee协议栈)中,对于每个用户自己新建立的任务通常需要两个相关的处理函数,包括:(1).用于初始化的函数,如:SampleApp_Init(), 这个函数是在osalInitTasks()这个osal(Zstack中自带的小操作系统)中去调用的,其目的就是把一些用户自己写的任务中的一些变量,网络模式,网络终端类型等进行初始化;(2).用于引起该任务状态变化的事件发生后所需要执行的事件处理函数,如:SampleApp_ProcessEvent(),这个函数是首先在const pTaskEventHandlerFn tasksArr[ ] 中进行设置,然后在osalInitTasks()中如果发生事件进行调用绑定的事件处理函数.下面分3个部分分析.1.用户自己设计的任务代码在Zstack中的调用过程(1).main() 执行(在ZMain.c中)main() ---> osal_init_system()(2). osal_init_system()调用osalInitTasks(), (在OSAL.c中)osal_init_system() ---> osalInitTasks()(3). osalInitTasks()调用SampleApp_Init() , (在OSAL_SampleApp.c中) osalInitTasks() ---> SampleApp_Init()在 osalInitTasks()中实现了多个任务初始化的设置,其中macTaskInit( taskID++ )到ZDApp_Init( taskID++ )的几行代码表示对于几个系统运行初始化任务的调用,而用户自己实现的SampleApp_Init()在最后,这里taskID随着任务的增加也随之递增.所以用户自己实现的任务的初始化操作应该在osalInitTasks()中增加.void osalInitTasks( void ){uint8 taskID = 0;//这里很重要, 调用osal_mem_alloc()为当前OSAL中的各任务分配存储空间//(实际上是一个任务数组),并用tasksEvents指向该任务数组(任务队列).tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);/将taskSEvents所指向的空间清零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++ );SampleApp_Init( taskID ); //用户自己需要添加的任务}2.任务处理调用的重要数据结构这里要解释一下,在Zstack里,对于同一个任务可能有多种事件发生,那么需要执行不同的事件处理,为了方便,对于每个任务的事件处理函数都统一在一个处理函数中实现,然后根据任务的ID号(task_id)和该任务的具体事件(events)调用某个任务的总事件处理函数,进入了该任务的总事件处理函数之后,再根据events再来判别是该任务的哪一种事件发生,进而执行相应的事件处理.pTaskEventHandlerFn 是一个指向函数(事件处理函数)的指针,这里实现的每一个数组元素各对应于一个任务的事件处理函数,比如SampleApp_ProcessEvent对于用户自行实现的事件处理函数uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ),所以这里如果我们实现了一个任务,还需要把实现的该任务的事件处理函数在这里添加.const pTaskEventHandlerFn tasksArr[] = {macEventLoop,nwk_event_loop,Hal_ProcessEvent,#if defined( MT_TASK ) //一个MT任务命令MT_ProcessEvent,#endifAPS_event_loop,ZDApp_event_loop,SampleApp_ProcessEvent};注意, tasksEvents和tasksArr[]里的顺序是一一对应的, tasksArr[]中的第i个事件处理函数对应于tasksEvents中的第i个任务的事件.//计算出任务的数量const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );uint16 *tasksEvents;3. 对于不同事件发生后的任务处理函数的调用osal_start_system() 很重要,决定了当某个任务的事件发生后调用对应的事件处理函数void osal_start_system(void){#if !defined ( ZBIT )for(;;) // Forever Loop#endif{uint8 idx = 0;Hal_ProcessPoll(); // This replaces MT_SerialPoll() and//osal_check_timer().检查时钟//这里是轮训任务队列,并检查是否有某个任务的事件发生do {if (tasksEvents[idx]) // Task is highest priority that is ready. 。

NXP ZigBee消息处理流程分析

NXP ZigBee消息处理流程分析

我们以 JN-AN-1189-ZigBee-HA-Demo\DimmableLight 为例,分析收到 On/Off Cluster(0x0006)命令时的函数调用流程。
任务 ZCL_Task 主要处理 ZigBee Cluster Library 相关的消息。 OS_TASK(ZCL_Task) { ZPS_tsAfEvent sStackEvent; tsZCL_CallBackEvent sCallBackEvent; sCallBackEvent.pZPSevent = &sStackEvent; /* If there is a stack event to process, pass it on to ZCL */ sStackEvent.eType = ZPS_EVENT_NONE; if ( OS_eCollectMessage(APP_msgZpsEvents_ZCL, &sStackEvent) == OS_E_OK) { DBG_vPrintf(TRACE_ZCL, "\nZCL_Task event:%d",sStackEvent.eType);
在程序启动后调用代码入口 vAppMain 函数,初始化 Cluster Instance 实例,并注册回调函数的过程如下: APP_vInitialiseNode eApp_HA_RegisterEndpoint eHA_RegisterDimmableLightEndPoint eCLD_OnOffCreateOnOff PUBLIC teZCL_Status eHA_RegisterDimmableLightEndPoint(uint8 u8EndPointIdentifier, tfpZCL_ZCLCallBackFunction cbCallBack, tsHA_DimmableLightDevice *psDeviceInfo) { …………………………….. /* Mandatory server clusters */ #if (defined CLD_BASIC) && (defined BASIC_SERVER) /* Create an instance of a Basic cluster as a server */ eCLD_BasicCreateBasic(&psDeviceInfo->sClusterInstance.sBasicServer, TRUE, &sCLD_Basic, &psDeviceInfo->sBasicServerCluster, &au8BasicClusterAttributeControlBits[0]); #endif …………………………….. #if (defined CLD_ONOFF) && (defined ONOFF_SERVER) /* Create an instance of a On/Off cluster as a server */ eCLD_OnOffCreateOnOff(&psDeviceInfo->sClusterInstance.sOnOffServer, TRUE, &sCLD_OnOff, &psDeviceInfo->sOnOffServerCluster, &au8OnOffServerAttributeControlBits[0], &psDeviceInfo->sOnOffServerCustomDataStructure); #endif …………………………….. } PUBLIC teZCL_Status eCLD_OnOffCreateOnOff( tsZCL_ClusterInstance bool_t tsZCL_ClusterDefinition void uint8 tsCLD_OnOffCustomDataStructure { …………………………… // cluster data vZCL_InitializeClusterInstance( psClusterInstance, bIsServer, psClusterDefinition, pvEndPointSharedStructPtr, pu8AttributeControlBits,

Zigbee 四种绑定方式

Zigbee 四种绑定方式

Zigbee 四种绑定方式一、两个节点分别通过按键机制调用ZDP_EndDeviceBindReq函数这种绑定方式必须要有协调器设备存在,两个设备通过按键在一定时间间隔内(默认为15秒)调用ZDP_EndDeviceBindReq函数完成绑定。

首先要在初始化程序中注册End_Device_Bind_rsp进程,然后按键绑定请求程序如下:1if(Up_down_mark==1)2{3Up_down_mark=0;4HalLedSet ( HAL_LED_2, HAL_LED_MODE_ON );5// Initiate an End Device Bind Request for the mandatory endpoint6dstAddr.addrMode = Addr16Bit;7dstAddr.addr.shortAddr = 0x0000; // Coordinator8ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),ZG_Serial_Control_epDesc.endPoint,ZG_Serial_Control_PROFID,ZG_Serial_Control_MAX_CLUSTERS,(cId_t *)ZG_Serial_Control_ClusterList,ZG_Serial_Control_MAX_CLUSTERS,(cId_t *)ZG_Serial_Control_ClusterList,FALSE );}回调处理函数如下:9case End_Device_Bind_rsp:10if ( ZDO_ParseBindRsp( inMsg ) == ZSuccess )11{12HalLedSet ( HAL_LED_2, HAL_LED_MODE_OFF );13}14break;二、Match方式这种绑定方式无需协调器设备存在,可采用按键机制来实现。

ZigBee网络Cluster-Tree优化路由算法研究

ZigBee网络Cluster-Tree优化路由算法研究

ZigBee网络Cluster-Tree优化路由算法研究引言无线通信和嵌入式微传感器技术的快速发展促进了无线传感器网络的崛起。

ZigBee协议基于IEEE 802.15.4无线标准制定,包括应用层、网络层、安全层等,实现了网络的自组织和自维护的功能。

在无线传感器网络中,节点的能量是有限的,如果节点在最后因为自身的能量消耗殆尽而死亡,将会对整个网络的传输性能造成很大影响。

因此,在实际应用中,根据不同的网络情况来选择最符合应用需求的路由协议,让路由协议根据网络拓扑选择合适的路径,平均分布节点的传输能量,降低网络的功耗是网络层必须要考虑的任务。

1 ZigBee 路由算法研究依据设备的能力,ZigBee网络中的设备可以分为全功能设备(Full Function Device,FFD)和半功能设备(Reduced Function Device,RFD)。

FFD能转发其他设备的数据帧,RFD则不能。

当FFD加入一个网络时,它可以作为协调器。

协调器会周期性地广播数据帧,周围的RFD能够发现并加入网络,形成一个星型拓扑网络。

在星型拓扑中,协调器负责控制整个网络,所有终端设备都直接与协调器通信,并且由它维护。

ZigBee网络层还支持树型和网状网络。

树型网络采用分级路由的策略在网络中传送数据和控制信息,而网状网络则可以进行点对点的通信。

在树型网络中,根节点(协调器节点)和所有的内部节点(路由器节点)是FFD,而RFD只能作为叶子节点(终端节点)。

当协调器或路由器加入网络时,它必须被分配唯一的网络地址。

1.1 网络地址分配ZigBee协议规范使用一个分布式地址方案分配网络地址,它设计为给每个潜在父节点提供一个有限的网络地址子块。

当一个设备成功加入网络后,其父节点给该节点自动分配一个唯一的网络地址。

1.2 ZigBee路由算法网络层支持Cluster-Tree、AODVjr和Cluster-Tree+AODVjr算法(以下简称C+A算法)等多种路由算法,因此ZigBee网络的路由协议兼具树型网络和网状网络的特性。

彻底明白Zigbee术语——群集(Cluster)、端点(EndPoint)等

彻底明白Zigbee术语——群集(Cluster)、端点(EndPoint)等

彻底明白Zigbee术语——群集(Cluster)、端点(EndPoint)等在学习zigbee协议栈的时候经常看到应用程序、zigbee设备对象(ZDO)、节点、设备、端点、群集、属性、绑定、寻址等一下zigbee 术语,不知道这些zigbee术语是表示什么,是如何定义的,是如何区分的,是如何划分的以及他们之间有什么联系,一切的一切全不知道。

网上也有很多zigbee术语的讲解,不知道是自己的理解能力有问题,还是本身这个就是很难理解,太过于抽象呢?一、属性属性Attribute是一个反映物理数量或状态的数据值,比如开关值(On/Off)、灯的状态值(On/Off)、温度值、百分比等等二、群集,或称为簇群集Cluster是包含一个或多个属性(attribute)的群集。

简单的说,群集就是属性的集合。

每个群集都被分配一个唯一群集ID且每个群集最多有65536个属性。

比如一个群集包含了不同情况下的开关、不同情况下的灯、不同情况下的温度值、不同情况下的百分比等等三、设备描述设备描述Device DescripTIon是指一个大型目标应用的一部分,包括一个或多个群集四、端点端点EndPoint是协议栈应用层的入口,即入口地址,也可以理解应用对象(ApplicaTIon Object)存在的地方,它是为实现一个设备描述而定义的一组群集。

每个Zigbee设备可以最多支持240这样的端点,端口0用于整个Zigbee设备的配置和管理,应用程序可以通过端点0与Zigbee堆栈的其他层通信,从而实现对这些层的初始化和配置。

附属在端点0的对象被称为Zigbee设备对象(ZDO)。

端点255用于向所有端点的广播,端点241~254是保留端点。

五、配置文件配置文件Profile可以理解为共同促进交互式应用的多个设备描述项的集合。

定义了属性ID与群集(簇)ID,使之看起来就像设备的某种特性,以家庭智能控制系统为例,灯配置文件设定了远程控制设备的群集OnOffDRC含有一种属性OnOff,且该属性为无符号8位值,值0xFF意味着开,0x00为关,0xF0则为无效。

ZigBee学习----之ZCL(ZigBeeClusterLibrary)

ZigBee学习----之ZCL(ZigBeeClusterLibrary)

ZigBee学习----之ZCL(ZigBeeClusterLibrary)
1. ZCL简介:
ZCL: ZigBee Cluster Library
可以理解为Zigbee在开发⼀些特性功能的cluster时所⽤的⼀些库。

开发者在开发应⽤profile时需要⽤到对应ZCL API,去操作或控制对应的cluster。

ZCL分为client和server。

⼀个cluster保存属性的实体⼀般称为server,⽽操作这些属性的实体称为client。

当然,如果需要,client中也是可以存在属性的。

clinet去操作属性是通过命令进⾏,⽐如读、写等,⼀般情况下这些操作命令,都是由client发出,由server接收并处理。

⼀个cluster可以包含多个属性和命令。

2.. ZCL在协议栈中所处位置:
AF层收到ZCL命令消息后,放⼊到ZCL task队列中,由ZCL队列来处理这些命令。

上层的应⽤profile也可以直接调⽤ZCL API去操作对应的cluster。

3. ZCL分类:
ZCL根据不同的功能,可以划分如下功能域:
每个ZCL功能域中包含了多个cluster。

⽐如Lighting中就包含了如下cluster:
⽐如General Function Domain中的ON/OFF cluster包含的命令定义如下(Zstack 3.0):。

ZigBee中改进的Cluster-Tree路由算法

ZigBee中改进的Cluster-Tree路由算法

C ut re算法 按 树 型 结 构 分 层遍 历 ,算法 简 单 且 查 找 ls r e eT 目的 节 点 的速 度 快 ,通 过 簇 首 的 数 据 融合 可 以减 小 信 息 冗 余 度 和 源 节 点 的 发 送 功 率 ,对 于 数 据 聚 合 非 常 有 利 ,缺 点 在 于 算 法 的 非 自适 应 性 决 定 了 其 选 择 的 路 由 不 可 能 是 最 佳 路 由 ,而 且 靠近 树 根 的路 由 节点 需 转 发 大 量 的数 据 ,必 须 储 备 充足 的能 量 。假 设 有 图 】 示 的 网络 ,每 个 区 域为 一 个 簇 , 所 区 域 0 区域 3的簇 首 分 别 为 协 调器 、节 点 I 节 点 w、 节 点 ~ , 、 O 。当源 节 点 在 区 域 J而 目的节 点 不 在 区域 1 ,或源 节 点 不在
I pr v d C l t rTr eR o i g rt m n Zi Be m o e use — e utngAl o ih i g e
X I Chuan E
( l g fCo ue ce c n no mainEn n eig Ch n q n c n lgya dBu ie sUniest, o g ig4 0 6 , i ) Col eo mp trS in ea dIf r to gie rn , o g igTe h oo n sn s v ri Ch n qn 0 0 7 Chna e y
ta s iso e a , n n a c h e w o k v l e r n m s i n d ly a d e h n e t en t r a u
【 ywo d lZg ent ok ruigag rh Cls r re loi m; Ke r s iBe ew r;o t loi m; ut — e g rh AOD r loi m; eg b ra l n t eT a t vjag rh n ih o be t t

ZigBee网络中Cluster_Tree路由算法优化

ZigBee网络中Cluster_Tree路由算法优化

2.2 地址分配机制
ZigBee网络中的每一节点都有两个地址段: 网络短地址段和扩 展地址段。 其中16bit网络短地址仅仅用于网络中的数据传输和路 由; 是在节点加入网络时由其父节点动态分配的, 类似于我们在 Internet中使用的IP地址;64bit地址类似于计算机的MAC地址, 唯 一标识每个节点。 加入ZigBee网络的节点通过IEEE802.15.4MAC 层提供的关联过程组成一棵逻辑树, 当网络中的节点允许一个新节 点加入网络时, 它们之间就形成了父子关系, 每个进入网络的节点 会得到父节点为其分配的一个唯一的网络地址[3]。 协调节点在建立 网络以后使用的16位的16进制数作为自己的网络地址,路由节点和 终端节点加入网络后, 使用父设备给他分配的1 6 位的短地址来通 信。 规定这些子节点中最多可以有Rm个路由节点, 每个父节点最多 可以连接C m 个子节点, 网络的最大深度为L m 。 因此地址为A p 深度 为d 的父节点。 如果新加入的节点是一个R F D , 并且该节点是其父 节点的第n个RFD 节点, 分配的网络地址可通过式(1)得出: An = Ap + Cskip (d ) ∗ Rm + n 1 ≤ n ≤ Rm (1) 如果新加入的节点是一个F F D , 并且该节点是其父节点的第n 个F F D 节点, 则父节点为该节点分配的网络地址: (2) An = Ap + 1 + Cskip(d ) ∗ (n − 1) (1 ≤ n ≤ Rm) 其中:
3 、ZigB ee 路由算法改进 3.1 问题分析
如图3-1所示,簇树就是由Coordinator节点展开生成的簇树状 网络拓扑结构,该簇树状网络分为3个簇A、 B、 C, Cluster—Tree算 法按照Cluster—Tree树形结构分层遍历, 算法简单快速。 但是它存 在一个问题: 两个相邻的节点都在一跳范围内可以完成通信,但由 于不在同一簇内,根据Cluster—Tree算法不能通过一跳完成通信, 造成网络节点资源的浪费和较大的通信延迟, 容易造成网络分割, 缩短网络的使用寿命。 例如:簇A中的1节点和簇B中的6节点要相互 通信,尽管他们的距离近,相互都处于对方的信号覆盖范围,但他们 属于不同的簇, 本需1跳就可完成通信(1, B6), 但依照Cluster—Tree 算法则需5跳来完成(A1,A2,A3、 B4、 B5、 B6)。 可见,按照Cluster— Tree算法额外增加了很多不必要的节点。

ZigBee中改进的Cluster-Tree路由算法

ZigBee中改进的Cluster-Tree路由算法

ZigBee中改进的Cluster-Tree路由算法谢川【期刊名称】《计算机工程》【年(卷),期】2011(037)007【摘要】Aiming at the problems of Cluster-Tree algorithm that cluster head node demands high energy and the routes selected between nodes is not optimal in ZigBee, this paper proposes an advanced method for forming the cluster head nodes resulting from node energy and neighbor table and a method for finding the best route resulting from AODVjr algorithm. Simulation results indicate that the advanced algorithm can effectively improve the success rate of packet transmission, cut down the hops between the target and the source node, reduce the end-to-end packet transmission delay, and enhance the network value.%针对ZigBee网络的Cluster-Tree算法对簇首能量要求高、选择的路由非最佳路由等问题,结合节点能量分析和节点邻居表,提出一种改进的簇首生成方法,利用AODVjr算法为节点选择最佳路由.仿真结果证明,与原Cluster-Tree算法相比,改进的算法能有效提高数据发送成功率,减少源节点与目标节点间的跳数,降低端到端的报文传输时延,提高网络的使用价值.【总页数】3页(P115-117)【作者】谢川【作者单位】重庆工商大学计算机科学与信息工程学院,重庆400067【正文语种】中文【中图分类】TP393【相关文献】1.改进ZigBee路由算法在电能质量在线监测中应用 [J], 王珂;曲朝阳;朱伟华2.一种改进的ZigBee网络Cluster-Tree路由算法 [J], 李刚;陈俊杰;葛文涛3.基于ZigBee无线网络的Cluster-Tree路由算法研究 [J], 赵博;吴静4.ZigBee网络中Cluster-Tree拓扑的改进与优化 [J], 高崇鹏;胡广朋5.ZigBee传感网络Cluster-Tree改进路由算法研究 [J], 贺玲玲因版权原因,仅展示原文概要,查看原文内容请购买。

ZIGBEE新建任务及调度和事件传递的方法

ZIGBEE新建任务及调度和事件传递的方法
HAL(Hardware Abstraction Layer)翻译为“硬件抽象层”。许多人在这里经常 把将 Z-Stack 的硬件抽象层与 ZigBee 的物理层混为一谈。在这里,我们应该将 Z-Stack 的硬件抽象层与 ZigBee 的物理层区分开来。硬件抽象层所包含的范围是 我们当前硬件电路上面所有对于系统可用的设备资源。而 ZigBee 中的物理层则 是针对无线通信而言,它所包含的仅限于支持无线通讯的硬件设备。
{ do { if (tasksEvents[idx]) { break; } } while (++idx < tasksCnt);
} 当 tasksEvents 这个数组中的某个元素不为 0,即代表此任务有事件需要响应,
事件类型取决于这个元素的值。这个 do-while 循环会选出当前优先级最高的需要 响应的任务,
C:\Texas Instruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\SampleApp。
首先我们去繁就简,先来了解应用程序的运行方式。 打开 SampleApp 工程,我们可以看到如下目录结构:
其中对于我们来讲,最常用的文件夹为 App 和 ZMain, 首先打开 SampleApp.c 这个文件。我们首先看到的是比较重要的两个函数:
ZIGBEE 新建任务及调度和事件传递的方法
资料整理
按键在我们的应用里面应该属于硬件资源,所以 OSAL 理应为我们提供使用 和管理这些硬件的服务。稍微留意一下我们之前说过的 tasksArr 这样一个数组, 它保存了所有任务的事件处理函数。我们从中发现了一个很重要的信息: Hal_ProcessEvent。
四、事件的捕获
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NXP ZigBee如何增加自定义Cluster
(shaozhong.liang)
基本概念
在ZigBee规范中有Profile, Cluster,Attribute,Endpoint等概念。

Profile用来规范ZigBee相关产品需要要满足那些要求。

ZigBee联盟则已经规范了一些Profile,如Home Automation(0x0104),Smart Energy(0x0109),Building Automation(0x0105)等。

其中Home Automation Profile就规定了智能家居都要做什么,HA Profile ID是0x0104。

在一个Profile的规范下,一个Cluster实际上是一组属性和命令的集合,是设备之间的一个通信接口。

Cluster并不是只存在单独某一个设备之上,而是联系两个设备的纽带。

因此,对于一个设备,有“Input Cluster”和“Output Cluster”之分。

也可以描述为一个Cluster包括Server 端和Client端。

一个Cluster被定义好之后,它包含的命令是固定的。

例如用于“控制器”和“开关”之间的一个Cluster,包含一条命令“Toggle”,含义是“改变开关状态”。

则该Cluster对于控制器而言是Output Cluster(发出“Toggle”命令),对于开关而言是Input Cluster(接收“Toggle”命令)。

智能家居HA下的一个调光器,操作这个调光器就需要一些命令,比如变亮,变暗,关灯,开灯这些,另外,这个调光器也会有一些Attribute 属性,比如当前的亮度,由亮变暗的时长。

HA Profile已经规定了调光器应该有哪些Cluster,如Color Control Cluster,Ballast Configuration Cluster 等。

每个Cluster 被分配一个唯一16位Cluster ID,从0xFC00开始是厂家自定义Cluster ID。

一个Cluster包含多个Attribute。

Attribute定义了设备的物理特性或当前状态。

例如开关的状态或温度计值等皆可称为属性。

每个属性具有唯一的Attribute ID值。

例如ZHA Profile的Basic Cluster(0x0000)有下面Attribute属性:
总结说来,Profile规范了应该包括哪些Cluster;一个Cluster会有一个Cluster ID;在一个Cluster下有多个Command和多个Attribute;在一个Cluster下面Command 和Attribute的ID要唯一。

Command 和Attribute在不同的Cluster下可以重复,不同的Profile下Cluster也可以重复。

下面是ZHA Profile 下安防IAS设备支持的Cluster列表:
增加自定义Manufacture Specific Cluster
NXP ZigBee协议栈本身包含了大量符合ZigBee联盟制定的协议规范的Cluster 定义,能满足大部分应用,这些Cluster可以与其它符合ZigBee标准协议的厂商直接对接使用。

但是针对不同公司,需要有自己的特色即产品差异化,就需要针对自己产品增加独特的Manufacture Specific Cluster。

NXP ZigBee协议栈提供很好的Cluster扩展性,可以满足客户的定制化要求。

以下介绍如何增加自定义Cluster 的步骤。

例如某一厂家需要开发一款通过ZigBee控制厨房的燃气炉。

由于在ZHA Profile 中没有定义燃气炉Cooker的Cluster,客户开发人员可以需要根据Cooker的功能特点和需求自定义Manufacture Specific Cluster,Cluster ID使用0xFC00。

下面是Cooker Cluster需要定义的Attribute属性。

在$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Source\CookerControl.c 文件中定义Cooker Cluster的Attribute属性数组。

Data Types E_ZCL_NULL
E_ZCL_BOOL
E_ZCL_UINT8 E_ZCL_UINT16 E_ZCL_UINT32 E_ZCL_UINT64 E_ZCL_INT8
E_ZCL_INT16 E_ZCL_INT32 E_ZCL_INT64 E_ZCL_ENUM8 Attribute Flags
E_ZCL_AF_RD // Readable
E_ZCL_AF_WR // Writable
E_ZCL_AF_RP // Report attribute
E_ZCL_AF_MS // Manufacturer specific
E_ZCL_AF_CA // Client attribute
E_ZCL_AF_SE // Scenes extension
E_ZCL_AF_MR // Mirrored attribute
/* Attribute Control Bits */
E_ZCL_ACF_RS // Attribute Request Status */
E_ZCL_ACF_RP // Is attribute reportable */
E_ZCL_ACF_MR // Is attribute value is Mirrored attribute */
在$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Include和Source目录中分别修改CookerControl.h、CookerControl.c、dimmable_light.h、dimmable_light.c 四个文件,加入Cooker Cluster的定义。

Add Cooker Cluster definition in the cluster header file:
$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Include\dimmable_light.h
Add the cluster instance into the cluster instance structure inside device.
Add the shared attribute structure into the main device structure
Add the CookerControlCreateCookerControl function into the DimmableLight register function:
$sdk\JN-SW-4168\Components\ZCL\Profiles\HA\Lighting\Source\dimmable_light.c Include the cluster header file.
Call the ‘Create Cluster’ f unction which will initialize the cluster and any attributes to their default value
Add the cluster macros that are associated with the Cooker Control Cluster.
•Right click on “End Point ‘LIGHT’ (1)” in DimmableLight.
•Right click on the HOME_AUTOMATION profile.
•Select New Child -> Input Cluster.
•Select the undefined cluster.
•Select the Properties tab.
•In the Cluster tab, select the CookerControl cluster. Set Cluster ID as 0xFC00 •Leave Discoverable as “true”.
•Select the “apduZCL” for the receive APDU.
上述修改完毕后,重新编译整DimmableLight 工程。

生产的bin文件将会包含新增加的Cooker Cluster功能。

编译成功后将DimmableLight_JN5169_DR1175_LED_EXP_MONO.bin件烧入JN-5169芯片。

然后启动PC端的ZigBee Gateway测试软件ZGWUI.exe,设置"Set CMSK" 、"Start NWK" 和"Permit Join"功能后,建立ZigBee网络并允许新设备加入网络。

在ZGWUI通过发送Simple Descriptor Discovery请求查找某个Endpoint上全部的Cluster信息。

通过网络抓包可以看到Simple Descriptor Response包含了Cooker Cluster(0xFC00),至此增加自定义Cluster完成。

用户可以通过Read、Write和Commands的方式操作这个Cooker Cluster的各项属性,完成对燃气炉的智能控制。

相关文档
最新文档