没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第二章 OMNeT++ TicToc 教程
概述
这是一个简短的教程,通过一个建模和仿真的实例来引导你入门,同时向你介绍一些
广泛使用的 特性。
本教程基于一个简单 的 仿真样例 , 该 样例保存 在 安装目 录 下 的
子目录,所以你现在可以试着让这个样例运行,运行样例有两种方式:
一是直接在 下 到 ,输入 即可;
另一种是在 下输入 进入 在左侧的 窗口下显示了
目录下的工程样例(如果没有,则通过 !—"#$%&—"$ 来切换工
作空间,注意每次切换 %& 将使 重启),找到 案例,右键依次选择
, '( , )( *—")( +,( 在 窗 口 左 侧 一 个
(右侧 为 的 -. 选 +) 选
/ 之后点击 )(,最后右键 )(*0)(#( 即可运行。
为了使读者更容易学习此样例,这里所有的源代码都交叉链接到 * 文档。
如果你跟着以下的步骤一步一步走,你将会收获很大。
目录
1.入门
2.改进型的两节点 TicToc
3.模拟真实网络
4.增加统计收集
5.通过 Plove 和 Scalars 进行结果可视化
2.1 入门: Tictoc1:两个简单节点
由于 最常见的应用领域是电信网络的仿真,我们就从这开始我们的主题。首
先,让我们来考虑一个包含两个节点的“网络”,节点所做的事情非常简单就是:一个节点
创建数据包,然后这两个节点将该数据包来回传送,我们把这两个节点分别称之为“”和
“”。从零开始——实现你的第一个仿真的步骤:
我们建议在 下开始:
首先,开发环境选择(的视图,这是开发的最优环境,在这个视图
下 有 好 多 针 对 的 专 有 菜 单 项 。 打 开 过 程 : %1" 1
"(。
新建一个的工程,取名为2以防与样例在同一工作空间,不允许重名3:
!1"1"。
接着我们要为我们的网络编写一个文件来描述该样例网络。拓扑文件是标识网络
节点及其链路的文本文件,语言主要是用来描述仿真模型结构右键点击1"1
"! , 新 建 一个 文件 , 命 名为 4 , 选 *
& 我们对它取名为 4,有两种编辑方式,可视化以及代码方式,我们在这里
利用代码方式:
!"#$
!% &"'(
')'*+,-".*"//".
0$1''
$2
3
4445
44444446
44444446
7
$2 的两个实例 $ 和 $ 相互链接
$ 和 $ 将相互传送消息
8#$$2
3
444)'5
4444444$5$26
4444444$5$26
444$$5
4444444$%%934':2 67%%9$6
4444444$;%%34':2 67;%%$6
7
最好从下往上看,意思如下:
56117.6(8911" 56117.911"4 是一个包含两个子模块的网络, 和
。这两个模块都是一个称做 4 的简单模块类型的实例。我们把 的输出门
2(3连到 的输入门23,反过来也一样2&:;:<3 。每个链路上会有
4== 的传播延迟。
56117.6(8911" 56117.911" 4 是一个简单模块类型2这意味着是 描述
的一个基本单位,在 层上是具有原子性的,并通过 +实现3。 4 有一个叫
做 的输入门和一个叫做 ( 的输出门。2:;:<3。
>现在我们需要实现简单模块 4 的功能,通过写一个 +文件2 43来完成。右键
点击 1"1"!新建一个文件,命名为 4:
!"#$
!% &"'(
')'*+,-".*"//".
0$1''
<$';9
<$';9
$$25)$$'
3
4$'5
444以下重新定义的虚函数带有算法
444=='>6
444==''$?6
76
4
该模块类需要向 注册
@A'$26
4='$255>
3
444+> 在仿真的开始被调用
444为了引导$%$%$%$过程B其中的一个模块需要先发送一个消息,设置 $ 先发送
4 判断我是 $ 还是 $
444$C$CB::
4443
444444在输出门产生并发送第一个消息,C$$C是一个任意的字符串代表消息对象的名
字
4444444$?:8$C$$C6
4444444'BCC6
7
7
='$255'$?
3
444当消息到达模块的时候 '方法被调用,在此,我们仅仅把消息通过输出门发
送到另一个模块,由于 $ 和 $ 对消息的处理相同,所以信息就在两个模块之间不停地反弹。
44 4'BCC6
7
名为 4 的 +类描述了 4 简单模块类型,该类是 #( 的一个子类,并通
过 ,?(23宏向 注册。我们对其中的 @23和 $23函数进
行重载。这两个函数将被仿真内核调用:其中初始化函数 @23只会被调用一次,而
$23则在每次消息到达模块时被调用。
在初始化函数中我们创建了一个消息对象23并通过输出门 ( 对外发送。因为
该门连接到其他模块的输入门,所以仿真内核将会把 $23函数参数中携带的这
个消息传递给其他模块。该消息将会在 文件中指派给链路的 4== 传播延迟后到达。
其他模块收到后同样将该消息送回2仍然经过 4== 的延迟3,所以整个过程就像一个永不
停歇的乒乓球一样。
在 中, 所 有 的消息 2 数 据 包、帧、 任 务 等 3 和事件 2 定时、超 时 3 都通过
对象2或它的子类3描述。一旦它们被送出或者被调度,就会被仿真内核放在”已调
度事件”和”未来事件”列表中,直到时钟来临,再通过 $23传递到相关模块。
要注意到在本仿真样例中,并没有内建停止条件,也就是说,仿真会一直进行下去。
你可以从 A- 图形界面停止它。2你也可以在配置文件里指定一个仿真时间限制或者 +- 时
间限制,但在本教程里我们并没有这样做3。
B现在我们来创建一个 &, 来帮助我们对程序进行编译和链接,并创建一个可执
行的 :在 下 到 目录,输入
DA##
这条命令将会在 工作目录下产生一个 &, 文件。
注意:对于 %#C+ 的用户,命令是 ?&&,它将创建 &,。
D.现在我们来编译和链接我们的第一个仿真实例,运行如下命令:
D#
注意:对于 %#C+ 的用户,键入 &E.&,。如果提示说 & 命
令既非内部命令也非外部命令…,那你需要在 #C+ 目录下找到 >FG,然后在你想
要编译的每个命令窗口运行它。(.
H如果你现在就运行编译之后产生的可执行程序,将会提示找不到 配置文
件,所以你需要手动建立一个。 将告诉仿真程序你想要仿真何种网络2同个仿真
程序可以支持同时仿真几种网络(.3,你可以将参数传递给模块、显式指定随机数产
生器的种子等。
右键点击 新建一个文件,选择&为 ,,$。在
这里,我们同样选择代码方式创建如下简单的 文件:
[General]
network = tictoc1
在 F 及其之后的步骤里, 的文件都是这样的:
# This file is shared by all tictoc simulations.
# Lines beginning with `#' are comments
[General]
# nothing here
[Config Tictoc1]
network = Tictoc1
[Config Tictoc2]
network = Tictoc2
[Config Tictoc3]
network = Tictoc3
[Config Tictoc4]
network = Tictoc4
Tictoc4.toc.limit = 5
[Config Tictoc5]
network = Tictoc5
**.limit = 5
[Config Tictoc6]
network = Tictoc6
[Config Tictoc7]
network = Tictoc7
# argument to exponential() is the mean; truncnormal() returns values from
# the normal distribution truncated to nonnegative values
Tictoc7.tic.delayTime = exponential(3s)
Tictoc7.toc.delayTime = truncnormal(3s,1s)
[Config Tictoc8]
network = Tictoc8
[Config Tictoc9]
network = Tictoc9
[Config Tictoc10]
network = Tictoc10
[Config Tictoc11]
network = Tictoc11
[Config Tictoc12]
剩余35页未读,继续阅读
资源评论
- shenj12042016-03-22毕业设计用的这个。感觉还不错
- njuptliu2012-04-11看了,和手册上的差不多,不过里面的改动还是挺有趣的!谢谢分享!
- mablewml2011-11-14初学者很有用...看不习惯英文版的童鞋可以看这个~
coffeevoice
- 粉丝: 27
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功