NS2无线脚本

转自:http://www.cnblogs.com/zhangleiccst/archive/2011/05/09/2041388.html

文件来源是NS2自带的simple-wireless.tcl(~ns\tcl\ex\simple-wireless.tcl):# 定义选项,设定模拟需要的一些属性。set val(chan) Channel/WirelessChannel ;# 无线信道类型set val(prop) Propagation/TwoRayGround ;# 无限信号传输模型set val(netif) P

 文件来源是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

hy/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 $tracefdset 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源代理对象tcpset tcp [new Agent/TCP]#class_是agent类中定义的整型变量,用于分类,之后可用于着色。此程序无用。$tcp set class_ 2#创建分组的接收代理对象sinkset 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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值