omnet学习记录之tictoc1-18

文章介绍了OMNeT++仿真软件中Tictoc系列的多个实例,从基本的模块定义、网络结构、消息传递,到更复杂的消息处理、参数配置、显示优化、日志打印、变量观察、消息删除、自定义消息、多模块连接、数据统计等方面,逐步深入讲解了OMNeT++的使用和仿真过程。

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

最近需要学习omnet这个软件,先从例程开始,记录一下自己的学习过程和一些疑惑的地方,如果有错误的地方,请大家批评指正。也欢迎大家给我解惑,谢谢!(好多对实例的理解是借助网上的帖子)

完整地运行一个OMNeT++仿真程序,需要有.ned、.cc、.ini三个文件,分别表示网络的拓扑结构、运行程序(C++)和网络的运行入口。

下面的部分以tictoc的18个简单实例学习为主。

Tictoc 1

实现了基本的tic和toc 互相发送消息的功能。包含了基本的消息发送方法。

打开tictoc1.ned、txc1.cc。在tictoc1.ned中,可以看到网络的拓扑结构,在点击左下角source后可以看到用NED语言编写的代码;

simple Txc1
{
    gates:
        input in;
        output out;
}

代码中,simple定义了一个简单模块Txc1,该模块包括一个输入门in和一个输出门out。

network Tictoc1
{
    @display("bgb=252,190");
    submodules:
        tic: Txc1;
        toc: Txc1 {
            @display("p=114,61");
        }
    connections:
        tic.out --> {  delay = 100ms; } --> toc.in;
        tic.in <-- {  delay = 100ms; } <-- toc.out;
}

定义了名为Tictoc1的网络,网络包括两个子模块tic与toc(继承自Txc1),connections定义了两个模块之间的连接:tic的out门连接到toc的in门,tic的in门连接到toc的out门;中间加了信道,传输延迟为100ms;

在txc1.cc中,定义了网络之间运行的信息传输以及消息处理方法,代码如下:

using namespace omnetpp;
//Txc1类继承cSimpleModule
class Txc1 : public cSimpleModule
{
  protected:
// 重写初始化函数以及消息处理函数
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};

// The module class needs to be registered with OMNeT++
//所有模块实现时,必须添加Define_Module(xxx)
Define_Module(Txc1);

void Txc1::initialize()
{
// Am I Tic or Toc?
//getName()是获取当前实例的名称,也就是NED中模块实例的名称
    if (strcmp("tic", getName()) == 0) {
        //定义消息,字符串tictocMsg为消息的名称
        cMessage *msg = new cMessage("tictocMsg");
       //发送消息,从out门发送
        send(msg, "out");
    }
}

void Txc1::handleMessage(cMessage *msg)
{
    
    send(msg, "out"); // send out the message
}

using namespace是使用名字空间、strcmp是字符串比较函数,若两个字符串相等,则输出0。其中initialize和handleMessage两个函数分别是初始化和消息处理。Define_Module()是对类和节点进行注册,

右键Run as .ini文件进入仿真界面;点击run即可运行。若要单步运行,可以点击左侧的STEP;若要快速运行,可以点击FAST。结束仿真点击STOP;

Tictoc 2

实现的模块的显示@display

(其中,p:位置 b:形状大小 i:图形 is:图形大小 i2: 小图标 r:显示半径 t:显示文本 tt: 提示)

实现日志的打印输出

(omnet++自带的打印EV)

EV就相当于C++中的cout,在控制台输出,便于调试,例如可以打印某个变量值(如定时器等);注:也可以使用cout,用法如下std::cout << “test”<<std::endl,区别就是使用cout的输出是在工作台,EV输出在仿真界面;

EV << "Sending initial message\n";

EV << "Received message `" << msg->getName() << "', sending it out again\n";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值