OMNeT++ 基础语法:NED 语言

概述

NED 语言用于定义网络模型的拓扑结构,通过对一组元件(信道、模型等)的描述刻画网络模型。对组件的描述可以在其他网络描述中进行复用。

包含网络描述的文件带有 .ned 后缀,在仿真过程中动态载入到模拟程序或使用 NED 编译器/ C++ 代码连接到模拟器执行。

NED 组件

一个 NED 描述包括了以下组件:

NED 包

NED 包的概念与 Java 包类似。当一个仿真运行时,必须告诉仿真内核包的根目录,即源文件夹。仿真内核会遍历整个目录树,然后载入每个目录下的 NED 文件。在目录下可以存在若干 NED 目录树,将它们的根目录(NED 源文件夹)给 NEDPATH 变量里的仿真内核。

NED 源树中的目录和包对应。如果在 <root>/a/b/c 目录下(<root>NEDPATH 里被列出)有 NED 文件,那么包的名称就是 a.b.c。包名称必须在 NED 文件的顶部进行声明,例如:

1
package a.b.c;

目录名后面的包名称必须和已声明的包相符,如果不相符就会出错。

包并不一定强制使用。如果所有的 NED 文件在 NEDPATH 的一个单独目录下时,包声明就可以忽略,因为这些文件被认为放在默认包里。

输入指示

输入指示用于引入其他网络描述文件。当引入其他网络描述后,可以使用该网络描述中包含的模块、信道等组件。例如:

1
import inet.applications.contract.IApp;

信道定义

信道定义用来说明一个连接类型的特征。OMNeT++ 有 3 种最基本的信道类型,分别是 IdealChannelDelayChannelDatarateChannel。其中的参数都是可选择的,且出现的先后顺序没有影响。

ned.IdealChannel

ned.IdealChannel 是理想信道,不含参数,将无时延、无失真地传输信息。

ned.DelayChannel

ned.DelayChannel 包含 2 个参数,分别是:

  • delay:每仿真秒的传输时延,单位为 s/ms/us
  • disabled:默认值为 false。当值为 true 时信道丢弃所有的信息。

ned.DatarateChannel

ned.DatarateChannel 包含 3 个参数,分别是:

  • delay:每仿真秒的传输时延;
  • datarate:信道带宽;
  • berper:比特错误率 ber 或包错误率 per

例如:

1
2
3
channel Channel extends ned.DelayChannel {
delay = 100ms;
}

模块定义

简单模块

简单模块是复合模块的基本构建成分,通过对其参数和门进行申明来定义。其语法规则如下:

1
2
3
4
5
6
simple SimpleModuleName {
parameters:
//...
gates:
//...
}

复合模块

复合模块由一个或多个子模块组成。不管是简单模块还是复合模块都可以当作子模块。在简单模块能使用的任何地方都可以使用复合模块。复合模块相较简单模块多出了子模块和链接两部分。其语法规则如下:

1
2
3
4
5
6
7
8
9
10
module CompoundModule {
parameters:
//...
gates:
//...
submodules:
//...
connections:
//...
}

其中,参数、门、子模块、链接都是可选项。

网络模块

模块声明仅仅定义了模块类型,要得到仿真软件可以运行的模块,需要编写网络模块。网络模块将前面定义的模块类型声明为一个仿真模块实例,且在 NED 文件中可以存在多个网络定义仿真程序。网络模块的定义语法规则如下:

1
2
3
4
5
6
7
8
9
10
network wirelessLan : WirelessLAN {
parameters:
//...
types:
//...
submodules:
//...
connections:
//...
}

模块之间的关系

模块之间的关系

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lgc0208@foxmail.com
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信