zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    SpringBoot实战项目(十)--用户修改功能之后台存储
    SpringBoot实战项目(九)--用户修改功能之显示用户对应角色
    SpringBoot实战项目(八)--用户修改功能之显示用户信息
    SpringBoot实战项目(七)--用户新增功能之后台存储
    SpringBoot实战项目(六)--用户新增功能之验证处理
    SpringBoot实战项目(五)--用户新增功能之页面构建
    jQuery 杂项方法大全
    jQuery AJAX方法详谈
    jQuery 遍历方法大全
    PHP 数组函数大全
  • 原文地址:https://www.cnblogs.com/zhangleiccst/p/2041388.html
Copyright © 2011-2022 走看看