wpan_demo4b_m.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. for {set i 0} {$i < $val(nn)} {incr i} {
  114. $node_($i) RNType 0
  115. }
  116. source ./wpan_demo4.scn
  117. $ns_ at 0.0 "$node_(0) NodeLabel "PAN Coor""
  118. for {set i 1} {$i < $val(nn)} {incr i} {
  119. set RNType [eval $node_($i) RNType]
  120. if {$RNType == "0"} {
  121. $ns_ at 0.0 "$node_($i) NodeLabel -"
  122. } else {
  123. $ns_ at 0.0 "$node_($i) NodeLabel +"
  124. }
  125. }
  126. $ns_ at 0.0 "$node_(0) sscs startCTPANCoord 1" ;# startCTPANCoord <txBeacon=1> <BO=3> <SO=3>
  127. $ns_ at 0.3 "$node_(1) sscs startCTDevice 1 1"  ;# startCTDevice <isFFD=1> <assoPermit=1> <txBeacon=0> <BO=3> <SO=3>
  128. $ns_ at 1.3 "$node_(9) sscs startCTDevice 1 1"
  129. $ns_ at 1.7 "$node_(13) sscs startCTDevice 1 1"
  130. $ns_ at 2.3 "$node_(19) sscs startCTDevice 1 1"
  131. $ns_ at 3.3 "$node_(2) sscs startCTDevice 1 1 1"
  132. $ns_ at 3.5 "$node_(7) sscs startCTDevice 1 1 1"
  133. $ns_ at 3.6 "$node_(11) sscs startCTDevice 1 1 1"
  134. $ns_ at 3.8 "$node_(16) sscs startCTDevice 1 1 1"
  135. $ns_ at 4.3 "$node_(3) sscs startCTDevice 0 0"
  136. $ns_ at 4.5 "$node_(6) sscs startCTDevice 1 1"
  137. $ns_ at 4.8 "$node_(12) sscs startCTDevice 1 0"
  138. $ns_ at 5.1 "$node_(17) sscs startCTDevice 1 0"
  139. $ns_ at 5.6 "$node_(20) sscs startCTDevice 1 1"
  140. $ns_ at 5.8 "$node_(5) sscs startCTDevice 1 1"
  141. $ns_ at 6.0 "$node_(10) sscs startCTDevice 1 1"
  142. $ns_ at 6.3 "$node_(14) sscs startCTDevice 1 1"
  143. $ns_ at 6.8 "$node_(18) sscs startCTDevice 1 0"
  144. $ns_ at 7.0 "$node_(4) sscs startCTDevice 0 0"
  145. $ns_ at 7.3 "$node_(8) sscs startCTDevice 0 0"
  146. $ns_ at 7.7 "$node_(15) sscs startCTDevice 0 0"
  147. $ns_ at $appTime1 "$node_(0) sscs stopBeacon"
  148. #$ns_ at $appTime1 "$node_(2) sscs startBeacon 4 4"
  149. #$ns_ at $appTime1 "$node_(7) sscs startBeacon 4 4"
  150. $ns_ at $appTime1 "$node_(11) sscs stopBeacon"
  151. $ns_ at $appTime1 "$node_(16) sscs stopBeacon"
  152. $ns_ at $appTime1 "$node_(2) sscs stopBeacon"
  153. $ns_ at $appTime1 "$node_(7) sscs stopBeacon"
  154. Mac/802_15_4 wpanNam PlaybackRate 4ms
  155. $ns_ at $appTime1 "Mac/802_15_4 wpanNam PlaybackRate 1.0ms"
  156. $ns_ at [expr $appTime1 + 0.5] "Mac/802_15_4 wpanNam PlaybackRate 2.0ms"
  157. $ns_ at $appTime1 "puts "nTransmitting data ...n""
  158. # Setup traffic flow between nodes
  159. proc cbrtraffic { src dst interval starttime } {
  160.    global ns_ node_
  161.    set udp_($src) [new Agent/UDP]
  162.    eval $ns_ attach-agent $node_($src) $udp_($src)
  163.    set null_($dst) [new Agent/Null]
  164.    eval $ns_ attach-agent $node_($dst) $null_($dst)
  165.    set cbr_($src) [new Application/Traffic/CBR]
  166.    eval $cbr_($src) set packetSize_ 80
  167.    eval $cbr_($src) set interval_ $interval
  168.    eval $cbr_($src) set random_ 0
  169.    #eval $cbr_($src) set maxpkts_ 10000
  170.    eval $cbr_($src) attach-agent $udp_($src)
  171.    eval $ns_ connect $udp_($src) $null_($dst)
  172.    $ns_ at $starttime "$cbr_($src) start"
  173. }
  174. proc poissontraffic { src dst interval starttime } {
  175.    global ns_ node_
  176.    set udp($src) [new Agent/UDP]
  177.    eval $ns_ attach-agent $node_($src) $udp($src)
  178.    set null($dst) [new Agent/Null]
  179.    eval $ns_ attach-agent $node_($dst) $null($dst)
  180.    set expl($src) [new Application/Traffic/Exponential]
  181.    eval $expl($src) set packetSize_ 70
  182.    eval $expl($src) set burst_time_ 0
  183.    eval $expl($src) set idle_time_ [expr $interval*1000.0-70.0*8/250]ms ;# idle_time + pkt_tx_time = interval
  184.    eval $expl($src) set rate_ 250k
  185.    eval $expl($src) attach-agent $udp($src)
  186.    eval $ns_ connect $udp($src) $null($dst)
  187.    $ns_ at $starttime "$expl($src) start"
  188. }
  189. if {$val(rp) == "ZBR"} {
  190. Mac/802_15_4 wpanCmd callBack 2 ;# 0=none; 1=failure only (default); 2=both failure and success
  191. }
  192. if { ("$val(traffic)" == "cbr") || ("$val(traffic)" == "poisson") } {
  193.    puts "nTraffic: $val(traffic)"
  194.    #Mac/802_15_4 wpanCmd ack4data on
  195.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  196.    $val(traffic)traffic 16 3 0.2 $appTime1
  197.    $val(traffic)traffic 8 11 0.2 $appTime2
  198.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  199.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  200.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  201.    $ns_ at $appTime1 "$node_(16) add-mark m1 blue circle"
  202.    $ns_ at $appTime1 "$node_(3) add-mark m2 blue circle"
  203.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) $val(traffic) traffic from node 16 to node 3""
  204.    $ns_ at $appTime2 "$node_(8) add-mark m3 green4 circle"
  205.    $ns_ at $appTime2 "$node_(11) add-mark m4 green4 circle"
  206.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) $val(traffic) traffic from node 8 to node 11""
  207. #   $ns_ at [expr $appTime1 + 2.0] "Mac/802_15_4 wpanCmd link-down 10 9"
  208. #   set tmpTime [format "%.1f" [expr $appTime1 + 2.0]]
  209. #   $ns_ at [expr $appTime1 + 2.0] "$ns_ trace-annotate "(at $tmpTime) link down: 10 -> 9""
  210. #   $ns_ at [expr $appTime2 + 3.0] "$node_(2) node-down"
  211. #   set tmpTime [format "%.1f" [expr $appTime2 + 3.0]]
  212. #   $ns_ at [expr $appTime2 + 3.0] "$ns_ trace-annotate "(at $tmpTime) node down: 2""
  213. #   $ns_ at [expr $appTime1 + 8.0] "Mac/802_15_4 wpanCmd link-up 10 9"
  214. #   set tmpTime [format "%.1f" [expr $appTime1 + 8.0]]
  215. #   $ns_ at [expr $appTime1 + 8.0] "$ns_ trace-annotate "(at $tmpTime) link up: 10 -> 9""
  216. #   $ns_ at [expr $appTime2 + 10.0] "$node_(2) node-up"
  217. #   set tmpTime [format "%.1f" [expr $appTime2 + 10.0]]
  218. #   $ns_ at [expr $appTime2 + 10.0] "$ns_ trace-annotate "(at $tmpTime) node up: 2""
  219.    if { "$val(traffic)" == "cbr" } {
  220.     set pktType cbr
  221.    } else {
  222.     set pktType exp
  223.    }
  224.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 16 -d 3 -c blue
  225.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 8 -d 11 -c green4
  226. }
  227. proc ftptraffic { src dst starttime } {
  228.    global ns_ node_
  229.    set tcp($src) [new Agent/TCP]
  230.    eval $tcp($src) set packetSize_ 60
  231.    set sink($dst) [new Agent/TCPSink]
  232.    eval $ns_ attach-agent $node_($src) $tcp($src)
  233.    eval $ns_ attach-agent $node_($dst) $sink($dst)
  234.    eval $ns_ connect $tcp($src) $sink($dst)
  235.    set ftp($src) [new Application/FTP]
  236.    eval $ftp($src) attach-agent $tcp($src)
  237.    $ns_ at $starttime "$ftp($src) start"
  238. }
  239. if { "$val(traffic)" == "ftp" } {
  240.    puts "nTraffic: ftp"
  241.    #Mac/802_15_4 wpanCmd ack4data off
  242.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  243.    ftptraffic 16 3 $appTime1
  244.    ftptraffic 8 11 $appTime2
  245.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  246.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  247.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  248.    $ns_ at $appTime1 "$node_(16) add-mark m1 blue circle"
  249.    $ns_ at $appTime1 "$node_(3) add-mark m2 blue circle"
  250.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) ftp traffic from node 16 to node 3""
  251.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 16 -d 3 -c blue
  252.    Mac/802_15_4 wpanNam FlowClr -p ack -s 3 -d 16 -c blue
  253.    $ns_ at $appTime2 "$node_(8) add-mark m3 green4 circle"
  254.    $ns_ at $appTime2 "$node_(11) add-mark m4 green4 circle"
  255.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) ftp traffic from node 8 to node 11""
  256.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 8 -d 11 -c green4
  257.    Mac/802_15_4 wpanNam FlowClr -p ack -s 11 -d 8 -c green4
  258. }
  259. # defines the node size in nam
  260. for {set i 0} {$i < $val(nn)} {incr i} {
  261. $ns_ initial_node_pos $node_($i) 2
  262. }
  263. # Tell nodes when the simulation ends
  264. for {set i 0} {$i < $val(nn) } {incr i} {
  265.     $ns_ at $stopTime "$node_($i) reset";
  266. }
  267. $ns_ at $stopTime "stop"
  268. $ns_ at $stopTime "puts "nNS EXITING...n""
  269. $ns_ at $stopTime "$ns_ halt"
  270. proc stop {} {
  271.     global ns_ tracefd appTime val env
  272.     $ns_ flush-trace
  273.     close $tracefd
  274.     set hasDISPLAY 0
  275.     foreach index [array names env] {
  276.         #puts "$index: $env($index)"
  277.         if { ("$index" == "DISPLAY") && ("$env($index)" != "") } {
  278.                 set hasDISPLAY 1
  279.         }
  280.     }
  281.     if { ("$val(nam)" == "wpan_demo4.nam") && ("$hasDISPLAY" == "1") } {
  282.      exec nam wpan_demo4.nam &
  283.     }
  284. }
  285. puts "nStarting Simulation..."
  286. $ns_ run