sccdDEV.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from pypdevs.DEVS import *
  2. from pypdevs.infinity import INFINITY
  3. class SCCDclass(AtomicDEVS):
  4. def __init__(self, name=None, default=False):
  5. AtomicDEVS.__init__(self, name)
  6. # Every SCCD class has a connection to each class
  7. self.OUT = self.addOutPort()
  8. self.IN = self.addInPort()
  9. #
  10. self.state = None
  11. # Initial SCCD class should initialize first
  12. self.advance = INFINITY
  13. self.default = default
  14. if default:
  15. self.advance = 0
  16. self.initialized = False
  17. def timeAdvance(self):
  18. return self.advance
  19. def extTransition(self, inputs):
  20. return self.state
  21. def intTransition(self):
  22. return self.state
  23. def outputFnc(self):
  24. return {}
  25. class SCCD(CoupledDEVS):
  26. def __init__(self, sccdObject):
  27. CoupledDEVS.__init__(self, sccdObject.name)
  28. self.inports = []
  29. for _ in sccdObject.inports:
  30. self.inports.append(self.addInPort())
  31. self.outports = []
  32. for _ in sccdObject.outports:
  33. self.outports.append(self.addOutPort())
  34. self.DEVclasses = []
  35. for i in sccdObject.classes:
  36. # Check which class is the initial/default class
  37. default = (i == sccdObject.default_class)
  38. DEVclass = self.addSubModel(SCCDclass(i.name, default))
  39. self.DEVclasses.append(DEVclass)
  40. #self.connectPorts(self.main.OUT, self.field.IN)
  41. #self.connectPorts(self.field.OUT, self.main.IN)