无线传感器网络 与 OMNET++学习笔记(二) NED
OMNET++的主要模型拓扑描述语言NED,采用它可以完成一个网络模型的描述。 网络描述包括下列组件:输入申明、信道定义、网络定义、简单模块和复合模块定义。使用NED描述网络,产生NED文件,该文件不能直接被C++编译器使用,需要首先采用OMNET++提供的编译工具NEDC将.NED文件编译成.cpp文件。最后,使用C++编译器将这些文件与用户和自己设计的简单模块程序连接成可执行程序。
Ned描述的组件
输入指示:用于引进其它网络描述文件,引进一个网络描述后,可以使用它所包含的模块通道等组件
import inet.networklayer.configurator.ipv4.HostAutoConfigurator; import inet.node.inet.AdhocHost;
信道定义
-
- ned.IdealChannel(理想情况下)
- ned.DelayChannel(参数delay,disabled 默认flase, =true时信道丢弃所有消息)
- ned.DatarateChannel(参数)
- datarate信道带宽,单位bit/s,kbit/s,Gbit/s。0值表示无限带宽,传输时间为0
- delay
- disabled
- ber误比特率/per误分组率 (double)取值[0,1]默认值0。(基于随机数的信道判定,在分组传世发生错误时,通过分组内设置错误标记,接收模块检查标记。若被标记,丢弃)
channel CustomChannel extends ned.DatarateChannel{ delay = 100us ; ber = 1e-10; datarate = 100Mbps ; }
也可以不使用extends也可以直接定义信道,但是需要一个对应的C++的类。
简单模块和复合模块定义
简单模块:
simple Processor{ parameters: double av ;
.... gates:
input in[];
output out[];
inout port[];
}
复合模块:
module BinaryTree{
parameters:
int count ; gates: submodules:
node[count] :Node{ //Node也是一个定义的简单模块
parameters:
information = "node"
}
connections allowunconnected:
}
网络定义
network Net6 extends BinaryTree{
parameters:
count = 10;
....
}
函数
在NED表达式中,可以使用以下数学函数:
(1)C语言中<math.h>库函数:exp( ),log( ),cos( ),floor( ),ceil( )等等。
(2)产生随机变量的函数:uniform, exponential, normal等等。
(3)使用自己定义,在c++文件中定义函数,然后再NED中使用。
- C++文件
#include <omnetpp.h> double average (double a ,double b){ return (a+b)/2; } Define_ Function (average, 2);
- NED文件
module Compound{ parameters: double a; double b; submodules: proc: Processor{ //前面定义的简单模块 parameters: av = avreage(a,b); } }