【PHP开源代码栏目提醒】:网学会员PHP开源代码为您提供基于 OMNET++的传感器网络仿真1 - 毕业设计参考,解决您在基于 OMNET++的传感器网络仿真1 - 毕业设计学习中工作中的难题,参考学习。
基于 OMNeT的传感器网络仿真1 操敏 1李文锋 1袁兵 1 1 武汉理工大学物流工程学院湖北武汉 E-mailcm_991221163.com 430063 摘 要本文介绍了 OMNeT的组成和体系结构详细论述了 OMNeT编程的语法并对 OMNeT的建模过程作了较为深入的阐述。
我们实现了在界面程序中为仿真配置运行参数 并在 OMNeT平台上对 LEACH 协议进行了仿真。
关键词网络仿真 用户接口 无线传感器网络 中图分类号TP391.9 A 1引言 OMNeT是 Objective Modular Network TestBed in C的英文缩写它是
开源的基于 组件的模块化的开放网络仿真平台是近年来在科学和工业领域里逐渐流行的一种优秀的网 络仿真平台。
OMNeT作为离散事件仿真器具备强大完善的图形界面接口和可嵌入式仿真 内核同 NS2OPNET 和 JavaSim 等仿真平台相比OMNeT可运行于多个操作系统平台可 以简便定义网络拓扑结构具备编程调试和跟踪支持等功能。
OMNeT主要用于通信网络 和分布式系统的仿真目前最高版本为 OMNeT3.2p1 1 。
2OMNeT框架 2.1 OMNeT组成 OMNeT主要由六个部分组成仿真内核库simulation kernel library简称Sim 网络描述语言的编译器network description compiler nedc图形化的网络编辑器 graphical network description editorGNED仿真程序的图形化用户接口Tkenv 仿真程序的命令行用户接口Cmdenv图形化的向量输出工具Plove。
Sim是仿真内核和类库用户编写的仿真程序要同Sim连接Sim在OMNeT中占据最为核 心重要的地位。
下面详细介绍的另外两重要组成部分。
1网络描述NED语言 NED是模块化的网络描述语言。
网络描述包括大量的对组件的描述如通道简单和复 合模块的类型。
这些组件描述可用于各种不同的网络描述中。
NED语言用来定义模型中的网 络拓扑结构较为简单的网络拓扑可以使用GNED但复杂网络的拓扑描述还应该用NED源文 件方式书写。
2用户接口 OMNeT的用户接口用于实现仿真程序的人机交互OMNeT允许模型内部机制对用户可 视化也允许用户启动和终止仿真并更改模型内部的变量。
OMNeT中的图形化接口是一 个用户工具可方便用户了解模型内部的运行机制。
用户接口和仿真内核的交互是通过一个已定义的接口实现的。
无需改变仿真内核就可 以实现不同类型的用户接口。
同样无需更改模型文件仿真模型可在不同接口下运行。
用户 可以在强大图形化用户接口下测试和调试仿真程序并最后可在简单快速的用户接口中运 行而且该接口支持批处理。
1 本课题得到国家自然科学基金项目60475031和湖北省青年杰出人才基金项目2005ABB021的资助 -1- 目前OMNeT支持两种用户接口即Tkenv和Cmdenv。
对仿真进行的测试和调试可以在 Tkenv接口下进行Tkenv是一个简便易用的图形窗口化的用户接口Tkenv支持跟踪调试 和执行仿真的功能。
它在执行仿真过程中的任意时刻都能够提供详细的状态信息。
Tkenv的 主要特征有各模块的文本输出有其独立的窗口仿真过程中可以在Tkenv窗口中看到自传 消息支持仿真动画标记断点具有检查窗口可以检查和改变模型中的变量执行过程 中仿真结果的图形化显示并且结果可以用柱状图和时间序列图显示仿真可重新进行快照 文件用于显示模型的详细信息。
Cmdenv接口用于实际的仿真实验因为Cmdenv支持批处理。
Cmdenv是一个简便的小型命 令行接口执行速度快。
它可以在所有操作系统平台上运行。
Cmdenv可以一次批处理配置文 件中所有的仿真。
2.2 OMNeT框架 OMNeT具有模块化的结构图1是OMNeT仿真的高层体系结构 1 。
图1 OMNeT仿真程序的体系结构 图1的箭头表示两组件之间的交互图中共有5个箭头表示了组件间的5种关系。
①执行模型和Sim仿真内核管理将来的事件当有事件发生时仿真内核就调用执行模型 中的模块。
执行模型的模块存储在Sim的main对象中。
执行模型依次调用仿真内核的函数并 使用Sim库中的类。
②Sim和模型组件库当仿真开始运行创建了仿真模型的时候仿真内核就实例化简单模块 和其它的组件。
当创建动态模块时仿真内核也要引用组件库。
实现在模型组件库中注册和 查寻组件也是Sim的功能。
③执行模型和Envirev对象作为Envir的一部分是面向执行模型的用户接口。
仿真模型使 用ev对象来记录调试信息。
④Sim和Envir由Envir决定创建何种模型Envir包含主要的仿真循环并调用仿真内核以 实现必须的功能。
Envir捕捉并处理执行过程中发生在仿真内核和或类库中的错误和异常。
⑤Envir和TkenvCmdenvEnvir定义了表示用户接口的TOmnetApp基类Tkenv和Cmdenv都 是TOmnetApp的派生类。
main函数是Envir的一部分为仿真决定选用合适的用户接口类 创建用户接口类的实例并执行。
Sim和模型对ev对象的调用通过实例化TOmnetApp类进行。
Envir通过TOmnetApp和其它类的方法实现Tkenv和Cmdenv的框架和基本功能。
3OMNeT语法 OMNet是面向对象的离散事件模拟工具为基于进程式和事件驱动两种方式的仿 真提供了支持。
OMNet采用了混合式的建模方式同时使用了 OMNet特有的 nedNEtwork Discription网络描述语言和 C进行建模。
3.1 NED 语言 1 -2- NED 语言包含的组件import 指令通道定义简单和复合模块定义网络定义。
此外 NED 语言还可以定义自己的 message 格式。
1import 指令用于从其它的网络描述文件引入声明。
在引入了一个网络描述之后可以 使用该网络的组件如通道简单和复合模块等。
2通道定义定义通道有三个可选的参数即 delayerror 和 datarate这三个参数必 须是常量。
delay 是传播延时单位为秒。
error 是位误码率即错误传输一位的概率。
datarate 是通道的传输速率单位为位/秒用于计算包的传输时间。
3简单和复合模块定义在 ned 中主要的实体是模块module。
模块分为两种一种是 普通模块simple module一种为复合模块compound module。
模块有 gates模块之 间通过门gates进行消息message传输。
⑴简单模块是其它模块的基础它的定义需要声明其参数和门。
简单模块名的首字母应当大 写而参数和门的名称应当小写。
简单模块的算法可以访问其声明的参数参数类型可以定义成 numericnumeric const简写为 constboolsring 或者 xml。
也可以不定义参数类型缺省的参数类型为 numeric。
模块间连接的开始和终止点就是门。
有两种门即输入门和输出门。
还可以使用门向量 一个门向量包含多个门。
⑵复合模块是由一个和多个自模块组成的。
子模块可以是简单模块也可以是复合模块。
同 简单模块一样复合模块也有参数和门除此之外复合模块中还需声明个复合模块的子模 块和连接。
OMNeT具有层次化的模块化结构 1 2 最高层的模块称为系统模块或网络该模块包 含一个或多个子模块而子模块也可以有自己的子模块因此可以在 OMNeT用构建复杂的 系统模型见图 2。
图 2 层次化模块结构 4网络定义网络定义声明仿真模型模型是预先定义的模块类型的实例。
在 NED 文件中 定义网络模型可以定义多个网络并在配置文件中选择要仿真执行的网络。
3.2 简单模块算法实现 1 简单模块的算法通过 C语言编写OMNeT使用 CSinpleModule 来直接或间接定义简 单模块再用 Define_Module 或 Define_Module_Like宏来注册该简单模块。
每个简单 模块都必须手动添加该宏复合模块则由 OMNeT自动添加。
CSimpleModule 有四个预先定义的成员函数initialize函数handleMessage函 数activity函数和 finish函数。
用户可以对该四个函数重新进行定义一个简单模 块中不能同时有 handleMessage和 activity函数。
1 Initialize函数在初始化消息放入 FESFuture Event Set未来事件集后 在执行前被调用初始化成员变量。
复合模块的初始化先于其子模块。
2 handleMessage函数handleMessage的主要应用于大规模的模拟环境比如 说几千个 Simple Module用户需要用 handleMessage以省下用 activity为每个模块划 分的栈空间函数调用比协同程序切换快得多对于需要维持较大的状态信息的模块或者是 -3- 多状态的复杂的通信协议handleMessage较适用。
采用 handleMessage的优势有占 用内存少无需为简单模块分配独立的栈空间执行速度快采用 handleMessage的劣势 有本地变量无法存储状态信息需要重载 initialize模块设计时不太方便。
3 activity函数它使得用户可以象编写一个进程、线程一样编写一个简单模块。
等待消息、延缓执行时间等等。
拥有这个函数的多个简单模块作为一系列协同程序协同执行 又称之为协同多任务。
手动设置模块栈空间一般为 16k如果模块存在递归或本地变量占 空 间 较 大 的 话 可 以 设 置 为 更 大 的 栈 空 间 。
采 用 activity 的 优 势 有 无 需 重 载 initialize可以将模块作为进程描述。
采用 activity的劣势有有内存分配问题 主要由于栈的手动分配成千上万个 Simple Module 的分配造成内存不堪重负运行时负载 过重协同程序间的切换比普通函数调用慢了很多不是一种较好的编程方式使用 activity会导致
代码不可靠。
4Finish函数循环结束后正常中止时被调用模块的调用顺序刚好与 initialize 相反。
在 OMNeT中事件在简单模块内部产生。
初始化阶段OMNeT以 NED 构建网络调 用所有模块的 initialize函数。
activity和 handleMessage用以实现模块的行为在 事件处理时被调用。
模拟成功结束时调用 finish函数它最典型的应用就是记录下一些 模拟时的统计信息。
OMNeT 用 message 表示事件有事件发生的模块就是收到消息的模块。
4OMNeT建模 4.1 建模流程 在完成消息格式、ned 和 c
代码以后使用 opp_nmakemake 就可以直接生成 VC 的 makefile 文件。
如果是类 unix 平台用 opp_makemake 即可。
使用命令 nmake –f Makefile.vc 编译完成后得到一个可执行文件。
为这个可执行文件添加一个配置文件交 omnetpp.ini 就可以在任意机器上执行仿真过程完全脱离仿真平台了。
OMNeT仿真程序可在各种平台上运行具备 GNU 工具的 Solaris Linux或其它类 Unix 操作系统Win32 操作系统和 CygWin32Win32 操作系统和 Microsoft Visual C。
其中 CygWin 是 gcc 在 Win32 操作系统中的接口。
同 NS2 等其它网络仿真工具相比 OMNeT可 在 Win32 操作系统下安装和运行使用方便大大简化了 Linux 下的工作。
OMNeT建模的流程见图 3 1 图 3 OMNeT 仿真建模流程 -4- 为了方便在 omnetpp.ini 文件中改动参数我们用 VC6.0 编写了一个界面程序 5 见 图 4。
该界面程序可以直接修改 omnetpp.ini 配置文件的参数可以简化仿真操作。
图 4 界面程序 该界面程序简化了 omnetpp.ini 文件的参数配置过程从配置运行参数到编译、连接、 运行以及查看仿真结果都可以在一个界面上完成大大简化了仿真工作。
该界面输入各个参 数值后点击“写 INI 文件”按钮可以将输入的各个参数值写入 omnetpp.ini 文件。
再点 击“编译与连接”按钮可以执行 opp_nmakemake -f 和 nmake –f Makefile.vc 两个命 令这样将生成 Makefile.vc 和相应的可执行文件。
编译连接完成之后点击“运行”按钮 将直接调用生成的 exe 文件同时打开 Tkenv 界面。
程序运行完成之后点击“仿真结果分 析按钮”将打开 omnetpp.sca 这个标量文件以显示仿真分析结果数据。
4.2 仿真实现 在 OMNeT平台上我们对无线传感器网络wireless sensor networks简称 WSNs 的 LEACHlow energy adaptive clustering hierarchy协议进行了仿真。
LEACH 算法 3 4 的核心思想是减少与基站直接通信的节点数量来达到节能的目。
LEACH 协议按轮round 运行每轮分为簇形成和簇稳定两个阶段。
为了提高能量的利用率应保证簇稳定阶段维持 较长的时间。
在簇形成阶段首先随机选出部分传感器节点作为簇头接着选出的簇头以 CDMA/CA 方式向其它普通节点发送广播消息普通节点根据接收信号的强弱来选择自己的簇头加入并 同该簇头一起形成簇簇中的普通节点称为该簇的成员节点。
在稳定阶段中 成为簇头节点的节点向其成员节点发送 TDMA时分复用帧即将传输 时槽分配给其成员节点。
簇中的成员节点在所分配的时隙内把采集得到的数据传送给簇头 簇头将簇内所有成员节点收集的数据进行数据融合后再发给 Sink 节点。
图 5 是 LEACH 算 法描述的 WSNs 的工作原理。
-5- 图 5 LEACH 算法下 WSNs 的工作模式 我们在 50×50 的仿真区域内布撒 50 个节点在 OMNeT平台上仿真实现了 LEACH 协议见图 6。
图 6 LEACH 的仿真实现 5结束语 本文详细介绍了 OMNeT这个优秀的网络仿真平台它主要用于离散事件的模拟。
OMNeT相对其它网络模拟器来说使用是较为简单的但其使用方法仍然尤其特殊性和 复杂性。
本文详细介绍了如何使用 OMNeT对其体系结构编程语法以及建模过程都作了 详细介绍与深入剖析。
然后我们还介绍了一个用于更改配置参数的界面程序使用该界面程 序可以有效减少用 OMNeT进行仿真的工作量最后进行了 LEACH 协议的仿真实现。
-6- 参考文献 1 Andras Varga. OMNeT User ManualEB/OL. http://www.omnetpp.org/index.
php 2 C.Mallanda 等. Simulating Wireless Sensor Networks with OMNeTEB/OL. http://csc.lsu.edu/sensor_web/simulator.html 3 Wendi B.Heinzelman 等. Energy Efficient Communication Protocol for Wireless Microsensor NetworksA. Proceedings of the 33rd Hawaii International Conference on System SciencesC. Jan 2000. 4 Wendi B.Heinzelman 等 . An Application Specific Protocol Architecture for Wireless Microsensor NetworksJ. IEEE Transactions on Wireless Communications. 2002 1 4 : 660 - 670. 5 刘惊雷.Visual C实用教程.北京电子工业出版社2005 年 Sensor Network Simulation based on OMNeT Min Cao WenFeng Li Bing Yuan School of Logistics Engineering Wuhan University of Technology Wuhan HuBei China 430063 1. Abstract This paper introduces components and the architecture of OMNeT discusses the grammar of OMNeT programming in detail and demonstrates deeply the model creation in OMNeT. We implement an interface of configuring parameters for simulation with OMNeTand simulate the LEACH protocol on OMNeT platform. Keywords: Network Simulation User Interface Wireless SensorNetwork -7-
上一篇:
图书管理系统的设计与开发
下一篇:
关于听觉掩蔽的语音增强算法及DSP实现