2007.09.14

模擬一個類似有中繼點的傳送方式,以一個在中間當主要 via 用的節點,接著有五個節點會互相傳送以及接受資料。首先利用 NSG2 拉出基本模型之後,因為 NSG2 會用條列式的方式建立節點以及協議等等,所以我試著用迴圈修改一下;加入了隨機變數,讓每個節點可以在隨機的時間開始結束,以符合正常的模擬情境,最後還有加上電力系統,看中繼點是否會比較早失去電力。

備註︰這次使用的是 DSDV routing protocol,要等久一點大約10多秒那邊就會開始有動作。

程式碼如下︰

# This script is created by NSG2 beta1
# <http://wushoupong.googlepages.com/nsg>

#===================================
#     Simulation parameters setup
#===================================
  set val(chan)   Channel/WirelessChannel    ;# channel type
  set val(prop)   Propagation/TwoRayGround   ;# radio-propagation model
  set val(netif)  Phy/WirelessPhy            ;# network interface type
  set val(mac)    Mac/802_11                 ;# MAC type
  set val(ifq)    Queue/DropTail/PriQueue    ;# interface queue type
  set val(ll)     LL                         ;# link layer type
  set val(ant)    Antenna/OmniAntenna        ;# antenna model
  set val(ifqlen) 50                         ;# max packet in ifq
  set val(nn)     6                          ;# number of mobilenodes
  set val(rp)     DSDV                       ;# routing protocol
  set val(x)      2837                       ;# X dimension of topography
  set val(y)      100                        ;# Y dimension of topography
  set val(stop)   25.0                       ;# time of simulation end
  set val(batterymodel)   Battery/Simple     ;# battery model
  set val(batterymonitor) "on"
  set val(initialenergy)  1                  ;# Initial battery capacity
  set val(radiomodel)     Radio/Simple       ;# generic radio hardware
  set val(receivepower)   0.01               ;# Receiving Power
  set val(transmitpower)  20                 ;# Transmitting Power
  set val(idlepower)      0.001              ;# Idle Power

#===================================
#        Initialization       
#===================================
# Create a ns simulator
  set ns [new Simulator]

# Setup topography object
  set topo [new Topography]
  $topo load_flatgrid $val(x) $val(y)
  create-god $val(nn)

# Open the NS trace file
  set tracefile [open out.tr w]
  $ns trace-all $tracefile

# Open the NAM trace file
  set namfile [open out.nam w]
  $ns namtrace-all $namfile
  $ns namtrace-all-wireless $namfile $val(x) $val(y)
  set chan [new $val(chan)];#Create wireless channel

#===================================
#     Mobile node parameter setup
#===================================
  $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) \
                  -channel         $chan \
                  -topoInstance    $topo \
                  -agentTrace      ON \
                  -routerTrace     ON \
                  -macTrace        ON \
                  -movementTrace   ON \
                  -energyModel     "EnergyModel" \
                  -initialEnergy   $val(initialenergy) \
                  -rxPower         $val(receivepower) \
                  -txPower         $val(transmitpower) \
                  -idlePower       $val(idlepower)

#===================================
#        Nodes Definition       
#===================================
# Create 6 nodes
  set n0 [$ns node]
  $n0 set X_ 1698
  $n0 set Y_ 1002
  $n0 set Z_ 0.0
  $ns initial_node_pos $n0 100
  set n1 [$ns node]
  $n1 set X_ 1702
  $n1 set Y_ 1250
  $n1 set Z_ 0.0
  $ns initial_node_pos $n1 20
  set n2 [$ns node]
  $n2 set X_ 1480
  $n2 set Y_ 1120
  $n2 set Z_ 0.0
  $ns initial_node_pos $n2 20
  set n3 [$ns node]
  $n3 set X_ 1532
  $n3 set Y_ 823
  $n3 set Z_ 0.0
  $ns initial_node_pos $n3 20
  set n4 [$ns node]
  $n4 set X_ 1916
  $n4 set Y_ 1120
  $n4 set Z_ 0.0
  $ns initial_node_pos $n4 20
  set n5 [$ns node]
  $n5 set X_ 1857
  $n5 set Y_ 811
  $n5 set Z_ 0.0
  $ns initial_node_pos $n5 20

