OMNeT学习之新建工程

article/2025/7/20 11:34:35

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很强大,但是缺点是网络上能查到的资料太少了,只能一步一步的去自己摸索了。


http://chatgpt.dhexx.cn/article/Pn8kLap0.shtml

相关文章

omnet++ 之aloha示例 的动画效果分析

void Host::refreshDisplay() const {cCanvas *canvas getParentModule()->getCanvas();const int numCircles 20;const double circleLineWidth 10;// 第一次使用时候创建&#xff1a;如果没有传输波形图&#xff0c;则创建一个圆环内部填色&#xff0c;创建20个圆环&am…

【OMNeT+INET】详解OMNeT开源库INET(一)

1、前言 在我看来&#xff0c;网络模拟器是用于评估目标系统性能和能力的方便工具&#xff0c;不同的设计方案&#xff0c;在不同的配置下不同的操作条件和运行场景下&#xff0c;可以用于帮助理解系统并获得与性能相关的参数&#xff08;例如吞吐量、延迟、稳定性、健壮性和可…

omnet结果分析anf文件

运行omnet项目,在result文件夹里生成vec 和sca 文件。这两个文件是模拟的统计信息。 我们下面来进行结果分析,首先要新建一个.anf 的分析文件。(直接双击vec文件系统会提示新建一个anf文件,finish)Finish 之后,把左侧result 文件夹里面所有的.sca、.vec 文件拖到Input fi…

一些OMNET使用心得

一些菜鸡学习心得&#xff0c;如果有错的话希望大佬能帮忙指出&#xff0c;感激不尽&#xff01;&#xff01; &#xff08;底层组织结构是大佬帮忙写的&#xff0c;感谢大佬带入门&#xff09; 项目组织 \prj \prjname \simulation \results package.ned omnet.ini n…

OMNET的安装说明

1.安装MingGW GCC编译环境的安装程序 1.下载安装包&#xff1a; http://www.mingw.org/download/installer 2.自动弹出一个窗口 3.选择下载  左栏选中basic Setup&#xff0c;右栏选中GCC和G&#xff0c;选择的方式右键 Mark for Installation 4.下载成功  点击菜单栏的In…

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

Omnet学习笔记&#xff08;一&#xff09; 前言 1、本机为Inspiron 5005&#xff0c;为64位&#xff0c;所用操作系统为Windos 10。所使用软件为Omnet-5.2.1。 2、推荐Omnet入门教程系列 实验现象 在网络Tictoc1中创建两个节点&#xff0c;分别命名为"tic"和"t…

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

中文手册地址 之前一直学习的是mininet&#xff0c;但是所做的方向有一个开源的代码&#xff0c;和我需要的框架一样&#xff0c;它用的仿真器是Omnetpp-5.4.1。 概述 omnet是开源的基于组件的模块化的开放网络仿真平台。是离散事件仿真器&#xff0c;具备强大完善的图形界面…

OMNeT学习之OMNeT安装与运行

OMNeT学习之OMNeT安装与运行 前言 本文原创&#xff0c;创作不易&#xff0c;转载请注明&#xff01;&#xff01;&#xff01; 本人为OMNet初学者&#xff0c;如有错误&#xff0c;请不吝请教&#xff01; 最近学WSN(无线传感器网络)&#xff0c;做传感器实验&#xff0c;老…

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

文章目录 omnet1 网络仿真软件综述01 wsn仿真软件02 为什么使用omnet03 学习资料04 目标 2 omnet介绍1 omnet安装与启动2 使用omnet仿真的一般步骤3 新建项目 3 定义仿真网络的拓扑结构01 新建一个空的 network02 Module的概念01-Module的概念02-Module Type的定义步骤1. ned文…

无图无真相!设计模式概览

设计模式太多&#xff0c;最近没有更新&#xff0c;最后想想还是看一点更新一点吧。

Mac系统Safari浏览器启动无图模式

有的时候我们用热点上网&#xff0c;图片的出现会消耗大量的流量&#xff0c;这时候就需要启动无图模式不加载图片。 步骤&#xff1a;启动Safari浏览器->偏好设置->高级->勾选“在菜单栏中显示“开发”菜单”->点击开发菜单->勾选“停用图像” 转载于:https://…

无图无真相!工厂模式结构

抽象类工厂模式结构图&#xff1a; 接口类工厂模式结构图&#xff1a; 工厂模式示例代码 工厂静态方法说明

设计模式之代理模式(Proxy Pattern)

1.概念 为其他对象提供一种代理&#xff0c;以控制对这个对象的访问。代理对象起到中介作用&#xff0c;可去掉功能或者增加额外功能。 2.角色 抽象主题角色&#xff08;Subject&#xff09;&#xff1a;声明了目标对象和代理对象的共同接口&#xff0c;这样一来在任何可以使用…

树莓派4B配置Selenium库+设置无图无头属性

写一个树莓派4B配置selenium库&#xff0c;并成功调用浏览器进行自动化爬虫 本文会手把手教你配置环境&#xff0c;并带你写第一个selenium爬虫程序 使用版本说明 系统&#xff1a;官网2020-02-13-raspbian-buster-full Python&#xff1a;树莓派自带的3.7.3 以下所有的pip操…

屏蔽图片的chrome插件

有时候觉得CSDN博客的广告好烦啊&#xff0c;还有有些看小说的网站&#xff0c;于是找了个屏蔽图片的插件。 效果如图&#xff1a; 之前博客的广告 之后&#xff1a; CSDN的广告有字&#xff0c;所以不会完全不显示&#xff0c;但是有很多小说网站都可以直接全部屏蔽掉…

python selenium playwright库使用教程 破解网页防止开发者模式 截取数据请求

安装chromedriver 下载 chromedriver的版本一定要与Chrome的版本一致&#xff0c;不然就不起作用。 有两个下载地址&#xff1a; 1、http://chromedriver.storage.googleapis.com/index.html 2、CNPM Binaries Mirror 当然&#xff0c;你首先需要查看你的Chrome版本&…

360浏览器,怎么开启无图片模式,在开热点的时候,省流量

如果某些网站&#xff0c;我需要加载图片&#xff0c;如csdn上传图片的时候。 这时候我们需要进行放权&#xff1a;

【Playwright】关于无痕模式与无头模式

Playwright的无头模式和无痕模式 无头模式 无头模式指的是自动测试框架在执行过程中不打开浏览器窗口的功能。在Playwright中&#xff0c;关闭无头模式会在测试代码执行过程中显示浏览器窗口&#xff0c;执行的过程会显示在浏览器的上。 # 以下代码以Playwright的同步API为例…

爬虫之selenium开启无界面模式

绝大多数服务器是没有界面的&#xff0c;selenium控制谷歌浏览器也是存在无界面模式的&#xff08;又称之为无头模式&#xff09; 开启无界面模式的方法 实例化配置对象 options webdriver.ChromeOptions()配置对象添加开启无界面模式的命令 options.add_argument("--he…

locust入门 -6 无图模式和分布式执行

无图模式 无图模式即不通过UI界面进行执行locust测试用例。locust提供了命令参数&#xff0c;我们只需要在执行时添加一个--headless标签即可 “Disable the web interface, and start the test immediately. Use -u and -t to control user count and run time ” 以下内容为…