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

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

MyBatisX逆向工程的实现示例

《MyBatisX逆向工程的实现示例》本文主要介绍了MyBatisX逆向工程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录逆向工程准备好数据库、表安装MyBATisX插件项目连接数据库引入依赖pom.XML生成实体类、

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

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

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口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