target.py 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. """
  2. Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration) and Sam Pieters (DEVS)
  3. Model author: Simon Van Mierlo
  4. Model name: Timer (Threaded Version)
  5. """
  6. from sccd.runtime.DEVS_statecharts_core import *
  7. import time
  8. # package "Timer (Threaded Version)"
  9. class MainAppInstance(RuntimeClassBase):
  10. def __init__(self, atomdevs, id, start_port_id):
  11. RuntimeClassBase.__init__(self, atomdevs, id)
  12. self.semantics.big_step_maximality = StatechartSemantics.TakeMany
  13. self.semantics.internal_event_lifeline = StatechartSemantics.Queue
  14. self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
  15. self.semantics.priority = StatechartSemantics.SourceParent
  16. self.semantics.concurrency = StatechartSemantics.Single
  17. # build Statechart structure
  18. self.build_statechart_structure()
  19. # call user defined constructor
  20. MainAppInstance.user_defined_constructor(self)
  21. port_name = addInputPort("input", start_port_id, True)
  22. atomdevs.state.port_mappings[port_name] = id
  23. port_name = addInputPort("<narrow_cast>", start_port_id)
  24. atomdevs.state.port_mappings[port_name] = id
  25. def user_defined_constructor(self):
  26. self.starting_time = time.time()
  27. def user_defined_destructor(self):
  28. pass
  29. # user defined method
  30. def print_simulated_time(self):
  31. print('SIMTIME = %.2f' % (self.getSimulatedTime() / 1000.0))
  32. # user defined method
  33. def print_wct_time(self):
  34. print('ACTTIME = %.2f' % (time.time() - self.starting_time))
  35. # builds Statechart structure
  36. def build_statechart_structure(self):
  37. # state <root>
  38. self.states[""] = State(0, "", self)
  39. # state /running
  40. self.states["/running"] = ParallelState(1, "/running", self)
  41. # state /running/print_simulated_time
  42. self.states["/running/print_simulated_time"] = State(2, "/running/print_simulated_time", self)
  43. # state /running/print_simulated_time/print_simulated_time
  44. self.states["/running/print_simulated_time/print_simulated_time"] = State(3, "/running/print_simulated_time/print_simulated_time", self)
  45. self.states["/running/print_simulated_time/print_simulated_time"].setEnter(self._running_print_simulated_time_print_simulated_time_enter)
  46. self.states["/running/print_simulated_time/print_simulated_time"].setExit(self._running_print_simulated_time_print_simulated_time_exit)
  47. # state /running/print_wct_time
  48. self.states["/running/print_wct_time"] = State(4, "/running/print_wct_time", self)
  49. # state /running/print_wct_time/print_wct_time
  50. self.states["/running/print_wct_time/print_wct_time"] = State(5, "/running/print_wct_time/print_wct_time", self)
  51. self.states["/running/print_wct_time/print_wct_time"].setEnter(self._running_print_wct_time_print_wct_time_enter)
  52. self.states["/running/print_wct_time/print_wct_time"].setExit(self._running_print_wct_time_print_wct_time_exit)
  53. # state /interrupted
  54. self.states["/interrupted"] = State(6, "/interrupted", self)
  55. # add children
  56. self.states[""].addChild(self.states["/running"])
  57. self.states[""].addChild(self.states["/interrupted"])
  58. self.states["/running"].addChild(self.states["/running/print_simulated_time"])
  59. self.states["/running"].addChild(self.states["/running/print_wct_time"])
  60. self.states["/running/print_simulated_time"].addChild(self.states["/running/print_simulated_time/print_simulated_time"])
  61. self.states["/running/print_wct_time"].addChild(self.states["/running/print_wct_time/print_wct_time"])
  62. self.states[""].fixTree()
  63. self.states[""].default_state = self.states["/running"]
  64. self.states["/running/print_simulated_time"].default_state = self.states["/running/print_simulated_time/print_simulated_time"]
  65. self.states["/running/print_wct_time"].default_state = self.states["/running/print_wct_time/print_wct_time"]
  66. # transition /running/print_simulated_time/print_simulated_time
  67. _running_print_simulated_time_print_simulated_time_0 = Transition(self, self.states["/running/print_simulated_time/print_simulated_time"], [self.states["/running/print_simulated_time/print_simulated_time"]])
  68. _running_print_simulated_time_print_simulated_time_0.setAction(self._running_print_simulated_time_print_simulated_time_0_exec)
  69. _running_print_simulated_time_print_simulated_time_0.setTrigger(Event("_0after"))
  70. self.states["/running/print_simulated_time/print_simulated_time"].addTransition(_running_print_simulated_time_print_simulated_time_0)
  71. # transition /running/print_wct_time/print_wct_time
  72. _running_print_wct_time_print_wct_time_0 = Transition(self, self.states["/running/print_wct_time/print_wct_time"], [self.states["/running/print_wct_time/print_wct_time"]])
  73. _running_print_wct_time_print_wct_time_0.setAction(self._running_print_wct_time_print_wct_time_0_exec)
  74. _running_print_wct_time_print_wct_time_0.setTrigger(Event("_1after"))
  75. self.states["/running/print_wct_time/print_wct_time"].addTransition(_running_print_wct_time_print_wct_time_0)
  76. # transition /interrupted
  77. _interrupted_0 = Transition(self, self.states["/interrupted"], [self.states["/interrupted"]])
  78. _interrupted_0.setAction(self._interrupted_0_exec)
  79. _interrupted_0.setTrigger(Event("interrupt", self.getInPortName("input")))
  80. self.states["/interrupted"].addTransition(_interrupted_0)
  81. _interrupted_1 = Transition(self, self.states["/interrupted"], [self.states["/running"]])
  82. _interrupted_1.setAction(self._interrupted_1_exec)
  83. _interrupted_1.setTrigger(Event("continue", self.getInPortName("input")))
  84. self.states["/interrupted"].addTransition(_interrupted_1)
  85. # transition /running
  86. _running_0 = Transition(self, self.states["/running"], [self.states["/interrupted"]])
  87. _running_0.setAction(self._running_0_exec)
  88. _running_0.setTrigger(Event("interrupt", self.getInPortName("input")))
  89. self.states["/running"].addTransition(_running_0)
  90. # transition /running/print_simulated_time
  91. _running_print_simulated_time_0 = Transition(self, self.states["/running/print_simulated_time"], [self.states["/running/print_simulated_time"]])
  92. _running_print_simulated_time_0.setAction(self._running_print_simulated_time_0_exec)
  93. _running_print_simulated_time_0.setTrigger(Event("interrupt", self.getInPortName("input")))
  94. self.states["/running/print_simulated_time"].addTransition(_running_print_simulated_time_0)
  95. def _running_print_simulated_time_print_simulated_time_enter(self):
  96. self.addTimer(0, 0.05)
  97. def _running_print_simulated_time_print_simulated_time_exit(self):
  98. self.removeTimer(0)
  99. def _running_print_wct_time_print_wct_time_enter(self):
  100. self.addTimer(1, 0.05)
  101. def _running_print_wct_time_print_wct_time_exit(self):
  102. self.removeTimer(1)
  103. def _running_0_exec(self, parameters):
  104. self.print_simulated_time()
  105. self.print_wct_time()
  106. def _running_print_simulated_time_0_exec(self, parameters):
  107. print('going nowhere')
  108. def _running_print_simulated_time_print_simulated_time_0_exec(self, parameters):
  109. self.print_simulated_time()
  110. def _running_print_wct_time_print_wct_time_0_exec(self, parameters):
  111. self.print_wct_time()
  112. def _interrupted_0_exec(self, parameters):
  113. self.print_simulated_time()
  114. self.print_wct_time()
  115. def _interrupted_1_exec(self, parameters):
  116. self.print_simulated_time()
  117. self.print_wct_time()
  118. def initializeStatechart(self):
  119. # enter default state
  120. self.default_targets = self.states["/running"].getEffectiveTargetStates()
  121. RuntimeClassBase.initializeStatechart(self)
  122. class MainApp(ClassBase):
  123. def __init__(self, name):
  124. ClassBase.__init__(self, name)
  125. self.input = self.addInPort("input")
  126. new_instance = self.constructObject(0, 0, [])
  127. self.state.instances[new_instance.instance_id] = new_instance
  128. new_instance.start()
  129. self.state.next_time = 0
  130. def constructObject(self, id, start_port_id, parameters):
  131. new_instance = MainAppInstance(self, id, start_port_id)
  132. return new_instance
  133. def instantiate(self, class_name, construct_params):
  134. instance = {}
  135. instance["name"] = class_name
  136. if class_name == "MainApp":
  137. self.narrow_cast_id = self.narrow_cast_id + 0
  138. instance["associations"] = {}
  139. else:
  140. raise Exception("Cannot instantiate class " + class_name)
  141. return instance
  142. ObjectManagerState.instantiate = instantiate
  143. class ObjectManager(ObjectManagerBase):
  144. def __init__(self, name):
  145. ObjectManagerBase.__init__(self, name)
  146. self.state = ObjectManagerState()
  147. self.input = self.addInPort("input")
  148. self.output["MainApp"] = self.addOutPort()
  149. self.state.createInstance("MainApp", [])
  150. class Controller(CoupledDEVS):
  151. def __init__(self, name):
  152. CoupledDEVS.__init__(self, name)
  153. self.in_input = self.addInPort("input")
  154. self.objectmanager = self.addSubModel(ObjectManager("ObjectManager"))
  155. self.atomics = []
  156. self.atomics.append(self.addSubModel(MainApp("MainApp")))
  157. self.connectPorts(self.atomics[0].obj_manager_out, self.objectmanager.input)
  158. self.connectPorts(self.objectmanager.output["MainApp"], self.atomics[0].obj_manager_in)
  159. self.connectPorts(self.in_input, self.atomics[0].input)