OMNeT学习之新建工程

前言

之前学习了OMNeT的安装与运行官方的实例代码,这篇文章记录一下,OMNeT如何创建一个新的项目。
本人为初学者,如有错误望批评指正!

本文原创,创作不易,转载请注明!

新建工程

打开OMNeT的安装根路径,打开mingwenv.cmd,输入omnetpp,打开omnet ide。

左上角 FileNewOMNeT++ Project...,然后输入一个项目名称,然后Next,然后选择 – Empty project with 'src' and 'simulations' folderFinish.


文件目录如下,

新建cc文件

开始我们新建一个cc文件,srcNewSource File

然后在弹出来的界面输入 test.cc 新建一个cc文件来实现简单模块的功能

然后我们输入以下代码:

/** test.cc**  Created on: 2022年4月21日*      Author: Ronglin*/#include <string.h>       //字符串功能函数
//这两行代码固定
#include <omnetpp.h>  //必要的头文件导入
using namespace omnetpp;    //使用命令空间omnetpp/***创建一个test类,此类继承cSimpleModule*在网络中,我们新建的tic和toc模块都是Test1对象 由omnet++在模拟开始时创建*同时我们要重写虚函数initialize()和handleMessage(cMessage *msg)方法*来实现我们的自定义功能*/
class Test1 : public cSimpleModule
{protected:virtual void initialize() override;virtual void handleMessage(cMessage *msg) override;
};//要将Test1类注册到工程中
Define_Module(Test1);/***重写初始化函数*初始化函数主要是实现在一个模块刚创建时要完成的逻辑功能*在本函数中,实现的逻辑功能为*如果本模块的名称为"tic"则创建一条Message并通过out口发送*/
void Test1::initialize()
{if (strcmp("tic", getName()) == 0) {cMessage *msg = new cMessage("tictocMsg");send(msg, "out");}
}
/***此方法主要是当收到消息的时候*本模块应执行的逻辑功能*在本函数中,实现的逻辑功能为*收到消息之后,将消息通过out口发送出去*/
void Test1::handleMessage(cMessage *msg)
{send(msg, "out");
}

简单讲解一下,按照也可以对照注释查看,首先要定义一个类,然后此类要继承自 cSimpleModule类然后重写函数 initialize()handleMessage(cMessage *msg),同时要注意将类注册到omnet中。
写完之后build一遍,菜单栏 – ProjecBuild Project没有报错即可完成。

为了方便复制这里先搞一份没有注释的

#include <omnetpp.h>
using namespace omnetpp;class Test1 : public cSimpleModule
{protected:virtual void initialize() override;virtual void handleMessage(cMessage *msg) override;
};Define_Module(Test1);void Test1::initialize()
{}void Test1::handleMessage(cMessage *msg)
{}

配置文件

然后就是配置文件的修改,主要是两个文件,一个是 omnetpp.ini,还有一个是ned文件,都在 simulations文件夹下。

omnetpp.ini

这个文件需要改的地方比较少,只需要输入网络(Network)名称即可,我这里叫 test_network

package.ned

点开 simulations文件夹下的 package.ned文件,接下来,我们来创建一个网络。

GUI

首先提供GUI模式下的创建网络
点开package.ned,在右侧 Type选择第三个 Network,点击一下,然后鼠标移动到左侧,再点击一下,即可创建出来一个网络。

对着新创建的网络右键,第一个 Properties...,这里可以设置这个网络的名称,图标,位置等等,我们只需要修改一下名称即可,效果如图,此名称要对应omnetpp.ini中的网络名称。

然后就要创建模型,点开下面的 Source,然后输入代码,用来定义模型的门结构

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

然后点回Design ,鼠标点住 Test1 ,往网络中的灰框框拖动,因为需要两个,我们拖动两次。

然后,选中灰框框里边的 Test1,右键 , 第一个 Properties...,只需要更改Name,我这里一个叫tic,一个叫toc
然后建立连接,右侧 paletteConnection,然后点击tic再点击toc,然后选择tic.out-->toc.in,建立了一条从tictoc的连接路线,连接建立后,因为还需要设置延时,选中线,右键,Properties...Type 选择 DelayChannelOK 如图。

然后设置延时时间,选中线,右键 – Parameters... ,然后点击 Value,输入 100ms然后 ok。

因为是tic和toc的双向通信,我们需要连接两次,同理,从toc再点击tic建立双向连接,再设置延迟,完成后如下图:

至此,一个简单的工程创建完毕。

然后点击工具栏的 Run然后弹出来一个新的界面,再点击一次 Run可以看到消息的传递了

Source

有的时候GUI虽然直观但是修改属性找起来很麻烦,直接用代码简单,这里直接附上tictoc1 的 ned代码

