omnet无线传感器网络仿真中文说明书_第1页
omnet无线传感器网络仿真中文说明书_第2页
omnet无线传感器网络仿真中文说明书_第3页
omnet无线传感器网络仿真中文说明书_第4页
omnet无线传感器网络仿真中文说明书_第5页
已阅读5页,还剩163页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章无线传感器网络概 概述61.1NS-261.2OPNET61.3SensorSim71.4EmStar71.5GloMoSim71.6TOSSIM71.7·第二章OMNET++简 概述 92.1OMNeT++框架 92.1.1OMNeT++组成 92.1.2OMNeT++结构 OMNeT++语法 NED语言 NED总概述 Ned描述的组件 函数 包传输模型 定义简单模块 2.3.3cMessage2.3.4模块参数、门及连接 消息参数的 门和连接的 门的传输状态 连接的状态 2.4仿真过程 2.5配置文件omnetpp.ini 2.6结果分析工具 2.6.1矢量描绘工具Plove 2.6.2标量工具Scalar 27、结束语 第三章物理层仿真(信道 3.1UWB的基础知识3.1.1UWB3.1.2UWBUWB的脉冲生成方式UWB3.2OMNeT++UWB进行仿真..43.2.5参考文献第四章MAC层仿 概述4.1无线传感器网络MAC层特性及分类4.1.1无线信道特性 4.1.2MAC设计特性分析 4.1.3MAC4.2基于随机竞争的MAC4.2.1S-MAC协议4.2.3AC-MAC4.3基于时分复用的MAC4.3.1D-MAC4.3.2TRAMA协议4.3.3AI-LMAC协议4.4其他类型的MAC4.4.1SMACS/EAR4.4.2CDMAMAC协议4.4.3DCC-MAC4.5基于OMNeT++MAC层协议4.5.1S-MAC协议的仿真4.5.2S-MAC协议流程图4.5.3S-MAC协议的分析4.6小结参考文献第五章网络层仿 概述5.1无线传感器网络路由协议研究5.1.4OMNET5.2无线传感器网络路由协议研究的发展趋势5.3无线传感器网络层路由协议与OMNET++仿真 5.3.1无线传感器网络层路由与OMNET++仿真的基本概念[19] 传感器网络的体系结构 .1传感节点的物理结构 .2传感器网络的体系结构与网络模型 5.3.2传感器网络层路由协议的基本概念 网络通信模式[28] .1单播 .2广播 .3组播 传感器网络层设计 5.3.3OMNET++仿真软件的基本概念 5.4无线传感器网络路由协议介绍5.4.1泛洪法(Flooding)[32]5.4.2定向扩散(DirectedDiffusion:DD)[33]5.4.3LEACH(EnergyAdaptiveClusteringHierarchy)[34].2gossi协议 5.6本章总结参考文献6.1无线传感器网络节点定6.1无线传感器网络节点定位 6.1.1节点定位的基本概念 节点定位的定义 节点定位的重要性 6.1.2节点定位的研究 测距方法 节点定位原理 节点定位算法分类 .1锚节点分类 .2计算方式分类 .3测距分类 .4节点移动性分类 节点定位性能评价[37] 6.1.3基于OMNET++的DV—Hop定位算法仿真 DV—Hop定位算法的基本思想 DV—Hop定位算法仿真 6.2网络管理.1.1wsn网络管理的定义及范畴 wsn网络管理系统的分类 wsn网络管理系统的设计标准 6.2.2wsn网络管理系统 能量管理系统 .1SenOs[5] TopDisc算法 sympathy系统[42] Agilla系统[7] 6.2.3典型网络管理算法的Omnet模拟 ·基于Wsn6.2.4结论 6.3基于路由层安全协议的OMNeT++仿真 6.3.1基础知识介绍 无线传感器性的重要性和必要性 无线传感器网络的安全目标 无线传感器网络中的路由协议概述 无线传感器网络路由协议的方法 无线传感器网络中经典路由协议安全性分析 安全路由技术分析 .1密钥管理技术[20,23,24,25] .2安全路由协议 6.3.2在OMNeT++中的仿真 6.3.3总结 参考文献第七章实例(无线传感器网络移动节点定位仿真 概述7.1移动定位算法介绍7.1.1ActiveBadge系统 RADAR系统 Cricket系统 7.1.2室外移动节点定位算法 纯移动定位算法 7.2移动定位算法的OMNeT++7.2.1MCL(MonteCarloLocalization)7.2.2MCL(MonteCarloLocalization)OMNeT++仿真建立网络拓扑 编码阶段 7.3.总结和发展趋势参考文献第一线传感器网络概概建立无线传感器网络模型)NS-2,OPNET,SensorSim,EmStar,OMNet++,G1oMoSim,TOSSIM,PowerTOSSIM等。NS-NS-2(NetworkSimulator-2)是著名的用于网络研究的离散仿真工具,里面包括了大量的用于在有线或无线、本地连接或通过连接进行TCP协议、路由算法、多播协议仿2可以对仿真进行详细的并用仿真工具“网络动画器”CNetworkAnimator(NAM)型实现对网络行为的仿真其无线模型是采用基于流水线的体系结构来确定节点间的连接TinyOSNesC程序的仿真。但要实现无线传感器网络的仿真,还需要添加能量模型,而OPNET本身似乎更注重于网络QoS的性能评价。WINS平台的,需要用SensorWare 进行设计。SensorSim在仿真时了节点的能SensorSimEmStar提供了在仿真和基于iPAQLiunx的节点之间灵活切换的环境,用户可中,并进行和调试程序。EmTOS是用于在EmStar中进行TinyOS程序仿真的工具。EmStar虽然不是一个真正意义上的无线传感器网络仿真工具,但却是一个很有用的用于对GloMoSim(GlobalInformationSystemsSimulationLibrary)是一个可扩展的用于APIsGIoMoSimParsecG1oMoSimTOSSIM(TinyOSmotesimulator)TinyOSMotesbit级的仿真的工具。TOSSIMTinyOSNesCPC环境下运行的可执行文件,提供了不用将程序的真实的Mote节点上就可以对程序进试的一个平台。TOSSIMTinyViz.。TOSSIM的缺点是没有提供能量模型,无种操作所消耗的能量进行,从而实现无线传感器网络的能耗性能评价。PowerTOSSIM第二Omnet++简概目前,存在的网络通用协议十分有限。Ethernet普遍用于有线局域网,IEEE802.11主要TCP系统拓扑等的影响。因此,ns-2等网络模拟器对于无线传感器网络的仿真是有局限的。本书OMNeT++(ObjectiveModularNetworkTestbedinC++),并运用内核NS2,OPNET和JavaSim等仿真平台相比,OMNeT++可运行于多个操作系统平台,OMNeT3.3p1。OMNeT++框OMNeT++组Sim网络描述语言的编译器(networkdescriptioncompiler,nedceditor,GNED仿真程序令行用户接口-Cmdenv,图形化的输出工具-Plove和Scalar。Sim是仿真内核和类库,用户编写的仿真程序要同Sim连接,Sim在OMNeT++中占据最为重要的地网络描述(NED)GNEDNEDOMNeT+TkenvCmdnvnv,仿真程序令行用户接口-Cmdenv)仿真进行的测试和调试可以在Tkenv接下进行,Tkenv是一个便易用的图形窗口化的用户接口,Tkenv支持,调试和执行TkenvTkenv显示模型的详细信息。Cmdenv接口用于实际的仿真实验,因为Cmdenv支持批处理。Cmdenv是一个简便的小型命令行接口,执行速度快。它可以在所有操作系统平台上运行。CmdenvOMNeT++结155执行模型和:仿真内核管理将来的,当有发生时,仿真内核就调用执行模型中的模块执行模型的模块在m的main对中执行模型依次调用仿真内m库中的类。Sim和模型组件库:当仿真开始运行创建了仿真模型的时候,仿真内核就实例化简Sim的功能。执行模型和Envir:ev对象作为Envir的一部分,是面向执行模型的用户接口。仿真ev对象来记录调试信息。SimEnvirEnvir决定创建何种模型,Envir包含主要的仿真循环,并调用仿真内核以实现必须的功能。Envir捕捉并处理执行过程中发生在仿真内核和或类库中的错误用户接口类,创建用户接口类的实例并执行。Sim和模型对ev对象的调用通过实例化TOmnetApp类进行。EnvirTOmnetAppTkenvCmdenv的框架OMNeT++的安OMNeT++的安装环境Win32(NT4.0,Window2.2windowsVisualC++7.0ServicePackVisualStudio6.0; omnetpp-3.3-win32.exe安装包,开始安装印ps或pdf图形格式的文件。(3)安装完毕后,应该先进行环境变量的设置。即:在vc6.0的 下,找OMNeT++语+是面向对象的离散模拟工具,为基于进程式和驱动两种方式的仿真提供了支持。采用混合式的建模方式同时使用了特有的nedNetworkDscripton,网络描述+的主要模型拓扑N,采用它可以完成一个网络模型的描述。网络描述包括下列组件信道定义、网络定义、简单模块和复合模块定义NEDNED文件,该文件不能直接被+编译器使用,需要首先采用+提供的编译工具NEDC将.NED文件编译成.cpp文件。最后,编译器将这些文件与用户和自己设计的简单模块程序连接成可执行程序。NED语NED总概NED语言用来刻画定义模型的拓扑结构,方便对一个网络的模型化描述,这意味着一他网络描述中得以重用。包含网络描述的文件带有.Ned的后缀,.Ned拟程序,或者用Ned编译器或C++代码到模拟器执行。NED文件可以使用任何文本编GNED图形编辑器来编写。Ned描述的组NED描述包括以下的组件(按任意次序排列所有并连接所有的网络描述文件你可以用文件名(NED扩展名也可,同样可以在文件包括一条路径或者用NED编译器的<path>行选项名引进文件的路径。如:import //importserro(datarat(如 channeldelay0.0018//error1e-datarate128000//simple块都能使用。相对于简单模块,它还有两个部分:子模块和。语法如下module其中任意部分(参数,门,子模块,)都是可选项网络定义模块只定义了模块类型要确实地获得一个仿真器能运行的模块需要书写网络定义网络定义将前面定义的模块类型为一个仿真模块实例networkwirelessLAN: wirelessLANwirelessHost,wirelessHub等类型进一步的复合模块的定义。自然地,只有模块类型可以使用在网简模简模简模简模简模简模函在NED表达式中,可以使用以下数学函数C语言中<math.h>库函数:exp(log(),cos(),floor(),ceil(产生随量的函数:uniform,exponential,normal等等表达式可以包含不同类型的随量,指针类型(除了const)返回不同的值,每次被计算。如果为const类型,指针值只在仿真开始的时候计算一次,以后的返回相同的值,随量程序用随机数字生成其中的一个,缺省为genertor0。#includedoubleaverage(doublea,double{return}Define_Function(average,2表示average()函数有2个参数。这样定义之后,average()函数就能用于NED文件了moduleCompoundparameter:a,b;proc:parameters:av=要利用Define在OMNeT++中,允许类名与NED定义的简单模块名不相同。简单模OMNET++中离发生的时间通常被称做时间戳在OMNET中叫做到达时间模拟时间或虚拟时间cpucpu时间被消耗。期”通过模块给自己发送一个消息而实现OMNET++中的模拟时间被在C++类型的simtime_t中,是双精度类型包传输模延迟,比特误差率,数据速propagationdelaybiterrorratedatarate。,并在整个模型中使用延迟是消息通过通道到达目的地的时间段延迟以秒为单位。,Pnobiterror=(1−数据速率的单位bits/second消息的发送时间与传输的第一个比特和接收的最后一个比特相关。(图图3定义简单模CSimpleModule(2)(以define_Module()或define_Module_Like()宏之作用:一个simplemodule类型并且建立与相应NED文件的关联。前者用于类名与NED定义的SimpleModule名相同者用于不同可以为一个NEDSimpleModule提供不同的实现。#include//moduleclassclassSlidingWindow:public{//virtualvoid//moduletypeDefine_Module(SlidingWindow//implementationofthemodulevoid{intwindowSize=}NED//file:simplewindowSize:numericconst;in:fromNet,fromUser;out:toNet,toUser;Module_Class_Members(classnamebaseclass 如果你使用activity(),这个模块以协同模式执行,需要划分出一0handleMessage()。简单模块中的主要成员函16k为更大的栈空间。messageeventhandleMessage()initialize()wait()、消cMessageTken(消息类型被假定为携带一些消息类型信息。0或正值可以被自由使用。负值被消息定message{intsrcAddress;intdestAddress;inthops=32;如果你使用消息子集编译器来处理mypacket.msg,将创建以下文件:mypacket_m.h和原始类型:boolcharshort,int,longunsignedshort,unsignedint,unsignedlong,double,string,一个动态定位string,以contstchar*呈现。结构,类(根于或不根于cObject),消息句法中或外部C++代码中被申明消息的收send(cMessage*msg,constchar*gateName,intindex=0);send(cMessage*msg,intgateId);isBusy();广播和重传不能使用send()发送同一个messageb)sendDelayed(cMessage*msg,doubledelay,constchar*gate_name,intindex);c)sendDelayed(cMessage*msg,doubledelay,intgate_id);d)送出时间是当前的模拟时间+延迟时间E.g:sendDelayed(msg,0.005,"outGate");scheduleAt(absoluteTime,msg);scheduleAt(simtime()+deltacMessage*timeoutEvent=newcMessage("timeout");scheduleAt(simTime()+10.0,timeoutEvent);cMessage*msg=receive();if(msg==timeoutEvent){//timeout}{//othermessagehasarrived,timercanbecancelleddeletecancelEvent(timeoutEvent);//FES模块参数、门及连消息参数调用cModule的par()成员函数可以模块指针cPar&delayPar=cPar类是一个值的对象,它支持数据类型,指针值可以这样读intnumTasks=doubleprocessingDelay=cPar&waitTime=par("waitTime");{wait((simtime_t)waitTime}par("waitTime")=cPar&waitTime=par("waitTime");waitTime=0.12;门和连接简单模块组简单的门门在gates关键字后一个空括号[]表示门向量向量元素个数从0开始。simpleNetworkInterfaceparameters://...in:fromPort,out:toPort,simpleRoutingUnitparameters://...in:out:连①接·包含属性(延迟,比特出错率,数据速度)或使用命名的通道(频道·for循环中(生成多重连接·如果不指定通道,连接就没有传输时延,时延与比特出错率,例如node1.outGate-->node1.outGate-->error1e-9delay0.001-->fori=0..4node1.outGate[i]-->4门的传输状cMessage*packet=newcMessage("DATA");packet->setByength(1024);//if(gate("TxGate")->isBusy())//ifgateisbusy,waituntil{ eswait(gate("TxGate")->transmissionFinishes()-}send(packet,if(gate("mygate")->toGate()-连接的状cGate*gate=gate("somegate");if(gate->isConnected()){cGate*othergate=(gate->type()==’O’)?gate->toGate():gate-ev<<"gateisconnectedto:"<<othergate->fullPath()<<}{ev<<"gatenotconnected"<<}cGate*gate=gate("out");while(gate->toGate()!=NULL){gate=gate-}cModule*destmod=gate-sourceGate()anddestination-Gate()仿真过(omnetpp.ini仿真输出被写进数据文件中:vector矢量文件,scalar标量文件,和用户输出文件。OMNET提供了一个名为Plove的GUI工具来观察和绘制vector输出文件的内容不期望人们单独地使用OMNET++对结果文件进行处理:输出文件是一种能被读进像或OctaveOpenOfficeCalc,GnumericMSExcel的 ——ned文件编译成_n.cc *.msg——将*.msg文件编译成_m.h和_m.cc 下的所有cc(cpp)文件进行编译或cpp决定于 下的文件若都有必须都进行编译之后生成Makefile.vc文件nmake Makefile.vc配置文件【Run1】,【Run2….——包含每一运行设置。这些部分可能包含任意在其他部分中结果分析工矢量描绘工具ove+输出矢量的一个便利的工具。每个矢量的线性跟轴边界,缩放比例,标题和标注一样被设置为最频繁的绘图选项。你可以点击一下将图保存到文件中去。在s中,可以将到矢量格式的剪切板中,然后粘贴到其他的应用程序中。绘图之前先对结果进行过滤是可能的。过滤能够平均化,切断极限值, 标量工具void{doublet=simTime();if(t==0)return;recordScalar("simulatedtime",}run1scalar"lan.hostA.mac""simulatedtime"120.249243 run2"lan"scalar"lan.hostA.mac""simulatedtime"235.678665每次调用recordScalar()在文件中都产生一”scalar”行。另外,一些仿真运行可以将它的结果记录到一个单个的文件 、结束本章详细介绍了+这个优秀的网络仿真平台,它主要用于离散的模拟。+OMNeT++提供了图形化的网络编辑器和网络、数据流查看工具OMNeT++802.11MACDirectedDiffusion协议时,比其他的网络第四MAC层仿概介质控制(mediumaccesscontrol)协议简称MAC协议,处于无线传感器网络协议议之一,传感器网络的性能如吞吐量、公平度、延迟性能等完全取决于所采用的MAC 网络、AdHoc是当前主流的无线网络技术,但它们各自的MAC协议不适合无线传感器网络。GSM和CDMA中的介质控制主要关心如何满足用户的QoS要求和节省带宽资源,功耗是第二位的;AdHoc网络则考虑如何在节点具有高度移动性的环境中建立彼此间的,同时兼顾一定的QoS要求,功耗也不是其首要关心的。而无线传感器网络的MAC协议首要考虑的因素就是节省能量。这意味着传统网络的MAC协议不适用于传感器网络,需要提出新的适用于传感器网络的MAC协议。无线传感器网络MAC层特性及无线信道 (b)终端问图1隐藏终端问题和终端问MAC计特性分设计无线传感器MAC协议,首先要考虑节点的电池能量效率。每个节点由电池供电,由于环境或是其他条件约束,节点的电池只能一次使用,在MAC设计时着重考虑如何提高电池能量效率,成为无线传感器网络区别于其他网络MAC无线传感器网络节点的能量效率主要由以下因素决定。第一个因素就是,由于发生无线传感器网络典型MAC协议的分根据采用固定分配信道方式还是随机信道方式,可以将传感器网络的MAC协议分基于随机竞MAC协S-MAC协议S-MAC协议[1]是在802.11MAC协议基础上,针对传感器网络的节能需求而传感器MAC能量的主要因素,S-MACS-MAC1、周期性侦听和睡每个节点用SYNC消息通告自己的调度信心,同时一个调度表,保存所有相邻节点的S-MAC2.流量自适应侦听机S-MAC如果节点在这段时间内接到RTS分组,则可以立刻接收数据,无须等到下一次调度侦听周RTS3、串音避S-MAC802.11MACRTS/CTS协议的节点进入睡眠状态。每个节点在传输数据时,都要经历RTS/CTS/DATA/ACK的通信过程(广播包除外。在传4、消息过S-MACRTS/CTS次预约发送整个长消息的时间;又因为传感器网络的无线信道误码率高,S-MAC余时间,然后进入睡眠状态直至长消息发送完成。IEEE802.11MACRTS/CTSSMAC协议主要优点是利用周期性的睡眠/侦减少了空闲所造成的能量浪费通过让相邻节点同步减少了控制消耗;利用RTS/CTS机制少了数据的几率。SMAC费周期性的睡眠造成了延时的增加相邻节点的同步增加了的几率采用自适应侦造成节点丢失。T-MAC协T-MAC(TimeoutMAC)协议[2]是在S-MAC协议的基础上提出来的。S-MAC协议通过采节点处于空闲侦听的时间相对增加。针对这个问题,T-MAC协议在保持周期长度不变的基MAC协议相对S-MAC在T-MAC协议中,发送数据时仍采用RTS/CTS/DATA/ACK的通信过程,节点周期性唤醒进行侦听,如果在一个指定时间TA内没有发生下面任何一个激活,则活动结束:周期时间定时器溢出;在无线信道上收到数据;通过接收信号强度指示RSSI感知存在无线通信;通过侦听RTS/CTS分组,确认邻居的数据交换已经结束。T-MACAC-MAC协A-MAC]MACTMACACMACS-C-MAC时和吞吐量方面的性能。具体来说,A-MACMACSMAC会。A-MAC假设在MAC层点i的队列信息包为Ni,它可以通过方程Ri=f(Ni)映射到对应的值Ri,其中函数f表达了应用点想要传输信息的渴望程度。新的任务周期为:T'T

TRTS/

TRTS/CTS为了保持S-MAC基本的任务周期,R值是在每个基本任务周期的开始处通过RTS/CTS信RAC-MAC的优点是在保持了S-MC协议能量有效利用性能的同时大幅度提高了S-MAC协T-MAC基于时分复MAC协D-MAC协S-MACT-MAC节点像反应一样相继醒来与S-MAC协议不同的是D-MAC协议中没有采用RTS/CTS机制。为了避免在同一深度的期和发送周期的长度为:µBP+CW+DATA+SP+ACK当一个节点有多个信息包需要发送时,D-MAC采用了slot-by-slot更新方案,将多数据标志附在MAC报头以增加节点和多跳路径上其他节点的任务周期。在此基础上,D-MAC协在汇聚形式的通信中,D-MAC协议与S-MAC协议相比延时方面达到了非常好的效果。但TRAMA协期主要用于网络TRAMA协议根据两跳范围内的邻居节点信息,由节点独立确定自己发送消息的时隙,同时避免把时隙分配给没有的节点,由此提高了网络吞吐量,克服了基于TDMA的MAC协议扩展性差的不足。但是TRAMA协议相对比较复杂,为了建立节点间一致的调度消AI-LMAC协AI-LMAC(adaptive,informationcentricandlightweightMAC)是基于TDMA技术的MAC协议[6],无需竞争介质,也不会产生碰撞。AI-LMAC协议的思想是:网络初始化由网关节点(如sink节点)发起,网关先广播一个控制帧到与它相邻一跳范围的邻节点,网络,初始化主要是完成时隙(timeslot)分配,即网络中的节点选取一个时隙作为自己的发射时间)。在控制帧中有一个域来标识时隙(一个bit(controlmessage,CM)和数据信息(datamessage,DM)两部分。其中CM,DM长度完时,都及时关闭无线电发射装置。AI-LMAC协议中每个节点都有一个固定分配的时隙来发送/接收信息,但当节点中的数据传输量较大时,可根据每个节点中的DDT(datadistributiontable)中的信息来申请使用空闲的时隙,以减少网络的延时,提高节点的公平性。AI-LMAC协议最显著特点是充分利用了循环机制,使每个传感器节点在自己时隙其他类型的MAC协SMACS/EAR协SMACS/EAR(Self-organizingMediumAccessControl/EavesdropAndRegister)协用于建立少量运动节点与静止节点之间的通信链路。SMACS/EAR协议不要求所有节点之间基于CDMA技术MAC协CDMA是一种使用编码技术实现信道共享的通信技术。CDMA是利用相互正交的编码来技术的MAC协议。为了实现正交的地址编码,设计了一种伪随机码分配算法,使得每个传双方打开数据收/发射频传输数据。基于CDMA技术的MAC协议,不需要严格的时钟同步,只要求局部范围内的节点之间保持同步,网络的可扩展性较好。但CDMA的编码过程较DCC-为了将超宽带技术与传感器网络结合起来,在DCC-MAC协议[9]中采用了一种类似传统(PRP这样一方面可以降低辐射的能量另一方面减少了时间上跳时码重复的可能在信道方MAC(PrivateMAC)的方THS(REQ(RESP)RNSRESP,开始传输数据。传输完后,发送端和接收端用它们自己的THS发布一个空闲信号通知其他节点个过程如图2DCC-MAC无需公共控制信道,一个节点能够多个THS,但是一次只能接收一个节点,而且,一个节点不能同时收发2DCC-MACOMNeTMAC层协议仿发的一个MAC协议模拟器,这个模拟器基于OMNeT++开发,版本为version0.2.2。在OMNeT++()有于MACSimulator的介绍和相关。在TUDelft大学Consensus项目上有相 (WindowsOMNeT++编译和运行。MACSimulator可以对S-MAC,T-MAC,TMACp,L-MAC,CSMA,CSMAACKMAC进MACS-MAC协议的仿WindowsMACSimulatornedtool*.nedopp_msgc*.msgop_nmakemake–feccnmake–fMakefile.vc,最终生成可执行文件运行可执行文件选择S-MAC配时间和帧长后运行效果33S-MACS-MAC协议流程是是否是是是收到 是否收否否4S-MACS-MAC协议的分S-MACBasicMacBasicMaccSimpleModuleS-MACS-MACclassSMac:public{Module_Class_Members(SMacBasicMac,0);unsignedintlisten_time;unsignedintsleep_time;unsignedintushortsched_table[10];//intSchedStatesushort //ProtoStateproto_state;ProtoStateproto_next_state;intushortintmust_send_sync;intresync_counter;Packet*tx_msg;intrts_contend_time;intcts_to;ushortcts_nav_end;ushortcts_nav_rcv;ushortcts_nav_t;intintack_serial;intmy_serial;voidsetMySchedule(ushorttime);//voidevalState();//voidstartContending(inttime);//竞争,避voidsendSync();//voidsendRts();voidsendCts();voidsendData();voidsendAck();voidreceiveSync(Packet* //voidreceiveRts(Packet*msg);voidreceiveCts(Packet*msg);voidreceiveData(Packet*msg);voidreceiveAck(Packet*msg);voidadoptSchedule(intoffset);//void //voidvoidprotocolTimeout();voidnavTimeout();voidschedTimeout();voidsetProtocolTimeout(intt);voidsetNavTimeout(intt);voidsetSchedTimeout(intt);voidupdateNav(ushortnav);voidtxDone();virtualvoidendintisSameSchedule(inttime1,intvirtualintmustUseCA(Packet*//virtualvoidincBackoff();virtualvoiddecBackoff();virtualvoidvirtualvoidtimeout(intwhich);virtualvoidtxPacket(Packet*msg);virtualvoidrxFrame(Packet*msg);virtualvoidtransmitDone();virtualvoidrxFailed();virtualvoidrxStarted();virtualintheaderLength();voidSMac::setMySchedule(ushort{//在时间<time>内调度自己的帧,即在<time>-<frame_time>assert(time<time_last_schedcurrentTime()timeframe_time;//must_send_sync=resync_counter=printf(PRINT_MAC,"schedule:%d",time_last_sched%frame_time);}void{if(proto_state==PROTO_STATE_IDLE&&{//if(nav_state==NAV_STATE_CLEAR&&sched_state!={///if{printf(PRINT_MAC,"preparingtosendSYNC%s",tx_msg?"(data//}if(tx_msg&&sched_state=={if(mustUseCA(tx_msg))//避{printf(PRINT_MAC,"preparingtosend//}{printf(PRINT_MAC,"preparingtosenddata");}}//printf(PRINT_MAC,"idlelistening");}{//printf(PRINT_MAC,"idleslee");if(get()!=}}}voidSMac::startContending(int{assert(proto_next_state>=assert(time>=if(nav_state=={printf(PRINT_MAC,"contend:skipbecausenavis}{intctime=(int)intuniform(5,time);printf(PRINT_MAC,"startingcontention,willfirein%d",ctime);}}voidSMac::rxFrame(Packet*{if(sched_state==SCHED_STATE_SLEEP&&get()!=_NOSLEEP)return;//睡眠中,放弃if(proto_state==PROTO_STATE_WFCTS&&(PKT_KIND(msg)!=KIND_CTSmsg->local_to!={printf(PRINT_MAC,"receivedpacket,butnotctswewant");proto_state=}if(proto_state==PROTO_STATE_WFACK&&(PKT_KIND(msg)!=KIND_ACK||msg->local_to!=nodeId()||PKT_SERIAL(msg)!=my_serial)){printf(PRINT_MAC,"receivedpacket,butnotackwewant");proto_state=}assert(sched_state!=SCHED_STATE_SLEEP||get()==_NOSLEEP);switch(PKT_KIND(msg)){caseKIND_SYNC:caseKIND_RTS:caseKIND_CTS:caseKIND_DATA:caseKIND_ACK:}}void{intnext_state;switch(proto_state){caseassert(proto_next_state>=0);assert(nav_state==//RSSI是接收信号强度指示setRadioListen();//侦听信号if(getRssi()>0.5){//有信号"sensedcommunication,cancelling");}//next_state=switch(next_state){casecasecasecasecase}caseprintf(PRINT_MAC,"wait-for-ctstimeout");caseprintf(PRINT_MAC,"wait-for-datatimeout");caseprintf(PRINT_MAC,"wait-for-acktimeout");}}void{printf(PRINT_MAC,"sendingsync");must_send_sync=0;Packet*msg=newPacket("sync");msg->local_from=msg->local_to //-1PKT_KIND(msg)=ushortnow=unsignedlongest=EST_SYNC_TIME;assert(time_last_sched+(int)frame_time>now+EST_SYNC_TIME);unsignedlongstimetime_last_schedframe_time// // // //stime&=0xFFFF;assert(stime<frame_time);PKT_SYNC(msg)=stime;}voidSMac::receiveSync(Packet*{ushortstime=(ushort)PKT_SYNC(msg);deletemsg;if(sched_state=={printf(PRINT_MAC,"receivedSYNC,following");}//intftimeint)currentTimestime;//if(isSameSchedule(ftime,{printf(PRINT_MAC,"receivedSYNC,myownschedule");}//intfor(i=0;i<sched_count;{if(isSameSchedule(ftime,time_last_sched+{printf(PRINT_MAC,"receivedSYNC,knownschedule");}}//printf(PRINT_MAC,"adoptingforeignschedule");intoffset=ftime-time_last_sched;if(offset<offset+=65536;offset%=frame_time;assert(offset>0);//assert(offset<(int)frame_time);}void{ushortt=unsignedin_f=(ushort)(t-time_last_sched);//if(/*in_f>=0&&*/in_f<{ushortleft=listen_time+5-in_f;assert(left<=listen_time+5);printf(PRINT_MAC,"calc_sched:inownframe,left=%u",(unsigned)}//if(in_f>frame_time-5&&in_f<frame_time+{time_last_sched+=frame_time;in_f-=frame_time;if(in_f0)if(resync_counter<=0){must_send_sync=resync_counter=}}ushortleft=listen_time+5-in_f;assert(left<=listen_time+10);printf(PRINT_MAC,"calc_sched:innextframe,left=%u",(unsigned)left);}//assert(in_f<frame_time);inti;for(i=0;i<sched_count;{if(in_f>(unsigned)sched_table[i]-5&&in_f<sched_table[i]+{//sched_state=SCHED_STATE_OTHER;unsignedend_in_f=sched_table[i]+listen_time;if(end_in_f>frame_time){//end_in_f=}ushortleft=end_in_f-in_f+5;assert(left<=listen_time+10);printf(PRINT_MAC,"calc_sched:inforeignframe%d,left=%u",i,(unsigned)left);}}//不在任何侦听帧中.计算睡眠时间unsignedwake_at=frame_time;//for(i=0;i<sched_count;{if(sched_table[i]>in_f&&sched_table[i]<wake_at)wake_at=sched_table[i];}ushortleft=wake_at-in_f;assert(left<=sleep_time);printf(PRINT_MAC,"calc_sched:innoframe,left=%u",(unsigned)left);if(get()!=_NOSLEEP)}小MAC参考文YeW,HeidemannJ,EstrinD.Anenergy-efficientMACprotocolforwirelesssensornetworks[C].In:Proc21stInt’lAnnualJointConfIEEEComputerandCommunicationsSocieties( 2002),NewYork,NY,June2002.LangendoenK,VanDamT.Anadaptiveenergy-efficientMACprotocolforwirelesssensornetworks.[C]In:Proc1stInt’lAnnualJointConfonEmbeddedNetworkedSensorSystems(SenSys),Nov.5-7,2003,LosAngeles,CA.2003J.Ai,J.Kong,D.Turgut,Anadaptivecoordinatedmediumaccesscontrolforwirelesssensornetworks,in:ProceedingsoftheInternationalSymposiumonComputersandCommunications,Vol.1,2004,pp.214–219.LuG,KrishnamachariB,RaghavendraC.Anadaptiveenergy-efficientandlow-latencyMACfordatagatheringinwirelesssensornetworks.[C]In:Proc18thInt’lParallelandDistributedProcessingSymp(IPDPS’04),April26-30,2004,SantaFe,NewMexico.224~230RajendranV,ObracazkaK,Garcia-Luna-AcevesJJ.Energy-efficient,collision-accesscontrolwirelesssensornetworks[A].Proc1stInt’lAnnualJointConfonEmbeddedNetworkedSensorSystems(SenSys)[C],Nov.5-7,2003,LosAngeles,CA.181~192ChatterS,vanHoeselLFW,HavingaPJM.AI-LMAC:AnAdaptive,information-centricandlightweightMACprotocolforwirelesssensornetwork[C].IEEEISSNIP,2004.381-388.SohrabiK,GaoJ,AilawadhiV,PottieGJ.Protocolforself-organizationofawirelesssensornetwork.[M]IEEEalCommunicationsMagazine,2000,7(5):16~27In:ProcInternetPerformanceSymp ’01),SanAntonio,TX,Nov.2001.LeBoudec,J.-Y.Merz,R.Radunovic,B.Widmer,J.DCC-MAC:adecentralized protocolfor802.15.4a-likeUWBad-hocnetworksbasedondynamicchannelBroadbandNetworks,2004.BroadNets2004.Proceedings.FirstInternationalConferenceM.Z.WinandR.A.Scholtz.Ultra-widebandwidthtime-hopspread-spectrumimpulseradioforwirelessmultiple-accesscommunication.IEEETransactiononCommunication,48(4):679-691,April2000.IEEE802.15.4aapprovedtechnicalrequirements,may04-04/198r2,availableat孙利民,李建中,陈渝,朱红松.无线传感器网络.:,第五络层仿概QOS为主要目标[1],原因是:无线传感器网络路由协议研无线传感器网络协议分WSNssinkWSNs与应用高实现路由机制,故同一路由协议可分属不同类别[2-4]:、、于位置的路由协议和非基于位置的路由协议。.有大量WSNs应用需要知道突发的地理位置,这是基于位置的路由协议的应用基础,但需要GPS或者其他定位方法协助WSNs应用要求查询或上报具有某种类型的数据,这是基于数据的路由协议的WSNs中一般不单独使根据路由选择是否考虑QoS约束,可分为保证QoS的路由协议和不保证QoS的路由协议。保证QoS的路由协议是指在路由建立时,考虑时延、丢包率等QoS参数,从众多可QoS应用要求的路由。议节点无须建立路由信息从而节约空间减少通信开销但如果网络规模较大,无线传感器网络中平面路扩散法(Flooding)[5]:扩散法是一种传统的网络通信路由协议。源节点Source将报文传送给它的每一个邻居节点每一个邻居节点又将其传输给各自的所有邻居节点。如此继续下去,Sink或为该报文所设定的生命期限变为零为止。SAR(SequentialAssignmentRouting:算法创建多棵树,每棵树的树根都是SinkQoS不好及能量已经消耗较多的节点。初始阶段结束后,大多数节点都SPIN(SensorProtocolforInformationviaNegotiation)[6]:算法用临时的请求/应答送(ADV中包括了对即将发送数据的描述;有的邻接点发REQ报文响应;而后发送DATASink。算法通过使用节点间的协商制度和资源自适应机制,解决了Flooding中存在的不足之处,即为了避免出现扩散法的信息问题和部分现象,传感器节点在传送数据之前彼此进行协商,(即描述传感器节定向扩散(DirectedDiffusion,DD)[7]Estrin等人针对传感器节点资源有限等特点设计的路由策略。其实现机制如下:Sink向所有传感器节点发送(是通过分配不同的属性值来表示不同任务的描述符),每个传感器节点在收到后将其保存在各自的CACHE中。每个项包含一个时间域和若干个梯度域。当一个传遍整个网络后,从Source到Sink之间的梯度就建立起来了,梯度反映了网络点对匹配请求条件的数据源的近似判断。一旦Source到所需的数据,那么它将沿着该的DD中的网络梯度思想源自生物学中的蚂蚁种群模型。研究人员在实验过程中发现绝大过这一现象,将其思想到网络中就产生了网络梯度的概念图5.1描述了定向扩散模型 图5.1DD的实现机制Rumor协议[8]sink点的一次查询只需一次上报,DirectedDiffusion协议开销就太大了,Rumor曲线交叉几率很大的思想。当节点监测到后将其保存,并创建称为Agent的生命周期较长的包括和源节点信息的数据包,将其按一条或多条随机路径在网络中转发。收到Agent的节点根据和源节点信息建立反向路径,并将Agent再次随机发送到相邻节点,并可在再次发送前在Agent中增加其已知的信息sink点的查询请求也沿着一条随机路径转发当径交叉时则路由建立如不交叉,sink点可flooding查询请求在多sink点、查询请求数目很大、网络很少的情况下,Rumor协议较为有效。但如果非常多,维护表和收发Agent带来的开销会很大。图3表示了Rumor协议中Agent和Agent无线传感器网络中层次化路(clusterLEACH(Low-EnergyAdaptiveClusteringHierarchy)[9]Heinzelman(round01qqT(n)则该节点成为簇当节点nGT(n)=1/1rmod(1/p)]}T(n)=0。其中p是簇头总数占全部节点总数的百分比;r是当前的轮次;G簇头在稳定工作阶段节点持续监测数据传给本簇簇头簇头进行数据融合处理nkTEEN(ThresholdSensitiveEnergyEfficientSensornetworkProtocol)[11]:TEEN和SinkPEGASIS中每个节点都以最小功率发送数据分组,点置信息需要额外的资源,而这一位置信息相当于传统网络中的拓扑信息TTDD协议[12]sinksink请求,数据反向传送到sink点。Sink点在等待数据时,可继续移动,并采用(Agent)机存时间,但计算与格状网的开销较大;节点必须知道自身位置;非sink点位置不能移8表示TTDD协议的格状网建立与数据查询情况。,Estrin在最低层,通过竞争获得提升的机会。在每个工作周期结束后节点将视自己的状,YounisLEACH不同的是,该协议ID标识和簇经典算法的OMNET仿图 OMNET仿真框架用OMNET仿真路由算法的模块图如图5.2所示,传感器节点由四个模块构成,sm_application主要是应用层模块的程序,sm_cordinator模块是一个协调模块,协调各部分5.31LeachALeach5.2.3B侦听到数侦听到数收到建簇消收到建簇消是否簇否Sink是C算法关键部分代码#include"application.h"#include<math.h>#defineSELF_INITIALIZEcMessage*msg=newcMessage("SET_UP");if(OCCUPATION!=5)}#defineSET_UP_PHASEcMessage*msg=newcMessage("SET_UP");scheduleAt(simTime()+9000,msg);if(OCCUPATION!=5)}#defineWAITING_INVITATION_TIMERcMessage*msg=newcMessage("WAIT_INVITATION_TIME_OUT");scheduleAt(simTime()+10,msg);if(OCCUPATION!=5)}#defineSEND_DECREASE_ENERGY(cMessage*msg=newcMessage("DECREASE_ENERGY"); ty")=(int) }#defineSEND_INVITATIONcMessage*msg=newcMessage("INVITATION");msg->addPar("group_id")=ID;if(OCCUPATION!=5)}#defineSEND_SENSED_INFOcMessage*msg=newcMessage("SENSING_DATA");msg->addPar("time")=simTime();msg->addPar("source")=ID;msg->addPar("destination")=FATHER;msg->addPar("X")=PX;msg->addPar("Y")=PY;if(OCCUPATION!=5)}void{group_flag=false;}void{}voidapplication::handleMessage(cMessage{{case{if(strcmp(msg-{//cleanupthemarkedconnectionif(OCCUPATION==2){if}//Deletethis->parentModule()->par("FATHER")=if(OCCUPATION=={this->parentModule()->par("OCCUPATION")=this->parentModule()->gate("out",MAXCONN-1)->disconnect();this->parentModule()->gate("in",MAXCONN-1)->fromGate()-}if(OCCUPATION!=5)//Notthe{intcluster_head=rand()%//ifcluster_head=HEAD_DISTRIBUTION-->headcadidateif(cluster_head==HEAD_DISTRIBUTION-1){this->parentModule()->par("OCCUPATION")=1;group_flag=true;if(ev.isGUI())}}deletemsg;}elseif(strcmp(msg-{if(group_flagfalse)//没有加入任何组deletemsg;}{ev<<"unknownmessagereceivedfromanothernode.\n";}}case{if(strcmp(msg-{deletemsg;}elseif(strcmp(msg-{if(FATHER==0&&OCCUPATION==2)//occupation=2meansnotaclusterheadorbase{parentModule()->par("FATHERmsg->par("group_id");group_flag=true;//组ID标识为真表明加入其他组if}deletemsg;}elseif(strcmp(msg-{ }deletemsg;}{ev<<"unknownmessagereceivedfromanothernode.\n";}}{ev<<"unknownmessagereceived\n";}}}voidapplication::forward(cMessage{if((int)msg->par("destination")=={if(OCCUPATION1{cMessage*tmpmsg=newcMessage("SENSING_DATA");tmpmsg->addPar("time")=msg-tmpmsg->addPar("source")=ID;//messagefromclusterheadtmpmsg->addPar("destination")=FATHER;tmpmsg->addPar("X")=msg-tmpmsg->addPar("Y")=msg->par("Y");if(DISTANCE>CRADIUS){SEND_DECREASE_ENERGY(200+ {SEND_DECREASE_ENERGY(920);//100forcreating+820for}}elseif(OCCUPATION==5)//节{}}}5.4LeachSinkSink节点。无线传感器网络路由协议研究的发展趋由于WSNs资源有限且与应用高度相关,研究人员采用多种策略来设计路由协议。其WSNs路由协议采用的某些研究策略与发展趋势:sink点前就完成可能的数据计算。路由协议应具有安全机制由于WSNs的固有特性其路由协议极易受到安全,WSNsWSNs一般不统无线传感器网络层路由协议与OMNET++仿无线传感器网络层路由与OMNET++仿真的基本概念作为一种新型的无线自组织网络[22],传感器网络与传统的移动AdHoc网络(M0bileAdhoeNetworks,MANET)相比,有着以下的不同之处:传感器网络的体系结传感节点的物理结络通信单元(收发装置)等6大部件组成[23-27]。其中传感单元负责被监测对象原始数据的采传感器网络的体系结构与网络模传感器网络的体系结构最后Sink节点借助链路或临时建立的Sink链路将汇聚数据传送到中心进行集中处传感器网络的网络模型感器网络模型可分为半径模型和随机源节点模型两类。半径模型表示以待监测的传感器网络层路由协议的基本概网络通信模式单播Sink节点与目标节点之间“一对一”Sink节点对数据只进行转发不进行。如果10个目的节点需要相同的数据,则Sink节点需要逐一传送,重复SinkSink节点针对每个节点不同的请求发送不同的数据,容易实现个性Sink节点针对每个目标发送数据流,Sink节点流量=现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所5堪重负。广播Sink节点与目标节点之间“一对所有”进行无条件并转发,所有节点都可以接收到所有信息(不管你是否需要,由于其不网络设备简单,简单,布网成本低廉SinkSink节点流量负网络允许节点提供数据的带宽有限,节点的最大带宽=Sink节点总组播Sink节点与目标节点之间“一对一组”受到此组内的所有数据网络中的Sink节点和首节点只向有需求者并转发其所需数据。节点可以向首节点请求加入或退出某个组,网络中的Sink节点和首节点有选择的并传(加入组)的节点,又能保证不影响其他不需要(未加入组)QOS加以弥补。无线网络虽然有支持组播的传输,但在客户认证、QOS等方面还需传感器网络层设计OMNET++仿真软件的基本概OPNETNS2NS2C++语言来定义其行为。OMNET++仿真软件结构清windowsLiunxOPNETOMENT++运行速度要快不1、simplesimpleparameters://参数,在.cc中使用 module复合模块名parameters:gates://submodules:connections:gates间的连接关系3network网络名:复合模块类型名 parameters://参数初始化列表4、import无线传感器网络路由协议介泛洪息问题,即出现一个节点可能得到一个数据多个副本的现象;②会出现部分现象,如果处于同一观测环境的两个相邻同类传感器同时对一个做出反应,二者的图 定向扩散(Directed(图4)。Sink节点向所有传感器节点发送其(interest,即通过分配不同属性值来表示不同任务的描述符),每个传感器节点在收到后保存在各自的缓存中。每个项(interestentry)包含一个时间域和若干个梯度域(按成本最小化和能量自适应原则引导数据扩散的方向)。当一个传遍整个网络后,从源节点即所在区域的传感器节点到汇节点之间的梯度就建立起来了。一旦源节点到所需的数据,那么源节点沿着该的梯度路径传输数据到汇聚节点。其中,源节点的数据首先在本地采用数据融图 LEACH(EnergyAdaptiveClustering展而来,协议分为两个操作阶段,簇准备阶段(readyphase)和就绪阶段(set—upT(n)值按以下计算图 LEACH算OMNET++仿真实泛洪接收到FAM(floodingalgorithmmessage)时,它就接着广播给自己的邻居节点,如已收FA图 initiate(i);//初始化send(FAM,FA层一MAC层deliver();FAM,FA层一APif(receivetrue){send();//转发FAM,FA层一MAC层}elsediscard();//丢弃FAM图7各模块整个模块中有3模块,application模块、layer0模块和manager模块。其中//defaultsimpleapplicationin:lowergate_in;in:uppergate_in;in:blackboard_in;out:lowergate_out;out:simplelayer0in:in:uppergate_in;in:out:lowergate_out[];out:uppergate_out;//sensornodemodulesensornodeCNNCTVTY:numeric,KIND:numeric,COLOR:numeric,PX:numeric,PY:numeric;in:out:out[];sm_layer0:layer0;disy:"p=158,258;i=layer0";sm_application:application;disy:"p=158,86;i=application";connectionsnocheck: NCTVTY-1in[i]-->out[i]<--sm_layer0.lowergate_out[i];sm_application.lowergate_in<--sm_layer0.uppergate_out;sm_application.lowergate_out-->disy:"b=290,485,rect;o=white";//thecentralmanagersimplemanagerP_FMAP:numeric,N_FMAP:in:in;out:out;//theparentmoduleMAXCONN:numeric,NNODES:numeric,SSTRENGTH:numeric;snode:sensornode[NNODES];CNNCTVTY=MAXCONN,KIND=2,COLOR=PX=PY=man:P_FMAP=N_FMAP=connectionsdisy:"p=0,0;b=860,560,rect;o=white";//thenetworkthetest:test图 gossi协内爆,但增加了时延.这两个协议都是不需要路由信息,也不需要任何算法,简单但图 图10仿真点发送信息的过程图5.6章总参考文AkyildizIF,SuW,SankarasubramaniamY,CayirciE.Asurveyonsensorn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论