base_dsdevs.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from pypdevs.DEVS import AtomicDEVS, CoupledDEVS
  2. from pypdevs.simulator import Simulator
  3. class Root(CoupledDEVS):
  4. def __init__(self):
  5. CoupledDEVS.__init__(self, "Root")
  6. self.models = []
  7. # First model
  8. self.models.append(self.addSubModel(Generator()))
  9. # Second model
  10. self.models.append(self.addSubModel(Consumer(0)))
  11. # And connect them
  12. self.connectPorts(self.models[0].outport, self.models[1].inport)
  13. class Generator(AtomicDEVS):
  14. def __init__(self):
  15. AtomicDEVS.__init__(self, "Generator")
  16. # Keep a counter of how many events were sent
  17. self.outport = self.addOutPort("outport")
  18. self.state = 0
  19. def intTransition(self):
  20. # Increment counter
  21. return self.state + 1
  22. def outputFnc(self):
  23. # Send the amount of messages sent on the output port
  24. return {self.outport: [self.state]}
  25. def timeAdvance(self):
  26. # Fixed 1.0
  27. return 1.0
  28. class Consumer(AtomicDEVS):
  29. def __init__(self, count):
  30. AtomicDEVS.__init__(self, "Consumer_%i" % count)
  31. self.inport = self.addInPort("inport")
  32. def extTransition(self, inputs):
  33. for inp in inputs[self.inport]:
  34. print("Got input %i on model %s" % (inp, self.name))
  35. sim = Simulator(Root())
  36. sim.setTerminationTime(5)
  37. sim.simulate()