//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program.  If not, see http://www.gnu.org/licenses/.
//
simple Txc1
{gates:input in;output out;
}//
// Two instances (tic and toc) of Txc1 connected both ways.
// Tic and toc will pass messages to one another.
//
network Tictoc1
{@display("bgb=641,262");submodules:tic: Txc1 {@display("p=98,146");}toc: Txc1 {@display("p=381,61");}connections:tic.out --> {  delay = 100ms; } --> toc.in;tic.in <-- {  delay = 100ms; } <-- toc.out;
}
simple Test1
{parameters:        //定义该模块的参数gates:            // 定义该模块的输入和输出口
}

总结

OMNeT很强大,但是缺点是网络上能查到的资料太少了,只能一步一步的去自己摸索了。

OMNeT学习之新建工程相关推荐

  1. OMNeT学习之OMNeT安装与运行

    OMNeT学习之OMNeT安装与运行 前言 本文原创,创作不易,转载请注明!!! 本人为OMNet初学者,如有错误,请不吝请教! 最近学WSN(无线传感器网络),做传感器实验,老师强调了仿真平台Mat ...

  2. 2022-04-21 Omnet学习笔记(一)

    Omnet学习笔记(一) 前言 1.本机为Inspiron 5005,为64位,所用操作系统为Windos 10.所使用软件为Omnet-5.2.1. 2.推荐Omnet入门教程系列 实验现象 在网络 ...

  3. SpringMVC学习笔记-新建工程及一些注意事项

    1.学习网站 :B站狂神说 狂神说的文档链接:https://mp.weixin.qq.com/s/8ddT6FD0Y4f3XdbEz0aqpQ 2.新建SpringMVC工程 (我的是IDEA202 ...

  4. omnet学习记录之tictoc1-18

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

  5. OMNeT++学习(概述+框架)一

    中文手册地址 之前一直学习的是mininet,但是所做的方向有一个开源的代码,和我需要的框架一样,它用的仿真器是Omnetpp-5.4.1. 概述 omnet++是开源的基于组件的模块化的开放网络仿真 ...

  6. OMNET++学习(Network Node)

    在本次学习中,我们将研究这些节点模型的内部结构,以便更深入地了解它们的定制可能性,并对如何组装定制节点模型给出一些指导. Ingredient 节点模型由其他模块组装而成,这些模块代表了应用程序.通信 ...

  7. PCB入门学习1 新建工程(AD22)

    目录 一 新建工程 二 原理图库 三 原理图 四 PCB 学习pcb设计的第一天:==== 一 新建工程 新建一个项目之后需要新建原理图.原理图库.pcb.pcb库这四部分,每新建一个先保存再进行之后 ...

  8. stm32学习之新建工程

    新建一个文件夹Template,再新建一个子文件夹USER 打开keil5,Project –>New Uvision Project 定位到USER文件夹,随便取个工程名 弹出选择芯片类型 我 ...

  9. Android学习起步 - 新建工程及相关

    新手起步迷迷糊糊,以下记录迷惑之处,大家共勉!!! 1.创建安卓应用工程 选择Andriod Application Project 点下一步直到完成. 二.下面是新建工程注意的地方 (1)首选删除系 ...

最新文章

  1. 第五天学习Java的笔记(if,switch顺序结构)
  2. jquery数组(排序)
  3. 科技复原,让 3000 多前年的木乃伊「发声」
  4. 函数作用域导致的问题
  5. python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
  6. 讲述华为发布鸿蒙系统,华为鸿蒙系统正式版首批升级名单公布:这8款机型用户有福了!...
  7. cocos2d-x 学习资料(很全)
  8. jQuery+CSS3实现404背景动画特效【转】
  9. 搭建LAMP环境的过程详细总结
  10. 1137.第N个泰波那契数
  11. 好的设计善于利用PSD模板,轻松搞定促销海报!
  12. linux tab的含义,理解Linux中crontab定时器里的 21 含义 - 金牛座, 爬山虎, PHPCreeper, Workerman, Swoole, PHP爬虫引擎, PHP爬...
  13. 决策树剪枝算法(二)
  14. Bailian2721 忽略大小写比较字符串大小(POJ NOI0107-16)【字符串】
  15. 98版五笔字型实用学习教程
  16. matlab绘制二元一次函数图像_基于MATLAB的数学图像绘制
  17. WebSocket多人聊天室
  18. OpenCV2.4.13 文本分割(水平垂直,直方图投影)
  19. 黑群号 阿里云 frp
  20. 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)

热门文章

  1. 【探索】停止线程和暂停线程
  2. 焊接材料的性能及无铅焊锡的应用
  3. Macromedia Captivate
  4. iOS开发 下载历史版本Xcode 下载历史版本OSX系统等
  5. strace简单介绍
  6. php–strace,关于strace
  7. 智慧新零售时代 让数字化赋能会员营销
  8. 面向自动驾驶的定位方法综述
  9. 50份高质量个人简历模板,刚毕业的同学,赶紧收藏起来
  10. 微信公众平台开发之MySql数据库+关键词回复-php语言(三)