自取能无线传感器网络仿真技术研究614.docx
- 文档编号:24154319
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:42
- 大小:1.14MB
自取能无线传感器网络仿真技术研究614.docx
《自取能无线传感器网络仿真技术研究614.docx》由会员分享,可在线阅读,更多相关《自取能无线传感器网络仿真技术研究614.docx(42页珍藏版)》请在冰豆网上搜索。
自取能无线传感器网络仿真技术研究614
项目来源:
国网重庆市电力公司
项目名称:
自取能无线温度传感芯片及其应用关键技术研究
子课题名称:
自取能无线温度传感芯片构建无线传感网的关键技术研究
版本:
V1.0.0
自取能无线传感器网络仿真技术
研究报告
任务承担单位:
上海交通大学
拟稿人:
李芬王超尘
任务负责人:
贺光辉
子课题负责人:
祝永新
上海交通大学
总页数
正文
附录
提交日期:
2015年6月30日
审核结果
审核组负责人
一、绪论4
1.1研究背景4
1.2当前无线传感器网络仿真技术的研究现状4
二、网络仿真平台OMNeT++8
2.1OMNeT++仿真平台特点8
2.2模块和信道9
2.3离散时间仿真系统10
2.4建模11
2.5新建和运行模拟器12
2.5.1模拟器的运行和结果分析13
2.5.2用户接口14
2.5.3组件库14
2.5.4通用的模块化仿真程序14
2.6NED语言14
三、网络仿真平台Castalia17
3.1数据处理模块17
3.2传感器节点模型18
3.3无线通信模型19
3.4能耗模型20
四、网络仿真平台NS221
4.1NS2简介21
4.2NS2网络仿真方法和过程21
4.3NS2功能模块23
4.4NS2软件构成24
4.5NS2的仿真元素24
4.6OTcl实现仿真的过程25
4.7用C++建立新协议25
4.8本章小结26
五、网络仿真平台OPNET27
5.1OPNET仿真软件简介27
5.2OPNET仿真技术28
5.2.1三层建模机制28
5.2.2离散事件仿真机制31
5.2.3仿真调度机制31
5.2.4opnet通信机制32
5.3OPNET模拟时间环境仿真案例32
5.3.1建立网络拓扑结构33
5.3.2仿真结果39
5.3.2.1固定发送时间39
5.3.2.2随机发送时间结果39
5.3.3实验结论40
六、总结42
七、参考文献43
一、绪论
1.1研究背景
随着传感器技术、嵌入式计算技术、分布式信息处理技术和网路通信技术的
迅速发展,无线传感器网络应运而生。
由于无线传感器网络的应用前景广阔,它已经成为21世纪的一个新兴科研领域,在基础理论和工业技术两个层面向科技工作者提出了大量挑战性问题。
近年来,国内无线传感器网络的研究日趋激烈,取得了大量研究成果的同时,无线传感器网络的研究依然存在许多关键亟待解决。
仿真系统对于无线传感器网络的研究具有重要作用,它不仅推动了工程技术的发展,也为理论研究提供了有效的实验仿真工具[1]。
利用仿真工具做仿真实验,科研人员就能够在一个可控的环境里研究无线传感器网络,观察由不可预测的干扰所引起的节点间的相互作用,减少网络投放后的运行维护成本。
所以优秀的仿真系统对于无线传感器网络的发展有着巨大的推动作用。
本文介绍典型的四种能够反映真实传感器网络特点、性能优良的无线传感器网络仿真系统无线传感器仿真平台:
OMNeT++、基于OMNeT++的Castalia仿真平台、NS2和OPNET。
针对本项目背景,底层组网采用基于OMNeT++的Castalia仿真平台,ZigBee网络采用OPNET进行仿真。
1.2当前无线传感器网络仿真技术的研究现状
OMNeT++离散事件仿真平台早在1997年就已公开,并且可以从其官方网站上免费获取该平台软件以及源代码。
OMNeT++主要用来仿真互联网络系统、多处理机系统和其他分布式系统,它从最初就被设计成为一个通用的、开放的仿真平台,而不是一款针对具体应用的仿真器。
这一设计思想使得OMNeT++如今被广泛地应用到多种分布式仿真领域,如队列仿真、无线网络仿真、ad-hoc网络仿真、p2p网络仿真以及无线传感器网络仿真等仿真领域[2]。
近年来,在OMNeT++平台上已经发展起来许多第三方的仿真工具,如:
INETFramework、OverSim、xMIPv6、MiXiM、MF等等,这些针对具体应用的仿真工具利用OMNeT++提供的离散事件仿真系统以及相应辅助仿真工具开发完成。
此外,OMNeT++可以在多种操作系统上运行,如Linux,MacOS/X和MicrosoftWindows系统,并且可以使用GCC工具集和MicrosoftVisualC++编译器来编译程序。
NS2是面向对象的、离散事件驱动的网络环境模拟器,主要用于解决网络研究方面的问题[3]。
NS2提供了在无线或有线网络上的TCP、路由、多播等多种协议的模拟,精确到数据包的一系列行为的仿真。
最值得一提的是,NS2中的许多协议代码都和真实网络中的应用代码十分接近,其真实性和可靠性高居世界仿真软件的前列。
它来源于1989年的RealNetworkSimulator项目,经过多年的发展,于1995年得到施乐公司(Xerox)的支持,加入VINT项目(于斌等,2007)。
它一直都在不断的吸收全世界各地研究者的成果,包括UCB、CMU等大学和SUN等公司的无线网络方面的代码。
SENSE是为了解决传统网络仿真工具在WSN领域的使用缺陷而开发的一款仿真程序,它针对NS-2做出必要修改后得到,使用面向模块的系统结构。
模块利用可重用性原理,只要符合接口要求,既可重用也可进行替换,甚至可在SENSE基础上开发新的应用仿真程序。
与其他仿真工具不同,SENSE使用了并行仿真和串行仿真可选的运行方式,用户可根据自己需要进行适当选择。
TOSSIM项目[4]是一种建立在TinyOS系统上的仿真工具,其特点是建立了TinyOS底层硬件的软件抽象,增加了仿真所需的事件模型和外部通信机制。
它已在TinyOS节点性能分析中获得应用,且通过仿真解决了TinyOS系统的某些内部缺陷。
TOSSIM可进行比特级的仿真,这点是目前大部分仿真工具所不具备的。
目前TOSSIM项目的研究方向为扩充仿真模型,提供电池性能分析、CPU运行时间等功能模。
SensorSim项目[5]该项目的思路是建立基于NS-2的适应WSN的模型库。
SensorSim分别使用功能模型(sensorfunctionmodel)和能源模型(powermodel),模拟节点的软件(各种协议、应用相关的程序)和硬件部分(CPU、电源、射频接收电路和传感器),其中硬件模拟的主要思路为建立电源到各种物理硬件的单对多映射关系,并通过分析硬件的能耗特点来总结整体节点的功耗问题。
目前,SensorSim主要完成了电源和射频接收电路模型,其它方面正在完善之中
OPNET是一个网络仿真技术软件包,它能够准确的分析复杂网络的性能和行为,在网络模型中的任意位置都可以插入标准的或用户指定的探头,以采集数据和进行统计。
通过探头得到的仿真输出可以以图形化显示、数字方式观察、或者输出到第三方的软件包去。
OPNET提供了三层建模机制[3],最底层为Process模型,以状态机来描述协议;其次为Node模型,由相应的协议模型构成,反映设备特性;最上层为网络模型。
三层模型和实际的网络、设备、协议层次完全对应,全面反映了网络的相关特性。
OPNET为用户提供一系列的仿真模型库,在这些仿真模型的基础上,实现对网络的仿真。
OPNET仿真模型库与其网络仿真引擎(OPNETModeler,ITGuru,ApplicationDecisionGuru等)是分离的。
这种设计方式方便了模型的修改、升级。
OPNET的专业部门负责对模型库进行及时更新。
同时,客户还可以根据自己的要求定制模型。
尽管网络科研领域已经存在多种成熟的网络仿真平台,如NS2、OMNeT++、GloMoSim和QualNet,这些仿真平台具有良好的性能以及通用性,但是无线传感器网络的特性使得这些仿真平台具有某些应用的局限性[4]。
还有许多学者专门研究适用于无线传感器网络的仿真工具,比如上文介绍到的具有代表性的成果:
SENSE、TOSSIM和SensorSim,因为这些仿真工具往往针对某个具体的应用而开发,所以在可扩张性和通用性方面不够理想。
无线传感器网络的特点使得现有的网络仿真平台不能完全满足传感器网络的要求,NS2、OMNeT++等通用仿真平台在以下方面存在使用的局限性:
(1)仿真平台自身缺少能耗模块的支持。
无线传感器网络的能力有限这一特点使得我们在仿真路由算法、MAC协议时需要充分考虑网络的寿命也就是节点的能耗情况。
所以科研人员在使用通用仿真平台建立传感器网络仿真程序之前,首先必须要对传感器网络的能耗模型进行建模并在仿真平台的基础上变成实现,增加了仿真的复杂度。
(2)缺少无线信道模型的支持。
无线传感器网络的仿真首先需要仿真平台支持ZigBee协议,并且需要无线信道损耗模型。
现有的少数仿真平台虽然能够支持ZigBeeMAC协议,但是几乎都没有提供对无线信道损耗模型的支持。
(3)缺少独立模块、定位模块的支持。
无线传感器网络是高度面向应用的网络,而移动模块和定位磨快在某些特定的应用中是必不可少的。
传统的网络一般不需要这些模块的支持,所以通用的仿真平台几乎都不提供移动和定位功能的支持。
虽然有些专门针对无线传感器网络而设计的仿真工具不存在以上问题,但是由于这些仿真工具往往就某些具体的应用而开发,所以在程序的可拓展性和仿真器的通用性等方面具有较为严重的不足。
比如SensorSim项目组早在2005年就放弃对仿真器的支持,SENSE则缺乏相关的文档介绍导致使用困难等等。
二、网络仿真平台OMNeT++
OMNeT++离散事件仿真平台早在1997年就已公开,并且可以从其官方网站上免费获取该平台软件以及源代码。
OMNeT++主要用来仿真互联网络系统、多处理机系统和其他分布式系统,它从最初就被设计成为一个通用的、开放的仿真平台,而不是一款针对具体应用的仿真器。
这一设计思想使得OMNeT++如今被广泛地应用到多种分布式仿真领域,如队列仿真、无线网络仿真、ad-hoc网络仿真、p2p网络仿真以及无线传感器网络仿真等仿真领域[5]。
近年来,在OMNeT++平台上已经发展起来许多第三方的仿真工具,如:
INETFramework、OverSim、xMIPv6、MiXiM、MF等等,这些针对具体应用的仿真工具利用OMNeT++提供的离散事件仿真系统以及相应辅助仿真工具开发完成。
此外,OMNeT++可以在多种操作系统上运行,如Linux,MacOS/X和MicrosoftWindows系统,并且可以使用GCC工具集和MicrosoftVisualC++编译器来编译程序。
2.1OMNeT++仿真平台特点
OMNeT++是一款面对对象的离散时间网络模拟器,具有通用的体系结构,可以用于解决如下各种领域的问题:
(1)无线通信网络和有线通信网络建模
(2)协议仿真模拟
(3)排队网络建模
(4)多处理器和其他分布式硬件系统建模
(5)硬件体系结构验证
(6)评估复杂软件系统多方面的性能
总的来说,它可以用于任何适合离散时间方法的系统仿真和建模,并且其可以方便地映射为依靠交换信息进行通信的实体[4]。
OMNeT++本身并不是所有现实系统的模拟器,但它确实为实现仿真提供了基础底层结构和工具。
这种基础底层结构的基本成分之一是一种用于仿真模型的组件体系结构,模型可由重复使用的元件(即模块)组成。
写好的模块可以重复使用,并且能够以各种方式组合。
为了能够支持多领域、大规模的网络仿真,OMNeT++童诺优良的设计架构以及代码实现,OMNeT++平台在网络仿真方面下有突出特点[6]:
(1)为了支持大规模的网络仿真,OMNeT++仿真模块可以被分级建立,并且模块具有高度可复用性,真正支持模块的重复。
在仿真系统中,独立模块的开发是比较复杂和耗时的,模块的高度复用性可以大大降低仿真实验的开发周期,这是OMNeT++被广大科研工作者推崇的主要原因之一。
(2)为了缩短仿真程序的开发周期,OMNeT++仿真平台提供友好的UI界面和调试工具,它为开发人员提供了类似于Eclipse的集成开发环境,良好的开发界面以及方便的辅助工具在很大程度上降低了仿真程序的开发难度。
(3)OMNeT++仿真平台本身具有模块化、可定制的特点,允许嵌入到更大的应用如网络规划软件中。
在无线传感器网络仿真领域,传感器节点往往数量巨大,并且拓扑结构规模庞大,这就要求仿真平台必须支持大规模的网络应用。
而OMNeT++从最初设计就支持超大规模的网络仿真。
(4)OMNeT++仿真平台具有开放的数据接口,可以由使用者对输入的网络参数进行设置,并且对输出的数据进行处理。
此外,这一特点还使得仿真人员可以通过第三方数据分析工具实现实验数据的图形化展示。
2.2模块和信道
OMNeT++仿真模型是由模块(Module)和信道(Channel)组成。
模块和信道都被统称为部件(Component),部件是由C++代码定义并且继承自OMNeT++中的抽象类cComponent。
其中,模块的抽象类cModule以及信道的抽象类cChannel必须都继承自父类cComponent。
cModule有两个自雷cSimpleModule以及cCompoundModule,用户通过继承cSimpleModule类来定义简单组件,通过继承自cComponentModule来实现复合组件。
cChannel的子类三种信道类型:
cIdealChannel、cDelayChannel、cDatarateChannel分别用来实现理想的无差错无延迟信道、带有延迟的信道和带有固定数据传输率的信道。
用户能够继承cChannel或者任意其他信道类来创建新的信道类型。
简单模块和信道可以通过继承父类并重定义父类的成员方法来实现其具体功能,其中cComponent类内部有以下成员方法:
(1)Initialize():
当OMNeT++一旦部署好网络(创建简单模块并且根据NED
描述文件来把各个简单模块装配成网络模型)仿真模型后就会执行该方法,该方法提供模块的初始化。
(2)Finishi():
当仿真程序成功结束时调用该办法,它的作用是对仿真结果进行数据处理,并且执行自定义功能对数据进行统计分析等。
在OMNeT++离散时间仿真机制中,时间都是发生在简单模块的内部,并且由C++代码来实现事件的产生和对事件的相关操作[7]。
为了定义简单模块的动态行为,需要重定义cModule中的抽象handleMessage(当组件接收到消息时该办法被调用,仿真程序通过重写该方法来处理接收到的消息)和activity(当仿真程序的运行之初,该成员方法作为一个守护程序被执行,并且一直运行直到仿真程序结束)。
在仿真程序内部activity()和handleMessage()可以混合使用,但是由于可控性等其他原因,OMNeT++建议仿真程序主要使用方法handleMessage()而不是activity()来定义组件的动态行为。
2.3离散时间仿真系统
离散事件系统(DES,DiscreteEventSystem)是几乎所有网络仿真系统的理论基础,它是基于“队列”理论的系统,它把网络中的各个事件以事件戳为标识进行排序,并且一次输入到队列中,利用队列的先进先出的特性按序处理。
离散事件系统应具有以下突出特征:
系统受时间驱动、系统状态跳跃式变化、系统状态的迁移发生在一串离散时间点上。
OMNeT++仿真平台提供底层的离散事件仿真机制,串行地执行离散时间。
在进行论述之前,首先介绍一下离散事件仿真系统中主要的几个概念:
(1)事件:
网络动态变化过程中,导致系统状态瞬间变化的动作,如一个数据
包的发送超时导致重传等。
(2)仿真时钟:
表示仿真过程中的时间变量。
(3)时间戳:
仿真事件发生的时刻。
(4)事件表:
等待发生的事件列表,按照事件发生的时间顺序排列。
OMNeT++使用未来事件集(FES-FutureEventSet)这一数据结构来表示“事
件表”这一概念,“事件表”是存放仿真过程中事件的“容器”,这些时间以堆栈的形式存放在事件表中。
仿真过程初始化的第一步是建立代表仿真模型的数据结构,执行用户定义的初始化程序并且把初始化时间插入到FES中。
该步骤是仿真开始前的准备工作,不同仿真系统的初始化策略是完全不同。
接下来就是通过一个循环操作,依次从FES中取出事件并且执行它。
事件严格的按照时间戳的先后顺序执行,目的是为了确保当前执行的事件只会对未来的事件而不是对之前的事件构成影响。
处理一个事件可能会引起其他的用户自定义时间的发生,比如在计算机网络仿真中,“数据包超时”事件的发生可能会引发重传数据包、更新超时计时器等用户自定义事件。
同时,用户自定义时间也可能会造成某个事件从FES被移除。
最后,当FES中没有时间存在或者定时器到期时,仿真程序则会自动终止。
在仿真终止前,系统会自动调用仿真人员自定义的数据统计模块来记录并统计仿真结果。
在OMNeT++离散时间仿真机制中并没有专门的事件类,而是使用消息来代表事件,每一个事件都使用cMessgae类的一个实例化对象来表示。
消息从一个模块发送到另一模块,也就意味着消息的目标模块就是时间的发送对象。
时间按消息到达的时间先后顺序执行,因此,事件发生的仿真时间实际就是该消息到达的仿真时间。
OMNeT++总是先执行时间戳最近的时间,并且FES是简单的堆栈结构,所以只能串行化执行事件序列。
由于无线传感器网络中节点具有高度并发的特点,致使原始的离散时间仿真系统不能很好的仿真传感器网络。
2.4建模
OMNeT++经常被描述成网络结构,最顶层的模块称为系统模块。
模块之间可以通过“门”(其他系统中成为端口)互连,进一步组成复合模块。
模块嵌入的深度是没有限制的,它允许用户在模块接口中根据实际系统来绘制逻辑结构图。
各模块通过消息的传输进行通信,其消息可以是任何复杂的数据结构。
图1是简单的模块结构示意图。
模块可以通过门和连接在预先定义好的路径上传递消息,或者直接传递到目的地。
后者对于无线仿真是非常有用的。
例如,模块可以有参数,用于规范模块的行为,参数化模块的拓扑。
模块层次结构中最底层的模块称为简单模块,它们对行为进行封装。
模块结构利用OMNeT++的NED语言进行描述。
图1简单模块和复合模块
模块之间传递的消息可以包含任何形式的数据结构,并且加上一些其他的属性比如时间戳。
在一个实际的模拟器中,可以使用计算机网络中得帧和包代替消息。
简单模块之间主要是通过门传递消息,当然也是可以直接将消息传输给目的模块的。
门一个是输入和输出接口模块:
消息从输出门被发送出去,到达另外一个模块的输入门。
从图1可以看到,在层次化的模块结构中,消息可以通过一个传输链路,从一个简单模块到达另外一个简单模块。
在该模型中复合模块像一个“纸箱”,可以在他们内部和外面透明地传送消息。
OMNeT++为用户提供了有效的工具进行实际系统结构描述,一些主要特征表现如下:
(1)分层次的嵌套模块
(2)每个模块都是一种类型模块的实例化
(3)模块之间通过消息在通道上的传输进行通信
(4)灵活的模块参数
(5)拓扑描述语言
2.5新建和运行模拟器
这一部分介绍在实践中观察OMNeT++运行的工具和方法,比如讨论了模型文件、编译、运行仿真等问题。
一个OMNeT++模型包括以下几个部分。
NED语言拓扑描述(.ned文件)。
使用参数、们等描述模块结构。
NED文件可以使用任何文本编辑器编写,此外OMNeT++集成开发环境(IDE)对双向图形和文本编辑提供了出色的支持。
消息定义(.msg文件)。
可以定义消息变量类型,并且在上面添加数据文件。
OMNeT++将消息定义转化为完全的C++类。
简单模块源。
它们是C++文件,以.h或.cc为后缀。
仿真系统提供了以下的组件。
仿真内核。
包含仿真管理和仿真类库的代码。
这些代码用C++编写,编译生成一个共享库或静态库。
用户接口。
OMNeT++用户接口在仿真执行的时候使用,以方便调试、演示或者仿真的批处理执行。
它们是用C++编写的,被编译成库文件。
利用以上组件创建仿真程序。
首先,使用opp_msgc程序将.msg文件转化成C++代码。
其次,编译所有的C++源文件,链接仿真内核和用户接口库,生成一个在仿真中可执行的文件或共享库。
当仿真程序开始执行时,NED文件可在原始文本里动态加载。
2.5.1模拟器的运行和结果分析
仿真文件可以作为一个单独的可执行程序来编译,因此它可以在其他没有OMNeT++的机器上运行或者可以被创建为一个共享库。
在这种情况下,次系统必须有OMNeT++的共享库。
当一个程序开始执行时,它首先会读取所有的NED文件(包括模型拓扑),然后再读取所有的配置文件(通常称为omnetpp.ini),这个文件包括一些控制仿真执行的配置,模型参数的值等。
配置文件也可以指定多个仿真程序的运行,在最简单的情况下,仿真程序将依次运行。
仿真的输出将会写入数据文件中,如输出向量文件,输出标量文件,以及用户自己的输出文件。
OMNeT++包括一个集成开发环境,为分析这些数据文件提供丰富的环境,它不希望用户仅仅使用OMNeT++来处理结果文件,输出文件的格式是文本文件,可以被类似于Matlab或Octave的数学软件包读入,或者导入到像OpenOfficeCalc,Gnumeric或MSExcel之类的电子数据表中。
所有这些外部分程序提供了丰富的功能用于统计分析和可视化,在OMNeT++的范围之外加强它的功能[5]。
输出标量文件也可以用OMNeT++IDE进行可视化。
它可以画出柱形统计画表,x-y图标(比如纵轴代表吞吐量,横轴代表提供的负载),或通过剪贴板将数据导出至电子数据表和的程序进行更详细地分析。
2.5.2用户接口
用户接口的基本目的是使模型的内部对用户可视化,使用户可以控制仿真的执行,并通过改变模型内部的便利或对象允许用户进行干涉。
这在仿真项目的开发/调试阶段非常重要。
同样,一个能让用户对模型行为获得“感觉”的时间经验也很重要。
图形用户接口也可以用于展示模型的操作。
相同的仿真模型可以在不同的用户接口中执行,而模型文件本身不需要做任何改动。
用户可以使用一个强大的图形化用户接口对仿真进行测试和调试,最终使用一个简单快速的支持批处理执行的用户接口运行。
2.5.3组件库
模块类型可以从它们实际使用的地方分离出来,存储在文件中,使得用户可以组合现有的模块类型创建组件库
2.5.4通用的模块化仿真程序
使用相同的简单模块集,一个可执行的仿真文件可以存储到多个独立的模型中。
用户可以在配置文件中指定运行某个模型,这允许用户创建一个包括多个仿真模型的大型可执行文件,并作为一个单独的仿真工具进行发布。
这种方法实现了拓扑描述语言的灵活性。
2.6NED语言
NED(NetworkDescription)语言用于描述仿真模型的结构。
NED允许用户定义一些简单的模块,连接组合它们,使之成为复合模型。
用户可以将一些复合模型标记为networks,这一种子包含的仿真模型。
信道是另一种元件类型,它的实例同样可以在复合模型中应用。
NED语言本身有如下特性,使之非常适合于一些大型的项目。
(1)层次化:
处理复杂性的传统方法是引入层次化。
在OMNeT++中,任
何一个模块如果作为单个实体太过复杂,那么可以将它分成更小的模块,并在使用时看成一个复合模块。
(2)基
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自取 无线 传感器 网络 仿真技术 研究 614