1. OMNet++ 模型
    由模块组成,模块之间通过消息传递方式进行通信。模块结构通过NED语言描述。
  • Messages 可以代表网络数据包、数据帧、排队网络中的客户
  • gates 模块输入输出接口
  • connection(link) 建模物理链路
  • channel 支持参数数据率(data rate)、误码率(bit error rate)、误包率(packet error rate)、传播时延(propagation delay)
    网络拓扑结构描述:NED
    参数数据类型:numeric,boolean,string,XML数据数
  1. 文件结构
  • 拓扑描述:.ned
  • 消息定义:.msg
  • 简单模块:.h/.cc
  1. 建模方法:
(1)建立一个网络network
(2)定义一个网络
network Network{
submodules:node1:Node;node2:Node;node3:Node;...#在网络的子模块中可参数赋值位置host[100]:Host{ping.timeToLive=default(3);ping.destAddress=default(0);}
connections:node1.port++<-->{datarate=100Mbps;}<-->node2.port++;node2.port++<-->{datarate=50Mbps;}<-->node3.port++;...
}
(3)定义信道channel
network Network{
types:
channel c extends ned.DatarateChannel{
datarate=100Mbps;
ber=1e-10;
double distance @unit(m);
delay=this.distance/100000km*1s;
double cost = default(1);
}
submodules:
node1:Node;
node2:Node;
node3:Node;
...
connections"
node1.port++<-->C<-->node2.port++;
...
}
#信道中封装与连接有关的参数和行为,系统内置预定义信道有:
ned.IdealChannel:无参数
ned.DelayChannel:delay,disabled
ned.DatarateChannel:datarate,ber,per#
#通过子类化来添加参数和属性,也可以修改固有属性,单位可以使用@unit属性来指定#
(4)建立App、Routing、Queue等模块(流量生成器、路由、队列包等)
simple App{
parameters:
int destAddress;
@display("i=block/browser");
string protocol;
volatile double sendInterval @unit(s)=default(exponential(1s);
volatile int packetLength @unit(byte)=default(100B);
volatile int timeToLive = default(32);
gate:
input in;
output out;
}
simple Routing{
...
}
simple Queue{
...
}
#模块名需要以大写开头,以@开头的单词成为属性#
#参数赋值的三种方法:从NED文件或者配置文件omnetpp.ini中读取值,从用户交互赋值#
#NED赋值的几个位置:在继承子类中,NED类型实例化的子模块和连接定义中,包含子模块或者连接的网络和复合模块中。#
(5)建立节点复合模块
module Node{
types:...
parameters:int address;@display("i=imsc/node_vs,gold");
gates:inout port[];
submodules:
#在复合模块中的子模块中可赋值位置app:App;routing:Routing;queue[sizeof(port)]:Queue;
connections:routing.localOut-->app.in;routing.localIn-->aoo.out;for i=0,,sizeof(port)-1{routing.out[i]-->queue[i].in;routing.in[i]<--queue[i].out;queue[i].line<-->port[i];}
}
(6)所有对象组合在一起
module WirelessHostBase{
gates:inout radioIn;
submodules:tcp:TCP;ip:IP;wlan:Ieee80211;
connections:tcp.ipOut-->ip.tcpIn;tcp.ipIn<--ip.tcpOut;ip.nicOut++-->wlan.ipIn;ip.nicIn++<--wlan.ipOut;wlan.radioIn<--radioIn;
}
  1. 解释组件含义
    – #gates门# –
    gates是模块的连接点,有三种类型(input,output,inout);
    NED要求所有门都有连接,为了放松这一条件,可以使用@loose来注解
    – #submodule子模块# –
    复合模块包含的模块,称为子模块;
    子模块有类型、有名字,可以静态指定,也可以通过字符串表达式来指定(这种特性称为参数化子模块类型);
    NED支持子模块数组、条件子模块(if关键字和条件放在子模块类型的后面)。子模块数组的大小必须明确;
    复合模块子类化:添加子模块
    – #connections连接# –
    在复合模块中的connections节中定义;
    连接不可以跨层级:2个子模块的门可以连接,子模块门和父模块的内部门可以连接;
    input\output门使用箭头连接;
    inout使用双箭头连接<–>;
    两个门连接如果有信道,使用2个箭头,并将信道放在箭头之间,@display属性也相同;
    inout门是input和output两个门胶合在一起,如果需要的时候,可以分开,分别为port$i和port$o;
    门的引用形式:modulespec.gatespec;
    gatename++表示使用第一个没有连接的门连接;
  2. 事件和事件的执行顺序
  • 事件:使用消息
  • 表示事件:使用cMessage类或者其子类代表
  • 消息从一个模块发到另一个模块,事件按照到达时间的顺序从FES中取
  • 消息目的模块:消息发生地
  • 消息到达时间:消息发生的时间
  • 超时失效的实现:模块发送消息给自己
  • 两个消息规则:如果到达时间相同,早到达早执行;如果优先级相同,更小调度优先级值的先执行;调度的或者早发送的先执行。
  • 调用顺序:最初的事件(starter messages)放入FES–> 所有模块的initialize函数–>进入事件循环–>第一个事件被处理–>第二个事件被处理–>…—>结束时间循环—>所有模块的finish函数;复合模块的initialize–>子模块的initialize;子模块finish–>复合模块finish;如果仿真器因为运行时错误而终止,finish函数不会被调用。
//仿真运行开始:1. 构建网络(系统module和它的submodule)2. 插入starter message给所有的submodule(使用activity()函数)3. 调用系统module callInitialize()4. 进入时间循环中(在之前定义的)5. 如果循环正常结束,不出现error:调用 callFinish()6. clean up
callInitialize(){调用之前用户定义的initialize()函数if(module是复合的){for(each submodule){调用子模块的callInitialize()}}
}
callFinish(){if(module是复合的){for(each submodule){调用子模块的callFinish()}}调用用户定义的finish()函数
}
  1. 仿真时间
    当前的仿真时间:simTime()
    仿真时间:simtime_t(c++类型)

OMNet++学习笔记2相关推荐

  1. 2022-04-21 Omnet学习笔记(一)

    Omnet学习笔记(一) 前言 1.本机为Inspiron 5005,为64位,所用操作系统为Windos 10.所使用软件为Omnet-5.2.1. 2.推荐Omnet入门教程系列 实验现象 在网络 ...

  2. OMNet++学习笔记1

    主要应用领域 无线传感器网络(数据压缩.路由协议.能耗问题) 移动自组网(组网算法) OSI模型(eg. MAC,TCPIP等协议仿真) 网络通信协议 网络安全 光通信(光网络频谱分布) 水声通信 车 ...

  3. 无线传感器网络 与 OMNET++学习笔记(一)

    无线传感器网络的仿真,研究人员设计开发了许多的仿真平台(或在现有平台建立无线传感器网络模型),包括NS-2, OPNET,  SensorSim, EmStar, OMNet++, G1oMoSim, ...

  4. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  5. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  6. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  8. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  9. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

最新文章

  1. Angular多个页面引入同一个组件报错The Component ‘MyComponentComponent‘ is declared by more than one NgModule怎么办?
  2. matlab doc函数,matlab常用函数.doc
  3. PowerPoint动画制作时的需要注意的N个事项
  4. Zend Framework数据库操作(1)
  5. 批量处理Excel文件的模块----xlwings
  6. ImportError: No module named Cython.Build
  7. P3317-[SDOI2014]重建【矩阵树定理,数学期望】
  8. 线程安全和线程不安全的简述及辅助记忆
  9. time和datatime模块
  10. 订阅发布系统得解耦与冗余
  11. jasper 常用知识点总结
  12. Qt4_子类化QTableWidget
  13. https://leetcode.com/problems/palindromic-substrings/description/
  14. bzoj3944 Sum
  15. python 写excel 保留空格_通过自动填充列中的空格来操作excel表的Python脚本
  16. AB-PLC之间通讯
  17. 聊聊傅里叶变换的意义和定义
  18. postgresql主从复制、主从切换
  19. 数据湖:数据同步工具NiFi
  20. Android app和系统应用实现截屏功能

热门文章

  1. (9)全民小视频引流脚本模块化开发03-发送私信By飞云脚本学院
  2. 华为Atlas200DK开发从零开始1.番外篇——Win10开发环境搭建,直连Atlas200DK开发板
  3. Linux下python如何解压rar文件,RAR解压文件
  4. C++ -- TranslateMessage函数
  5. 电脑开不开机怎么回事?
  6. angular 行内引入背景图片
  7. 关于广东省高考移民, 求助数据高手伸出援手
  8. JavaScript 将字符串转换为数字 – JS 字符串转 Int 示例
  9. html table专业样式,html 简单的table样式
  10. 城市规划行业的城市内部不透水地表空间信息提取与应用