TinyOS操作系统开发技术及实践(西电版)第6章--TinyOS网络协议课件.ppt
《TinyOS操作系统开发技术及实践(西电版)第6章--TinyOS网络协议课件.ppt》由会员分享,可在线阅读,更多相关《TinyOS操作系统开发技术及实践(西电版)第6章--TinyOS网络协议课件.ppt(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章 TinyOS网络协议 1 1第6章 TinyOS网络协议 6.1 概述 6.2 分发路由协议 6.3 汇聚型路由协议 6.4 CTP协议的实现 小结 第6章 TinyOS网络协议 2 26.1 概述概述路由协议一直是无线传感器网络研究的一个重要方向,在TinyOS 2.x中有两种基本的多跳路由协议:分发路由协议(Dissemination Protocol)和汇聚型路由协议(Collection Protocol)。分发协议能够可靠地传送小数据项到网络中的每一个节点;汇聚型路由协议可以把网络中每个节点的小数据项传递到指定的根节点。本章主要介绍这两种协议以及实现过程。第6章 TinyOS
2、网络协议 3 36.2 分发路由协议分发路由协议分发协议主要用于实现共享变量的网络一致性。网络中的每个节点都保存有该共享变量的一个副本。分发服务会通知节点该变量值更改的时间,同时交换数据包以达到整个网络的一致性。在任意给定时刻,可能会有两个节点的变量值不相同。但过一段时间后,不一致的节点数会越来越少,最终整个网络都将同一于一个相同的变量值。分发协议具有以下几个特点:分发协议能够达到网络的高度一致性,能有效避免临时性通信链路失效以及高丢包率等网络传输问题。分发协议要求在有链路连接的情况下确保能够达到某个变量值一致。第6章 TinyOS网络协议 4 4对于不同大小的数据项,分发协议的设计会有很大的
3、不同。以下内容将讲解分发协议的一系列接口和组件,以及具体的实现过程。第6章 TinyOS网络协议 5 5第6章 TinyOS网络协议 6 6【代码6-1】DisseminationValue.ncinterface DisseminationValue command const t*get();command void set(const t*);event void changed();第6章 TinyOS网络协议 7 7其中,各个函数的功能如下所述:DisseminationValue.get()命令获取const类型的指针指向数据区域。DisseminationValue.set()命
4、令允许节点改变其当前的变量值,并帮助节点给变量分配一个初始值。DisseminationValue.changed()触发节点改变变量值的事件。(2)DisseminationUpdate接口。第6章 TinyOS网络协议 8 8DisseminationUpdate接口用于产生分发的数据,此接口只包含一个命令函数,该命令有一个指针类型的参数,提供DisseminationUpdate接口的组件必须将数据赋值到自己分配的内存中,DisseminationValue接口必须触发change()事件,以此作为对change()调用的响应。其接口定义如代码6-2所示。第6章 TinyOS网络协议 9
5、 9第6章 TinyOS网络协议 10 102.分发协议的组件分发协议的组件在分发协议中有较多的组件,本文将讲解比较重要的组件为DisseminatorC组件,该组件提供了DisseminationValue接口和DisseminationUpdate接口。该组件位于“tinyos-2.x/tos/lib/net/drip”,其具体代码如代码6-3所示。【代码6-3】DisseminatorC.ncgeneric configuration DisseminatorC(typedef t,dip_key_t key)provides interface DisseminationValue;p
6、rovides interface DisseminationUpdate;第6章 TinyOS网络协议 11 11在DisseminatorC组件中提供了两个参数:参数t和参数key。参数t:数据包结构类型,其大小必须能够包含单个message_t包。参数key:即键值key,允许创建不同的DisseminatorC实例组件,类似于AM标识号可以虚拟化AM服务。该键值一般由unique()函数产生。第6章 TinyOS网络协议 12 12第6章 TinyOS网络协议 13 131.创建创建myDissemination文件夹文件夹参照6.3.2节创建MultihopOscilloscope文
7、件夹的步骤创建myDissemination文件夹。创建完成后如图6-1所示。第6章 TinyOS网络协议 14 14第6章 TinyOS网络协议 15 152.编写程序编写程序(1)myDisseminationApp.nc。在myDisseminationApp.nc文件中列出了实现分发协议所需要的一系列组件以及组件与组件的关系,具体代码如描述6.D.1 myDisseminationAppC.nc所示。第6章 TinyOS网络协议 16 16【描述6.D.1】myDisseminationAppC.nc#define MYID 8configuration myDissemination
8、AppC implementation components myDisseminationC;components MainC;myDisseminationC.Boot-MainC;components ActiveMessageC;myDisseminationC.RadioControl-ActiveMessageC;components DisseminationC;myDisseminationC.DisseminationControl-DisseminationC;第6章 TinyOS网络协议 17 17第6章 TinyOS网络协议 18 18(2)myDisseminatio
9、nC.nc。在myDissemination文件中实现了小数据的分发协议,首先分发者获得需要分发的数据,然后将数据发送到网络中;接收者接收到数据后,按照接收到的数据不同点亮不同的LED,具体代码如描述6.D.1 myDisseminationC.nc所示。第6章 TinyOS网络协议 19 19【描述6.D.1】myDisseminationC.nc#include#include“BlinkToRadio.h”module myDisseminationC usesinterface AMSend;interface Receive;interface Packet;interface AM
10、Packet;interface Boot;interface SplitControl as RadioControl;第6章 TinyOS网络协议 2020interface StdControl as DisseminationControl;interface DisseminationValue as Value16;interface DisseminationUpdate as Update16;interface Leds;interface Timer;implementation uint16_t counter;第6章 TinyOS网络协议 21 21am_addr_t
11、DES=0 x0003;/*点亮LED任务*/task void ShowCounter()if(counter&0 x1)call Leds.led0On();if(counter&0 x2)call Leds.led1On();if(counter&0 x4)call Leds.led2On();if(counter&0 x8)call Leds.led3On();第6章 TinyOS网络协议 2222event void Boot.booted()/开启无线电服务call RadioControl.start();event void RadioControl.startDone(err
12、or_t result)if(result!=SUCCESS)call RadioControl.start();else第6章 TinyOS网络协议 2323第6章 TinyOS网络协议 2424counter=counter+1;/设定分发值call Update16.change(&counter);btrpkt=(BlinkToRadioMsg*)call Packet.getPayload(&pkt,sizeof(BlinkToRadioMsg);btrpkt-nodeid=DES;btrpkt-num=counter;/发送数据if(call AMSend.send(AM_BROA
13、DCAST_ADDR,&pkt,sizeof(BlinkToRadioMsg)=SUCCESS);第6章 TinyOS网络协议 2525/*发现分发值发生变化*/event void Value16.changed()const uint16_t*newVal=call Value16.get();counter=*newVal;/如果数据发送成功,触发LED1闪烁event void AMSend.sendDone(message_t*Pkt,error_t err)call Leds.led0Toggle();/接收部分第6章 TinyOS网络协议 2626event message_t*
14、Receive.receive(message_t*msg,void*payload,uint8_t len)if(len=sizeof(BlinkToRadioMsg)/获得接收信息的负载BlinkToRadioMsg*btrpkt=(BlinkToRadioMsg*)payload;/取出发送的数值counter=btrpkt-num;/触发LED闪烁post ShowCounter();return msg;第6章 TinyOS网络协议 2727第6章 TinyOS网络协议 2828【描述6.D.1】BlinkToRadioMsg.h#ifndef _BLINKTORADIO_H#def
15、ine _BLINKTORADIO_Htypedef nx_struct BlinkToRadioMsgnx_uint16_t nodeid;nx_uint16_t num;BlinkToRadioMsg;#endif第6章 TinyOS网络协议 29293.编写编写Makefile文件文件在myDissemination文件夹下创建Makefile文件,并在Makefile文件中添加描述6.D.1 Makefile文件内容。【描述6.D.1】Makefile文件COMPONENT=myDisseminationAppCCFLAGS+=-I$(TOSDIR)/lib/net-I%T/lib/n
16、et/dripinclude$(MAKERULES)第6章 TinyOS网络协议 3030第6章 TinyOS网络协议 31 315.实验现象实验现象将程序烧写至设备中(需要两个设备),可以观察有以下两个现象:设备的LED1闪烁,说明数据发送成功。设备的LED1LED4逐个点亮,说明设备接收到不同的分发数据。第6章 TinyOS网络协议 32326.3 汇聚型路由协议汇聚型路由协议6.3.1 概述概述汇聚型路由协议是TinyOS中一种基于无线传感器网络应用的数据汇聚协议,此协议需要将网络中的数据汇聚到某个节点上,由此节点来处理这些数据。在汇聚型路由协议中网络中的节点分为三大类:根节点、虚拟根节
17、点和采集节点。根节点:网络中的数据最终汇聚到的节点,此节点负责处理整个网络中的数据。虚拟根节点:此节点除了采集数据之外还具有中继传输功能,即当其他节点与根节点的距离超过了通信范围时,其他节点将选择在自己通信范围内的具有中继功能的节点作为自己下一条节点,并将此具有中继功能的节点认为是自己的虚拟根节点。第6章 TinyOS网络协议 3333采集节点:此节点只负责采集数据,并把采集的数据发往根节点或虚拟根节点。汇聚型路由协议的数据传输过程如图6-3所示。其中0号节点为根节点,1、3号节点为虚拟的根节点,2、4、5、6号节点为采集节点。在图6-3中,当5号节点有数据需要被收集起来,它就把数据沿着树向上
18、发送,经过3号和1号虚拟的根节点将数据发送至网络中的根节点。根节点既可以接收虚拟根节点的数据也可以接收采集节点的数据;虚拟根节点既可以接收采集的节点的数据也可以接收其他虚拟根节点的数据,且在汇聚协议中只有根节点和虚拟根节点具有接收数据的功能,采集节点是不具有数据接收功能的。第6章 TinyOS网络协议 3434图6-3 汇聚型路由协议 第6章 TinyOS网络协议 35356.3.2 相关接口和组件相关接口和组件1.汇聚服务的接口汇聚服务的接口在TinyOS 2.x汇聚服务中,一个节点可以有四种存在方式:生产者、消费者、侦听者和网络处理者。根据存在方式不同,使用不同的接口与汇聚服务的组件交互。
19、在应用程序中,通过汇聚标识号可以将汇聚服务多元化,类似于无线通信中的AM标识号。其中,四种存在方式说明如下:生产者:产生数据并将数据发送至根节点或虚拟根节点的节点称为生产者。生产者使用Send接口把数据发送到汇聚树的根节点。汇聚标识号作为实例化Send接口的参数。第6章 TinyOS网络协议 3636消费者:接收数据的节点称为消费者,消费者也是一种虚拟根节点。侦听者:无意中收到消息的节点称为侦听者。侦听者使用Receive接口接收偷听到的消息,汇聚标号作为实例化的Receive接口的参数。能够处理正在传递过程中消息的节点称为网络处理者。这些网络处理者使用Intercept接口接收并更新消息。汇
20、聚标识号也作为实例化Intercept接口的参数。在以上的描述中所用的接口有Send接口、Receive接口、Intercept接口,除去这三个接口还有一个比较重要的接口RootControl接口。第6章 TinyOS网络协议 3737(1)Send.nc。Send接口的主要功能是发送数据以及获得数据负载的长度,此接口有4个命令函数,1个事件触发函数,其接口如代码6-4所示。第6章 TinyOS网络协议 3838【代码6-4】Send.nc#include#include interface Send command error_t send(message_t*msg,uint8_t len
21、);command error_t cancel(message_t*msg);event void sendDone(message_t*msg,error_t error);command uint8_t maxPayloadLength();command void*getPayload(message_t*msg,uint8_t len);第6章 TinyOS网络协议 3939其中,各个函数功能描述如下:send()函数主要功能是发送数据,它决定了发送数据的最大长度。cancel()函数主要功能是取消当前要发送的数据命令。sendDone()函数为触发发送事件函数,如果发送成功则返回S
22、UCCESS,失败则返回FAIL。maxPayloadLength()函数主要功能是获得负载数据的最大长度。getPayload()函数主要功能是获得需要发送的数据以及发送数据的长度。第6章 TinyOS网络协议 4040(2)Receive.nc。Receive接口主要功能是接收生产者的数据,此接口中只有一个函数,其具体代码如代码6-5所示。【代码6-5】Receive.ncinterface Receive event message_t*receive(message_t*msg,void*payload,uint8_t len);第6章 TinyOS网络协议 41 41(3)Inter
23、cept.nc。Intercept接口主要功能是共网络处理者接收并更新消息,此接口只有一个事件函数,其具体代码如代码6-6所示。【代码6-6】Intercept.ncinterface Intercept event bool forward(message_t*msg,void*payload,uint8_t len);第6章 TinyOS网络协议 4242Intercept.forward事件的主要功能是当节点接收到一个要转发的消息包时,汇聚服务应当触发这个事件。如果该事件的返回值为FASLE,那么汇聚服务就不能转发这个包。此接口允许更高层的组件检查消息包的内部,如果这个消息包多余,或者消
24、息包可以汇聚到已有消息包内,此时可以通过此接口事件对消息进行相应处理。(4)RootControl.nc。汇聚树型路由协议的网络是通过根节点以及到根节点的路径构成的,其中根节点的设定是通过RootControl接口来设定的,RootControl接口中有三个命令函数,在此接口的具体代码如代码6-7所示。第6章 TinyOS网络协议 4343【代码6-7】RootControl.ncinterface RootControl command error_t setRoot();command error_t unsetRoot();command bool isRoot();其中,setRoot
25、命令和unsetRoot命令的调用必须返回SUCCESS,否则返回FAIL;而isRoot命令则是根据setRoot命令和unsetRoot命令的返回值来决定自己的返回值。具体使用如下:第6章 TinyOS网络协议 4444如果一个节点已经是根节点,并调用setRoot命令,则返回SUCCESS。如果setRoot命令返回SUCCESS,那么isRoot命令的调用必须返回TRUE。如果unsetRoot命令的调用返回SUCCESS,那么isRoot命令必须返回FALSE。第6章 TinyOS网络协议 45452.汇聚服务组件汇聚服务组件汇聚服务主要通过CollectionC组件、Collect
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TinyOS 操作系统 开发 技术 实践 西电版 网络 协议 课件
限制150内