OMNeT++与无线通信网络仿真——第一部分离散事件驱动仿真与Omnet++ 阅读笔记

本文介绍了OMNeT++的仿真模型构建,包括模块间消息传递、NED编辑器的使用、模块层级结构、序列图和事件日志,以及结果分析的Sca和Vec文件。强调了在仿真中的参数设置和灵活的模块设计,以及推荐的结果分析方法和集成开发环境的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.5 仿真概念

  1. OMNet++模型由使用消息(message) 传递通信达模块组成。模块使用C++编写,简单模块可以分组为复合模块等,模块的层次级别可以是无限的。一个仿真模型在OMNeT中称为 网络(network),其本质也是一个复合模块。消息可以通过模块之间的连接发送,也可以直接发送到其他模块。
  2. 模块之间的 消息通常通过 门(gate) 来发送到其他模块,门是模块的 输入(in)输出(out) 接口,消息通过输出门发出通过输入门接收,模块之间通过 连接(connections) 链接。复杂的复合模块通常有多层(就像网络分层),模块之间不允许跨层级传递,以免妨碍模型重用。可以给连接分配参数如传播时延、数据速率、误码率等,可以定义具有特殊属性的连接称之为 信道(channel) 。模块可以有 参数(parameters) ,可以用于将配置参数传递给简单模块,也可以交互式的进行参数输入。
  3. OMNeT++为描述实际系统结构提供了一些有效的工具,主要为:分层嵌套模块、模块是模块类型的实例、模块通过信道使用消息通信、灵活的模块参数、拓扑描述语言等。

如下图所示tictoc.ned例子,网络tictoc6就是由两个简单模块Txc6组成,Txc6的具体功能在Txc6.cc(c++文件)中定义。简单模块中定义了输入输出的门,在网络中通过连接将两个模块链接,设置了时延参数为100ms。

在这里插入图片描述
在这里插入图片描述
#2.2 NED编辑器

  1. 右键模块图标选择Properties,可以设置模块的位置、外观等设置。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

ini文件编辑器

  1. 在 模块层次结构中,可以看见模块的子模块和配置参数,
    在这里插入图片描述

  2. Problem视图显示NED文件、ini文件中的错误、警告和消息信息;双击可以达到对应的位置
    在这里插入图片描述

  3. 在Run仿真后,可以在Process视图中查看仿真运行的状态
    在这里插入图片描述

  4. 在仿真开始运行后,输出结果会在控制台(Console)中显示:
    在这里插入图片描述

  5. Process视图只显示正在进行的进程,而Debug视图还会显示已经终止的进程和其退出代码。

  6. 通配符 * :

**.configuratorDstt.config = xmldoc("inputConfig/demo.xml")
*.globalData.config = xmldoc("inputConfig/DsttIpMacConfigScenario2.xml")


# Interface
**.fcsMode = "computed"
**.crcMode = "computed"
*.*.ethernet.typename = "EthernetLayer"

上面代码中通配符和语法含义如下:

  • *:表示匹配当前层级的一个模块。它只匹配当前层级的一个模块,不包括子模块。例如,*.parameter 表示匹配当前层级下所有模块的 parameter 参数。

  • **:表示匹配当前层级及其所有子层级的模块。它会递归地匹配所有子模块,直到找到满足条件的模块或达到最底层的模块。例如,**.parameter 表示匹配当前层级及其所有子层级下的所有模块的 parameter 参数。

  • *.*: 匹配两个层级的模块。在这个例子中,第一个 * 匹配一个模块,第二个 * 匹配这个模块的子模块。

  • **.fcsMode: 这个模式匹配了所有层级的模块中名为 fcsMode 的参数。

  • *.*.ethernet.typename: 这个模式匹配了所有两层模块层级中的 ethernet 子模块,并设置它们的 typename 参数为 "EthernetLayer"

综上所述,这些配置行指示了在仿真中如何设置各个模块的参数,以及如何使用全局配置数据文件。

2.5 序列图

  1. Omnet++仿真内核会记录在仿真期间的调度和取消自消息、发送消息、接收消息、显示更改、模块的连接创建及删除、用户消息日志等,用于后续的处理,结果是包含仿真信息的事件日志文件,文件格式是基于行的文本。在Omnet++中,可以使用 序列图(Sequence chart) 视图和 事件日志(Event log) 来进行查看,在其中可以根据模块、消息类型和其他标准来过滤,时间线可以以如线性、紧凑、基于事件编号来显示。

但是要记得在启动仿真时的 Run configuration 中勾选

2.6 结果分析

在仿真运行完后,生成 sca文件和vec文件

.sca 文件是标量(Scalar)数据文件的扩展名。它包含了模拟运行期间收集到的标量数据,例如模块的吞吐量、延迟、丢包率等。

.vec 文件是向量(Vector)数据文件的扩展名。它包含了模拟运行期间收集到的向量数据,例如某些模块的状态变化、事件发生次数等。

点击其中一个文件就会打开数据分析界面
在这里插入图片描述

  1. 导入新的输入: 当你要分析的数据除了这个仿真这次运行的结果时,还有其他仿真运行的结果也要加入分析,可以在input界面点击右上角的绿色圆导入或删除数据
    在这里插入图片描述
    在下方三个视图分别为
    input:输入 控制输入那些数据进行分析
    Browse Data: 浏览数据 以表格形式浏览所有数据
    Charts:图标 选择数据生成图表

在 Browse中可以看见,数据分为四种类型:
Parameters: 参数
Scalars: 标量
Histograms: 直方图
Vectors:向量
还可以在下方进行筛选,筛选 实验、模块、数据名称等等
在这里插入图片描述
2. 选择数据项后,点击右上角按钮可以将其在图中显示出来
在这里插入图片描述
在这里插入图片描述

12.1 结果记录

Omnet++中输出结果有主要有标量和矢量,还有直方图可选
输出矢量 是时间序列数据,从简单模块到信道记录。可以使用输出矢量来记录分组的端到端时延、往返时间、队列长度、排队时间、模块状态、链路利用率、丢包等——在仿真运行期间发生在模型中的任何有助于全面了解内容的信息。
输出标量 是汇总结果,在仿真期间计算并在仿真完成时写出。标量可以是数,或者可以是由若干字段组成的统计汇总,例如计数、平均值、标准差、总和、最大值、最小值等 。

有两种结果收集和记录方式:

  1. 基于信号机制,使用声明的统计
  2. 直接来自C++代码,使用仿真库

第一种方法结合了信号机制和NED属性,以便于从记录中去耦结果的产生,从而在记录内容和形式上提供更大的灵活性,详见5.10.
第二种方法的缺点是结果记录在模块中是硬编码的,简单的需求变化也需要更改代码或大量模块中的结果收集代码。

建议使用的结果分析路线:

  1. 使用集成仿真开发环境进行随意分析,即浏览数据和快速绘图
  2. 使用Python(或 R)程序进行复制的分析并生成定制的报告

集成仿真开发环境在结果分析时的数据选择、处理和制图步骤可以自由组合,从而实现高度自由,这些步骤将被存储为“配方“,当添加新的结果文件或替换现有文件时,该步骤会自动重新应用,可以节省重复的手动工作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月早十

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值