您的位置:首页 > 其它

NS2中tcl脚本文件分析(转)

2012-06-20 10:38 531 查看

NS2中tcl脚本文件分析(转)

文件来源是NS2自带的simple-wireless.tcl(~ns\tcl\ex\simple-wireless.tcl):
# 定义选项,设定模拟需要的一些属性。

set val(chan) Channel/WirelessChannel ;# 无线信道类型

set val(prop) Propagation/TwoRayGround ;# 无限信号传输模型

set val(netif) Phy/WirelessPhy ;# 物理层类型

set val(mac) Mac/802_11 ;# MAC层类型

set val(ifq) Queue/DropTail/PriQueue ;# 接口队列类型

set val(ll) LL ;# 链路层类型

set val(ant) Antenna/OmniAntenna ;# 天线类型

set val(ifqlen) 50 ;# 队列长度

set val(nn) 2 ;# 移动节点个数

set val(rp) DSDV ;# 路由协议

set val(x) 500 ;# 拓扑的X尺寸

set val(y) 500 ;# 拓扑的Y尺寸

# 主程序

# 初始化全局变量

#

#建立一个Simulator对象的实例并赋值给变量ns_

set ns_ [new Simulator]

#打开一个名为simple.tr的文件(若不存在,则创建),设定文件可写,变量tracefd指向该文件

set tracefd [open simple.tr w]

#调用Simulator类的trace-all方法将整个模拟过程写入simple.tr的Trace文件中

$ns_ trace-all $tracefd

set namtracefd [open simple.nam w]

#在拓扑范围内建立无线nam跟踪

$ns_ namtrace-all-wireless $namtracefd $val(x) $val(y)

#建立一个Topography对象,该对象会保证节点在拓扑边界范围内运动

set topo [new Topography]

#设定模拟所采用的场景的长宽尺寸

$topo load_flatgrid $val(x) $val(y)

#

# 建立一个God对象。God对象主要用来对路由协议做性能评价,它存储了节点总数,节点间最短路径等信息。节点的MAC对象会调用God对象,因此即使不使用也仍然要建立此对象。

#

create-god $val(nn)

#

# 建立指定数目[$val(nn)]的移动节点并将它们连接至信道。

# 这里建立了两个节点: node(0),node(1)

# 配置节点

$ns_ node-config -adhocRouting $val(rp) \

-llType $val(ll) \

-macType $val(mac) \

-ifqType $val(ifq) \

-ifqLen $val(ifqlen) \

-antType $val(ant) \

-propType $val(prop) \

-phyType $val(netif) \

-channelType $val(chan) \

-topoInstance $topo \

-agentTrace ON \

-routerTrace ON \

-macTrace OFF \

-movementTrace OFF

#建立两个节点,关闭节点的随机运动功能,即节点的运动完全有程序指定

for {set i 0} {$i < $val(nn) } {incr i} {

set node_($i) [$ns_ node]

$node_($i) random-motion 0 ;

}

#

# 为移动节点指定初始的X,Y坐标,此处Z坐标为0

#

$node_(0) set X_ 5.0

$node_(0) set Y_ 2.0

$node_(0) set Z_ 0.0

$node_(1) set X_ 390.0

$node_(1) set Y_ 385.0

$node_(1) set Z_ 0.0

# 下面产生一些简单的运动

# Node_(1)在50.0s,以15.0m/s的速度向坐标(25.0,20.0)运动

$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"

# Node_(0)在10.0s,以1.0m/s的速度向坐标(20.0,18.0)运动

$ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0"

# Node_(1)在100.0s,以15.0m/s的速度向坐标(490.0,480.0)运动

$ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0"

#设置节点间的流量

#创建一个TCP源代理对象tcp

set tcp [new Agent/TCP]

#class_是agent类中定义的整型变量,用于分类,之后可用于着色。此程序无用。

$tcp set class_ 2

#创建分组的接收代理对象sink

set sink [new Agent/TCPSink]

#将源代理对象tcp绑定到节点0

$ns_ attach-agent $node_(0) $tcp

#将接收代理对象sink绑定到节点1

$ns_ attach-agent $node_(1) $sink

#在源代理对象tcp和接收代理对象sink之间建立连接

$ns_ connect $tcp $sink

#在TCP连接上创建一个FTP流量模拟器,因为TCP不会产生自己的流量

set ftp [new Application/FTP]

$ftp attach-agent $tcp

#在10.0s启动ftp流量模拟器

$ns_ at 10.0 "$ftp start"

#

#模拟结束时告知节点

#

for {set i 0} {$i < $val(nn) } {incr i} {

#在模拟结束前(150.0s)重置节点中的所有对象

$ns_ at 150.0 "$node_($i) reset";

}

#告知Simulator对象在150.0s时调用stop过程

$ns_ at 150.0 "stop"

#在150.01s时输出提示语句并终止调度器

$ns_ at 150.01 "puts \"NS EXITING...\" ; $ns_ halt"

#stop过程

proc stop {} {

#声明全局变量

global ns_ tracefd namtracefd

#清空跟踪的缓冲区

$ns_ flush-trace

#关闭文件

close $tracefd

close $namtracefd

#启动nam

exec nam simple.nam &

exit 0

}

puts "Starting Simulation..."

#启动调度器

$ns_ run
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: