wpan_demo4b.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:12k
源码类别:

通讯编程

开发平台:

Visual C++

  1. ###################################################
  2. #          ZigBee Routing over 802.15.4           #
  3. #                (beacon enabled)                 #
  4. #        Copyright (c) 2003 Samsung/CUNY          #
  5. # - - - - - - - - - - - - - - - - - - - - - - - - #
  6. #           Prepared by Jianliang Zheng           #
  7. #            (zheng@ee.ccny.cuny.edu)             #
  8. ###################################################
  9. # ======================================================================
  10. # Define options
  11. # ======================================================================
  12. set val(chan)           Channel/WirelessChannel    ;# Channel Type
  13. set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  14. set val(netif)          Phy/WirelessPhy/802_15_4
  15. set val(mac)            Mac/802_15_4
  16. set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
  17. set val(ll)             LL                         ;# link layer type
  18. set val(ant)            Antenna/OmniAntenna        ;# antenna model
  19. set val(ifqlen)         50                         ;# max packet in ifq
  20. set val(nn)             21                         ;# number of mobilenodes
  21. set val(rp)             ZBR                        ;# ZigBee Routing
  22. set val(x) 50
  23. set val(y) 50
  24. set val(nam) wpan_demo4.nam
  25. set val(traffic) cbr                        ;# cbr/poisson/ftp
  26. #read command line arguments
  27. proc getCmdArgu {argc argv} {
  28.         global val
  29.         for {set i 0} {$i < $argc} {incr i} {
  30.                 set arg [lindex $argv $i]
  31.                 if {[string range $arg 0 0] != "-"} continue
  32.                 set name [string range $arg 1 end]
  33.                 set val($name) [lindex $argv [expr $i+1]]
  34.         }
  35. }
  36. getCmdArgu $argc $argv
  37. set appTime1          10.3 ;# in seconds 
  38. set appTime2          10.6 ;# in seconds 
  39. set stopTime            100 ;# in seconds 
  40. # Initialize Global Variables
  41. set ns_ [new Simulator]
  42. set tracefd     [open ./wpan_demo4.tr w]
  43. $ns_ trace-all $tracefd
  44. if { "$val(nam)" == "wpan_demo4.nam" } {
  45.         set namtrace     [open ./$val(nam) w]
  46.         $ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
  47. }
  48. $ns_ puts-nam-traceall {# nam4wpan #} ;# inform nam that this is a trace file for wpan (special handling needed)
  49. Mac/802_15_4 wpanCmd verbose on
  50. Mac/802_15_4 wpanNam namStatus on ;# default = off (should be turned on before other 'wpanNam' commands can work)
  51. #Mac/802_15_4 wpanNam ColFlashClr gold ;# default = gold
  52. #Mac/802_15_4 wpanNam NodeFailClr grey ;# default = grey
  53. # For model 'TwoRayGround'
  54. set dist(5m)  7.69113e-06
  55. set dist(9m)  2.37381e-06
  56. set dist(10m) 1.92278e-06
  57. set dist(11m) 1.58908e-06
  58. set dist(12m) 1.33527e-06
  59. set dist(13m) 1.13774e-06
  60. set dist(14m) 9.81011e-07
  61. set dist(15m) 8.54570e-07
  62. set dist(16m) 7.51087e-07
  63. set dist(20m) 4.80696e-07
  64. set dist(25m) 3.07645e-07
  65. set dist(30m) 2.13643e-07
  66. set dist(35m) 1.56962e-07
  67. set dist(40m) 1.20174e-07
  68. Phy/WirelessPhy set CSThresh_ $dist(12m)
  69. Phy/WirelessPhy set RXThresh_ $dist(12m)
  70. # set up topography object
  71. set topo       [new Topography]
  72. $topo load_flatgrid $val(x) $val(y)
  73. # Create God
  74. set god_ [create-god $val(nn)]
  75. set chan_1_ [new $val(chan)]
  76. # configure node
  77. $ns_ node-config -adhocRouting $val(rp) 
  78. -llType $val(ll) 
  79. -macType $val(mac) 
  80. -ifqType $val(ifq) 
  81. -ifqLen $val(ifqlen) 
  82. -antType $val(ant) 
  83. -propType $val(prop) 
  84. -phyType $val(netif) 
  85. -topoInstance $topo 
  86. -agentTrace OFF 
  87. -routerTrace OFF 
  88. -macTrace ON 
  89. -movementTrace OFF 
  90.                 #-energyModel "EnergyModel" 
  91.                 #-initialEnergy 1 
  92.                 #-rxPower 0.3 
  93.                 #-txPower 0.3 
  94. -channel $chan_1_
  95. for {set i 0} {$i < $val(nn) } {incr i} {
  96. set node_($i) [$ns_ node]
  97. $node_($i) random-motion 0 ;# disable random motion
  98. }
  99. set Cm 4
  100. set Lm 3
  101. Agent/ZBR Cm $Cm
  102. Agent/ZBR Lm $Lm
  103. Agent/ZBR BSize calc
  104. set BlockSize [Agent/ZBR BSize]
  105. set cskip0 [Agent/ZBR CSkip 0]
  106. set cskip1 [Agent/ZBR CSkip 1]
  107. set cskip2 [Agent/ZBR CSkip 2]
  108. puts [format "Cm:        %s" $Cm]
  109. puts [format "Lm:        %s" $Lm]
  110. puts [format "BlockSize: %s" $BlockSize]
  111. $ns_ at 0.0 "$ns_ trace-annotate "Cm = $Cm, Lm = $Lm, BlockSize = $BlockSize, CSkip0 = $cskip0, CSkip1 = $cskip1, CSkip2 = $cskip2""
  112. # default is RN+, so only set RN-
  113. $node_(3) RNType 0
  114. $node_(4) RNType 0
  115. $node_(7) RNType 0
  116. $node_(8) RNType 0
  117. $node_(9) RNType 0
  118. $node_(10) RNType 0
  119. $node_(13) RNType 0
  120. $node_(15) RNType 0
  121. $node_(18) RNType 0
  122. $node_(20) RNType 0
  123. source ./wpan_demo4.scn
  124. $ns_ at 0.0 "$node_(0) NodeLabel "PAN Coor""
  125. for {set i 1} {$i < $val(nn)} {incr i} {
  126. set RNType [eval $node_($i) RNType]
  127. if {$RNType == "0"} {
  128. $ns_ at 0.0 "$node_($i) NodeLabel -"
  129. } else {
  130. $ns_ at 0.0 "$node_($i) NodeLabel +"
  131. }
  132. }
  133. $ns_ at 0.0 "$node_(0) sscs startCTPANCoord 1" ;# startCTPANCoord <txBeacon=1> <BO=3> <SO=3>
  134. $ns_ at 0.3 "$node_(1) sscs startCTDevice 1 1"  ;# startCTDevice <isFFD=1> <assoPermit=1> <txBeacon=0> <BO=3> <SO=3>
  135. $ns_ at 1.3 "$node_(9) sscs startCTDevice 1 1"
  136. $ns_ at 1.7 "$node_(13) sscs startCTDevice 1 1"
  137. $ns_ at 2.3 "$node_(19) sscs startCTDevice 1 1"
  138. $ns_ at 3.3 "$node_(2) sscs startCTDevice 1 1 1"
  139. $ns_ at 3.5 "$node_(7) sscs startCTDevice 1 1 1"
  140. $ns_ at 3.6 "$node_(11) sscs startCTDevice 1 1 1"
  141. $ns_ at 3.8 "$node_(16) sscs startCTDevice 1 1 1"
  142. $ns_ at 4.3 "$node_(3) sscs startCTDevice 0 0"
  143. $ns_ at 4.5 "$node_(6) sscs startCTDevice 1 1"
  144. $ns_ at 4.8 "$node_(12) sscs startCTDevice 1 0"
  145. $ns_ at 5.1 "$node_(17) sscs startCTDevice 1 0"
  146. $ns_ at 5.6 "$node_(20) sscs startCTDevice 1 1"
  147. $ns_ at 5.8 "$node_(5) sscs startCTDevice 1 1"
  148. $ns_ at 6.0 "$node_(10) sscs startCTDevice 1 1"
  149. $ns_ at 6.3 "$node_(14) sscs startCTDevice 1 1"
  150. $ns_ at 6.8 "$node_(18) sscs startCTDevice 1 0"
  151. $ns_ at 7.0 "$node_(4) sscs startCTDevice 0 0"
  152. $ns_ at 7.3 "$node_(8) sscs startCTDevice 0 0"
  153. $ns_ at 7.7 "$node_(15) sscs startCTDevice 0 0"
  154. $ns_ at $appTime1 "$node_(0) sscs stopBeacon"
  155. $ns_ at $appTime1 "$node_(2) sscs startBeacon 4 4"
  156. $ns_ at $appTime1 "$node_(7) sscs startBeacon 4 4"
  157. #$ns_ at $appTime1 "$node_(11) sscs stopBeacon"
  158. #$ns_ at $appTime1 "$node_(16) sscs stopBeacon"
  159. Mac/802_15_4 wpanNam PlaybackRate 4ms
  160. $ns_ at $appTime1 "Mac/802_15_4 wpanNam PlaybackRate 1.0ms"
  161. $ns_ at [expr $appTime1 + 0.5] "Mac/802_15_4 wpanNam PlaybackRate 2.0ms"
  162. $ns_ at $appTime1 "puts "nTransmitting data ...n""
  163. # Setup traffic flow between nodes
  164. proc cbrtraffic { src dst interval starttime } {
  165.    global ns_ node_
  166.    set udp_($src) [new Agent/UDP]
  167.    eval $ns_ attach-agent $node_($src) $udp_($src)
  168.    set null_($dst) [new Agent/Null]
  169.    eval $ns_ attach-agent $node_($dst) $null_($dst)
  170.    set cbr_($src) [new Application/Traffic/CBR]
  171.    eval $cbr_($src) set packetSize_ 80
  172.    eval $cbr_($src) set interval_ $interval
  173.    eval $cbr_($src) set random_ 0
  174.    #eval $cbr_($src) set maxpkts_ 10000
  175.    eval $cbr_($src) attach-agent $udp_($src)
  176.    eval $ns_ connect $udp_($src) $null_($dst)
  177.    $ns_ at $starttime "$cbr_($src) start"
  178. }
  179. proc poissontraffic { src dst interval starttime } {
  180.    global ns_ node_
  181.    set udp($src) [new Agent/UDP]
  182.    eval $ns_ attach-agent $node_($src) $udp($src)
  183.    set null($dst) [new Agent/Null]
  184.    eval $ns_ attach-agent $node_($dst) $null($dst)
  185.    set expl($src) [new Application/Traffic/Exponential]
  186.    eval $expl($src) set packetSize_ 70
  187.    eval $expl($src) set burst_time_ 0
  188.    eval $expl($src) set idle_time_ [expr $interval*1000.0-70.0*8/250]ms ;# idle_time + pkt_tx_time = interval
  189.    eval $expl($src) set rate_ 250k
  190.    eval $expl($src) attach-agent $udp($src)
  191.    eval $ns_ connect $udp($src) $null($dst)
  192.    $ns_ at $starttime "$expl($src) start"
  193. }
  194. if {$val(rp) == "ZBR"} {
  195. Mac/802_15_4 wpanCmd callBack 2 ;# 0=none; 1=failure only (default); 2=both failure and success
  196. }
  197. if { ("$val(traffic)" == "cbr") || ("$val(traffic)" == "poisson") } {
  198.    puts "nTraffic: $val(traffic)"
  199.    #Mac/802_15_4 wpanCmd ack4data on
  200.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  201.    $val(traffic)traffic 16 3 0.2 $appTime1
  202.    $val(traffic)traffic 8 11 0.2 $appTime2
  203.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  204.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  205.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  206.    $ns_ at $appTime1 "$node_(16) add-mark m1 blue circle"
  207.    $ns_ at $appTime1 "$node_(3) add-mark m2 blue circle"
  208.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) $val(traffic) traffic from node 16 to node 3""
  209.    $ns_ at $appTime2 "$node_(8) add-mark m3 green4 circle"
  210.    $ns_ at $appTime2 "$node_(11) add-mark m4 green4 circle"
  211.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) $val(traffic) traffic from node 8 to node 11""
  212.    $ns_ at [expr $appTime1 + 2.0] "Mac/802_15_4 wpanCmd link-down 10 9"
  213.    set tmpTime [format "%.1f" [expr $appTime1 + 2.0]]
  214.    $ns_ at [expr $appTime1 + 2.0] "$ns_ trace-annotate "(at $tmpTime) link down: 10 -> 9""
  215.    $ns_ at [expr $appTime2 + 3.0] "$node_(2) node-down"
  216.    set tmpTime [format "%.1f" [expr $appTime2 + 3.0]]
  217.    $ns_ at [expr $appTime2 + 3.0] "$ns_ trace-annotate "(at $tmpTime) node down: 2""
  218.    $ns_ at [expr $appTime1 + 8.0] "Mac/802_15_4 wpanCmd link-up 10 9"
  219.    set tmpTime [format "%.1f" [expr $appTime1 + 8.0]]
  220.    $ns_ at [expr $appTime1 + 8.0] "$ns_ trace-annotate "(at $tmpTime) link up: 10 -> 9""
  221.    $ns_ at [expr $appTime2 + 10.0] "$node_(2) node-up"
  222.    set tmpTime [format "%.1f" [expr $appTime2 + 10.0]]
  223.    $ns_ at [expr $appTime2 + 10.0] "$ns_ trace-annotate "(at $tmpTime) node up: 2""
  224.    if { "$val(traffic)" == "cbr" } {
  225.     set pktType cbr
  226.    } else {
  227.     set pktType exp
  228.    }
  229.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 16 -d 3 -c blue
  230.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 8 -d 11 -c green4
  231. }
  232. proc ftptraffic { src dst starttime } {
  233.    global ns_ node_
  234.    set tcp($src) [new Agent/TCP]
  235.    eval $tcp($src) set packetSize_ 60
  236.    set sink($dst) [new Agent/TCPSink]
  237.    eval $ns_ attach-agent $node_($src) $tcp($src)
  238.    eval $ns_ attach-agent $node_($dst) $sink($dst)
  239.    eval $ns_ connect $tcp($src) $sink($dst)
  240.    set ftp($src) [new Application/FTP]
  241.    eval $ftp($src) attach-agent $tcp($src)
  242.    $ns_ at $starttime "$ftp($src) start"
  243. }
  244. if { "$val(traffic)" == "ftp" } {
  245.    puts "nTraffic: ftp"
  246.    #Mac/802_15_4 wpanCmd ack4data off
  247.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  248.    ftptraffic 16 3 $appTime1
  249.    ftptraffic 8 11 $appTime2
  250.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  251.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  252.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  253.    $ns_ at $appTime1 "$node_(16) add-mark m1 blue circle"
  254.    $ns_ at $appTime1 "$node_(3) add-mark m2 blue circle"
  255.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) ftp traffic from node 16 to node 3""
  256.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 16 -d 3 -c blue
  257.    Mac/802_15_4 wpanNam FlowClr -p ack -s 3 -d 16 -c blue
  258.    $ns_ at $appTime2 "$node_(8) add-mark m3 green4 circle"
  259.    $ns_ at $appTime2 "$node_(11) add-mark m4 green4 circle"
  260.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) ftp traffic from node 8 to node 11""
  261.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 8 -d 11 -c green4
  262.    Mac/802_15_4 wpanNam FlowClr -p ack -s 11 -d 8 -c green4
  263. }
  264. # defines the node size in nam
  265. for {set i 0} {$i < $val(nn)} {incr i} {
  266. $ns_ initial_node_pos $node_($i) 2
  267. }
  268. # Tell nodes when the simulation ends
  269. for {set i 0} {$i < $val(nn) } {incr i} {
  270.     $ns_ at $stopTime "$node_($i) reset";
  271. }
  272. $ns_ at $stopTime "stop"
  273. $ns_ at $stopTime "puts "nNS EXITING...n""
  274. $ns_ at $stopTime "$ns_ halt"
  275. proc stop {} {
  276.     global ns_ tracefd appTime val env
  277.     $ns_ flush-trace
  278.     close $tracefd
  279.     set hasDISPLAY 0
  280.     foreach index [array names env] {
  281.         #puts "$index: $env($index)"
  282.         if { ("$index" == "DISPLAY") && ("$env($index)" != "") } {
  283.                 set hasDISPLAY 1
  284.         }
  285.     }
  286.     if { ("$val(nam)" == "wpan_demo4.nam") && ("$hasDISPLAY" == "1") } {
  287.      exec nam wpan_demo4.nam &
  288.     }
  289. }
  290. puts "nStarting Simulation..."
  291. $ns_ run