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

通讯编程

开发平台:

Visual C++

  1. #############################################
  2. #      Peer-to-Peer Tree 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)             11                         ;# number of mobilenodes
  21. set val(rp)             AODV                       ;# routing protocol
  22. set val(x) 50
  23. set val(y) 50
  24. set val(nam) wpan_demo3.nam
  25. set val(traffic) ftp                        ;# 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          8.3 ;# in seconds 
  38. set appTime2          8.6 ;# in seconds 
  39. set stopTime            100 ;# in seconds 
  40. # Initialize Global Variables
  41. set ns_ [new Simulator]
  42. set tracefd     [open ./wpan_demo3.tr w]
  43. $ns_ trace-all $tracefd
  44. if { "$val(nam)" == "wpan_demo3.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. # For model 'TwoRayGround'
  53. set dist(5m)  7.69113e-06
  54. set dist(9m)  2.37381e-06
  55. set dist(10m) 1.92278e-06
  56. set dist(11m) 1.58908e-06
  57. set dist(12m) 1.33527e-06
  58. set dist(13m) 1.13774e-06
  59. set dist(14m) 9.81011e-07
  60. set dist(15m) 8.54570e-07
  61. set dist(16m) 7.51087e-07
  62. set dist(20m) 4.80696e-07
  63. set dist(25m) 3.07645e-07
  64. set dist(30m) 2.13643e-07
  65. set dist(35m) 1.56962e-07
  66. set dist(40m) 1.20174e-07
  67. Phy/WirelessPhy set CSThresh_ $dist(15m)
  68. Phy/WirelessPhy set RXThresh_ $dist(15m)
  69. # set up topography object
  70. set topo       [new Topography]
  71. $topo load_flatgrid $val(x) $val(y)
  72. # Create God
  73. set god_ [create-god $val(nn)]
  74. set chan_1_ [new $val(chan)]
  75. # configure node
  76. $ns_ node-config -adhocRouting $val(rp) 
  77. -llType $val(ll) 
  78. -macType $val(mac) 
  79. -ifqType $val(ifq) 
  80. -ifqLen $val(ifqlen) 
  81. -antType $val(ant) 
  82. -propType $val(prop) 
  83. -phyType $val(netif) 
  84. -topoInstance $topo 
  85. -agentTrace OFF 
  86. -routerTrace OFF 
  87. -macTrace ON 
  88. -movementTrace OFF 
  89.                 #-energyModel "EnergyModel"
  90.                 #-initialEnergy 1
  91.                 #-rxPower 0.3
  92.                 #-txPower 0.3
  93. -channel $chan_1_ 
  94. for {set i 0} {$i < $val(nn) } {incr i} {
  95. set node_($i) [$ns_ node]
  96. $node_($i) random-motion 0 ;# disable random motion
  97. }
  98. source ./wpan_demo3.scn
  99. $ns_ at 0.0 "$node_(0) NodeLabel PAN Coor"
  100. $ns_ at 0.0 "$node_(0) sscs startPANCoord 1" ;# startPANCoord <txBeacon=1> <BO=3> <SO=3>
  101. $ns_ at 0.5 "$node_(1) sscs startDevice 1 1 1"  ;# startDevice <isFFD=1> <assoPermit=1> <txBeacon=0> <BO=3> <SO=3>
  102. $ns_ at 1.5 "$node_(2) sscs startDevice 1 1 1"
  103. $ns_ at 2.5 "$node_(3) sscs startDevice 1 1 1"
  104. $ns_ at 3.5 "$node_(4) sscs startDevice 1 1 1"
  105. $ns_ at 4.5 "$node_(5) sscs startDevice 1 1 1"
  106. $ns_ at 5.5 "$node_(6) sscs startDevice 0"
  107. $ns_ at 5.8 "$node_(7) sscs startDevice 0"
  108. $ns_ at 6.5 "$node_(8) sscs startDevice 0"
  109. $ns_ at 6.8 "$node_(9) sscs startDevice 0"
  110. $ns_ at 7.0 "$node_(10) sscs startDevice 0"
  111. $ns_ at 6.0 "$node_(3) sscs stopBeacon"
  112. $ns_ at 8.0 "$node_(3) sscs startBeacon"
  113. $ns_ at 9.0 "$node_(5) sscs startBeacon 4 4" ;# change beacon order and superframe order
  114. $ns_ at 10.0 "$node_(4) sscs stopBeacon"
  115. Mac/802_15_4 wpanNam PlaybackRate 3ms
  116. $ns_ at $appTime1 "puts "nTransmitting data ...n""
  117. # Setup traffic flow between nodes
  118. proc cbrtraffic { src dst interval starttime } {
  119.    global ns_ node_
  120.    set udp_($src) [new Agent/UDP]
  121.    eval $ns_ attach-agent $node_($src) $udp_($src)
  122.    set null_($dst) [new Agent/Null]
  123.    eval $ns_ attach-agent $node_($dst) $null_($dst)
  124.    set cbr_($src) [new Application/Traffic/CBR]
  125.    eval $cbr_($src) set packetSize_ 70
  126.    eval $cbr_($src) set interval_ $interval
  127.    eval $cbr_($src) set random_ 0
  128.    #eval $cbr_($src) set maxpkts_ 10000
  129.    eval $cbr_($src) attach-agent $udp_($src)
  130.    eval $ns_ connect $udp_($src) $null_($dst)
  131.    $ns_ at $starttime "$cbr_($src) start"
  132. }
  133. proc poissontraffic { src dst interval starttime } {
  134.    global ns_ node_
  135.    set udp($src) [new Agent/UDP]
  136.    eval $ns_ attach-agent $node_($src) $udp($src)
  137.    set null($dst) [new Agent/Null]
  138.    eval $ns_ attach-agent $node_($dst) $null($dst)
  139.    set expl($src) [new Application/Traffic/Exponential]
  140.    eval $expl($src) set packetSize_ 70
  141.    eval $expl($src) set burst_time_ 0
  142.    eval $expl($src) set idle_time_ [expr $interval*1000.0-70.0*8/250]ms ;# idle_time + pkt_tx_time = interval
  143.    eval $expl($src) set rate_ 250k
  144.    eval $expl($src) attach-agent $udp($src)
  145.    eval $ns_ connect $udp($src) $null($dst)
  146.    $ns_ at $starttime "$expl($src) start"
  147. }
  148. if { ("$val(traffic)" == "cbr") || ("$val(traffic)" == "poisson") } {
  149.    puts "nTraffic: $val(traffic)"
  150.    #Mac/802_15_4 wpanCmd ack4data on
  151.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  152.    $ns_ at $appTime1 "Mac/802_15_4 wpanNam PlaybackRate 0.50ms"
  153.    $ns_ at [expr $appTime1 + 0.5] "Mac/802_15_4 wpanNam PlaybackRate 1.5ms"
  154.    $val(traffic)traffic 1 6 0.2 $appTime1
  155.    $val(traffic)traffic 4 10 0.2 $appTime2
  156.    $ns_ at $appTime1 "$node_(1) add-mark m1 blue circle"
  157.    $ns_ at $appTime1 "$node_(6) add-mark m2 blue circle"
  158.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) $val(traffic) traffic from node 1 to node 6""
  159.    $ns_ at $appTime2 "$node_(4) add-mark m3 green4 circle"
  160.    $ns_ at $appTime2 "$node_(10) add-mark m4 green4 circle"
  161.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) $val(traffic) traffic from node 4 to node 10""
  162.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  163.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  164.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  165.    if { "$val(traffic)" == "cbr" } {
  166.     set pktType cbr
  167.    } else {
  168.     set pktType exp
  169.    }
  170.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 1 -d 6 -c blue
  171.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 4 -d 10 -c green4
  172. }
  173. proc ftptraffic { src dst starttime } {
  174.    global ns_ node_
  175.    set tcp($src) [new Agent/TCP]
  176.    eval $tcp($src) set packetSize_ 50
  177.    set sink($dst) [new Agent/TCPSink]
  178.    eval $ns_ attach-agent $node_($src) $tcp($src)
  179.    eval $ns_ attach-agent $node_($dst) $sink($dst)
  180.    eval $ns_ connect $tcp($src) $sink($dst)
  181.    set ftp($src) [new Application/FTP]
  182.    eval $ftp($src) attach-agent $tcp($src)
  183.    $ns_ at $starttime "$ftp($src) start"
  184. }
  185.      
  186. if { "$val(traffic)" == "ftp" } {
  187.    puts "nTraffic: ftp"
  188.    #Mac/802_15_4 wpanCmd ack4data off
  189.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  190.    $ns_ at $appTime1 "Mac/802_15_4 wpanNam PlaybackRate 0.17ms"
  191.    $ns_ at [expr $appTime1 + 0.5] "Mac/802_15_4 wpanNam PlaybackRate 1.5ms"
  192.    ftptraffic 1 6 $appTime1
  193.    ftptraffic 4 10 $appTime2
  194.    $ns_ at $appTime1 "$node_(1) add-mark m1 blue circle"
  195.    #$ns_ at $stopTime "$node_(1) delete-mark m1"
  196.    $ns_ at $appTime1 "$node_(6) add-mark m2 blue circle"
  197.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) ftp traffic from node 1 to node 6""
  198.    $ns_ at $appTime2 "$node_(4) add-mark m3 green4 circle"
  199.    $ns_ at $appTime2 "$node_(10) add-mark m4 green4 circle"
  200.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) ftp traffic from node 4 to node 10""
  201.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  202.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  203.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  204.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 1 -d 6 -c blue
  205.    Mac/802_15_4 wpanNam FlowClr -p ack -s 6 -d 1 -c blue
  206.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 4 -d 10 -c green4
  207.    Mac/802_15_4 wpanNam FlowClr -p ack -s 10 -d 4 -c green4
  208. }
  209. # defines the node size in nam
  210. for {set i 0} {$i < $val(nn)} {incr i} {
  211. $ns_ initial_node_pos $node_($i) 2
  212. }
  213. # Tell nodes when the simulation ends
  214. for {set i 0} {$i < $val(nn) } {incr i} {
  215.     $ns_ at $stopTime "$node_($i) reset";
  216. }
  217. $ns_ at $stopTime "stop"
  218. $ns_ at $stopTime "puts "nNS EXITING...n""
  219. $ns_ at $stopTime "$ns_ halt"
  220. proc stop {} {
  221.     global ns_ tracefd appTime val env
  222.     $ns_ flush-trace
  223.     close $tracefd
  224.     set hasDISPLAY 0
  225.     foreach index [array names env] {
  226.         #puts "$index: $env($index)"
  227.         if { ("$index" == "DISPLAY") && ("$env($index)" != "") } {
  228.                 set hasDISPLAY 1
  229.         }
  230.     }
  231.     if { ("$val(nam)" == "wpan_demo3.nam") && ("$hasDISPLAY" == "1") } {
  232.      exec nam wpan_demo3.nam &
  233.     }
  234. }
  235. puts "nStarting Simulation..."
  236. $ns_ run