atomic_conf.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. ### Model
  2. from pypdevs.DEVS import *
  3. class TrafficLight(AtomicDEVS):
  4. def __init__(self):
  5. AtomicDEVS.__init__(self, "Light")
  6. self.state = "green"
  7. self.observe = self.addOutPort("observer")
  8. self.interrupt = self.addInPort("interrupt")
  9. def intTransition(self):
  10. state = self.state
  11. return {"red": "green",
  12. "yellow": "red",
  13. "green": "yellow"}[state]
  14. def timeAdvance(self):
  15. state = self.state
  16. return {"red": 60,
  17. "yellow": 3,
  18. "green": 57}[state]
  19. def outputFnc(self):
  20. state = self.state
  21. if state == "red":
  22. v = "green"
  23. elif state == "yellow":
  24. v = "red"
  25. elif state == "green":
  26. v = "yellow"
  27. return {self.observe: [v]}
  28. def extTransition(self, inputs):
  29. inp = inputs[self.interrupt][0]
  30. if inp == "manual":
  31. return "manual"
  32. elif inp == "auto":
  33. if self.state == "manual":
  34. return "red"
  35. def confTransition(self, inputs):
  36. self.elapsed = 0.0
  37. self.state = self.intTransition()
  38. self.state = self.extTransition(inputs)
  39. return self.state
  40. ### Experiment
  41. from pypdevs.simulator import Simulator
  42. model = TrafficLight()
  43. sim = Simulator(model)
  44. sim.setVerbose()
  45. sim.setTerminationTime(500)
  46. sim.simulate()