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); } }