OMNet++ 中的 NED 语言学习(1)
January 24th, 2010
No comments
本文是对 OMNet++4.0 中的 NED 语言的学习笔记,其内容来自OMNet++ 4.0 用户手册的第三章第1,2节。
用户需要用NED语言来描述一个仿真模型。NED代表Network Description(网络描述),它让用户声明简单模块(simple modules),从而连接或重组为复合模块(compound modules),或将一些复合模块标记为networks(网络)或自包含(self-contained))的仿真模型。信道是另一个组件类型,它的实例也能使用在复合模块中。
NED的几个特性让它能在大型项目中也具有可伸缩性:
- 分层 复杂的模块作为一个实体,可以分解为更小的模块,从而组成复合模块。
- 基于组件 简单模块和复合模块都是可重用的。
- 接口 接口可以在应该使用模块和信道的地方作为一个占位符(placeholder)存在,而真正的模块或信道类型则可以在网络建立的时候通过参数来决定。例如对于一个复合模型MobileHost,它包含一个拥有IMobility模块接口的mobility子模型,那么类型可以从实现了IMobility接口的RandomWalkMobility,TurtleMobility中来选择。
- 包 采用了类似于Java 的package机制来减少冲突,而ned引入的NEDPATH则类似于Java的CLASSPATH,用于指定依赖关系。
- 内部类型 在复合模块中本地使用的信道类型和模块类型可以在复合模块内部定义,这是为了减少命名空间带来的问题。
- 元数据注解 可以通过添加属性来为模块,信道类型,参数,gates加以注解。仿真核心并不直接使用元数据,但它们能携带为多种工具添加额外的信息,运行时环境,甚至模型中的其它模块。例如,一个模块的图形化表示(图标等)或者提示符及一个参数的测量的元(milliwatt等)都通过元数据注解来指定。
注意 继承,接口,包,内部类型,元数据注解都是在4.0之后才加入的新特性。而且NED语言可以和XML进行相互转化而不会损失数据。
下面通过一个例子来学习NED语言。
本例中的网络由结点组成,每一个结点都有一个以随机间隔时间来生成数据包的应用程序,结点本身也拥有路由功能。这里假设这个应用基于数据报进行通讯,这样就不用考虑传输层。
首先用NED来描述下图所表示的网络:
// 定义了一个名为 Network 的网络,在 NED 语言中,注释的另一个作用是能生成文档。
network Network
{
submodules:
node1: Node; // Node 类型在后面再定义
node2: Node;
node3: Node;
...
connections: // 定义了结点的连接方式:双向,速度为 100Mbps
node1.port++ <--> {datarate=100Mbps;} <--> node2.port++;
node2.port++ <--> {datarate=100Mbps;} <--> node4.port++;
node4.port++ <--> {datarate=100Mbps;} <--> node6.port++;
...
}

评论