OMNeT学习之新建工程

2023-10-13 22:32
文章标签 学习 工程 新建 omnet

本文主要是介绍OMNeT学习之新建工程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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学习之新建工程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/206300

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss