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 修正)
留言列表