Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.49 KB | None | 0 0
  1. ############################################################################
  2. #
  3. # This code was developed as part of the MIT uAMPS project. (June, 2000)
  4. #
  5. ############################################################################
  6.  
  7. global opt bs
  8.  
  9. source $env(RCA_LIBRARY)/ns-ranode.tcl
  10. source $env(uAMPS_LIBRARY)/ns-bsapp.tcl
  11. source $env(uAMPS_LIBRARY)/extras.tcl
  12. source $env(uAMPS_LIBRARY)/stats.tcl
  13. #Uncomment these lines to use gdb to debug the c code
  14. #source mit/uAMPS/ns-bsapp.tcl
  15. #source mit/uAMPS/extras.tcl
  16. #source mit/uAMPS/stats.tcl
  17. source $env(RCA_LIBRARY)/resources/ns-resource-manager.tcl
  18. source $env(RCA_LIBRARY)/resources/ns-energy-resource.tcl
  19. source $env(RCA_LIBRARY)/resources/ns-neighbor-resource.tcl
  20.  
  21. # ========================================================================
  22. # Default Script Options
  23. # ========================================================================
  24.  
  25. set opt(bsapp) "Application/BSApp" ;# BS application type
  26. set opt(mtype) "" ;# No meta-data used
  27. set opt(nn_) [expr $opt(nn) - 1] ;# Number of non-BS nodes
  28. set opt(bsID) $opt(nn_) ;# BS node number
  29. set opt(bsCode) 0 ;# Spreading code for BS
  30. set opt(quiet) 1 ;# 0=print info, 1=quiet
  31.  
  32. set opt(bw) 1e6 ;# 1 Mbps radio speed
  33. set opt(delay) 1e-12 ;# Links delay
  34. set opt(prop_speed) 3e8; ;# Meters per second
  35. set opt(ll) RCALinkLayer ;# Arpless link-layer
  36. set opt(mac) Mac/Sensor ;# Sensor mac protocol
  37. set opt(ifq) Queue/DropTail ;# DropTail Q
  38. set opt(ifqlen) 100 ;# Max packets in ifq
  39. set opt(netif) Phy/WirelessPhy ;# Wireless channel
  40. set opt(ant) Antenna/OmniAntenna ;# Omnidirectional antena
  41.  
  42. # Time required to transmit numbytes bytes of data
  43. proc TxTime {numbytes} {
  44. global opt
  45. return [expr $numbytes*8/$opt(bw)]
  46. }
  47.  
  48. set opt(hdr_size) 25 ;# Bytes for header
  49. set opt(sig_size) 500 ;# Bytes for data signal
  50. # Packet transmission time
  51. set opt(slot_time) [expr [TxTime [expr $opt(sig_size)+$opt(hdr_size)]]]
  52. # Spread-spectrum packet transmission time
  53. set opt(ss_slot_time) [expr $opt(slot_time) * $opt(spreading)]
  54. # Maximum TDMA frame time (if all nodes in one cluster)
  55. set opt(frame_time) [expr $opt(ss_slot_time) * $opt(nn_)]
  56.  
  57. set opt(ch_change) [expr 10 * $opt(init_energy)] ;# Time for each round
  58. set opt(check_energy) 10 ;# Time btwn energy traces
  59.  
  60. set opt(freq) 914e+6 ;# Carrier frequency
  61. set opt(L) 1.0 ;# System (non-propogation) loss
  62. set opt(Gt) 1.0 ;# Tx antenna gain
  63. set opt(Gr) 1.0 ;# Rx antenna gain
  64. set opt(ht) 1.5 ;# Antenna height
  65. set opt(CSThresh) 1e-9 ;# Receive threshold is 1 nW
  66. set opt(RXThresh) 6e-9 ;# Success threshold is 6 nW
  67. set PI 3.1415926
  68. set l [expr 3e8 / $opt(freq)] ;# Wavelength of carrier
  69.  
  70. ############################################################################
  71. #
  72. # Energy Models
  73. #
  74. ############################################################################
  75.  
  76. # Efriss_amp = RXThresh * (4pi)^2 / (Rb Gt Gr lambda^2)
  77. set opt(Efriss_amp) [expr [expr 1.1 * $opt(RXThresh) * 16 * $PI * $PI] / \
  78. [expr $opt(bw) * $opt(Gt) * $opt(Gr) * $l * $l]]
  79. # Etwo_ray_amp = RXThresh / (Rb Gt Gr ht^2 hr^2)
  80. set opt(Etwo_ray_amp) [expr 1.1 * $opt(RXThresh) / \
  81. [expr $opt(bw) * $opt(Gt) * $opt(Gr) * \
  82. $opt(ht) * $opt(ht) * $opt(ht) * $opt(ht)]]
  83. set opt(EXcvr) 50e-9 ;# Energy for radio circuitry
  84. set opt(e_bf) 5e-9 ;# Beamforming energy (J/bit)
  85. set opt(Esense) 0 ;# Sensing energy (J/bit)
  86. set opt(thresh_energy) 0.00 ;# Threshold for power adaptation
  87. set opt(Pidle) 0 ;# Idle power (W)
  88. set opt(Psleep) 0 ;# Sleep power (W)
  89.  
  90.  
  91. # ===== Get rid of the warnings in bind ================================
  92. Resource/Energy set energyLevel_ $opt(init_energy)
  93. Resource/Energy set alarmLevel_ $opt(thresh_energy)
  94. Resource/Energy set expended_ 0
  95.  
  96. Agent/RCAgent set sport_ 0
  97. Agent/RCAgent set dport_ 0
  98. Agent/RCAgent set packetMsg_ 0
  99. Agent/RCAgent set distEst_ 0
  100. Agent/RCAgent set packetSize_ 0
  101. Agent/BSAgent set packetMsg_ 0
  102. Agent/BSAgent set packetSize_ 0
  103. Agent/BSAgent set recv_code_ 0
  104.  
  105. RCALinkLayer set delay_ 25us
  106. RCALinkLayer set bandwidth_ 0
  107. RCALinkLayer set off_prune_ 0
  108. RCALinkLayer set off_CtrMcast_ 0
  109. RCALinkLayer set macDA_ 0
  110. RCALinkLayer set debug_ 0
  111. RCALinkLayer set avoidReordering_ 0
  112.  
  113. Phy/WirelessPhy set bandwidth_ $opt(bw)
  114. Phy/WirelessPhy set CSThresh_ $opt(CSThresh)
  115. Phy/WirelessPhy set RXThresh_ $opt(RXThresh)
  116. Phy/WirelessPhy set Efriss_amp_ $opt(Efriss_amp)
  117. Phy/WirelessPhy set Etwo_ray_amp_ $opt(Etwo_ray_amp)
  118. Phy/WirelessPhy set EXcvr_ $opt(EXcvr)
  119. Phy/WirelessPhy set freq_ $opt(freq)
  120. Phy/WirelessPhy set L_ $opt(L)
  121. Phy/WirelessPhy set sleep_ 0
  122. Phy/WirelessPhy set alive_ 1
  123. Phy/WirelessPhy set ss_ $opt(spreading)
  124. Phy/WirelessPhy set dist_ 0
  125.  
  126. Antenna/OmniAntenna set Gt_ $opt(Gt)
  127. Antenna/OmniAntenna set Gr_ $opt(Gr)
  128. Antenna/OmniAntenna set Z_ $opt(ht)
  129.  
  130. set MacTrace OFF
  131. Mac set bandwidth_ $opt(bw)
  132. Mac/Sensor set code_ 0
  133. Mac/Sensor set node_num_ 0
  134. Mac/Sensor set ss_ $opt(spreading)
  135. Mac/Sensor set CHheard_ 0
  136. Mac/Sensor set myADVnum_ 0
  137.  
  138. set bs [list $opt(bs_x) $opt(bs_y)]
  139. set BS_NODE 1
  140.  
  141. set outf [open "$opt(dirname)/conditions.txt" a]
  142. puts $outf "Simulation will stop after $opt(stop) seconds."
  143. puts $outf "Base station at ($opt(bs_x), $opt(bs_y))"
  144. if {$opt(eq_energy) == 1} {
  145. puts $outf "Each node starting with $opt(init_energy) Joules of energy.\n"
  146. }
  147. puts $outf "Energy Model:"
  148. puts $outf "\t\tRXThresh = $opt(RXThresh)"
  149. puts $outf "\t\tCSThresh = $opt(CSThresh)"
  150. puts $outf "\t\tRb = $opt(bw)"
  151. puts $outf "\t\tExcvr = $opt(EXcvr)"
  152. puts $outf "\t\tEfriss_amp = $opt(Efriss_amp)"
  153. puts $outf "\t\tEtwo_ray_amp = $opt(Etwo_ray_amp)"
  154. puts $outf "\t\tEbf = $opt(e_bf)"
  155. puts $outf "\t\tPidle = $opt(Pidle)"
  156. puts $outf "\t\tPsleep = $opt(Psleep)\n"
  157. close $outf
  158.  
  159. set initialized 0
  160. set rng_ [new RNG]
  161.  
  162. proc leach-create-mobile-node { id } {
  163. global ns_ chan prop topo tracefd opt node_
  164. global initialized BS_NODE rng_
  165.  
  166. if {$initialized == 0} {
  167. sens_init
  168. set initialized 1
  169. }
  170.  
  171. # Create nodes.
  172. if {$id != $opt(nn_)} {
  173. puts -nonewline "$id "
  174. set node_($id) [new MobileNode/ResourceAwareNode]
  175. } else {
  176. puts "($opt(nn_) == BS)"
  177. set node_($id) [new MobileNode/ResourceAwareNode $BS_NODE]
  178. }
  179.  
  180. set node $node_($id)
  181. if {$id != $opt(nn_)} {
  182. # Set initial node energy.
  183. if {$opt(eq_energy) == 1} {
  184. $node set-energy $opt(init_energy) $opt(thresh_energy)
  185. } else {
  186. #set E [$rng_ uniform $opt(lower_e) $opt(upper_e)]
  187. #set rn [$rng_ uniform 0 1]
  188. #if {$rn < 0.1} {
  189. # set E 200
  190. #} else {
  191. # set E 2
  192. #}
  193. set high_e_nodes [list 97 19 12 87 8 22 83 55 34 72]
  194. if {[lsearch $high_e_nodes $id] == -1} {
  195. set E 2
  196. } else {
  197. set E 200
  198. }
  199. $node set-energy $E $opt(thresh_energy)
  200. set initf [open "$opt(dirname)/init.energy" a]
  201. puts $initf "$id\t$E"
  202. close $initf
  203. }
  204. } else {
  205. # Base station has an infinite amount of energy.
  206. $node set-energy 50000 $opt(thresh_energy)
  207. }
  208.  
  209. # Disable random motion.
  210. $node random-motion 0
  211. $node topography $topo
  212.  
  213. if ![info exist inerrProc_] {
  214. set inerrProc_ ""
  215. }
  216. if ![info exist outerrProc_] {
  217. set outerrProc_ ""
  218. }
  219. if ![info exist FECProc_] {
  220. set FECProc_ ""
  221. }
  222.  
  223. # Connect the node to the channel.
  224. $node add-interface $chan $prop $opt(ll) $opt(mac) \
  225. $opt(ifq) $opt(ifqlen) $opt(netif) $opt(ant) \
  226. $topo $inerrProc_ $outerrProc_ $FECProc_
  227.  
  228. # Set up the trace target.
  229. set T [new Trace/Generic]
  230. $T target [$ns_ set nullAgent_]
  231. $T attach $tracefd
  232. $T set src_ $id
  233. $node log-target $T
  234.  
  235. $ns_ at 0.0 "$node_($id) start-app"
  236. }
  237.  
  238. proc sens_init {} {
  239.  
  240. global ns_ opt ns
  241.  
  242. # The timer code has hard-coded the global variable ns to
  243. # be the simulator.
  244. set ns $ns_
  245.  
  246. # Remove old trace files.
  247. catch "eval exec rm [glob -nocomplain $opt(dirname)/TDMAschedule.*.txt]"
  248. catch "exec rm $opt(dirname)/$opt(filename).energy"
  249. catch "exec rm $opt(dirname)/$opt(filename).data"
  250. catch "exec rm $opt(dirname)/$opt(filename).alive"
  251. catch "exec rm $opt(dirname)/startup.energy"
  252. catch "exec rm $opt(dirname)/init.energy"
  253.  
  254. puts "Creating sensor nodes..."
  255.  
  256. sens_init_stats "$opt(dirname)/$opt(filename)"
  257.  
  258. $ns_ at $opt(stop) "sens_finish"
  259. # Start logging simulation statistics.
  260. $ns_ at $opt(check_energy) "sens_gather_stats"
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement