完整版OMNetpp学习笔记.docx
- 文档编号:3170277
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:18
- 大小:28.25KB
完整版OMNetpp学习笔记.docx
《完整版OMNetpp学习笔记.docx》由会员分享,可在线阅读,更多相关《完整版OMNetpp学习笔记.docx(18页珍藏版)》请在冰豆网上搜索。
完整版OMNetpp学习笔记
1.OMnetpp简介
OMnetpp作为一种仿真工具(与ns2,opnet并列),在P2P仿真方面具有很大的优势。
2.Overview
2.1模块概念
2.1.1模块
OMnetpp中功能被封装为一个个的模块。
简单模块(simplemodules)为基本模块,每个simplemodule完成一个基本功能。
Compoundmodule由多个simplemodule组成。
2.1.2Messages,Gates,Links
massage是模块之间通信的媒介,可以包含复杂的结构体。
Gatesaretheinputandoutputinterfacesofmodules;messagesaresentoutthroughoutputgatesandarrivethroughinputgates.
Eachconnection(alsocalledlink)iscreatedwithinasinglelevelofthemodulehierarchy:
withinacompoundmodule,onecanconnectthecorrespondinggatesoftwosubmodules,oragateofonesubmoduleandagateofthecompoundmodule。
2.1.3包传输模拟
connections可以使用物理链路模拟。
支持的参数有:
datarate,propagationdelay,biterrorrateandpacketerrorrate,andmaybedisabled.这些参数在channel对象中。
2.1.4参数
Modules可以拥有参数。
ParameterscanbeassignedineithertheNEDfilesortheconfigurationfileomnetpp.ini.
2.1.5TopologyDescriptionMethod
TheuserdefinesthestructureofthemodelinNEDlanguagedescriptions(NetworkDescription).
2.2ProgrammingtheAlgorithms
Simulationobjects(messages,modules,queuesetc.)arerepresentedbyC++classes.Theyhavebeendesignedtoworktogetherefficiently,creatingapowerfulsimulationprogrammingframework.Thefollowingclassesarepartofthesimulationclasslibrary:
>>module,gate,parameter,channel
>>message,packet
>>containerclasses(e.g.queue,array)
>>datacollectionclasses
>>statisticanddistributionestimationclasses(histograms,P2algorithmforcalculatingquantilesetc.)
>>transientdetectionandresultaccuracydetectionclasses
2.3使用OMNetpp
2.3.1buildingandrunningsimulations
一个OMNetppmodel由以下几部分组成:
1.NED语言拓扑描述(.ned文件):
使用参数,gates等描述module结构。
NED文件可以用任意texteditor编辑,但OMNetppIDE提供了两种方式:
图形与文本。
2.消息定义(.msg文件)定义各种消息类型。
OMNetpp会将消息定义转换成C++类。
3.简单模块源文件(Simplemodulesources):
C++文件
仿真系统包括两部分:
1.仿真内核
2.用户接口
3.NED语言
3.1NED概述
NED特点:
1)层次性:
复杂模块由简单模块组成
2)模块化
3)接口
4)继承性
5)包结构的管理:
如Java
6)内部类型:
(可以定义局部变量)
7)Metadataannotations(元数据注解?
)
3.2NED开始
图1网络举例
这个网络描述如下:
//
//Anetwork
//
networkNetwork
{
submodules:
node1:
Node;
node2:
Node;
node3:
Node;
...
connections:
node1.port++<-->{datarate=100Mbps;}<-->node2.port++;
node2.port++<-->{datarate=100Mbps;}<-->node4.port++;
node4.port++<-->{datarate=100Mbps;}<-->node6.port++;
...
}
3.2.1channel类型
可以定义channel类型
//
//ANetwork
//
networkNetwork
{
types:
channelCextendsned.DatarateChannel{
datarate=100Mbps;
}
submodules:
node1:
Node;
node2:
Node;
node3:
Node;
...
connections:
node1.port++<-->C<-->node2.port++;
node2.port++<-->C<-->node4.port++;
node4.port++<-->C<-->node6.port++;
...
}
3.2.3一些简单模块( App,Routing,andQueue)
简单模块定义有关键字:
simple。
在这个例子中,我们定义了node为简单模块(trafficgeneration,routing,etc.其实也挺复杂的)。
应当定义一些简单模块,然后组合起来组成一个复合模块(compoundmodule)。
一个流量生成的简单模块,一个路由模块,一个队列模块。
(We'llhaveonesimplemodulefortrafficgeneration(App),oneforrouting(Routing),andoneforqueueinguppacketstobesentout(Queue))
simpleApp
{
parameters:
intdestAddress;
...
@display("i=block/browser");
gates:
inputin;
outputout;
}
simpleRouting
{
...
}
simpleQueue
{
...
}
这些放在 App.ned, Routing.ned 和 Queue.ned文件中。
NOTE:
module 类型名称首字母大写,gate,parameter等用小写。
NED区分大小写。
@display()称作displaystring,在图形环境中显示。
"i=..."定义默认图标。
一般的,在NED中@-words如 @display 称作 properties 。
用来注释metadata,可以用于 files,modules,parameters,gates,connections,andotherobjects,andparametervalue
3.2.4复合模块
moduleNode
{
parameters:
@display("i=misc/node_vs,gold");
gates:
inoutport[];
submodules:
app:
App;
routing:
Routing;
queue[sizeof(port)]:
Queue;
connections:
routing.localOut-->app.in;
routing.localIn<--app.out;
fori=0..sizeof(port)-1{
routing.out[i]-->queue[i].in;
routing.in[i]<--queue[i].out;
queue[i].line<-->port[i];
}
}
此为node的定义。
复合模块可以和简单模块一样,有parameter,gate。
3.3简单模块
simpleQueue
{
parameters:
intcapacity;
@display("i=block/queue");
gates:
inputin;
outputout;
}
以上是一个Queue模块。
参数都是可选的。
动作不在NED语言中定义,而是在C++中定义。
默认情况下,OMNetpp会在与NED名字相同的C++类中寻找(如此例,Queue)。
也可以使用下面的方式指定:
simpleQueue
{
parameters:
intcapacity;
@class(mylib:
:
Queue);
@display("i=block/queue");
gates:
inputin;
outputout;
}
如果多个模块在同一名字空间中,则可以采用如下的方式
@namespace(mylib);
simpleApp{
...
}
simpleRouter{
...
}
simpleQueue{
...
}
这样C++类为mylib:
:
App, mylib:
:
Router and mylib:
:
Queue。
类似于C++中类的继承,简单模块之间也可以存在这样的关系:
simpleQueue
{
intcapacity;
...
}
simpleBoundedQueueextendsQueue
{
capacity=10;
}
该例BoundedQueue给capacity设置了初始值,这个模块使用的类与Queue相同,都是Queue。
若要使用不同的类,则需要用以下方式:
simplePriorityQueueextendsQueue
{
@class(PriorityQueue);
}
此时,PriorityQueue使用的类为PriorityQueue。
3.4复合模块
moduleWirelessHostBase
{
gates:
inputradioIn;
submodules:
tcp:
TCP;
ip:
IP;
wlan:
Ieee80211;
connections:
tcp.ipOut-->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 OMNetpp 学习 笔记