首页 > 代码库 > NS Simulation: Scheduling Events (examples inside)
NS Simulation: Scheduling Events (examples inside)
NS Simulation: Scheduling Events
- Simulation time
- A similation system (such as NS) must have a built-in simulation clock - it represents the "clock" in the real world.
- You can examine (read) the value of the simulation clock by using the now command in the Simulator class
- Example::
set ns [new Simulator] $ns now // Returns the current simulation time
- A similation system (such as NS) must have a built-in simulation clock - it represents the "clock" in the real world.
- Events
- An event is an action made by a simulation entity
- An event (action) in a simulation is represented a OTcl command !!!
- Each event happens at a certain time and therefore, each event has an associated event time which is the time when the event will happen
- In simulation, events are scheduled (to happen at some future time)
- To schedule an event, use the at command in the Simulator class
- Example::
set ns [new Simulator] $ns at 1.0 {puts "Point 1: Now = [$ns now]"} $ns at 8.0 {puts "Point 2: Now = [$ns now]"} $ns at 4.0 {puts "Point 3: Now = [$ns now]"} $ns run // Run simulation !
- You will see the following output:
Point 1: Now = 1 Point 3: Now = 4 Point 2: Now = 8
Notice that Point 3 happens before Point 2
- This is what is happening:
set ns [new Simulator] $ns at 1.0 {puts "Point 1: ..."} // Schedule event at time 1.0 $ns at 8.0 {puts "Point 2: ..."} // Schedule event at time 8.0 $ns at 4.0 {puts "Point 3: ..."} // Schedule event at time 4.0 $ns run // Run simulation !
So when the simulation is run, the events are "fired" in chronological order
- An event is an action made by a simulation entity
- Running the NS simulation
- The run command in the Simulation class is used to run the network simuation.
- Example:
set ns [new Simulator] ... (set up simulation network) $ns run // run simulation
- The run command in the Simulation class is used to run the network simuation.
- Stopping an NS simulation
- There is no "stop" command available.
- To stop a running simulation, you must schedule a termination command before you start running the simulation.
- The termination command is usually a Tcl procedure (to wrap up things)
- Example:
set ns [new Simulator] #Define the ‘finish‘ procedure proc finish {} { exit 0 } ... (set up simulation network) #Set simulation end time $ns at 100.0 "finish" $ns run // run simulation
- There is no "stop" command available.
- A simple simulation....
- To give you a taste of simulation, here is a NS script that simulates 2 person "talking" to each other:
proc person1 {x} { global ns puts "Person 1:" puts " Hey, $x, time is [$ns now], it‘s your turn to say something" $ns at [expr [$ns now] + 0.4] "$x person1" } proc person2 {x} { global ns puts "Person 2:" puts " Hey, $x, time is [$ns now], it‘s your turn to say something" $ns at [expr [$ns now] + 0.6] "$x person2" } set ns [new Simulator] $ns at 0 "person1 person2" $ns at 4.5 "exit 0" $ns run
- Example Program: (Demo above code)
- Prog file: click here
- Output when you run this simulation:
Person 1: Hey, person2, time is 0, it‘s your turn to say somethingPerson 2: Hey, person1, time is 0.4, it‘s your turn to say something Person 1: Hey, person2, time is 1, it‘s your turn to say somethingPerson 2: Hey, person1, time is 1.4, it‘s your turn to say somethingPerson 1: Hey, person2, time is 2, it‘s your turn to say somethingPerson 2: Hey, person1, time is 2.4, it‘s your turn to say somethingPerson 1: Hey, person2, time is 3, it‘s your turn to say somethingPerson 2: Hey, person1, time is 3.4, it‘s your turn to say somethingPerson 1: Hey, person2, time is 4, it‘s your turn to say somethingPerson 2: Hey, person1, time is 4.4, it‘s your turn to say something
- To give you a taste of simulation, here is a NS script that simulates 2 person "talking" to each other:
- Example NS Simulation Script
- We will construct an NS simulation script that simulate the following network:
- The following figure is a break down of the NS components that make up the above network:
- Here is the NS (OTcl) Script that creates the above simulation:
#Make a NS simulator set ns [new Simulator] # Define a ‘finish‘ procedure proc finish {} { exit 0 } # Create the nodes: set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] # Create the links: $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 0.3Mb 200ms DropTail $ns duplex-link $n3 $n4 0.5Mb 40ms DropTail $ns duplex-link $n3 $n5 0.5Mb 30ms DropTail # Add a TCP sending module to node n0 set tcp1 [new Agent/TCP/Reno] $ns attach-agent $n0 $tcp1 # Add a TCP receiving module to node n4 set sink1 [new Agent/TCPSink] $ns attach-agent $n4 $sink1 # Direct traffic from "tcp1" to "sink1" $ns connect $tcp1 $sink1 # Setup a FTP traffic generator on "tcp1" set ftp1 [new Application/FTP] $ftp1 attach-agent $tcp1 $ftp1 set type_ FTP (no necessary) # Schedule start/stop times $ns at 0.1 "$ftp1 start" $ns at 100.0 "$ftp1 stop" # Set simulation end time $ns at 125.0 "finish" (Will invoke "exit 0") # Run simulation !!!! $ns run
- Example Program: (Demo above code)
- Prog file: click here
- We will construct an NS simulation script that simulate the following network:
- Problems with the above simulation
- It simulates alright...
- But without producing any data that we can examine !!!
- What we still need to learn is how to add commands in the simulation program to output state variables that we are interested in !!!
- It simulates alright...
http://www.mathcs.emory.edu/~cheung/Courses/558-old/Syllabus/90-NS/2-NS-Prog/events.html
NS Simulation: Scheduling Events (examples inside)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。