
Omnet++介绍精讲.ppt
29页Omnet++Omnet++介绍精讲介绍精讲Page 2OMNeT++介绍2017/4/19lNS2(NS3):开放源码的自由软件,著名的用于网络研究的离散事件仿真工具lOPNET:商业化的通信网络仿真平台OPNET采用网络、节点和过程三层模型实现对网络行为的仿真lSensorSim:建立在NS-2的一个采用DSR的802.11网络模型上,目前已停止开发和支持l……仿真平台仿真平台Page 3OMNeT++介绍2017/4/19lOMNeT++是Objective Modular Network TestBed in C++的英文缩写,它是开源的基于组件的模块化的开放网络仿真平台lOMNeT++作为离散事件仿真器,具备强大完善的图形界面接口和可嵌入式仿真内核,OMNeT++主要用于通信网络和分布式系统的仿真l目前版本为omnet++5.0OMNeT++Page 4OMNeT++介绍2017/4/19l仿真内核库(simulation kernel library,简称Sim)l网络描述语言的编译器(network description compiler, nedc)l图形化的网络编辑器(graphical network description editor, GNED)l仿真程序的图形化用户接口-Tkenvl仿真程序的命令行用户接口-Cmdenvl图形化的输出工具-Plove和ScalarOMNeT++组成组成Page 5OMNeT++介绍2017/4/19lOMNeT++的用户接口用于实现仿真程序的人机交互。
lOMNeT++允许模型内部机制对用户可视化,也允许用户启动和终止仿真,并更改模型内部的变量lOMNeT++中的图形化接口是一个用户工具,可方便用户了解模型内部的运行机制lTkenv和Cmdenv用户接口用户接口 Page 6OMNeT++介绍2017/4/19OMNeT++运行运行结构结构Page 7OMNeT++介绍2017/4/19lOMNet++是面向对象的离散事件模拟工具,为基于进程式和事件驱动两种方式的仿真提供了支持OMNet++采用了混合式的建模方式,同时使用了OMNet++特有的ned(NEtwork Discription,网络描述)语言和C++进行建模OMNeT++语言语言Page 8OMNeT++介绍2017/4/19lomnetpp.inip规定了网络,仿真速度,输出文件,网络拓扑范围,节点数量和其它一些参数lmodule. nedp定义模块(门和连接,参数等),定义网络l module.cc , module.hp实现各函数功能:initialize() , handleMessage(cMessage * msg), finish()OMNeT++基本文件基本文件Page 9OMNeT++介绍2017/4/19lNED可以描述一组元件(通道,简单/复杂模型),这些组件的描述可以在其他网络描述中得以重用lNED用来定义模型的拓扑结构,方便对一个网络进行模型化描述l文件带有.Ned的后缀,.Ned文件动态地载入到模拟程序,或者用Ned编译器或C++代码链接到模拟器执行。
lNED文件可以使用任何文本编辑器或GNED图形编辑器来编写NED语言用来定义模型中的网络拓扑结构,较为简单的网络拓扑可以使用GNED,但复杂网络的拓扑描述还应该用NED源文件方式书写NED语言语言Page 10OMNeT++介绍2017/4/19l输入指示:用于引进其它网络描述文件,引进一个网络描述后,可以使用它所包含的模块通道等组件p如:import "ethernet"; // imports ethernet.nedl信道定义:说明一个链接类型的特征,在信道申明中包含三个属性,它们都是可选项的:delay(每仿真秒的传输延时),error(比特错误率),datarate(信道带宽)NED组件组件 channel LeasedLinedelay 0.0018 // secerror 1e-8datarate 128000 // bit/sec endchannelPage 11OMNeT++介绍2017/4/19NED的函数的函数Page 12OMNeT++介绍2017/4/19l简单模块:它是复合模块的基本构建成分,它通过申明它的参数和门来定义l复合模块:它由一个或多个子模块组成。
不管是简单模块还是复合模块都可以用做子模块它们也都能有门和参数,在简单模块能够使用的任何地方复合模块都能使用它还有两个部分:子模块和链接l网络模块:模块声明只定义了模块类型,要确实地获得一个仿真器能运行的模块,需要写网络定义,网络定义将前面定义的模块类型声明为一个仿真模块实例简单模块和复合模块简单模块和复合模块(1)Page 13OMNeT++介绍2017/4/19简单模块和复合模块简单模块和复合模块(2)Page 14OMNeT++介绍2017/4/19简单模块和复合模块简单模块和复合模块(3)simple SimpleModuleNameparameters://...gates://...endsimple 简单模块module CompoundModuleparameters://...gates://...submodules://...connections://...endmodule复合模块network wirelessLAN: WirelessLANparameters: numUsers=10, httpTraffic=true, ftpTraffic=true, distanceFromHub=truncnormal(100,60);Endnetwork网络模块Page 15OMNeT++介绍2017/4/19l.cc文件中直接或间接定义一个CSimpleModule的子类l以define_Module() 或define_Module_Like()宏注册p作用:声明一个simple module 类型并且建立与相应NED文件的关联。
类的名字和NED中的简单模块一样p每个SimpleModule都必须手动添加该宏l实现模块类简单模块简单模块Page 16OMNeT++介绍2017/4/19lInitialize():在初始化消息放入FES(Future Event Set)后,在执行前被调用,初始化成员变量复合模块的初始化先于其子模块lactivity():拥有这个函数的简单模块们作为一系列协同程序协同执行,又称之为协同多任务手动设置模块栈空间,一般为16k,如果模块存在递归或本地变量占空间较大的话,可以设置为更大的栈空间lhandleMessage():p为每个message / event调用handleMessage()p你需要在initialize()函数中初始化变量,一些基于协同的函数如wait()、receive()等均不能调用pSimpleModule的stacksize一定要设置为0lfinish():循环结束(FES没有模拟事件时)后正常中止时被调用,模块的调用顺序刚好与initialize()相反重要函数重要函数Page 17OMNeT++介绍2017/4/19实例实例class Txc1 : public cSimpleModule{ protected: // The following redefined virtual function holds the algorithm. virtual void initialize(); virtual void finish(); virtual void handleMessage(cMessage *msg);};Define_Module(Txc1);……Page 18OMNeT++介绍2017/4/19l门(gate)实现模块的连接。
OMNeT++支持单向的简单线路,因此有输入门输出门,消息从输出门发出,在输入门接收lisBusy()成员函数返回门当前是否正在传输ltransmissionFinishes()返回传输结束的时间lisConnected()成员函数返回门是否连接门门simple RoutingUnitparameters: //...gates: in: fromPort,input[]; out: toPort,output[]; inout: link;endsimple Page 19OMNeT++介绍2017/4/19l一个连接:p包含属性(延迟,比特出错率,数据速度)或使用命名的通道;p可能出现在一个for循环中(生成多重连接);p可能是有条件限制的;连接连接例子:node1.outGate --> node2.inGate;node1.outGate --> error 1e-9 delay 0.001 --> node2.inGate;for i=0..4 do node1.outGate[i] --> node2[i].inGateendfor;Page 20OMNeT++介绍2017/4/19l消息文件mypacket.msg,类似与数据包报文格式,将创建以下文件:mypacket_m.h和mypacket_m.cc。
消息消息message MyPacket{ fields:int srcAddress;int destAddress;int hops = 32;}; Page 21OMNeT++介绍2017/4/19l普通发送send(cMessage *msg, const char *gateName, int index=0);send(cMessage *msg, int gateId);isBusy(); transmissionFinishes();l延迟发送wait();send(msg,”outgate”);sendDelayed(cMessage *msg, double delay, const char *gate_name, int index);sendDelayed(cMessage *msg, double delay, int gate_id);E.g:sendDelayed(msg, 0.005, "outGate");l自传消息使用scheduleAt()发送自传消息;scheduleAt(absoluteTime, msg);scheduleAt(simtime()+delta, msg);isSelfMessage():判定是否自传消息消息的收发函数消息的收发函数Page 22OMNeT++介绍2017/4/19l调用cModule 的par()成员函数可以访问模块指针int numTasks = par("numTasks");double processingDelay = par("processingDelay");消息参数消息参数Page 23OMNeT++介绍2017/4/19l当程序被启动,它就开始读配置文件(omnetpp.ini)。
这个文件包含一些设置——控制仿真程序怎样执行,模型参数值等等l配置文件规定一些仿真运行;最简单的情况下,它们一个接一个地被仿真程序执行l仿真输出被写进数据文件中:vector矢量文件,scalar标量文件,和用户输出文件仿真过程仿真过程Page 24OMNeT++介绍2017/4/19l该文件使得模拟程序得知将要仿真的网络,并通过该配置文件传递一些参数l可分为以下几部分:[General]——包含适应于所有模拟运行的常规设置和所有用户界面[config] —— network = ?[Run 1],[Run 2],….——包含每一运行设置这些部分可能包含任意在其他部分中被承认的实体[Cmdenv]——包含Cmdenv专门设置[Tkenv]——包含Tkenv专门设置 [parameters]——包含在NED文件中没有赋值的模块参数值[OutVectors]——输出矢量的配置记录你可以通过矢量名称和模拟时间来指配置文件配置文件omnetpp.iniPage 25OMNeT++介绍2017/4/19lINET Framework:标准协议模块,包括了互联网的协议栈( TCP, UDP, IPv4, IPv6, OSPF, BGP, 等),有线无线链路层协议 (Ethernet, PPP, IEEE 802.11, 等)……是由OMNeT++团队维护的。
lINETMANET :INET的分支,主要是为了移动ad-hoc网络lMiXiM : 主要是为了WSN, body area networks, ad-hoc, vehicular networks(车载网)p a simulator for WSN, Body Area Networks (BAN) and generally networks of low-power embedded devicesl……OMNeT++已有模块已有模块Page 26OMNeT++介绍2017/4/19lomnetpp-4.6解压l进入omnetpp-4.6目录,打开mingwenv.cmdl在打开的命令行窗口中输入p$ ./configurep$ makel完成之后,使用omnetpp命令打开IDE界面,或者在ide/目录下双击omnetpp打开IDE界面OMNeT++安装安装*如果机器内存为2G的话,可能会出现“Failed to create the Java Virtual Machine”建议在ide/omnetpp.INI文件中修改-xms256m-xmx512mWindows 7下的安装Page 27OMNeT++介绍2017/4/19lhttp://www.omnetpp.org/l Manual ::http://www.omnetpp.org/doc/omnetpp/manual/usman.htmllIDE User Guide:: http://www.omnetpp.org/doc/omnetpp/UserGuide.pdflAPI: http://www.omnetpp.org/doc/omnetpp/api/index.htmllTicToc实例实例:http://www.omnetpp.org/doc/omnetpp/tictoc-tutorial/index.html参考链接参考链接Thank You结束结束。












