omnet++ 快速入门 | 计算机网络仿真 | omnet++ 入门教程

omnet

具体实现官方有很多, 主要是一些概念比较不太好懂

1 网络仿真软件综述

01 wsn仿真软件

看博客: wsn simulator

02 为什么使用omnet

  1. 简单易用
  2. 提供强大的GUI
  3. 有支持团队不断在更新维护

03 学习资料

omnet++:https://omnetpp.org/documentation/
C++: CPrimer 中文版

04 目标

  1. 讲omnet的基本使用
    1. 使用ned进行仿真网络结构的定义
    2. omnet中模块的概念
  2. 从头带大家实现一个有线的tictoc 和 一个无线的tictoc

2 omnet介绍

1 omnet安装与启动

  1. 安装必须进行的步骤
    1. 下载OMNeT : 下载地址
    2. 将存档解压缩到新文件夹中。
    3. 打开mingw.cmd 键入./configure和后make (这步可能要30分钟左右)
    4. 将path/to/OMNeT/build添加path/to/OMNeT/build目录到PATH环境变量中。
    5. 输入omnetpp确保安装正常。预计OMNeT ++开发环境将启动。

注: (原则上不需要下载任何东西, 都是包括在安装包中的, 包括Qt环境,编译器mingw等)
有关更多安装说明, 请访问omnet installGuide

  1. 安装完成后, 打开mingwenv.cmd, 输出omnetpp, 即可打开omnetIDE
    在这里插入图片描述
  2. 选择工作目录, 打开后界面如下所示
    在这里插入图片描述

2 使用omnet仿真的一般步骤

使用omnet仿真

主要有三步:

  1. 使用ned(network description)定义网络拓扑结构
  2. 利用C++编写实现网络的各种行为
  3. 编写配置文件指定网络参数, 利用配置文件启动项目

3 新建项目

File->New-Project->Omnet++Project 来新建项目, 项目新建后, 我们可以看到src, simulation文件夹

  • simulation: 存放项目配置文件

    我们在配置文件中指定想模拟的网络, 网络中节点的位置等

  • src: 存放所有源代码, 包括ned文件, C++源文件等

关于所有文件夹的作用看: https://doc.omnetpp.org/omnetpp/manual/#cha:ned-lang

3 定义仿真网络的拓扑结构

使用omnet进行仿真, 我们首先需要去定义网络的拓扑结构

01 新建一个空的 network

src目录下, 我们新建一个network , 选择one item , 此时我们就有了一个网络,当然现在里面什么也没有, 点击Design标签, 可以以GUI的形式查看ned文件当前的内容

02 Module的概念

01-Module的概念

逻辑上, omnet++中的module就相当于C++中的类,并且在模块中可以定义属性,我们用module实例化出来的模块对象, 又可以放到其他的模块中

代码上, omnet++中的module最终就是一个C++中的类,在定义网络的行为时, 我们需要用到他的属性,参数等等

  1. 在omnet中, 网络中的所有东西(如一个节点, 服务器等)都以module形式定义
  • 最低层的模块称为 简单模块(simple Module)
  • 模块可以添加到复合模块(compound module)
  • 模块之间可以相互嵌套, 嵌套的层级没有限制
  • 模块之间可以定义继承关系

一个节点, 很多个节点, 一块网络, 都可以是一个模块
network本质上就是一个复合模块

在这里插入图片描述

02-Module Type的定义步骤

一个模块的定义分为3个步骤

  1. 在ned文件中定义
  2. 使用C++继承omnet的cModule类cSimpleModule类, 定义一个Module类
  3. 将ned文件中定义的Module与C++中定义的Module联系起来
1. ned文件中定义

定义一个复合模块的一般语法如下, 所有的sections都为可选的

module Host
{
   
   types:  //定义模块类型(在submodules中使用),信道类型(在connections中使用)等
       ...
   parameters:  //定义该模块的参数, 如传输速率,节点个数等
       ...
   gates:   // 定义该模块的输入和输出口及个数
       ...
   submodules: // 定义子模块实例
       ...
   connections: // 定义子模块间的链接方式
       ...
}

定义一个简单模块的语法如下:

simple Host
{
   
       ...
   parameters:  //定义该模块的参数, 如传输速率等
       ...
   gates:   // 定义该模块的输入和输出口及个数
       ...
  }
2. C++文件定义

对于简单模块我们继承cSimpleModule
对于复合模块我们继承cModule类, 来定义一个C++ Module类

#include <omnetpp/csimplemodule.h>

class ExampleModule: public omnetpp::cSimpleModule {
   
public:
    ExampleModule();
    virtual ~
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值