ZigBee的 四种绑定方法简介

绑定是Zigbee中非常重要的一个概念,想必大家都看了很多文章,其中以“Zigbee四种绑定方式在TI_Z-Stack协议栈中的应用”最为典型,此文我也读过几遍,收货颇丰。此外飞比(Feibit)论坛上也有帖子讲解了EndDeviceBinding蛋疼的传来传去机理,分析的也相当透彻。我这里不在想解释具体的各种绑定方式的代码实现和机制,而是简单说明一下各种绑定机制的特点,希望大家能够从应用层面上概念性地理解和认识绑定,然后针对各种机制的应用场景加以举例。
一、绑定方式再解释
Zigbee绑定的四种方式:
1、        两个节点分别通过按键机制调用ZDP_EndDeviceBindReq函数
即:在一定时间内两个节点都通过按键(其他方式也可以)触发调用这个函数
特点:这个函数的调用将会向协调器发出绑定请求(具体如何调用及参数设置请看协议栈相关代码),如果在16S(协议栈默认)时间内两个节点都执行了这个函数,协调器就会帮忙实现绑定,这个过程的代码很复杂,我不想说。绑定表应该是存在OutCluster那边,即这两个节点应该是一个输出控制命令,一个接收控制命令,绑定表存在输出控制命令这边,至于如何实现,有兴趣同学可以继续研究代码。
注意:这种方式一定需要协调器,否则不行;但是一旦绑定成功,不再需要协调器,协调器只是帮忙绑定的一个第三方;虽然叫做EndDeviceBind,但是不局限于End Device,路由器也一样用;重复上述操作会解绑定,也就是说这是一个乒乓方式。
2、        Match方式
即:一个节点可以通过调用afSetMatch函数允许或禁止本节点被Match(协议栈默认允许,可以手工关闭),然后另外一个节点在一定的时间内发起ZDP_MatchDescReq请求,允许被Match的节点会响应这个Req,发起的节点在接收到RSP的时候就会自动处理绑定。
特点:不需要别人帮忙,只要在网络中的节点互相之间就可以实现,但是前提是他们一定要Match,即一方的outcluster至少有一个是另外一方的incluster,这种方式在很多时候用起来比较方便。
注意:如果同时有多个节点(一个节点上的多个端点也一样)处于允许Match状态,那么req的这个节点可能会收到一大票满足Match条件的rsp,那么你发起req的节点要在这个处理上多下功夫了。
3、        ZDP_BindReq和ZDP_UnbindReq方式
即:应用程序通过调用这两个函数实现绑定和解绑定,这种方式很有趣。具体说来是为了让A和B绑定到一起,还需要一个节点C。例如:你想A控制B,那么这种方式是由C发出bind或unbind命令给A(发给谁谁就处理绑定、并负责存储绑定表),A在接收到req的时候直接处理绑定,也就是添加绑定表项,并且这个过程B并不知道。但是A知道绑定表里面有了关于控制B的记录,并且这种方式可以实现一个节点绑定到一个Group上去。
注意:这种方式需要知道A和B的长地址,具体协议栈拿长地址做什么用,有兴趣的就去挖代码好了。
4、        手工管理绑定表
即:通过应用程序调用诸如bindAddEntry(函数在BindingTable.h文件中定义,具体实现被封包了)来实现手工绑定表管理,这种方式自由度很大,也不需要别的节点参与,但是应用程序要做的工作多一些,整个绑定表都是你说了算。
注意:这种方式你需要事先知道被绑定的节点信息,诸如短地址,端点号,incluster和outcluster这些信息,否则你没办法把那些函数的参数填进去。

二、应用场合举例
1、第一种方式(enddevicebind)
例:网络中有协调器存在,另外有两个节点A和B,这两个节点具有互补特性(即A节点的incluster是B节点的outcluster),A和B结点都有按钮可以通过程序来触发EndDeviceBind的调用。在这种情况下,你只要在规定的时间内分别按A和B上的某个按钮,绑定就会在协调器的帮助下自动完成。这适合于节点很方便操作,没有被装墙里或者无法接触的地方;绑定完成后,具有outcluster性质的B节点即可以通过绑定方式给具有incluster性质的A节点发消息,但是不能指望反过来由A发消息给B,因为A节点根本就没有关于B的信息,绑定表是存在B中的。
2、第二种方式(Match)
例:网络中不一定有协调器存在,但是有A、B、C、D等多个节点,A性质是Outcluster,B、C、D的性质是Incluster,你可以通过按键策略来在一定时间内允许B、C、D中的任何一个开启被Match的功能,同时A发起Match请求(广播的),那么被允许Match的节点就会在收到请求后将自己的信息返给A,A在得到rsp的时候来处理绑定,如果你还想让A绑到其它节点上,可以依次这么做。这种方式其实同第一种操作过程类似,只不过不需要协调器的参与。
3、第三种方式(Bindreq,Unbindreq)
例:假设你有一个主控(可能是ARM板子,可能是PC……),并且有一个Zigbee节点A通过串口或者U口等方式连在了主控上,主控可以给A发命令(什么命令你要自己定义、自己实现了);你还有一个B节点是开关,还有一个C节点是灯。你想让在B上建立绑定表,以用来控制C。那么你可以通过主机命令A向另外的节点B发起BindReq要求,主机发给A的命令中会带着C的一些信息(主机如何有C的信息?这种场合下,主机应该了解整个网络的细节,至于如何了解。。。。,以后再说)。这样,A就可以向B发起BindReq请求,这个请求的参数中包含了必要的C的信息,B在收到请求后就会建立起关于控制C的绑定表,以后B可以通过开关控制C了,也不再需要A的参与。这种方式适合那种集中管理的网络。
4、第四种方式(手工)
例:你还是有一个主机,主机上有Zigbee节点A能够串口或者U口通信。你想由主机来深入地管理整个网络上的绑定情况,你就可以通过主机给A发命令,告诉A给某一个节点发命令,让它去建立、删除、追加。。。。绑定表。这种方式实际上最灵活,但是需要用户(也就是你,写程序的)的工作最多,用户也需要很清晰的思路去管理绑定表,要是不小心管理错了,就杯具了。

