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

通讯编程

开发平台:

Visual C++

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