#===================================
#        Agents Definition       
#===================================
# Setup a TCP connection
  for {set i 0} {$i<20} {incr i} {
    set tcp($i) [new Agent/TCP]
    set sink($i) [new Agent/TCPSink]
 
    set Value [expr $i%5]
 
      switch $Value {
        0 {
          $ns attach-agent $n1 $tcp($i)
          $ns attach-agent $n1 $sink($i)
        }
        1 {
          $ns attach-agent $n2 $tcp($i)
          $ns attach-agent $n2 $sink($i)
        }
        2 {
          $ns attach-agent $n3 $tcp($i)
          $ns attach-agent $n3 $sink($i)
        }
        3 {
          $ns attach-agent $n4 $tcp($i)
          $ns attach-agent $n4 $sink($i)
        }
        4 {
          $ns attach-agent $n5 $tcp($i)
          $ns attach-agent $n5 $sink($i)
        }
        default {
          puts "Out of control"
 }
      }
      $tcp($i) set packetSize_ 1500
  }

#===================================
#        Connect Agent       
#===================================
  $ns connect $sink(0) $tcp(1)
  $ns connect $sink(5) $tcp(2)
  $ns connect $sink(10) $tcp(3)
  $ns connect $sink(15) $tcp(4)

  $ns connect $sink(1) $tcp(0)
  $ns connect $sink(6) $tcp(7)
  $ns connect $sink(11) $tcp(8)
  $ns connect $sink(16) $tcp(9)

  $ns connect $sink(2) $tcp(5)
  $ns connect $sink(7) $tcp(6)
  $ns connect $sink(12) $tcp(13)
  $ns connect $sink(17) $tcp(14)

  $ns connect $sink(3) $tcp(10)
  $ns connect $sink(8) $tcp(11)
  $ns connect $sink(13) $tcp(12)
  $ns connect $sink(18) $tcp(19)

  $ns connect $sink(4) $tcp(15)
  $ns connect $sink(9) $tcp(16)
  $ns connect $sink(14) $tcp(17)
  $ns connect $sink(19) $tcp(18)

#===================================
#        Random Variable
#===================================
  set rng [new RNG]
# 隨機變數應用,目的在隨機的時間個別開始傳送封包 [ 0-1秒之間 ]

  $rng seed 1
# 設定種子為 0 就像是每次執行都擷取不同種子

# ======== Uniform Distribution ========
  set RVstart [new RandomVariable/Uniform]
  $RVstart use-rng $rng
  $RVstart set min_ 0
  $RVstart set max_ 1

  set RVend [new RandomVariable/Uniform]
  $RVend use-rng $rng
  $RVend set min_ 15
  $RVend set max_ 20
# ======== Uniform Distribution ========

#===================================
#        Applications Definition       
#===================================
  for {set k 0} {$k < 20} {incr k} {
    set startT($k) [ expr [$RVstart value] ]
    set endT($k) [ expr [$RVend value] ]
 
    set ftp($k) [new Application/FTP]
    $ftp($k) attach-agent $tcp($k)
 
    $ns at $startT($k) "$ftp($k) start"
    $ns at $endT($k) "$ftp($k) stop"
  }

#===================================
#        Termination       
#===================================
# Define a 'finish' procedure
  proc finish {} {
      global ns tracefile namfile
      $ns flush-trace
      close $tracefile
      close $namfile
      exec nam out.nam &
      exit 0
  }

  for {set i 0} {$i < $val(nn) } { incr i } {
      $ns at $val(stop) "\$n$i reset"
  }

  $ns at $val(stop) "$ns nam-end-wireless $val(stop)"
  $ns at $val(stop) "finish"
  $ns at $val(stop) "puts \"done\" ; $ns halt"
  $ns run

 

再隨機變數上的設定有點問題,所以又重新設定了

歡迎對於 NS2 有研究或見解的同學、朋友可以一起討論  by Yo PM 01:35 (2007.10.17 修正)
arrow
arrow
    全站熱搜

    NS2lab 發表在 痞客邦 留言(1) 人氣()