veins车载通信仿真框架(3)--OMNET++基础

OMNET++是veins车载通信仿真框架学习过程中,必须要掌握的,之前自己也没有对其进行系统的学习,在这里只是简单对其进行介绍,并通过网上学习的例子进行讲解,使大家大体对其有一个了解。

OMNET++介绍

OMNET++是一款面向对象的离散时间网络模拟器,它主要由如下几个部分组成:

网络拓扑描述文件:定义网络拓扑结构 .ned文件

消息定义文件:定义消息成员变量等

简单模块源:简单模块的行为定义文件.cc和.h文件

仿真内核:OMNET提供的仿真类库

用户接口:用于仿真运行时调试,演示

简单的文字描述,估计大家根本无法明白到底是什么意思,下面用一个例子来进行一个简单网络的仿真。

简单例子

1.新建项目:

点击左上角 File-->New-->OMNET++ Project填写项目名字(Project name):MyFirstProject,点击next选择Empty project-->finish,这样在左侧Project Explorer 就会出现MyFirstProject项目;

veins车载通信仿真框架(3)--OMNET++基础_第1张图片


通常情况下一个项目需要拥有如下三类文件:

网络描述文件.ned文件

网络定义文件C++文件

网络初始化文件.ini文件

下面就建立上面的三类文件

2.建立.ned网络描述文件

项目点击右键new-->Simple Module 在File name 中填写文件名:simpleNetwork.ned,点击finish,选在项目中就会出现simpleModule.ned文件和对应的.cc和.h文件;

2.1建立简单模块

双击SimpleNetwork.ned模块,在Types中选择第一个(Simple Module--Create a simple module type)在左边生成一个简单模块,并右键修改名字SimpleModule和相应属性,点击在文本框右下角的Source,在文件中写入如下内容:

simple SimpleModule
{
    gates:
        input in;//添加一个接收门
        output out;//添加一个发送门
}

其中门(gates)实现模块的连接,OMNET++支持单向的简单线路,因此有输入门和输出门,消息从输出门发出,在输入门接收。

veins车载通信仿真框架(3)--OMNET++基础_第2张图片

2.2建立网络

项目点击右键new-->Network description Files建立network.ned文件,在Types中选择第三个Network在左侧生成Network,同样右键属性修改相应内容,如名字,并将左侧在2.1生成的简单模块拖入network中右键属性修改模块名称,点击左侧Connection,连接各个模块,得到如下网络结构:

veins车载通信仿真框架(3)--OMNET++基础_第3张图片

在source中代码如下:

network Network
{
    @display("bgb=349,329");
    submodules:
        s1: SimpleModule {
            @display("p=51,76");
        }
        s2: SimpleModule {
            @display("p=261,76");
        }
        s3: SimpleModule {
            @display("p=160,230");
        }
    connections:
        s1.out --> {delay=100ms;} -->  s2.in;
        s2.out --> {delay=100ms;} -->  s3.in;
        s3.out --> {delay=100ms;} -->  s1.in;
}

其中{delay=100ms;}代表消息传输延迟100ms发送

3 定义.cc文件

打开simpleModule.cc文件;会发现里面有

void SimpleModule::initialize()和void SimpleModule::handleMessage(cMessage *msg)两个函数,第一个为初始化函数,其含义为该模块初始化时所需要执行的操作,第二个为消息处理函数,当该模块收到消息后所需要执行的操作,编写内容如下:

#include "simpleModule.h"

Define_Module(SimpleModule);

void SimpleModule::initialize()
{
    // TODO - Generated method body
    if (strcmp("s1", getName()) == 0) {
              cMessage *msg = new cMessage("spMsg");
              send(msg, "out");
    }

}

void SimpleModule::handleMessage(cMessage *msg)
{
    // TODO - Generated method body
    send(msg, "out"); // send out the message
}

在initialize()中的if条件语句表达式含义为在初始化过程中,当该模块名字为s1时,就要生成消息msg,并通过函数send()将该消息通过发送门out发送出去;

在handleMessage()中表达的含义为一旦从接收门接收到消息后,该模块所需要执行的操作(代码内容为将消息从发送门发送出去)

4 网络初始化.ini文件

右键项目new-->Initialization File(ini)生成文件omnetpp.ini文件,打开该文件,点击文本框左下角Source,输入网络名network=Network

最后右键项目,点击Build Project,最后右键omnetpp.ini-->run as-->OMNet++ simulation,运行该项目

veins车载通信仿真框架(3)--OMNET++基础_第4张图片

总结

通过上面简单例子的介绍需要了解到:.ned文件是负责生成简单模块及网络,.cc和.h文件是对简单模块行为进行定义,.ini文件是网络初始化文件,在veins中图通过这几种类型文件的理解,对其仿真环境进行一点点的学习

你可能感兴趣的:(veins车载通信仿真框架(3)--OMNET++基础)