OMNET++

一、信道

  信道封装了一些与连接相关联的行为和参数。预定义的类型:ned.IdealChannel, ned.DelayChannel和ned.DatarateChannel。ned是包的名字。

IdealChannel

理想型信道,无延时无失真地传输

DelayChannel

有两种参数:

Delay:double类型,代表时延

Disabled:bool类型,默认值false,当被设定为true时,信道所有消息会被丢弃

DatarateChannel

除了Delay,Disabled参数还有些附加参数:

Datarate:double型,代表信道的带宽,单位是bit/s,kbit/s,Gbit/s

ber/per:分别表示误比特率和误分组率

例子:

channel  C extends ned.DatarateChannel

{

  datarate=100Mbps;

  delay=10μs;

  ber=1e-10;

}

channel DatarateChannel2 extends ned.DatarateChannel

{

  double length@unit(m);

  delay=this.length/200000km*1s; //基于长度的传播时延

}

channel Backbone extends ned.DatarateChannel

{

  @backbone;

  double cost= default(1); //增加cost参数,可被路由计算法则观察到,并用来做路由选择

}

二、参数

1.值

  参数可以从几个地方获取值:NED代码中,配置文件(omnetpp.ini),甚至是从和用户的交互过程中。

eg:

module Node

{

  submodules:

    app;App{

      sendIaTime=3s;

      packetLength=1024B;//B=byte

      }

      …

}

在ini文件中赋的值不能覆盖NED中的赋的值;只要涉及ini文件,就等同于硬编码。硬编码:就是将数据直接写入到代码中进行编译开发,比如在没有mybatits前,将sql语句写入到jdbc代码里,再比如纯jsp开发的过程中,将前端的html代码与java代码耦合,这都是硬编码,如果要发生更改的问题,就需要更改源代码,如果是C/S开发,客户端的软件需要重新下载安装,非常不合理。硬编码就是什么都在你的程序代码里面写死了,你想稍微修改一下效果,都得修改你的代码。举个例子:比如说你做个软件,他有菜单栏,你如果把菜单的标题全部写在代码里,那如果现在要换英文的,你就不得不改变代码。)

假如参数在NED文件中没有被赋值,可以用以下方法:**.sendIaTime=100ms(代码适用于所有名sendIaTime的参数,无论这些参数属于哪个模块,用**代替详细的描述可以写出多选的赋值。)

也可以写入包括随机表达式的公式:**.sendIaTime=2s+exponential(100ms)

如果在ini文件中没有赋值,就会应用默认值。如果没有默认值提供给仿真程序,将对用户进行访问。

2.表达式

公式可以用于模块参数、门向量、模块向量尺寸(sizeof)和当前模块在在子模块向量中的索引(index)。

3.volatile

相应参数值的表达式在每次被读时都应该被重新评估。

volatile int i=10;
int a = i;
...
// 其他代码,并未明确告诉编译器,对 i 进行过操作
int b = i;
volatile 指出 i 是随时可能发生变化的,每次使用它的时候必须从 i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在 b 中。

4.单位

5.XML参数

 

OMNET++

上一篇:JSON


下一篇:2020最新PHP面试100题(一)