还要补充说明的是:为什么要用绑定?尤其是3,4两种,都知道了被绑定节点的具体信息了?绑定有必要吗?实际上,在每一个节点入网的时候,都会向网络自动发出DeviceAnnce报告(这里面包含了节点的IEEE地址和新得到的短地址),告诉大家自己来了,在看到这个DeviceAnnce的时候,每个节点都会根据IEEE地址信息更新自己的绑定表的,这样你就不怕短地址变化啦。还有的时候你可能根本就不知道某些节点的具体信息,尤其是EP信息,在这种情况下,如果你没有主机来统一管理,再不用绑定,两个节点想通信是不可能的。

时间: 2024-10-11 01:50:09

ZigBee的 四种绑定方法简介的相关文章

call apply bind 的区别,this的四种绑定方式

1. apply()中有两个参数,不一定是必填项,当第一个参数什么都不填或则是null/undefined,默认为window 第二个参数必须是数组,数组中的元素和函数的参数对应 Call怎么使用 用途,用于修改函数中的this指向 也是函数ming.call(),执行的元素先替换函数中的this,然后再执行这个函数 Call中参数的分析1. call函数的第一个参数是什么,函数中this就换成什么,当不填或null/undefined,里面的this就是window2. 从第二参数开始,跟函数

由ORACLE_SID想到脚本的四种运行方法

以前学习脚本知道一个概念,关于脚本运行方式的问题,我们熟知的脚本运行方式有以下几种: (1)../script.sh (点斜线脚本) (2).sh script.sh (sh空格脚本) (3).source script.sh (source空格脚本) (4).. script.sh (点空格脚本) 先写个简单的脚本,把执行结果贴在下面,然后分别对这几种脚本运行方式作解释. script.sh内容如下: ------------------------------- #!/bin/bash ec

JAVA中运用数组的四种排序方法

JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来. 选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组. 插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序.下面我就将他们的实现方法一一详解供大家参考. <1>利用Arrays带有的排序方法快

C#四种深拷贝方法

//四种深拷贝方法 public static T DeepCopyByReflect<T>(T obj) { //如果是字符串或值类型则直接返回 if (obj is string || obj.GetType().IsValueType) return obj; object retval = Activator.CreateInstance(obj.GetType()); FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.

并查集类的c++封装,比较union_find algorithm四种实现方法之间的性能差别

问题描述: 在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构: Find:确定元素属于哪一个子集.它可以被用来确定两个元素是否属于同一子集: Union:将两个子集合并成同一个集合: 实现并查集的关键是实现union-find algorithm, 本文根据常用的四种算法,实现了这个类,具体算法实现请参看维基百科: 制造测试数据集,

数据库的四种操纵方法——增、删、改、查

数据库的四种操纵方法——增.删.改.查 增——一种可视化增加就是在设计页面右键点开已经存在的表 进行内容的增加. 另一种是在查询页面,创建查询在代码界面进行代码添加.书写形式:insert into xxx(zzz,ccc)values('aaa','sss')——insert是插入的意思,into是进哪去,xxx代表要插入的表名,zzz,ccc表示表内的列名,values的意思是‘值’,后面的xxx和ccc是插入所内容的列名.总体的意思就是:在xxx表内的zzz列和ccc列插入aaa和sss

并查集类的c++封装,比較union_find algorithm四种实现方法之间的性能区别

问题描写叙述: 在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构: Find:确定元素属于哪一个子集.它能够被用来确定两个元素是否属于同一子集: Union:将两个子集合并成同一个集合: 实现并查集的关键是实现union-find algorithm, 本文依据经常使用的四种算法,实现了这个类,详细算法实现请參看维基百科: 制造測试

关于Facebook、twitter、google、pinterest四种分享方法,附带微博、QQ、微信、豆瓣等等

常用的国外网站分享推过,Facebook.twitter.google.pinterest这四种社交平台最常见,下面就简单介绍一下分享的方法. 首先,必须使用分享插件,share.js 获取方法: https://github.com/chenpenggood/share.js 这有两种分享文件:1.关于Facebook.twitter.google.pinterest四种分享方法, 简洁版,容量小 2.jQuery分享插件jquery.share.js享到QQ.微信.微博.google.in.

U盘强制拔出丢失数据的恢复方法(U盘写保护的四种解决方法)

● U盘强制拔出丢失数据的恢复方法 U盘从出现以来,小巧便携容量大深受人们的喜爱,不用像云盘一样需要下载,所以重要的文件我们都喜欢用U盘来传递数据,但是很多人使用U盘拔出时都没有使用"弹出U盘"功能,取出过程中电脑正在对U盘读写,这时候拔出很容易造成数据丢失或者导致U盘中的文件损坏无法打开,那么这种情况下我们应该怎么解决呢?下面小编就教大家如何恢复,一起来看看吧. 首先,下载一个数据恢复软件,比较好用的就有[迷你兔数据恢复软件](minitool中文版本),可以恢复U盘中被删除的数据,