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


posted on 2011-05-09 17:55  心月  阅读(4106)  评论(0编辑  收藏  举报