无线传感器网络实验教程绑定实验主讲教师:柯宗武2012年12月Copyright:柯宗武本章内容绑定的基本概念绑定的方法实例讲解Copyright:柯宗武实验内容协调器通过广播方式绑定终端节点,在液晶屏上显示绑定过程。终端节点绑定到协调器。绑定成功后发送“HelloWorld”给协调器并显示。绑定完成后,按协调器中键(center)时点亮对方的指示灯。Copyright:柯宗武预备知识---传感器网络数据通信Copyright:柯宗武预备知识---ZigBee网络地址网络地址在一个新设备加入网络之后协调器会主动为它分配一个网络地址,以方便在网络中的身分确认理论地址范围:0-65535某些专用的地址不会分配给设备如:0xFFFF是广播地址(所有设备),0xFFFE是广播到FFD设备(全功能设备:路由器)Copyright:柯宗武预备知识---ZStack中网络地址定义typedefstruct{union{uint16shortAddr;ZLongAddr_textAddr;}addr;byteaddrMode;}zAddrType_t;枚举类型enum{AddrNotPresent=0,AddrGroup=1,Addr16Bit=2,Addr64Bit=3,AddrBroadcast=15};Copyright:柯宗武预备知识---应用框架(ApplicationFramework)AF层为各个用户自定义的应用对象提供了模板式的活动空间,为每个应用对象提供了键值对KVP服务和报文MSG服务两种服务供数据传输使用。每个节点除了64位的IEEE地址,16位的网络地址,每个节点还提供了8位的应用层入口地址,对应于用户应用对象。端点0为ZDO接口,端点1至240供用户自定义用于对象使用,端点255为广播地址,端点241-254保留将来使用。Copyright:柯宗武预备知识---应用框架(ApplicationFramework)每一个应用都对应一个配置文件(Profile)。配置文件包括:设备ID(DeviceID),事务集群ID(clusterID),属性ID(AttributeID)等。AF可以通过这些信息来决定服务类型。Copyright:柯宗武预备知识---profiles应用profiles是一组统一的消息,消息格式和处理方法,允许开发者建立一个可以共同使用的分布式应用程序,这些应用是利用驻扎在独立设备中的应用实体来实现的。这些应用profiles允许应用程序发送命令、请求数据和处理命令的请求。总之,配置文件使得ZigBee设备可以互操作。ZigBee联盟已经定义了很多标准的配置文件,比如远程控制开关配置文件和智能家居等。任何遵循某一标准配置文件的节点都可以与其他实现相同配置文件的节点进行互操作。一个publicprofile也规定了profile的ID,比如智能家居就规定是0x104。Copyright:柯宗武预备知识---簇(cluster)簇标识符可用来区分不同的簇,簇标识符联系着从设备流出和向设备流入的数据。在特殊的应用profiles范围内,簇标识符是唯一的。cluster要理解成一个大方向下的一个特定对象,比如智能家居下的一个调光器,操作这个调光器就需要一些命令,比如变亮,变暗,关灯,开灯这些,另外,这个调光器也会有一个attribute,也就属性,比如当前的亮度,由亮变暗的过程经历多长时间。Copyright:柯宗武预备知识---簇(cluster)总结说来,Profile规范了应该包括哪些cluster,一个cluster会有一个ID,在一个cluster下又会有很多command,也会有很多attibute,在一个cluster下面command和attribute的ID要唯一,不同的cluster下可以重复,不同的profile下clusterID也可以重复。Copyright:柯宗武预备知识---ZigBee设备对象(ZDO)ZigBee设备对象(ZDO),描述了一个基本的功能函数,这个功能在应用对象、设备profile和APS之间提供了一个接口。ZDO位于应用框架和应用支持子层之间。它满足所有在ZigBee协议栈中应用操作的一般需要。此外ZDO还有以下作用:初始化应用支持子层(APS),网络层(NWK),安全服务规范(SSS)。从终端应用集合中配置的信息来确定和执行安全管理、发现、网络管理、以及绑定管理。Copyright:柯宗武预备知识---ZigBee设备对象(ZDO)ZDO描述了应用框架层中应用对象的公用接口以及控制设备和应用对象的网络功能。在终端节点0,ZDO提供了与协议栈中与低一层连接的接口,如果是数据则通过APSDE-SAP,如果是控制信息则通过APSME-SAP。APS数据实体(APSDE)提供在同一个网络中的两个或者更多的应用实体之间的数据通信。通过APSDE服务接入点(APSDE-SAP);APS管理实体(APSME)提供多种服务给应用对象,这些服务包含安全服务和绑定设备,并维护管理对象的数据库,也就是我们常说的AIB。Copyright:柯宗武预备知识---ZDO与Profile的关系ZDO是ZigBee设备对象,属于特殊的Endpoint(特制自己);Profile面向某个应用的公约或准则,包括5种描述项;AF是应用层。Profile是法律条款,ZDO是逻辑工作实体(自己);Profile中的多种描述项是条例、是图纸,ZDO是具体实现。以上内容详见《ZigBee2007协议规范》Copyright:柯宗武绑定(Binding)的基本概念绑定是一种两个(或者多个)应用设备之间信息流的控制机制。绑定允许应用程序发送一个数据包而不需要知道目标地址。APS层从它的绑定表中确定目标地址,然后将数据继续向目标应用或者目标组发送当两个设备已经在他们的简单描述符结构中登记为一样的簇ID,并且一个作为输入另一个作为输出时,绑定才能成功。绑定服务是针对设备端点上的簇,用户程序只需要提供端点号和簇ID,就可以通过绑定表找到对应的被绑定的节点的网络地址和端点号,从而实现无线数据的发送Copyright:柯宗武建立绑定表有四种方法可以建立一个绑定表:ZigBeeDeviceObjectBindRequest(Match方式)一个启动工具可以告诉设备创建一个绑定记录ZigBeeDeviceObjectEndDeviceBindRequest两个设备可以告诉协调器它们想要建立一个绑定表记录。协调器来协调并在两个设备中创建绑定表记录。DeviceApplication一个设备上的应用程序建立或者管理一个绑定表由管理员手工绑定通过pc机串口发送绑定命令,集中管理。Copyright:柯宗武ZigBeeDeviceObjectBindRequest任何一个设备都可以发送一个ZDO信息给网络中的另一个设备,用来建立绑定表。称之为援助绑定,它可以为一个发送设备创建一个绑定记录。Match方式一个节点可以通过调用afSetMatch函数允许或禁止本节点被Match(协议栈默认允许,可以手工关闭),然后另外一个节点在一定的时间内发起ZDP_MatchDescReq请求,允许被Match的节点会响应这个Req,发起的节点在接收到RSP的时候就会自动处理绑定。Copyright:柯宗武Match方式网络中不一定有协调器存在,但是有A、B、C、D等多个节点,A性质是Outcluster,B、C、D的性质是Incluster,你可以通过按键策略来在一定时间内允许B、C、D中的任何一个开启被Match的功能,同时A发起Match请求(广播的),那么被允许Match的节点就会在收到请求后将自己的信息返给A,A在得到rsp的时候来处理绑定,Copyright:柯宗武Match方式绑定流程Copyright:柯宗武Match方式绑定流程Copyright:柯宗武ZigBeeDeviceObjectEndDeviceBindRequest这个机制是在指定的时间周期(timeoutperiod)内,通过按下选定设备上的按钮或者类似的动作来绑定。协调器在指定的时间周期内,搜集终端设备的绑定请求信息,然后以配置ID(ProfileID)和簇ID(ClusterID)协议为基础,创建一个绑定表记录作为结果。默认的设备绑定时间周期(APS_DEFAULT_MAXBINDING_TIME)是16秒钟(在nwk_globals.h中定义)。但是将它添加到f8wConfig.cfg中,则可以更改。Copyright:柯宗武ZigBeeDeviceObjectEndDeviceBindRequest绑定程序流程在GenericApp.c中的GenericApp_HandleKeys函数中首先确定目的地址类型及目的地址,然后调用ZDApp_SendEndDeviceBindReq()函数ZDApp_SendEndDeviceBindReq搜集所有终端节点的请求信息,然后调用ZDP_EndDeviceBindReq()【userApp.c】函数将这些信息通过fillAndSend()【ZDProfile.c】函数调用AF_DataRequest()【ZDProfile.c】函数发送给协调器。Copyright:柯宗武ZigBeeDeviceObjectEndDeviceBindRequest绑定程序流程协调器调用函数ZDApp_ProcessOSALMsg()【ZDApp.c】ZDApp_ProcessOSALMsg调用函数ZDP_IncomingData()【ZDProfile.c】函数接收这些信息。ZDApp_ProcessMsgCBs函数处理响应信息,调用ZDO_MatchEndDeviceBind()【ZDObject.c中】函数来处理这个请求。Copyright:柯宗武ZigBeeDeviceObjectEndDeviceBindRequest绑定程序流程当收到两个匹配的终端设备绑定请求,协调器在请求设备中启动创建源绑定记录的进程。假设在ZDO终端设备中发现了匹配的请求,协调器将执行下面的步骤:发送一个解除绑定请求给第一个设备。这个终端设备锁定进程,这样解除绑定被首先发送来去掉一个已经存在的绑定记录。等待ZDO解除绑定的响应,如果响应的状态是ZDP_NO_ENTRY,则发送一个ZDO绑定请求Copyright:柯宗武ZigBeeDeviceObjectEndDeviceBindRequest绑定程序流程在源设备中创建一个绑定记录。如果状态是ZDP_SUCCESS,则继续前进到第一个设备的簇ID。等待ZDO绑定响应,如果收到了,则继续前进到第一个设备的下一个簇ID。当地一个设备完成后,用同样的方法处理第二个设备。当第二个设备也完成之后,发送ZDO终端设备绑定请求消息给两个设备。Copyright:柯宗武DeviceApplication另一种进入设备绑定记录的方式是应用自己管理绑定表。这就意味着应用程序需要通过调用下面的绑定管理函数在本地进入并且删除绑定记录:bindAddEntry()——在绑定表中增加一个记录bindRemoveEntry()——从绑定表中删除一个记录bindRomoveClusterIdFromList()——从一个存在的绑定表记录中删除一个群IDbindAddClusterIdToList()——向一个已经存在的绑定记录中增加一个群IDbindRemoveDev()——删除所有地址引用的记录Copyright:柯宗武DeviceApplicationbindRemoveSrcDev()——删除所有源地址引用的记录bindUpdateAddr()——将记录更新为另一个地址bindFindExisting()——查找一个绑定表记录bindIsClusterIdIn