mosis24DEVS/examples/tutorial_parallel/atomic_out.py
2017-11-30 08:20:45 +01:00

41 lines
No EOL
798 B
Python

### Model
from pypdevs.DEVS import *
class TrafficLightWithOutput(AtomicDEVS):
def __init__(self):
AtomicDEVS.__init__(self, "Light")
self.state = "green"
self.observe = self.addOutPort("observer")
def intTransition(self):
state = self.state
return {"red": "green",
"yellow": "red",
"green": "yellow"}[state]
def timeAdvance(self):
state = self.state
return {"red": 60,
"yellow": 3,
"green": 57}[state]
def outputFnc(self):
state = self.state
if state == "red":
v = "green"
elif state == "yellow":
v = "red"
elif state == "green":
v = "yellow"
return {self.observe: [v]}
### Experiment
from pypdevs.simulator import Simulator
model = TrafficLightWithOutput()
sim = Simulator(model)
sim.setVerbose()
sim.setTerminationTime(500)
sim.simulate()