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

通讯编程

开发平台:

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)             101                        ;# number of mobilenodes
  21. set val(rp)             AODV                       ;# AODV Routing
  22. set val(x) 80
  23. set val(y) 80
  24. set val(tr) wpan_demo5.tr
  25. set val(nam) wpan_demo5.nam
  26. set val(nodeDown) yes
  27. set val(errRate) 0                          ;# %
  28. set val(traffic) mix                        ;# mix/cbr/poisson/ftp
  29. set val(trInterval) 0.2                        ;# in seconds
  30. #read command line arguments
  31. proc getCmdArgu {argc argv} {
  32.         global val
  33.         for {set i 0} {$i < $argc} {incr i} {
  34.                 set arg [lindex $argv $i]
  35.                 if {[string range $arg 0 0] != "-"} continue
  36.                 set name [string range $arg 1 end]
  37.                 set val($name) [lindex $argv [expr $i+1]]
  38.         }
  39. }
  40. getCmdArgu $argc $argv
  41. set appTime1          20.5 ;# in seconds 
  42. set appTime2          20.8 ;# in seconds 
  43. set stopTime            100 ;# in seconds 
  44. # Initialize Global Variables
  45. set ns_ [new Simulator]
  46. set tracefd     [open ./$val(tr) w]
  47. $ns_ trace-all $tracefd
  48. if { "$val(nam)" == "wpan_demo5.nam" } {
  49.         set namtrace     [open ./$val(nam) w]
  50.         $ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
  51. }
  52. $ns_ puts-nam-traceall {# nam4wpan #} ;# inform nam that this is a trace file for wpan (special handling needed)
  53. Mac/802_15_4 wpanCmd verbose on
  54. Mac/802_15_4 wpanNam namStatus on ;# default = off (should be turned on before other 'wpanNam' commands can work)
  55. #Mac/802_15_4 wpanNam ColFlashClr gold ;# default = gold
  56. #Mac/802_15_4 wpanNam NodeFailClr grey ;# default = grey
  57. # For model 'TwoRayGround'
  58. set dist(5m)  7.69113e-06
  59. set dist(9m)  2.37381e-06
  60. set dist(10m) 1.92278e-06
  61. set dist(11m) 1.58908e-06
  62. set dist(12m) 1.33527e-06
  63. set dist(13m) 1.13774e-06
  64. set dist(14m) 9.81011e-07
  65. set dist(15m) 8.54570e-07
  66. set dist(16m) 7.51087e-07
  67. set dist(20m) 4.80696e-07
  68. set dist(25m) 3.07645e-07
  69. set dist(30m) 2.13643e-07
  70. set dist(35m) 1.56962e-07
  71. set dist(40m) 1.20174e-07
  72. Phy/WirelessPhy set CSThresh_ $dist(9m)
  73. Phy/WirelessPhy set RXThresh_ $dist(9m)
  74. # set up topography object
  75. set topo       [new Topography]
  76. $topo load_flatgrid $val(x) $val(y)
  77. # Create God
  78. set god_ [create-god $val(nn)]
  79. set chan_1_ [new $val(chan)]
  80. # configure node
  81. $ns_ node-config -adhocRouting $val(rp) 
  82. -llType $val(ll) 
  83. -macType $val(mac) 
  84. -ifqType $val(ifq) 
  85. -ifqLen $val(ifqlen) 
  86. -antType $val(ant) 
  87. -propType $val(prop) 
  88. -phyType $val(netif) 
  89. -topoInstance $topo 
  90. -agentTrace OFF 
  91. -routerTrace OFF 
  92. -macTrace ON 
  93. -movementTrace OFF 
  94.                 #-energyModel "EnergyModel" 
  95.                 #-initialEnergy 1 
  96.                 #-rxPower 0.3 
  97.                 #-txPower 0.3 
  98. -channel $chan_1_
  99. # insert error model
  100. if {$val(errRate) != 0} {
  101. $ns_ node-config -errProc UniformErr
  102. }
  103. proc UniformErr {} {
  104.         set err [new ErrorModel]
  105.         $err unit pkt 
  106.         $err set rate_ [expr $val(errRate) / 100.0]
  107.         #$err drop-target [new Agent/Null]
  108.         return $err
  109. }
  110. for {set i 0} {$i < $val(nn) } {incr i} {
  111. set node_($i) [$ns_ node]
  112. $node_($i) random-motion 0 ;# disable random motion
  113. }
  114. #set Cm 4
  115. #set Lm 7
  116. #Agent/ZBR Cm $Cm
  117. #Agent/ZBR Lm $Lm
  118. #Agent/ZBR BSize calc
  119. #set BlockSize [Agent/ZBR BSize]
  120. #set cskip0 [Agent/ZBR CSkip 0]
  121. #set cskip1 [Agent/ZBR CSkip 1]
  122. #set cskip2 [Agent/ZBR CSkip 2]
  123. #set cskip3 [Agent/ZBR CSkip 3]
  124. #set cskip4 [Agent/ZBR CSkip 4]
  125. #set cskip5 [Agent/ZBR CSkip 5]
  126. #set cskip6 [Agent/ZBR CSkip 6]
  127. #puts [format "Cm:        %s" $Cm]
  128. #puts [format "Lm:        %s" $Lm]
  129. #puts [format "BlockSize: %s" $BlockSize]
  130. #$ns_ at 0.0 "$ns_ trace-annotate "Cm = $Cm, Lm = $Lm, BlockSize = $BlockSize, CSkip0 = $cskip0, CSkip1 = $cskip1, CSkip2 = $cskip2, CSkip3 = $cskip3, CSkip4 = $cskip4, CSkip5 = $cskip5, CSkip6 = $cskip6""
  131. source ./wpan_demo5.scn
  132. $ns_ at 0.0 "$node_(0) NodeLabel "PAN Coor""
  133. #for {set i 1} {$i < $val(nn)} {incr i} {
  134. # set RNType [eval $node_($i) RNType]
  135. # if {$RNType == "0"} {
  136. # $ns_ at 0.0 "$node_($i) NodeLabel -"
  137. # } else {
  138. # $ns_ at 0.0 "$node_($i) NodeLabel +"
  139. # }
  140. #}
  141. $ns_ at 0.0 "$node_(0) sscs startCTPANCoord 0" ;# startCTPANCoord <txBeacon=1> <BO=3> <SO=3>
  142. $ns_ at 0.5 "$node_(1) sscs startCTDevice"   ;# startCTDevice <isFFD=1> <assoPermit=1> <txBeacon=0> <BO=3> <SO=3>
  143. $ns_ at 0.8 "$node_(2) sscs startCTDevice"
  144. $ns_ at 1.3 "$node_(3) sscs startCTDevice"
  145. $ns_ at 1.8 "$node_(4) sscs startCTDevice"
  146. $ns_ at 2.3 "$node_(5) sscs startCTDevice 1 1 1"
  147. $ns_ at 2.4 "$node_(6) sscs startCTDevice 1 1 1"
  148. $ns_ at 2.5 "$node_(7) sscs startCTDevice 1 1 1"
  149. $ns_ at 2.6 "$node_(8) sscs startCTDevice 1 1 1"
  150. $ns_ at 3.3 "$node_(9) sscs startCTDevice"
  151. $ns_ at 3.8 "$node_(10) sscs startCTDevice"
  152. $ns_ at 3.3 "$node_(11) sscs startCTDevice"
  153. $ns_ at 3.8 "$node_(12) sscs startCTDevice"
  154. # ---
  155. for {set i 13} {$i < 17} {incr i} {
  156. $ns_ at 4.3 "$node_($i) sscs startCTDevice"
  157. }
  158. for {set i 17} {$i < 21} {incr i} {
  159. $ns_ at 5.3 "$node_($i) sscs startCTDevice"
  160. }
  161. for {set i 21} {$i < 25} {incr i} {
  162. $ns_ at 6.3 "$node_($i) sscs startCTDevice"
  163. }
  164. # ---
  165. for {set i 25} {$i < 29} {incr i} {
  166. $ns_ at 7.3 "$node_($i) sscs startCTDevice 1 1 1"
  167. }
  168. for {set i 29} {$i < 33} {incr i} {
  169. $ns_ at 7.3 "$node_($i) sscs startCTDevice"
  170. }
  171. for {set i 33} {$i < 41} {incr i} {
  172. $ns_ at 8.3 "$node_($i) sscs startCTDevice"
  173. }
  174. # ---
  175. for {set i 41} {$i < 49} {incr i} {
  176. $ns_ at 9.3 "$node_($i) sscs startCTDevice"
  177. }
  178. for {set i 49} {$i < 57} {incr i} {
  179. $ns_ at 10.3 "$node_($i) sscs startCTDevice"
  180. }
  181. for {set i 57} {$i < 61} {incr i} {
  182. $ns_ at 11.3 "$node_($i) sscs startCTDevice"
  183. }
  184. # ---
  185. for {set i 61} {$i < 65} {incr i} {
  186. $ns_ at 12.3 "$node_($i) sscs startCTDevice 0"
  187. }
  188. for {set i 65} {$i < 73} {incr i} {
  189. $ns_ at 12.3 "$node_($i) sscs startCTDevice"
  190. }
  191. for {set i 73} {$i < 77} {incr i} {
  192. $ns_ at 13.3 "$node_($i) sscs startCTDevice 0"
  193. }
  194. for {set i 77} {$i < 80} {incr i} {
  195. $ns_ at 13.3 "$node_($i) sscs startCTDevice"
  196. }
  197. for {set i 80} {$i < 85} {incr i} {
  198. $ns_ at 13.3 "$node_($i) sscs startCTDevice 0"
  199. }
  200. # ---
  201. for {set i 85} {$i < 93} {incr i} {
  202. $ns_ at 14.3 "$node_($i) sscs startCTDevice 0"
  203. }
  204. for {set i 93} {$i < 101} {incr i} {
  205. $ns_ at 15.3 "$node_($i) sscs startCTDevice 0"
  206. }
  207. Mac/802_15_4 wpanNam PlaybackRate 12ms
  208. $ns_ at $appTime1 "Mac/802_15_4 wpanNam PlaybackRate 1.0ms"
  209. $ns_ at [expr $appTime1 + 0.5] "Mac/802_15_4 wpanNam PlaybackRate 2.0ms"
  210. $ns_ at $appTime1 "puts "nTransmitting data ...n""
  211. # Setup traffic flow between nodes
  212. proc cbrtraffic { src dst interval starttime } {
  213.    global ns_ node_
  214.    set udp_($src) [new Agent/UDP]
  215.    eval $ns_ attach-agent $node_($src) $udp_($src)
  216.    set null_($dst) [new Agent/Null]
  217.    eval $ns_ attach-agent $node_($dst) $null_($dst)
  218.    set cbr_($src) [new Application/Traffic/CBR]
  219.    eval $cbr_($src) set packetSize_ 80
  220.    eval $cbr_($src) set interval_ $interval
  221.    eval $cbr_($src) set random_ 0
  222.    #eval $cbr_($src) set maxpkts_ 10000
  223.    eval $cbr_($src) attach-agent $udp_($src)
  224.    eval $ns_ connect $udp_($src) $null_($dst)
  225.    $ns_ at $starttime "$cbr_($src) start"
  226. }
  227. proc poissontraffic { src dst interval starttime } {
  228.    global ns_ node_
  229.    set udp($src) [new Agent/UDP]
  230.    eval $ns_ attach-agent $node_($src) $udp($src)
  231.    set null($dst) [new Agent/Null]
  232.    eval $ns_ attach-agent $node_($dst) $null($dst)
  233.    set expl($src) [new Application/Traffic/Exponential]
  234.    eval $expl($src) set packetSize_ 70
  235.    eval $expl($src) set burst_time_ 0
  236.    eval $expl($src) set idle_time_ [expr $interval*1000.0-70.0*8/250]ms ;# idle_time + pkt_tx_time = interval
  237.    eval $expl($src) set rate_ 250k
  238.    eval $expl($src) attach-agent $udp($src)
  239.    eval $ns_ connect $udp($src) $null($dst)
  240.    $ns_ at $starttime "$expl($src) start"
  241. }
  242. if {$val(rp) == "ZBR"} {
  243. Mac/802_15_4 wpanCmd callBack 2 ;# 0=none; 1=failure only (default); 2=both failure and success
  244. }
  245. if { ("$val(traffic)" == "mix") || ("$val(traffic)" == "cbr") || ("$val(traffic)" == "poisson") } {
  246.    if { "$val(traffic)" == "mix" } {
  247.     set trafficName "cbr + poisson"
  248.     set traffic1 cbr
  249.     set traffic2 poisson
  250.    } else {
  251.     set trafficName $val(traffic)
  252.     set traffic1 $val(traffic)
  253.     set traffic2 $val(traffic)
  254.    }
  255.    puts "nTraffic: $trafficName"
  256.    #Mac/802_15_4 wpanCmd ack4data on
  257.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  258.    ${traffic1}traffic 67 45 $val(trInterval) $appTime1
  259.    ${traffic2}traffic 71 74 $val(trInterval) $appTime2
  260.    if { "$val(nodeDown)" == "yes" } {
  261.     $ns_ at [expr $appTime2 + 3.0] "$node_(0) node-down"
  262.     set tmpTime [format "%.1f" [expr $appTime2 + 3.0]]
  263.     $ns_ at [expr $appTime2 + 3.0] "$ns_ trace-annotate "(at $tmpTime) node down: 0""
  264. $ns_ at [expr $appTime2 + 10.0] "$node_(0) node-up"
  265. set tmpTime [format "%.1f" [expr $appTime2 + 10.0]]
  266. $ns_ at [expr $appTime2 + 10.0] "$ns_ trace-annotate "(at $tmpTime) node up: 0""
  267.    }
  268.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  269.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  270.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  271.    $ns_ at $appTime1 "$node_(67) add-mark m1 blue circle"
  272.    $ns_ at $appTime1 "$node_(45) add-mark m2 blue circle"
  273.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) $traffic1 traffic from node 67 to node 45""
  274.    $ns_ at $appTime2 "$node_(71) add-mark m3 green4 circle"
  275.    $ns_ at $appTime2 "$node_(74) add-mark m4 green4 circle"
  276.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) $traffic2 traffic from node 71 to node 74""
  277.    if { "$val(traffic)" == "cbr" } {
  278.     set pktType cbr
  279.     set pktType2 cbr
  280.    } elseif { "$val(traffic)" == "poission" } {
  281.     set pktType exp
  282.     set pktType2 exp
  283.    } else {
  284.     set pktType cbr
  285.     set pktType2 exp
  286.    }
  287.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 67 -d 45 -c blue
  288.    Mac/802_15_4 wpanNam FlowClr -p $pktType2 -s 71 -d 74 -c green4
  289. }
  290. proc ftptraffic { src dst starttime } {
  291.    global ns_ node_
  292.    set tcp($src) [new Agent/TCP]
  293.    eval $tcp($src) set packetSize_ 60
  294.    set sink($dst) [new Agent/TCPSink]
  295.    eval $ns_ attach-agent $node_($src) $tcp($src)
  296.    eval $ns_ attach-agent $node_($dst) $sink($dst)
  297.    eval $ns_ connect $tcp($src) $sink($dst)
  298.    set ftp($src) [new Application/FTP]
  299.    eval $ftp($src) attach-agent $tcp($src)
  300.    $ns_ at $starttime "$ftp($src) start"
  301. }
  302. if { "$val(traffic)" == "ftp" } {
  303.    puts "nTraffic: ftp"
  304.    #Mac/802_15_4 wpanCmd ack4data off
  305.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  306.    ftptraffic 67 45 $appTime1
  307.    ftptraffic 71 74 $appTime2
  308.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  309.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  310.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  311.    $ns_ at $appTime1 "$node_(67) add-mark m1 blue circle"
  312.    $ns_ at $appTime1 "$node_(45) add-mark m2 blue circle"
  313.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) ftp traffic from node 67 to node 45""
  314.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 67 -d 45 -c blue
  315.    Mac/802_15_4 wpanNam FlowClr -p ack -s 45 -d 67 -c blue
  316.    $ns_ at $appTime2 "$node_(71) add-mark m3 green4 circle"
  317.    $ns_ at $appTime2 "$node_(74) add-mark m4 green4 circle"
  318.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) ftp traffic from node 71 to node 74""
  319.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 71 -d 74 -c green4
  320.    Mac/802_15_4 wpanNam FlowClr -p ack -s 74 -d 71 -c green4
  321. }
  322. # defines the node size in nam
  323. for {set i 0} {$i < $val(nn)} {incr i} {
  324. $ns_ initial_node_pos $node_($i) 2
  325. }
  326. # Tell nodes when the simulation ends
  327. for {set i 0} {$i < $val(nn) } {incr i} {
  328.     $ns_ at $stopTime "$node_($i) reset";
  329. }
  330. $ns_ at $stopTime "stop"
  331. $ns_ at $stopTime "puts "nNS EXITING...n""
  332. $ns_ at $stopTime "$ns_ halt"
  333. proc stop {} {
  334.     global ns_ tracefd appTime val env
  335.     $ns_ flush-trace
  336.     close $tracefd
  337.     set hasDISPLAY 0
  338.     foreach index [array names env] {
  339.         #puts "$index: $env($index)"
  340.         if { ("$index" == "DISPLAY") && ("$env($index)" != "") } {
  341.                 set hasDISPLAY 1
  342.         }
  343.     }
  344.     if { ("$val(nam)" == "wpan_demo5.nam") && ("$hasDISPLAY" == "1") } {
  345.      exec nam wpan_demo5.nam &
  346.     }
  347. }
  348. puts "nStarting Simulation..."
  349. $ns_ run