• NS2的LEACH仿真出来的nam文件拓扑的节点为什么x=0,且y=0


    查看.tr文件和.nam发文件下所有的节点的x,y值都是(0,0),nam图像更没有运行出来

    于是我将
    if { $opt(sc) == "" } {
    puts "*** NOTE: no scenario file specified."
    set opt(sc) "none"
    } else {
    puts "Loading scenario file..."
    source $opt(sc)
    puts "Load complete..."
    }
    几行代码移动到:initial_node_pos调用方法之前,解决了节点位置为0的问题,但是nam仿真时又出现了没有数据的问题,且一按开始动画时间进度条就会变成空白,又是一个问题,这又是为什么呢?

    仔细对比wireless.tcl 文件发现是由于仿真结束后将两行代码注释掉了:

    proc stop {} {
        global ns_ nam_vystup
        $ns_ flush-trace    
        close $nam_vystup
        #exec nam out_aodv_big_auto.nam &
        #exit 0    
    }

    这两行代码注释了导致nam没有数据收发,具体原因我也不知道为什么,只是浅薄的知道时这两行代码有问题

    将这两行代码的注释去掉后,nam动画正常了

    以下是我的wireless.tcl代码:

     

    set opt(chan)        Channel/WirelessChannel
    set opt(prop)        Propagation/TwoRayGround
    #set opt(netif)        NetIf/SharedMedia
    set opt(netif)        Phy/WirelessPhy
    #set opt(mac)        Mac/802_11
    set opt(mac)        Mac/802_11
    set opt(ifq)        Queue/DropTail/PriQueue
    set opt(ll)        LL
    set opt(ant)            Antenna/OmniAntenna

    set opt(x)        670    ;# X dimension of the topography
    set opt(y)        670        ;# Y dimension of the topography
    #set opt(cp)        "../mobility/scene/cbr-50-20-4-512" ;# connection pattern file
    set opt(cp)        ""
    set opt(sc)        "../mobility/scene/scen-670x670-50-600-20-2" ;# scenario file

    set opt(ifqlen)        50        ;# max packet in ifq
    set opt(nn)        101        ;# number of nodes
    set opt(seed)        0.0
    set opt(stop)        50.0        ;# simulation time
    set opt(tr)        out.tr        ;# trace file
    set opt(rp)             dsdv            ;# routing protocol script
    set opt(lm)             "on"           ;# log movement

    # ======================================================================

    set AgentTrace            ON
    set RouterTrace            ON
    set MacTrace            OFF

    LL set mindelay_        50us
    LL set delay_            25us
    LL set bandwidth_        0    ;# not used
    LL set off_prune_        0    ;# not used
    LL set off_CtrMcast_        0    ;# not used

    Agent/Null set sport_        0
    Agent/Null set dport_        0

    Agent/CBR set sport_        0
    Agent/CBR set dport_        0

    Agent/TCPSink set sport_    0
    Agent/TCPSink set dport_    0

    Agent/TCP set sport_        0
    Agent/TCP set dport_        0
    Agent/TCP set packetSize_    1460

    Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1

    # unity gain, omni-directional antennas
    # set up the antennas to be centered in the node and 1.5 meters above it
    Antenna/OmniAntenna set X_ 0
    Antenna/OmniAntenna set Y_ 0
    Antenna/OmniAntenna set Z_ 1.5
    Antenna/OmniAntenna set Gt_ 1.0
    Antenna/OmniAntenna set Gr_ 1.0

    # Initialize the SharedMedia interface with parameters to make
    # it work like the 914MHz Lucent WaveLAN DSSS radio interface
    Phy/WirelessPhy set CPThresh_ 10.0
    Phy/WirelessPhy set CSThresh_ 1.559e-11
    Phy/WirelessPhy set RXThresh_ 3.652e-10
    Phy/WirelessPhy set Rb_ 2*1e6
    Phy/WirelessPhy set Pt_ 0.2818
    Phy/WirelessPhy set freq_ 914e+6
    Phy/WirelessPhy set L_ 1.0

    # ======================================================================

    proc usage { argv0 }  {
        puts "Usage: $argv0"
        puts "\tmandatory arguments:"
        puts "\t\t\[-x MAXX\] \[-y MAXY\]"
        puts "\toptional arguments:"
        puts "\t\t\[-cp conn pattern\] \[-sc scenario\] \[-nn nodes\]"
        puts "\t\t\[-seed seed\] \[-stop sec\] \[-tr tracefile\]\n"
    }


    proc getopt {argc argv} {
        global opt
        lappend optlist cp nn seed sc stop tr x y

        for {set i 0} {$i < $argc} {incr i} {
            set arg [lindex $argv $i]
            if {[string range $arg 0 0] != "-"} continue

            set name [string range $arg 1 end]
            set opt($name) [lindex $argv [expr $i+1]]
        }
    }


    proc cmu-trace { ttype atype node } {
        global ns_ tracefd

        if { $tracefd == "" } {
            return ""
        }
        set T [new CMUTrace/$ttype $atype]
        $T target [$ns_ set nullAgent_]
        $T attach $tracefd
            $T set src_ [$node id]

            $T node $node

        return $T
    }


    proc create-god { nodes } {
        global ns_ god_ tracefd

        set god_ [new God]
        $god_ num_nodes $nodes
    }

    proc log-movement {} {
        global logtimer ns_ ns

        set ns $ns_
        source tcl/mobility/timer.tcl
        Class LogTimer -superclass Timer
        LogTimer instproc timeout {} {
        global opt node_;
        for {set i 0} {$i < $opt(nn)} {incr i} {
            $node_($i) log-movement
        }
        $self sched 0.1
        }

        set logtimer [new LogTimer]
        $logtimer sched 0.1
    }

    # ======================================================================
    # Main Program
    # ======================================================================
    getopt $argc $argv

    #
    # Source External TCL Scripts
    #
    source tcl/lib/ns-mobilenode.tcl

    #if { $opt(rp) != "" } {
        source tcl/mobility/$opt(rp).tcl
        #} elseif { [catch { set env(NS_PROTO_SCRIPT) } ] == 1 } {
        #puts "\nenvironment variable NS_PROTO_SCRIPT not set!\n"
        #exit
    #} else {
        #puts "\n*** using script $env(NS_PROTO_SCRIPT)\n\n";
            #source $env(NS_PROTO_SCRIPT)
    #}
    source tcl/lib/ns-cmutrace.tcl

    # do the get opt again incase the routing protocol file added some more
    # options to look for
    getopt $argc $argv

    if { $opt(x) == 0 || $opt(y) == 0 } {
        usage $argv0
        exit 1
    }

    if {$opt(seed) > 0} {
        puts "Seeding Random number generator with $opt(seed)\n"
        ns-random $opt(seed)
    }
    #
    # Initialize Global Variables
    #
    set ns_        [new Simulator]
    set chan    [new $opt(chan)]
    set prop    [new $opt(prop)]
    set topo    [new Topography]

    # setup output trace file
    #set tracefd    [open $opt(rp).tr w]
    #set tracefd    [open leach.tr w]
    set tracefd    [open $opt(tr) w]

    # try for setup output nam file
    set nam_vystup        [open $opt(rp).nam w]
    $ns_ trace-all $tracefd          
    $ns_ namtrace-all-wireless $nam_vystup $opt(x) $opt(y)
    # end

    $topo load_flatgrid $opt(x) $opt(y)

    $prop topography $topo

    #
    # Create God
    #
    create-god $opt(nn)

    $ns_ node-config -adhocRouting $opt(rp) \
          -llType $opt(ll) \
          -macType $opt(mac) \
          -ifqType $opt(ifq) \
          -ifqLen $opt(ifqlen) \
          -antType $opt(ant) \
          -propType $opt(prop) \
          -phyType $opt(netif) \
          -channel $opt(chan) \
           -topoInstance $topo \
          -agentTrace ON \
          -routerTrace ON \
          -macTrace ON \
          -wiredRouting OFF

    #
    # log the mobile nodes movements if desired
    #
    if { $opt(lm) == "on" } {
        log-movement
    }

    #
    #  Create the specified number of nodes $opt(nn) and "attach" them
    #  the channel.
    #  Each routing protocol script is expected to have defined a proc
    #  create-mobile-node that builds a mobile node and inserts it into the
    #  array global $node_($i)
    #


    if { [string compare $opt(rp) "dsr"] == 0} {
        for {set i 0} {$i < $opt(nn) } {incr i} {
            dsr-create-mobile-node $i
        }
    } elseif { [string compare $opt(rp) "dsdv"] == 0} {
        for {set i 0} {$i < $opt(nn) } {incr i} {
            dsdv-create-mobile-node $i
        }
    } elseif { [string compare $opt(rp) "leach"] == 0} {
        for {set i 0} {$i < $opt(nn) } {incr i} {
            leach-create-mobile-node $i
        }
    } elseif { [string compare $opt(rp) "leach-c"] == 0} {
        for {set i 0} {$i < $opt(nn) } {incr i} {
            leach-create-mobile-node $i
        }
    } elseif { [string compare $opt(rp) "stat-clus"] == 0} {
        for {set i 0} {$i < $opt(nn) } {incr i} {
            leach-create-mobile-node $i
        }
    } elseif { [string compare $opt(rp) "mte"] == 0} {
        for {set i 0} {$i < $opt(nn) } {incr i} {
            leach-create-mobile-node $i
        }
    } elseif { [string compare $opt(rp) "pegasis"] == 0} {
        for {set i 0} {$i < $opt(nn) } {incr i} {
            leach-create-mobile-node $i
        }
    }

    #
    # Source the Connection and Movement scripts
    #
    if { $opt(cp) == "" } {
        puts "*** NOTE: no connection pattern specified. - wireless.tcl"
            set opt(cp) "none"
    } else {
        puts "Loading connection pattern...- wireless.tcl"
        source $opt(cp)
    }

    #
    # Tell all the nodes when the simulation ends
    #
    for {set i 0} {$i < $opt(nn) } {incr i} {
        $ns_ at $opt(stop).000000001 "$node_($i) reset";
    }

    # original end $ns_ at $opt(stop).00000001 "puts \"NS EXITING...\" ; $ns_ halt"

    # new end
    $ns_ at $opt(stop).0001 "stop"
    $ns_ at $opt(stop).000000002 "puts \"NS EXITING...\" ; $ns_ halt"


    # Change for stop
    proc stop {} {
        global ns_ nam_vystup
        $ns_ flush-trace    
        close $nam_vystup
        exec nam out_aodv_big_auto.nam &
        exit 0    
    }
    # end of change
    if { $opt(sc) == "" } {
        puts "*** NOTE: no scenario file specified. - wireless.tcl"
            set opt(sc) "none"
    } else {
        puts "Loading scenario file... - wireless.tcl"
        source $opt(sc)
        puts "Load complete... - wireless.tcl"
    }

    for {set i 0} {$i < $opt(nn)} {incr i} {
        $ns_ initial_node_pos $node_($i) 6
    }

    puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y) rp $opt(rp)"
    puts $tracefd "M 0.0 sc $opt(sc) cp $opt(cp) seed $opt(seed)"
    puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"


    puts "Starting Simulation... - wireless.tcl"
    $ns_ run

  • 相关阅读:
    linux中的开发工具
    OTN光层保护
    Linux 权限
    SystemUI状态栏
    合宙Air724UG LuatOS-Air LVGL API控件-二维码(Qrcode)
    【一致性】redis+DB一致性如何保证? 从Cache Expiry到Double Delete双重删除
    Android 蓝牙设备类型判断代码介绍
    使用adb shell 命令接收串口发送过来的16进制数据 或者 发送16进制数据
    FinalShell安装和使用(用来连接远程Linux)
    个人笔记-随意记录
  • 原文地址:https://www.cnblogs.com/llll12/p/16246749.html