📄 kkk.tcl
字号:
set udp_($contador_nodos) [new Agent/UDP] $node_($contador_nodos) attach $udp_($contador_nodos) $val(port) $app_($contador_nodos) attach-agent $udp_($contador_nodos) } $node_($contador_nodos) set X_ $x $node_($contador_nodos) set Y_ $y $node_($contador_nodos) set Z_ $z puts "* Access point [$node_($contador_nodos) node-addr] = $contador_nodos created in ($x, $y, $z)" for { set i 0 } { $i < [llength $start] } { incr i } { $ns_ at $start "$app_($contador_nodos) start" } for { set i 0 } { $i < [llength $stop] } { incr i } { $ns_ at $stop "$app_($contador_nodos) stop" } incr contador_nodos } ### # Grid distribution. proc get_next_x {} { global val set aux [expr int(sqrt($val(nn)))] return [expr (($contador_nodos) % $aux) * $val(x) / ($aux - 1)] } proc get_next_y {} { global val set aux [expr int(sqrt($val(nn)))] return [expr (($contador_nodos) / $aux) * $val(y) / ($aux - 1)] } #### # Calculating the receiving threshold (RXThresh_ for Phy/Wireless) # Wei Ye, weiye@isi.edu, 2000 proc Friis { Pt Gt Gr lambda L d} { set M [expr $lambda / (4 * 3.14159265359 * $d)] return [expr ($Pt * $Gt * $Gr * ($M * $M)) / $L] } proc TwoRay { Pt Gt Gr ht hr L d lambda } { set crossover_dist [expr (4 * 3.14159265359 * $ht * $hr) / $lambda] if { $d < $crossover_dist } { return [Friis $Pt $Gt $Gr $lambda $L $d] } else { return [expr $Pt * $Gt * $Gr * ($hr * $hr * $ht * $ht) / ($d * $d * $d * $d * $L)] } } ### proc set_default_settings {} { global val #### # Default network settings set val(antenna) "Antenna/OmniAntenna" 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 ; ### # Using Mica 2 Mote settings set val(range) 100 setup_mica2 $val(antenna) $val(range) set val(bandwidth) [Phy/WirelessPhy set bandwidth_] set val(mac) Mac/802_11 set val(ifq) Queue/DropTail set val(ifqlen) 200 set val(ll) LL set val(rp) "LEACH" # Configuration adjustment if { $val(rp) == "LEACH" } { set val(rp) DumbAgent set val(leach) 1 if { $val(ll) != "RCALinkLayer" } { puts "LEACH requires RCALinkLayer! Forcing it!!!" set val(ll) RCALinkLayer } if { $val(netif) != "Phy/WirelessPhy/LeachWirelessPhy" } { puts "LEACH requires LeachWirelessPhy! Forcing it!!!" set val(netif) Phy/WirelessPhy/LeachWirelessPhy } if { $val(mac) != "Mac/Sensor" } { puts "LEACH requires Mac/Sensor! Forcing it!!!" set val(mac) Mac/Sensor } set val(port) 0 Agent/RCAgent set sport_ $val(port) Agent/RCAgent set dport_ $val(port) Agent/RCAgent set packetMsg_ 0 Agent/RCAgent set distEst_ 0 Agent/RCAgent set packetSize_ 0 RCALinkLayer set delay_ 25us RCALinkLayer set bandwidth_ [Phy/WirelessPhy set bandwidth_] RCALinkLayer set off_prune_ 0 RCALinkLayer set off_CtrMcast_ 0 RCALinkLayer set macDA_ 0 RCALinkLayer set debug_ 0 } else { set val(leach) 0 } if { $val(rp) == "DIRECTED DIFFUSION" } { set val(rp) "Directed_Diffusion" } } set val(father_addr) 0 set val(port) 2020 set val(netif) Phy/WirelessPhy set_default_settings # Global network settings set contador_nodos 0 set val(chan) Channel/WirelessChannel # Propagation set val(prop) Propagation/TwoRayGround # Energy model set val(en) EnergyModel/Battery # Nodes set val(n_pas) 1 set val(n_common) 10 set val(n_ch) 0 set val(nn) [expr $val(n_pas) + $val(n_common) + $val(n_ch)] puts "\nNodes count:" puts " - $val(n_pas) access points" puts " - $val(n_common) common nodes" puts " - $val(n_ch) cluster heads" puts " - $val(nn) nodes" puts " - $val(rp) routing protocol" puts " - $val(ll) link layer" puts " - $val(netif) network interface" # Scenario size set val(x) 100.0 set val(y) 100.0 puts "\nScenario size: $val(x) x $val(y)" set val(start) 0.0 set val(stop) [expr $val(start) + 15.0] set ns_ [new Simulator] # Trace puts "\nUsing trace.tr as trace file" set traceFile [open /root/Desktop/trace.tr w] $ns_ trace-all $traceFile $ns_ use-newtrace set trace(mac) ON set trace(router) ON set trace(agent) ON set trace(movement) ON set topo [new Topography] $topo load_flatgrid $val(x) $val(y) create-god $val(nn) set rng [new RNG] $rng seed [clock seconds]#------------------------------------------------------------------------------------------- # Creating an access point puts "Creating an access point..." set_default_settings # Using Mica 2 Mote settings puts "Using mica 2 mote settings" set val(range) 100 setup_mica2 $val(antenna) $val(range) set local(x) 0.0 set local(y) 0.0 set local(z) 0.0 set local(start) "" set local(stop) "" set local(energy) 100.0 set val(apApp) Application/AccessPointApp/AccessPointLeachApp create_access_point $local(energy) $local(x) $local(y) $local(z) $local(start) $local(stop) # Creating common node puts "Creating common node..." set_default_settings # Using Mica 2 Mote settings puts "Using mica 2 mote settings" set val(range) 100 setup_mica2 $val(antenna) $val(range) # Disseminating settings set val(disseminating_type) 0 ;# Continuous puts "Setting disseminating type to continuous" set val(disseminating_interval) 20.0 puts "Setting disseminating interval: $val(disseminating_interval)" set local(start) "" set local(stop) "" set local(energy) 10.0 set local(father_addr) $val(father_addr) set val(processing) Processing/AggregateProcessing set val(data_generator) "[create_data_generator {TemperatureDataGenerator} {5.0} {continuous} {25.0} {5.0} {30.0}]" for { set common_node_i 0 } { $common_node_i < 10 } { incr common_node_i } { set local(x) [$rng uniform 0.0 $val(x)] set local(y) [$rng uniform 0.0 $val(y)] set local(z) 0.0 set val(commonApp) Application/SensorBaseApp/CommonNodeApp/LeachApp create_common_node $local(energy) $local(x) $local(y) $local(z) $local(father_addr) $local(start) $local(stop) } $ns_ at [expr $val(stop)] "flush stdout" $ns_ at [expr $val(stop)+0.0001] "finish" proc finish {} { global ns_ traceFile namtrace tempoInicio val $ns_ flush-trace # close $namtrace $ns_ halt $ns_ flush-trace $ns_ nam-end-wireless $val(stop) close $traceFile flush stdout exit 0 } puts "Starting Simulation..." $ns_ run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -