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

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

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)程序进行复制的分析并生成定制的报告

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

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
目 录 第一章 无线传感器网络概述 6 概述 6 1.1 NS-2 6 1.2 OPNET 6 1.3 SensorSim 7 1.4 EmStar 7 1.5 GloMoSim 7 1.6 TOSSIM 7 1.7 PowerTOSSIM 8 第二章 OMNET++简介 9 概述 9 2.1 OMNeT++框架 9 2.1.1 OMNeT++组成 9 2.1.2 OMNeT++结构 10 2.2 OMNeT++的安装 11 2.3 OMNeT++语法 12 2.3.1 NED语言 12 2.3.1.1 NED总概述 12 2.3.1.2 Ned描述的组件 13 2.3.1.3函数 15 2.3.2 简单模块 17 2.3.2.1 OMNET++中离散事件 17 2.3.2.2 包传输模型 17 2.3.2.3定义简单模块 18 2.3.2.4 简单模块中的主要成员函数 20 2.3.3 消息 21 2.3.3.1 cMessage类 21 2.3.3.2 消息定义 21 2.3.3.3 消息的收发 22 2.3.4 模块参数、门及连接的访问 23 2.3.4.1消息参数的访问 23 2.3.4.2门和连接的访问 24 2.3.4.3门的传输状态 26 2.3.3.4连接的状态 26 2.4 仿真过程 27 2.5 配置文件omnetpp.ini 28 2.6 结果分析工具 29 2.6.1 矢量描绘工具Plove 29 2.6.2 标量工具Scalar 29 27、结束语 30 第三章 物理层仿真(信道) 32 3.1 UWB的基础知识 32 3.1.1 UWB信号的应用背景 32 3.1.2 UWB信号的定义 32 3.1.3 UWB的脉冲生成方式(高斯脉冲,非高斯脉冲) 34 3.1.4 UWB的调制方式 34 3.1.5 用功率控制多址接入方法来进行链路的建立控制 36 3.2 用OMNeT++对UWB进行仿真 37 3.2.1 算法仿真的概述 37 3.2.2 算法的具体流程 39 3.2.3 算法的主要代码 41 3.2.4 仿真结果分析 58 3.2.5 应用前景 58 参考文献 59 第四章 MAC层仿真 60 概述 60 4.1 无线传感器网络MAC层特性及分类 60 4.1.1 无线信道特性 60 4.1.2 MAC 设计特性分析 61 4.1.3 无线传感器网络典型MAC协议的分类 61 4.2 基于随机竞争的MAC协议 62 4.2.1 S-MAC协议[12] 62 4.2.2 T-MAC协议 64 4.2.3 AC-MAC协议 65 4.3 基于时分复用的MAC协议 65 4.3.1 D-MAC协议 65 4.3.2 TRAMA协议 66 4.3.3 AI-LMAC协议 66 4.4 其他类型的MAC协议 67 4.4.1 SMACS/EAR协议 67 4.4.2 基于CDMA技术的MAC协议 67 4.4.3 DCC-MAC 68 4.5 基于OMNeT++的MAC层协议仿真 69 4.5.1 S-MAC协议的仿真 69 4.5.2 S-MAC协议流程图 70 4.5.3 S-MAC协议的分析 71 4.6 小结 86 参考文献 86 第五章 网络仿真 88 概述 88 5.1 无线传感器网络路由协议研究 88 5.1.1 无线传感器网络协议分类 88 5.1.2无线传感器网络中平面路由 90 5.1.3无线传感器网络中层次化路由 91 5.1.4 经典算法的OMNET仿真 93 5.2 无线传感器网络路由协议研究的发展趋势 104 5.3 无线传感器网络层路由协议与OMNET++仿真 104 5.3.1 无线传感器网络层路由与OMNET++仿真的基本概念[19] 104 5.3.1.1 传感器网络的体系结构 105 5.3.1.1.1 传感节点的物理结构 105 5.3.1.1.2 传感器网络的体系结构与网络模型 106 5.3.2 传感器网络层路由协议的基本概念 106 5.3.2.1 网络通信模式[28] 106 5.3.2.1.1 单播: 107 5.3.2.1.2 广播: 107 5.3.2.1.3 组播: 108 5.3.2.2传感器网络层设计[29] 108 5.3.3 OMNET++仿真软件的基本概念 109 5.4 无线传感器网络路由协议介绍 110 5.4.1 泛洪法(Flooding)[32] 111 5.4.2 定向扩散(Directed Diffusion:DD)[33] 112 5.4.3 LEACH( Energy Adaptive Clustering Hierarchy)[34] 113 5.5. OMNET++仿真实例 114 5.5.1 泛洪法 114 5.5.2 gossiping协议 119 5.6 本章总结 121 参考文献 121 第六章 应用层仿真 125 6.1 无线传感器网络节点定位 125 6.1.1 节点定位的基本概念 125 6.1.1.1 节点定位的定义 125 6.1.1.2 节点定位的重要性 126 6.1.2 节点定位的研究 126 6.1.2.1 测距方法 126 6.1.2.2 节点定位原理 127 6.1.2.3 节点定位算法分类 128 6.1.2.3.1 锚节点分类 128 6.1.2.3.2 计算方式分类 129 6.1.2.3.3 测距分类 130 6.1.2.3.4 节点移动性分类 130 6.1.2.4 节点定位性能评价[37] 130 6.1.3基于OMNET++的DV—Hop定位算法仿真 132 6.1.3.1 DV—Hop定位算法的基本思想 132 6.1.3.2 DV—Hop定位算法仿真 133 6.2 网络管理 141 6.2.1概叙 141 6.2.1.1 wsn网络管理的定义及范畴 142 6.2.1.2 wsn网络管理系统的分类 143 6.2.1.3 wsn网络管理系统的设计标准 144 6.2.2 wsn网络管理系统 145 6.2.2.1 能量管理系统 145 6.2.2.1.1 SenOs[5] 145 6.2.2.2 拓扑控制系统 146 6.2.2.2.1 TopDisc 算法 146 6.2.2.3 可调试、可配置、可编程系统 148 6.2.2.2.1 sympathy 系统[42] 148 6.2.2.2.2 Agilla系统[7] 149 6.2.3典型网络管理算法的Omnet 模拟 150 6.2.3.1 基于Wsn的一个简单拓扑查找算法算法模拟 150 6.2.4 结论 155 6.3 基于路由层安全协议的OMNeT++仿真 156 6.3.1 基础知识介绍 156 6.3.1.1无线传感器网络安全性的重要性和必要性 156 6.3.1.2 无线传感器网络的安全目标 156 6.3.1.3无线传感器网络中的路由协议概述 157 6.3.1.4无线传感器网络路由协议的攻击方法 157 6.3.1.5无线传感器网络中经典路由协议安全性分析 160 6.3.1.6 安全路由技术分析 162 6.3.1.6.1 密钥管理技术[20, 23, 24, 25] 162 6.3.1.6.2 安全路由协议 162 6.3.2 在OMNeT++ 中的仿真 163 6.3.3 总结 172 参考文献 172 第七章 实例(无线传感器网络移动节点定位仿真) 179 概述 179 7.1 移动定位算法介绍 179 7.1.1 室内移动节点定位算法 179 7.1.1.1 Active Badge系统 180 7.1.1.2 RADAR系统 180 7.1.1.3 Cricket系统 180 7.1.2 室外移动节点定位算法 181 7.1.2.1 基于静态定位的移动定位算法 181 7.1.2.2 纯移动定位算法 182 7.2 移动定位算法的OMNeT++仿真 183 7.2.1 MCL(Monte Carlo Localization)定位算法简介 183 7.2.2 MCL(Monte Carlo Localization)的OMNeT++仿真 185 7.2.2.1 建立网络拓扑 185 7.2.2.2 编码阶段 190 7.3.总结和发展趋势 195 参考文献 195
OMNeT++是一种基于C++语言开发的网络仿真框架,它的核心是一个模块化的、分层的仿真引擎。它被广泛应用于各种网络技术的研究和开发中。 OMNeT++的原代码包含了该框架的各个组成部分,包括模块库、仿真内核以及仿真实例等。其中,模块库是用于构建仿真模型的组件,提供了一系列已经实现好的网络协议和算法;仿真内核是框架的核心部分,负责处理事件驱动仿真环境;仿真实例则是具体应用的实现,包括网络、节点、消息和事件等。 通过使用OMNeT++的原代码,用户可以自定义仿真模型,并根据实际需求编写自己的仿真代码。用户可以从模块库中选择合适的网络协议和算法,并将它们组合起来构建一个完整的仿真模型。用户可以对仿真模型中的节点、网络拓扑、消息传递和事件处理进行灵活的控制和定制。 同时,OMNeT++的原代码还提供了丰富的仿真功能,包括统计数据的收集与分析、仿真结果的可视化、调试工具的支持等。这些功能使得用户能够更加方便地进行网络仿真实验,并对仿真结果进行准确的评估和分析。 总之,OMNeT++的原代码提供了一个强大的网络仿真平台,用户可以根据自己的需求和兴趣进行网络仿真实验。通过使用OMNeT++,用户可以更好地理解和评估各种网络技术,为网络研究和开发提供有力的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

月早十

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

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

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

打赏作者

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

抵扣说明:

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

余额充值