OMNeT学习之新建工程
OMNeT学习之新建工程
前言
之前学习了OMNeT的安装与运行官方的实例代码,这篇文章记录一下,OMNeT如何创建一个新的项目。
本人为初学者,如有错误望批评指正!
本文原创,创作不易,转载请注明!
新建工程
打开OMNeT的安装根路径,打开mingwenv.cmd
,输入omnetpp
,打开omnet ide。
左上角 File
– New
– OMNeT++ Project...
,然后输入一个项目名称,然后Next
,然后选择 – Empty project with 'src' and 'simulations' folder
– Finish
.
文件目录如下,
新建cc文件
开始我们新建一个cc文件,src
– New
– Source 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一遍,菜单栏 – Projec
– Build 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
。
然后建立连接,右侧 palette
– Connection
,然后点击tic
再点击toc
,然后选择tic.out-->toc.in
,建立了一条从tic
到toc
的连接路线,连接建立后,因为还需要设置延时,选中线,右键,Properties...
– Type
选择 DelayChannel
– OK
如图。
然后设置延时时间,选中线,右键 – 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学习之新建工程相关推荐
- OMNeT学习之OMNeT安装与运行
OMNeT学习之OMNeT安装与运行 前言 本文原创,创作不易,转载请注明!!! 本人为OMNet初学者,如有错误,请不吝请教! 最近学WSN(无线传感器网络),做传感器实验,老师强调了仿真平台Mat ...
- 2022-04-21 Omnet学习笔记(一)
Omnet学习笔记(一) 前言 1.本机为Inspiron 5005,为64位,所用操作系统为Windos 10.所使用软件为Omnet-5.2.1. 2.推荐Omnet入门教程系列 实验现象 在网络 ...
- SpringMVC学习笔记-新建工程及一些注意事项
1.学习网站 :B站狂神说 狂神说的文档链接:https://mp.weixin.qq.com/s/8ddT6FD0Y4f3XdbEz0aqpQ 2.新建SpringMVC工程 (我的是IDEA202 ...
- omnet学习记录之tictoc1-18
最近需要学习omnet这个软件,先从例程开始,记录一下自己的学习过程和一些疑惑的地方,如果有错误的地方,请大家批评指正.也欢迎大家给我解惑,谢谢!(好多对实例的理解是借助网上的帖子) 完整地运行一个O ...
- OMNeT++学习(概述+框架)一
中文手册地址 之前一直学习的是mininet,但是所做的方向有一个开源的代码,和我需要的框架一样,它用的仿真器是Omnetpp-5.4.1. 概述 omnet++是开源的基于组件的模块化的开放网络仿真 ...
- OMNET++学习(Network Node)
在本次学习中,我们将研究这些节点模型的内部结构,以便更深入地了解它们的定制可能性,并对如何组装定制节点模型给出一些指导. Ingredient 节点模型由其他模块组装而成,这些模块代表了应用程序.通信 ...
- PCB入门学习1 新建工程(AD22)
目录 一 新建工程 二 原理图库 三 原理图 四 PCB 学习pcb设计的第一天:==== 一 新建工程 新建一个项目之后需要新建原理图.原理图库.pcb.pcb库这四部分,每新建一个先保存再进行之后 ...
- stm32学习之新建工程
新建一个文件夹Template,再新建一个子文件夹USER 打开keil5,Project –>New Uvision Project 定位到USER文件夹,随便取个工程名 弹出选择芯片类型 我 ...
- Android学习起步 - 新建工程及相关
新手起步迷迷糊糊,以下记录迷惑之处,大家共勉!!! 1.创建安卓应用工程 选择Andriod Application Project 点下一步直到完成. 二.下面是新建工程注意的地方 (1)首选删除系 ...
最新文章
- 第五天学习Java的笔记(if,switch顺序结构)
- jquery数组(排序)
- 科技复原,让 3000 多前年的木乃伊「发声」
- 函数作用域导致的问题
- python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
- 讲述华为发布鸿蒙系统,华为鸿蒙系统正式版首批升级名单公布:这8款机型用户有福了!...
- cocos2d-x 学习资料(很全)
- jQuery+CSS3实现404背景动画特效【转】
- 搭建LAMP环境的过程详细总结
- 1137.第N个泰波那契数
- 好的设计善于利用PSD模板,轻松搞定促销海报!
- linux tab的含义,理解Linux中crontab定时器里的 21 含义 - 金牛座, 爬山虎, PHPCreeper, Workerman, Swoole, PHP爬虫引擎, PHP爬...
- 决策树剪枝算法(二)
- Bailian2721 忽略大小写比较字符串大小(POJ NOI0107-16)【字符串】
- 98版五笔字型实用学习教程
- matlab绘制二元一次函数图像_基于MATLAB的数学图像绘制
- WebSocket多人聊天室
- OpenCV2.4.13 文本分割(水平垂直,直方图投影)
- 黑群号 阿里云 frp
- 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)