target.py 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788
  1. """
  2. Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
  3. Date: Thu Oct 13 12:15:48 2016
  4. Model author: Sadaf Mustafiz and Bruno Barroca and Claudio Gomes and Simon Van Mierlo
  5. Model name: FSASimulator
  6. Model description:
  7. A debuggeable FSA simulator. It supports after and events.
  8. """
  9. from sccd.runtime.statecharts_core import *
  10. from sccd.runtime.libs.ui import *
  11. from sccd.runtime.libs.utils import *
  12. import fsaclasses
  13. import sccd.runtime.accurate_time as accurate_time
  14. class Breakpoint:
  15. def __init__(self, name, function, enabled, disable_on_trigger):
  16. self.name = name
  17. self.function = function
  18. self.enabled = enabled
  19. self.disable_on_trigger = disable_on_trigger
  20. # package "FSASimulator"
  21. class FSASimulator(RuntimeClassBase):
  22. def __init__(self, controller, amodel, events):
  23. RuntimeClassBase.__init__(self, controller)
  24. self.semantics.big_step_maximality = StatechartSemantics.TakeMany
  25. self.semantics.internal_event_lifeline = StatechartSemantics.NextComboStep
  26. self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
  27. self.semantics.priority = StatechartSemantics.SourceParent
  28. self.semantics.concurrency = StatechartSemantics.Single
  29. # build Statechart structure
  30. self.build_statechart_structure()
  31. # user defined attributes
  32. self.elapsed = None
  33. self.super_step_completed = None
  34. self.model = None
  35. self.clock = None
  36. self.timestep = None
  37. self.currentEvent = None
  38. self.selectedTransition = None
  39. self.eventList = None
  40. self.currentState = None
  41. # call user defined constructor
  42. FSASimulator.user_defined_constructor(self, amodel, events)
  43. def user_defined_constructor(self, amodel, events):
  44. self.model = amodel
  45. self.eventList = events
  46. def user_defined_destructor(self):
  47. pass
  48. # user defined method
  49. def processEvent(self, event):
  50. if (event != None):
  51. self.eventList.popEvent(event)
  52. event.processed = True
  53. # user defined method
  54. def getInputEventAt(self, time):
  55. return self.eventList.getInputAt(time)
  56. # user defined method
  57. def initialize(self):
  58. self.clock = 0
  59. self.elapsed = 0
  60. self.timestep = 1.0 * 1000.0
  61. self.time_next = self.timestep
  62. self.currentState = self.model.initialState
  63. # user defined method
  64. def initializeDebugger(self):
  65. self.breakpoints = []
  66. self.triggered_bp = None
  67. # user defined method
  68. def endCondition(self):
  69. return self.currentState and self.currentState.final
  70. # user defined method
  71. def advanceTime(self):
  72. self.clock = self.time_next
  73. self.elapsed = self.elapsed + self.timestep
  74. self.time_next = self.clock + self.timestep
  75. # user defined method
  76. def finalize(self):
  77. print 'Simulation finalized.'
  78. # user defined method
  79. def waitTime(self):
  80. # First, we convert from wall-clock time to simulated time.
  81. # This means the elapsed time in wall-clock time needs to be scaled according to the realtime scale (for example, if the realtime scale is 2, an elapsed time of 1 second in wall-clock time is equal to an elapsed time of 2 seconds in simulated time).
  82. simulated_diff = (accurate_time.time() - self.realtime_start_time) * self.realtime_scale
  83. # time_next and simulated_diff are both in simulated time: so now scale back to wall-clock time by dividing.
  84. # This function returns an amount of miliseconds.
  85. return ((self.time_next - simulated_diff) / self.realtime_scale)
  86. # user defined method
  87. def addBreakpoint(self, name, function, enabled = None, disable_on_trigger = None):
  88. if enabled == None: enabled = true
  89. if disable_on_trigger == None: disable_on_trigger = true
  90. if len([bp for bp in self.breakpoints if bp.name == name]) > 0:
  91. return -1
  92. self.breakpoints.append(Breakpoint(name, function, enabled, disable_on_trigger))
  93. return 0
  94. # user defined method
  95. def delBreakpoint(self, name):
  96. if len([bp for bp in self.breakpoints if bp.name == name]) == 0:
  97. return -1
  98. self.breakpoints = [bp for bp in self.breakpoints if bp.name != name]
  99. return 0
  100. # user defined method
  101. def toggleBreakpoint(self, name):
  102. if len([bp for bp in self.breakpoints if bp.name == name]) == 0:
  103. return -1
  104. for bp in self.breakpoints:
  105. if bp.name == name:
  106. bp.enabled = enabled
  107. break
  108. return 0
  109. # user defined method
  110. def breakpointTriggers(self, is_realtime_simulation):
  111. self.triggered_bp = None
  112. for bp in self.breakpoints:
  113. if not bp.enabled:
  114. continue
  115. # include the function in the scope...
  116. exec(bp.function)
  117. # ... and execute it, note that the breakpoint thus has to start with "def breakpoint("
  118. # note that we pass self.time_next instead of self.simulated_time in the case of as-fast-as-possible simulation (or stepping)
  119. # this is to make sure that the simulation is stopped BEFORE the specified time is reached, and not AFTER (because we don't necessarily implement 'step back')
  120. # in case of realtime simulation, we do pass the current simulated time, since we can stop at (more or less) exactly the right time
  121. if breakpoint({'clock': (self.clock if is_realtime_simulation else self.time_next) / 1000.0, 'state': self.currentState, 'event': self.currentEvent}):
  122. # triggered!
  123. self.triggered_bp = bp.name
  124. if bp.disable_on_trigger:
  125. bp.enabled = False
  126. return True
  127. else:
  128. # not triggered, so continue
  129. continue
  130. return False
  131. # user defined method
  132. def godEvent(self, new_state):
  133. filtered_states = [s for s in self.model.states if s.name == new_state]
  134. if not len(filtered_states) == 1:
  135. return -1
  136. self.currentState = filtered_states[0]
  137. return 0
  138. # builds Statechart structure
  139. def build_statechart_structure(self):
  140. # state <root>
  141. self.states[""] = State(0, self)
  142. # state /Main
  143. self.states["/Main"] = ParallelState(1, self)
  144. # state /Main/SimulationState
  145. self.states["/Main/SimulationState"] = State(2, self)
  146. # state /Main/SimulationState/Paused
  147. self.states["/Main/SimulationState/Paused"] = State(3, self)
  148. # state /Main/SimulationState/PrePaused
  149. self.states["/Main/SimulationState/PrePaused"] = State(4, self)
  150. self.states["/Main/SimulationState/PrePaused"].setEnter(self._Main_SimulationState_PrePaused_enter)
  151. self.states["/Main/SimulationState/PrePaused"].setExit(self._Main_SimulationState_PrePaused_exit)
  152. # state /Main/SimulationState/PreBreakpointTriggered
  153. self.states["/Main/SimulationState/PreBreakpointTriggered"] = State(5, self)
  154. self.states["/Main/SimulationState/PreBreakpointTriggered"].setEnter(self._Main_SimulationState_PreBreakpointTriggered_enter)
  155. self.states["/Main/SimulationState/PreBreakpointTriggered"].setExit(self._Main_SimulationState_PreBreakpointTriggered_exit)
  156. # state /Main/SimulationState/Running
  157. self.states["/Main/SimulationState/Running"] = State(6, self)
  158. # state /Main/SimulationState/Running/Continuous
  159. self.states["/Main/SimulationState/Running/Continuous"] = State(7, self)
  160. # state /Main/SimulationState/Running/BigStep
  161. self.states["/Main/SimulationState/Running/BigStep"] = State(8, self)
  162. # state /Main/SimulationState/Running/BigStepDone
  163. self.states["/Main/SimulationState/Running/BigStepDone"] = State(9, self)
  164. self.states["/Main/SimulationState/Running/BigStepDone"].setEnter(self._Main_SimulationState_Running_BigStepDone_enter)
  165. self.states["/Main/SimulationState/Running/BigStepDone"].setExit(self._Main_SimulationState_Running_BigStepDone_exit)
  166. # state /Main/SimulationState/Running/SmallStep
  167. self.states["/Main/SimulationState/Running/SmallStep"] = State(10, self)
  168. # state /Main/SimulationState/Running/SmallStepDone
  169. self.states["/Main/SimulationState/Running/SmallStepDone"] = State(11, self)
  170. self.states["/Main/SimulationState/Running/SmallStepDone"].setEnter(self._Main_SimulationState_Running_SmallStepDone_enter)
  171. self.states["/Main/SimulationState/Running/SmallStepDone"].setExit(self._Main_SimulationState_Running_SmallStepDone_exit)
  172. # state /Main/SimulationState/Running/Realtime
  173. self.states["/Main/SimulationState/Running/Realtime"] = State(12, self)
  174. self.states["/Main/SimulationState/Running/Realtime"].setEnter(self._Main_SimulationState_Running_Realtime_enter)
  175. # state /Main/SimulationState/PreStopped
  176. self.states["/Main/SimulationState/PreStopped"] = State(13, self)
  177. self.states["/Main/SimulationState/PreStopped"].setEnter(self._Main_SimulationState_PreStopped_enter)
  178. self.states["/Main/SimulationState/PreStopped"].setExit(self._Main_SimulationState_PreStopped_exit)
  179. # state /Main/SimulationState/Stopped
  180. self.states["/Main/SimulationState/Stopped"] = State(14, self)
  181. # state /Main/SimulationFlow
  182. self.states["/Main/SimulationFlow"] = State(15, self)
  183. # state /Main/SimulationFlow/Started
  184. self.states["/Main/SimulationFlow/Started"] = State(16, self)
  185. # state /Main/SimulationFlow/Initialized
  186. self.states["/Main/SimulationFlow/Initialized"] = State(17, self)
  187. # state /Main/SimulationFlow/InitializeDebugger
  188. self.states["/Main/SimulationFlow/InitializeDebugger"] = State(18, self)
  189. self.states["/Main/SimulationFlow/InitializeDebugger"].setEnter(self._Main_SimulationFlow_InitializeDebugger_enter)
  190. # state /Main/SimulationFlow/CheckTermination
  191. self.states["/Main/SimulationFlow/CheckTermination"] = State(19, self)
  192. # state /Main/SimulationFlow/CheckTermination/MacroStepProcessed
  193. self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"] = State(20, self)
  194. self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"].setEnter(self._Main_SimulationFlow_CheckTermination_MacroStepProcessed_enter)
  195. self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"].setExit(self._Main_SimulationFlow_CheckTermination_MacroStepProcessed_exit)
  196. # state /Main/SimulationFlow/Waiting
  197. self.states["/Main/SimulationFlow/Waiting"] = State(21, self)
  198. self.states["/Main/SimulationFlow/Waiting"].setEnter(self._Main_SimulationFlow_Waiting_enter)
  199. self.states["/Main/SimulationFlow/Waiting"].setExit(self._Main_SimulationFlow_Waiting_exit)
  200. # state /Main/SimulationFlow/DoSimulation
  201. self.states["/Main/SimulationFlow/DoSimulation"] = State(22, self)
  202. # state /Main/SimulationFlow/DoSimulation/MacroStepPrepared
  203. self.states["/Main/SimulationFlow/DoSimulation/MacroStepPrepared"] = State(23, self)
  204. self.states["/Main/SimulationFlow/DoSimulation/MacroStepPrepared"].setEnter(self._Main_SimulationFlow_DoSimulation_MacroStepPrepared_enter)
  205. # state /Main/SimulationFlow/DoSimulation/MicroStepProcessed
  206. self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"] = State(24, self)
  207. self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"].setEnter(self._Main_SimulationFlow_DoSimulation_MicroStepProcessed_enter)
  208. self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"].setExit(self._Main_SimulationFlow_DoSimulation_MicroStepProcessed_exit)
  209. # state /Main/SimulationFlow/DoSimulation/PreMicroStepPrepared
  210. self.states["/Main/SimulationFlow/DoSimulation/PreMicroStepPrepared"] = State(25, self)
  211. # state /Main/SimulationFlow/DoSimulation/MicroStepPrepared
  212. self.states["/Main/SimulationFlow/DoSimulation/MicroStepPrepared"] = State(26, self)
  213. # state /Main/SimulationFlow/Stopped
  214. self.states["/Main/SimulationFlow/Stopped"] = State(27, self)
  215. # state /Main/BreakpointManager
  216. self.states["/Main/BreakpointManager"] = State(28, self)
  217. # state /Main/BreakpointManager/Listening
  218. self.states["/Main/BreakpointManager/Listening"] = State(29, self)
  219. # state /Main/GodEventManager
  220. self.states["/Main/GodEventManager"] = State(30, self)
  221. # state /Main/GodEventManager/Listening
  222. self.states["/Main/GodEventManager/Listening"] = State(31, self)
  223. # state /Main/UserOutput
  224. self.states["/Main/UserOutput"] = State(32, self)
  225. # state /Main/UserOutput/Waiting
  226. self.states["/Main/UserOutput/Waiting"] = State(33, self)
  227. # state /SimulationComplete
  228. self.states["/SimulationComplete"] = State(34, self)
  229. # add children
  230. self.states[""].addChild(self.states["/Main"])
  231. self.states[""].addChild(self.states["/SimulationComplete"])
  232. self.states["/Main"].addChild(self.states["/Main/SimulationState"])
  233. self.states["/Main"].addChild(self.states["/Main/SimulationFlow"])
  234. self.states["/Main"].addChild(self.states["/Main/BreakpointManager"])
  235. self.states["/Main"].addChild(self.states["/Main/GodEventManager"])
  236. self.states["/Main"].addChild(self.states["/Main/UserOutput"])
  237. self.states["/Main/SimulationState"].addChild(self.states["/Main/SimulationState/Paused"])
  238. self.states["/Main/SimulationState"].addChild(self.states["/Main/SimulationState/PrePaused"])
  239. self.states["/Main/SimulationState"].addChild(self.states["/Main/SimulationState/PreBreakpointTriggered"])
  240. self.states["/Main/SimulationState"].addChild(self.states["/Main/SimulationState/Running"])
  241. self.states["/Main/SimulationState"].addChild(self.states["/Main/SimulationState/PreStopped"])
  242. self.states["/Main/SimulationState"].addChild(self.states["/Main/SimulationState/Stopped"])
  243. self.states["/Main/SimulationState/Running"].addChild(self.states["/Main/SimulationState/Running/Continuous"])
  244. self.states["/Main/SimulationState/Running"].addChild(self.states["/Main/SimulationState/Running/BigStep"])
  245. self.states["/Main/SimulationState/Running"].addChild(self.states["/Main/SimulationState/Running/BigStepDone"])
  246. self.states["/Main/SimulationState/Running"].addChild(self.states["/Main/SimulationState/Running/SmallStep"])
  247. self.states["/Main/SimulationState/Running"].addChild(self.states["/Main/SimulationState/Running/SmallStepDone"])
  248. self.states["/Main/SimulationState/Running"].addChild(self.states["/Main/SimulationState/Running/Realtime"])
  249. self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Started"])
  250. self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Initialized"])
  251. self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/InitializeDebugger"])
  252. self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/CheckTermination"])
  253. self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Waiting"])
  254. self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/DoSimulation"])
  255. self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Stopped"])
  256. self.states["/Main/SimulationFlow/CheckTermination"].addChild(self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"])
  257. self.states["/Main/SimulationFlow/DoSimulation"].addChild(self.states["/Main/SimulationFlow/DoSimulation/MacroStepPrepared"])
  258. self.states["/Main/SimulationFlow/DoSimulation"].addChild(self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"])
  259. self.states["/Main/SimulationFlow/DoSimulation"].addChild(self.states["/Main/SimulationFlow/DoSimulation/PreMicroStepPrepared"])
  260. self.states["/Main/SimulationFlow/DoSimulation"].addChild(self.states["/Main/SimulationFlow/DoSimulation/MicroStepPrepared"])
  261. self.states["/Main/BreakpointManager"].addChild(self.states["/Main/BreakpointManager/Listening"])
  262. self.states["/Main/GodEventManager"].addChild(self.states["/Main/GodEventManager/Listening"])
  263. self.states["/Main/UserOutput"].addChild(self.states["/Main/UserOutput/Waiting"])
  264. self.states[""].fixTree()
  265. self.states[""].default_state = self.states["/Main"]
  266. self.states["/Main/SimulationState"].default_state = self.states["/Main/SimulationState/Paused"]
  267. self.states["/Main/SimulationState/Running"].default_state = self.states["/Main/SimulationState/Running/Continuous"]
  268. self.states["/Main/SimulationFlow"].default_state = self.states["/Main/SimulationFlow/Started"]
  269. self.states["/Main/SimulationFlow/CheckTermination"].default_state = self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"]
  270. self.states["/Main/SimulationFlow/DoSimulation"].default_state = self.states["/Main/SimulationFlow/DoSimulation/MacroStepPrepared"]
  271. self.states["/Main/BreakpointManager"].default_state = self.states["/Main/BreakpointManager/Listening"]
  272. self.states["/Main/GodEventManager"].default_state = self.states["/Main/GodEventManager/Listening"]
  273. self.states["/Main/UserOutput"].default_state = self.states["/Main/UserOutput/Waiting"]
  274. # transition /Main/SimulationState/Paused
  275. _Main_SimulationState_Paused_0 = Transition(self, self.states["/Main/SimulationState/Paused"], [self.states["/Main/SimulationState/Running/Continuous"]])
  276. _Main_SimulationState_Paused_0.setTrigger(Event("continuous", "user_input"))
  277. self.states["/Main/SimulationState/Paused"].addTransition(_Main_SimulationState_Paused_0)
  278. _Main_SimulationState_Paused_1 = Transition(self, self.states["/Main/SimulationState/Paused"], [self.states["/Main/SimulationState/Running/Realtime"]])
  279. _Main_SimulationState_Paused_1.setAction(self._Main_SimulationState_Paused_1_exec)
  280. _Main_SimulationState_Paused_1.setTrigger(Event("realtime", "user_input"))
  281. self.states["/Main/SimulationState/Paused"].addTransition(_Main_SimulationState_Paused_1)
  282. _Main_SimulationState_Paused_2 = Transition(self, self.states["/Main/SimulationState/Paused"], [self.states["/Main/SimulationState/Running/BigStep"]])
  283. _Main_SimulationState_Paused_2.setTrigger(Event("big_step", "user_input"))
  284. self.states["/Main/SimulationState/Paused"].addTransition(_Main_SimulationState_Paused_2)
  285. _Main_SimulationState_Paused_3 = Transition(self, self.states["/Main/SimulationState/Paused"], [self.states["/Main/SimulationState/Running/SmallStep"]])
  286. _Main_SimulationState_Paused_3.setTrigger(Event("small_step", "user_input"))
  287. self.states["/Main/SimulationState/Paused"].addTransition(_Main_SimulationState_Paused_3)
  288. _Main_SimulationState_Paused_4 = Transition(self, self.states["/Main/SimulationState/Paused"], [self.states["/Main/SimulationState/PreStopped"]])
  289. _Main_SimulationState_Paused_4.setTrigger(None)
  290. _Main_SimulationState_Paused_4.setGuard(self._Main_SimulationState_Paused_4_guard)
  291. self.states["/Main/SimulationState/Paused"].addTransition(_Main_SimulationState_Paused_4)
  292. # transition /Main/SimulationState/PrePaused
  293. _Main_SimulationState_PrePaused_0 = Transition(self, self.states["/Main/SimulationState/PrePaused"], [self.states["/Main/SimulationState/Paused"]])
  294. _Main_SimulationState_PrePaused_0.setAction(self._Main_SimulationState_PrePaused_0_exec)
  295. _Main_SimulationState_PrePaused_0.setTrigger(Event("_0after"))
  296. self.states["/Main/SimulationState/PrePaused"].addTransition(_Main_SimulationState_PrePaused_0)
  297. # transition /Main/SimulationState/PreBreakpointTriggered
  298. _Main_SimulationState_PreBreakpointTriggered_0 = Transition(self, self.states["/Main/SimulationState/PreBreakpointTriggered"], [self.states["/Main/SimulationState/Paused"]])
  299. _Main_SimulationState_PreBreakpointTriggered_0.setAction(self._Main_SimulationState_PreBreakpointTriggered_0_exec)
  300. _Main_SimulationState_PreBreakpointTriggered_0.setTrigger(Event("_1after"))
  301. self.states["/Main/SimulationState/PreBreakpointTriggered"].addTransition(_Main_SimulationState_PreBreakpointTriggered_0)
  302. # transition /Main/SimulationState/Running/BigStep
  303. _Main_SimulationState_Running_BigStep_0 = Transition(self, self.states["/Main/SimulationState/Running/BigStep"], [self.states["/Main/SimulationState/Running/BigStepDone"]])
  304. _Main_SimulationState_Running_BigStep_0.setTrigger(Event("big_step_done", None))
  305. self.states["/Main/SimulationState/Running/BigStep"].addTransition(_Main_SimulationState_Running_BigStep_0)
  306. # transition /Main/SimulationState/Running/BigStepDone
  307. _Main_SimulationState_Running_BigStepDone_0 = Transition(self, self.states["/Main/SimulationState/Running/BigStepDone"], [self.states["/Main/SimulationState/Paused"]])
  308. _Main_SimulationState_Running_BigStepDone_0.setTrigger(Event("_2after"))
  309. self.states["/Main/SimulationState/Running/BigStepDone"].addTransition(_Main_SimulationState_Running_BigStepDone_0)
  310. # transition /Main/SimulationState/Running/SmallStep
  311. _Main_SimulationState_Running_SmallStep_0 = Transition(self, self.states["/Main/SimulationState/Running/SmallStep"], [self.states["/Main/SimulationState/Running/SmallStepDone"]])
  312. _Main_SimulationState_Running_SmallStep_0.setTrigger(Event("small_step_done", None))
  313. self.states["/Main/SimulationState/Running/SmallStep"].addTransition(_Main_SimulationState_Running_SmallStep_0)
  314. # transition /Main/SimulationState/Running/SmallStepDone
  315. _Main_SimulationState_Running_SmallStepDone_0 = Transition(self, self.states["/Main/SimulationState/Running/SmallStepDone"], [self.states["/Main/SimulationState/Paused"]])
  316. _Main_SimulationState_Running_SmallStepDone_0.setTrigger(Event("_3after"))
  317. self.states["/Main/SimulationState/Running/SmallStepDone"].addTransition(_Main_SimulationState_Running_SmallStepDone_0)
  318. # transition /Main/SimulationState/PreStopped
  319. _Main_SimulationState_PreStopped_0 = Transition(self, self.states["/Main/SimulationState/PreStopped"], [self.states["/Main/SimulationState/Stopped"]])
  320. _Main_SimulationState_PreStopped_0.setAction(self._Main_SimulationState_PreStopped_0_exec)
  321. _Main_SimulationState_PreStopped_0.setTrigger(Event("_4after"))
  322. self.states["/Main/SimulationState/PreStopped"].addTransition(_Main_SimulationState_PreStopped_0)
  323. # transition /Main/SimulationFlow/Started
  324. _Main_SimulationFlow_Started_0 = Transition(self, self.states["/Main/SimulationFlow/Started"], [self.states["/Main/SimulationFlow/Initialized"]])
  325. _Main_SimulationFlow_Started_0.setAction(self._Main_SimulationFlow_Started_0_exec)
  326. _Main_SimulationFlow_Started_0.setTrigger(None)
  327. self.states["/Main/SimulationFlow/Started"].addTransition(_Main_SimulationFlow_Started_0)
  328. # transition /Main/SimulationFlow/Initialized
  329. _Main_SimulationFlow_Initialized_0 = Transition(self, self.states["/Main/SimulationFlow/Initialized"], [self.states["/Main/SimulationFlow/InitializeDebugger"]])
  330. _Main_SimulationFlow_Initialized_0.setAction(self._Main_SimulationFlow_Initialized_0_exec)
  331. _Main_SimulationFlow_Initialized_0.setTrigger(None)
  332. self.states["/Main/SimulationFlow/Initialized"].addTransition(_Main_SimulationFlow_Initialized_0)
  333. # transition /Main/SimulationFlow/InitializeDebugger
  334. _Main_SimulationFlow_InitializeDebugger_0 = Transition(self, self.states["/Main/SimulationFlow/InitializeDebugger"], [self.states["/Main/SimulationFlow/CheckTermination"]])
  335. _Main_SimulationFlow_InitializeDebugger_0.setTrigger(None)
  336. self.states["/Main/SimulationFlow/InitializeDebugger"].addTransition(_Main_SimulationFlow_InitializeDebugger_0)
  337. # transition /Main/SimulationFlow/CheckTermination/MacroStepProcessed
  338. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_0 = Transition(self, self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"], [self.states["/Main/SimulationFlow/Stopped"]])
  339. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_0.setAction(self._Main_SimulationFlow_CheckTermination_MacroStepProcessed_0_exec)
  340. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_0.setTrigger(Event("_5after"))
  341. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_0.setGuard(self._Main_SimulationFlow_CheckTermination_MacroStepProcessed_0_guard)
  342. self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"].addTransition(_Main_SimulationFlow_CheckTermination_MacroStepProcessed_0)
  343. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_1 = Transition(self, self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"], [self.states["/Main/SimulationFlow/Waiting"]])
  344. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_1.setTrigger(None)
  345. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_1.setGuard(self._Main_SimulationFlow_CheckTermination_MacroStepProcessed_1_guard)
  346. self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"].addTransition(_Main_SimulationFlow_CheckTermination_MacroStepProcessed_1)
  347. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_2 = Transition(self, self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"], [self.states["/Main/SimulationFlow/DoSimulation"]])
  348. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_2.setTrigger(None)
  349. _Main_SimulationFlow_CheckTermination_MacroStepProcessed_2.setGuard(self._Main_SimulationFlow_CheckTermination_MacroStepProcessed_2_guard)
  350. self.states["/Main/SimulationFlow/CheckTermination/MacroStepProcessed"].addTransition(_Main_SimulationFlow_CheckTermination_MacroStepProcessed_2)
  351. # transition /Main/SimulationFlow/Waiting
  352. _Main_SimulationFlow_Waiting_0 = Transition(self, self.states["/Main/SimulationFlow/Waiting"], [self.states["/Main/SimulationFlow/CheckTermination"]])
  353. _Main_SimulationFlow_Waiting_0.setAction(self._Main_SimulationFlow_Waiting_0_exec)
  354. _Main_SimulationFlow_Waiting_0.setTrigger(Event("_6after"))
  355. self.states["/Main/SimulationFlow/Waiting"].addTransition(_Main_SimulationFlow_Waiting_0)
  356. _Main_SimulationFlow_Waiting_1 = Transition(self, self.states["/Main/SimulationFlow/Waiting"], [self.states["/Main/SimulationFlow/DoSimulation"]])
  357. _Main_SimulationFlow_Waiting_1.setTrigger(None)
  358. _Main_SimulationFlow_Waiting_1.setGuard(self._Main_SimulationFlow_Waiting_1_guard)
  359. self.states["/Main/SimulationFlow/Waiting"].addTransition(_Main_SimulationFlow_Waiting_1)
  360. # transition /Main/SimulationFlow/DoSimulation/MacroStepPrepared
  361. _Main_SimulationFlow_DoSimulation_MacroStepPrepared_0 = Transition(self, self.states["/Main/SimulationFlow/DoSimulation/MacroStepPrepared"], [self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"]])
  362. _Main_SimulationFlow_DoSimulation_MacroStepPrepared_0.setAction(self._Main_SimulationFlow_DoSimulation_MacroStepPrepared_0_exec)
  363. _Main_SimulationFlow_DoSimulation_MacroStepPrepared_0.setTrigger(None)
  364. self.states["/Main/SimulationFlow/DoSimulation/MacroStepPrepared"].addTransition(_Main_SimulationFlow_DoSimulation_MacroStepPrepared_0)
  365. # transition /Main/SimulationFlow/DoSimulation/MicroStepProcessed
  366. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_0 = Transition(self, self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"], [self.states["/Main/SimulationFlow/DoSimulation/PreMicroStepPrepared"]])
  367. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_0.setAction(self._Main_SimulationFlow_DoSimulation_MicroStepProcessed_0_exec)
  368. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_0.setTrigger(Event("_7after"))
  369. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_0.setGuard(self._Main_SimulationFlow_DoSimulation_MicroStepProcessed_0_guard)
  370. self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"].addTransition(_Main_SimulationFlow_DoSimulation_MicroStepProcessed_0)
  371. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_1 = Transition(self, self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"], [self.states["/Main/SimulationFlow/CheckTermination"]])
  372. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_1.setAction(self._Main_SimulationFlow_DoSimulation_MicroStepProcessed_1_exec)
  373. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_1.setTrigger(Event("_8after"))
  374. _Main_SimulationFlow_DoSimulation_MicroStepProcessed_1.setGuard(self._Main_SimulationFlow_DoSimulation_MicroStepProcessed_1_guard)
  375. self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"].addTransition(_Main_SimulationFlow_DoSimulation_MicroStepProcessed_1)
  376. # transition /Main/SimulationFlow/DoSimulation/PreMicroStepPrepared
  377. _Main_SimulationFlow_DoSimulation_PreMicroStepPrepared_0 = Transition(self, self.states["/Main/SimulationFlow/DoSimulation/PreMicroStepPrepared"], [self.states["/Main/SimulationFlow/DoSimulation/MicroStepPrepared"]])
  378. _Main_SimulationFlow_DoSimulation_PreMicroStepPrepared_0.setTrigger(None)
  379. _Main_SimulationFlow_DoSimulation_PreMicroStepPrepared_0.setGuard(self._Main_SimulationFlow_DoSimulation_PreMicroStepPrepared_0_guard)
  380. self.states["/Main/SimulationFlow/DoSimulation/PreMicroStepPrepared"].addTransition(_Main_SimulationFlow_DoSimulation_PreMicroStepPrepared_0)
  381. # transition /Main/SimulationFlow/DoSimulation/MicroStepPrepared
  382. _Main_SimulationFlow_DoSimulation_MicroStepPrepared_0 = Transition(self, self.states["/Main/SimulationFlow/DoSimulation/MicroStepPrepared"], [self.states["/Main/SimulationFlow/DoSimulation/MicroStepProcessed"]])
  383. _Main_SimulationFlow_DoSimulation_MicroStepPrepared_0.setAction(self._Main_SimulationFlow_DoSimulation_MicroStepPrepared_0_exec)
  384. _Main_SimulationFlow_DoSimulation_MicroStepPrepared_0.setTrigger(None)
  385. self.states["/Main/SimulationFlow/DoSimulation/MicroStepPrepared"].addTransition(_Main_SimulationFlow_DoSimulation_MicroStepPrepared_0)
  386. # transition /Main/BreakpointManager/Listening
  387. _Main_BreakpointManager_Listening_0 = Transition(self, self.states["/Main/BreakpointManager/Listening"], [self.states["/Main/BreakpointManager/Listening"]])
  388. _Main_BreakpointManager_Listening_0.setAction(self._Main_BreakpointManager_Listening_0_exec)
  389. _Main_BreakpointManager_Listening_0.setTrigger(Event("add_breakpoint", "user_input"))
  390. self.states["/Main/BreakpointManager/Listening"].addTransition(_Main_BreakpointManager_Listening_0)
  391. _Main_BreakpointManager_Listening_1 = Transition(self, self.states["/Main/BreakpointManager/Listening"], [self.states["/Main/BreakpointManager/Listening"]])
  392. _Main_BreakpointManager_Listening_1.setAction(self._Main_BreakpointManager_Listening_1_exec)
  393. _Main_BreakpointManager_Listening_1.setTrigger(Event("del_breakpoint", "user_input"))
  394. self.states["/Main/BreakpointManager/Listening"].addTransition(_Main_BreakpointManager_Listening_1)
  395. _Main_BreakpointManager_Listening_2 = Transition(self, self.states["/Main/BreakpointManager/Listening"], [self.states["/Main/BreakpointManager/Listening"]])
  396. _Main_BreakpointManager_Listening_2.setAction(self._Main_BreakpointManager_Listening_2_exec)
  397. _Main_BreakpointManager_Listening_2.setTrigger(Event("toggle_breakpoint", "user_input"))
  398. self.states["/Main/BreakpointManager/Listening"].addTransition(_Main_BreakpointManager_Listening_2)
  399. _Main_BreakpointManager_Listening_3 = Transition(self, self.states["/Main/BreakpointManager/Listening"], [self.states["/Main/BreakpointManager/Listening"]])
  400. _Main_BreakpointManager_Listening_3.setAction(self._Main_BreakpointManager_Listening_3_exec)
  401. _Main_BreakpointManager_Listening_3.setTrigger(Event("list_breakpoints", "user_input"))
  402. self.states["/Main/BreakpointManager/Listening"].addTransition(_Main_BreakpointManager_Listening_3)
  403. # transition /Main/GodEventManager/Listening
  404. _Main_GodEventManager_Listening_0 = Transition(self, self.states["/Main/GodEventManager/Listening"], [self.states["/Main/GodEventManager/Listening"]])
  405. _Main_GodEventManager_Listening_0.setAction(self._Main_GodEventManager_Listening_0_exec)
  406. _Main_GodEventManager_Listening_0.setTrigger(Event("god_event", "user_input"))
  407. _Main_GodEventManager_Listening_0.setGuard(self._Main_GodEventManager_Listening_0_guard)
  408. self.states["/Main/GodEventManager/Listening"].addTransition(_Main_GodEventManager_Listening_0)
  409. # transition /Main/UserOutput/Waiting
  410. _Main_UserOutput_Waiting_0 = Transition(self, self.states["/Main/UserOutput/Waiting"], [self.states["/Main/UserOutput/Waiting"]])
  411. _Main_UserOutput_Waiting_0.setAction(self._Main_UserOutput_Waiting_0_exec)
  412. _Main_UserOutput_Waiting_0.setTrigger(Event("termination_condition", None))
  413. self.states["/Main/UserOutput/Waiting"].addTransition(_Main_UserOutput_Waiting_0)
  414. _Main_UserOutput_Waiting_1 = Transition(self, self.states["/Main/UserOutput/Waiting"], [self.states["/Main/UserOutput/Waiting"]])
  415. _Main_UserOutput_Waiting_1.setAction(self._Main_UserOutput_Waiting_1_exec)
  416. _Main_UserOutput_Waiting_1.setTrigger(Event("paused", None))
  417. self.states["/Main/UserOutput/Waiting"].addTransition(_Main_UserOutput_Waiting_1)
  418. _Main_UserOutput_Waiting_2 = Transition(self, self.states["/Main/UserOutput/Waiting"], [self.states["/Main/UserOutput/Waiting"]])
  419. _Main_UserOutput_Waiting_2.setAction(self._Main_UserOutput_Waiting_2_exec)
  420. _Main_UserOutput_Waiting_2.setTrigger(Event("big_step_done", None))
  421. _Main_UserOutput_Waiting_2.setGuard(self._Main_UserOutput_Waiting_2_guard)
  422. self.states["/Main/UserOutput/Waiting"].addTransition(_Main_UserOutput_Waiting_2)
  423. _Main_UserOutput_Waiting_3 = Transition(self, self.states["/Main/UserOutput/Waiting"], [self.states["/Main/UserOutput/Waiting"]])
  424. _Main_UserOutput_Waiting_3.setAction(self._Main_UserOutput_Waiting_3_exec)
  425. _Main_UserOutput_Waiting_3.setTrigger(Event("small_step_done", None))
  426. _Main_UserOutput_Waiting_3.setGuard(self._Main_UserOutput_Waiting_3_guard)
  427. self.states["/Main/UserOutput/Waiting"].addTransition(_Main_UserOutput_Waiting_3)
  428. _Main_UserOutput_Waiting_4 = Transition(self, self.states["/Main/UserOutput/Waiting"], [self.states["/Main/UserOutput/Waiting"]])
  429. _Main_UserOutput_Waiting_4.setAction(self._Main_UserOutput_Waiting_4_exec)
  430. _Main_UserOutput_Waiting_4.setTrigger(Event("breakpoint_triggered", None))
  431. self.states["/Main/UserOutput/Waiting"].addTransition(_Main_UserOutput_Waiting_4)
  432. # transition /Main
  433. _Main_0 = Transition(self, self.states["/Main"], [self.states["/SimulationComplete"]])
  434. _Main_0.setAction(self._Main_0_exec)
  435. _Main_0.setTrigger(None)
  436. _Main_0.setGuard(self._Main_0_guard)
  437. self.states["/Main"].addTransition(_Main_0)
  438. # transition /Main/SimulationState/Running
  439. _Main_SimulationState_Running_0 = Transition(self, self.states["/Main/SimulationState/Running"], [self.states["/Main/SimulationState/PreStopped"]])
  440. _Main_SimulationState_Running_0.setTrigger(None)
  441. _Main_SimulationState_Running_0.setGuard(self._Main_SimulationState_Running_0_guard)
  442. self.states["/Main/SimulationState/Running"].addTransition(_Main_SimulationState_Running_0)
  443. _Main_SimulationState_Running_1 = Transition(self, self.states["/Main/SimulationState/Running"], [self.states["/Main/SimulationState/PrePaused"]])
  444. _Main_SimulationState_Running_1.setTrigger(Event("pause", "user_input"))
  445. self.states["/Main/SimulationState/Running"].addTransition(_Main_SimulationState_Running_1)
  446. _Main_SimulationState_Running_2 = Transition(self, self.states["/Main/SimulationState/Running"], [self.states["/Main/SimulationState/PreBreakpointTriggered"]])
  447. _Main_SimulationState_Running_2.setTrigger(None)
  448. _Main_SimulationState_Running_2.setGuard(self._Main_SimulationState_Running_2_guard)
  449. self.states["/Main/SimulationState/Running"].addTransition(_Main_SimulationState_Running_2)
  450. def _Main_SimulationState_PrePaused_enter(self):
  451. self.addTimer(0, self.sccd_yield() * 2)
  452. def _Main_SimulationState_PrePaused_exit(self):
  453. self.removeTimer(0)
  454. def _Main_SimulationState_PreBreakpointTriggered_enter(self):
  455. self.addTimer(1, self.sccd_yield() * 2)
  456. def _Main_SimulationState_PreBreakpointTriggered_exit(self):
  457. self.removeTimer(1)
  458. def _Main_SimulationState_Running_BigStepDone_enter(self):
  459. self.addTimer(2, self.sccd_yield())
  460. def _Main_SimulationState_Running_BigStepDone_exit(self):
  461. self.removeTimer(2)
  462. def _Main_SimulationState_Running_SmallStepDone_enter(self):
  463. self.addTimer(3, self.sccd_yield())
  464. def _Main_SimulationState_Running_SmallStepDone_exit(self):
  465. self.removeTimer(3)
  466. def _Main_SimulationState_Running_Realtime_enter(self):
  467. # If the simulation was paused, we need to reset the start time of the simulation.
  468. # The start time of the simulation is equal to the point in wall-clock time where simulated time is 0.
  469. # If the simulation was paused, we have to recompute this point in time: it is the difference of the wall-clock time and the simulated time.
  470. # If the scale was changed after the pause, this point of course moves backwards (for scales smaller than 1) or forwards (for scales larger than 1)
  471. self.realtime_start_time = accurate_time.time() - (self.clock / self.realtime_scale)
  472. def _Main_SimulationState_PreStopped_enter(self):
  473. self.addTimer(4, self.sccd_yield() * 2)
  474. def _Main_SimulationState_PreStopped_exit(self):
  475. self.removeTimer(4)
  476. def _Main_SimulationFlow_InitializeDebugger_enter(self):
  477. self.initializeDebugger()
  478. print('Going to MacroStepProcessed... ')
  479. def _Main_SimulationFlow_CheckTermination_MacroStepProcessed_enter(self):
  480. self.addTimer(5, self.sccd_yield())
  481. def _Main_SimulationFlow_CheckTermination_MacroStepProcessed_exit(self):
  482. self.removeTimer(5)
  483. def _Main_SimulationFlow_Waiting_enter(self):
  484. self.addTimer(6, self.sccd_yield())
  485. def _Main_SimulationFlow_Waiting_exit(self):
  486. self.removeTimer(6)
  487. def _Main_SimulationFlow_DoSimulation_MacroStepPrepared_enter(self):
  488. print('Entered MacroStepPrepared and reading events... ')
  489. self.currentEvent = self.getInputEventAt(self.clock / 1000.0)
  490. self.selectedTransition = self.model.getTransitionFrom(self.currentState, self.currentEvent, self.elapsed)
  491. print self.clock / 1000.0
  492. print(self.currentEvent)
  493. print(self.selectedTransition)
  494. def _Main_SimulationFlow_DoSimulation_MicroStepProcessed_enter(self):
  495. self.addTimer(7, self.sccd_yield() * 2)
  496. self.addTimer(8, self.sccd_yield())
  497. def _Main_SimulationFlow_DoSimulation_MicroStepProcessed_exit(self):
  498. self.removeTimer(7)
  499. self.removeTimer(8)
  500. def _Main_0_exec(self, parameters):
  501. self.finalize()
  502. def _Main_0_guard(self, parameters):
  503. return self.inState(["/Main/SimulationState/Stopped"]) and self.inState(["/Main/SimulationFlow/Stopped"])
  504. def _Main_SimulationState_Running_0_guard(self, parameters):
  505. return self.endCondition()
  506. def _Main_SimulationState_Running_2_guard(self, parameters):
  507. return self.breakpointTriggers(self.inState(["/Main/SimulationState/Running/Realtime"]))
  508. def _Main_SimulationState_Paused_1_exec(self, parameters):
  509. realtime_scale = parameters[0]
  510. self.realtime_scale = float(realtime_scale)
  511. def _Main_SimulationState_Paused_4_guard(self, parameters):
  512. return self.endCondition()
  513. def _Main_SimulationState_PrePaused_0_exec(self, parameters):
  514. self.raiseInternalEvent(Event("paused", None, []))
  515. def _Main_SimulationState_PreBreakpointTriggered_0_exec(self, parameters):
  516. self.raiseInternalEvent(Event("breakpoint_triggered", None, []))
  517. def _Main_SimulationState_PreStopped_0_exec(self, parameters):
  518. self.raiseInternalEvent(Event("termination_condition", None, []))
  519. def _Main_SimulationFlow_Started_0_exec(self, parameters):
  520. print('Going to Initialized... ')
  521. self.initialize()
  522. def _Main_SimulationFlow_Initialized_0_exec(self, parameters):
  523. print('Going to InitializeDebugger... ')
  524. def _Main_SimulationFlow_CheckTermination_MacroStepProcessed_0_exec(self, parameters):
  525. print('Going to Stopped... ')
  526. def _Main_SimulationFlow_CheckTermination_MacroStepProcessed_0_guard(self, parameters):
  527. return self.inState(["/Main/SimulationState/Stopped"])
  528. def _Main_SimulationFlow_CheckTermination_MacroStepProcessed_1_guard(self, parameters):
  529. return self.inState(["/Main/SimulationState/Running/Realtime"])
  530. def _Main_SimulationFlow_CheckTermination_MacroStepProcessed_2_guard(self, parameters):
  531. return self.inState(["/Main/SimulationState/Running/Continuous"]) or self.inState(["/Main/SimulationState/Running/BigStep"]) or self.inState(["/Main/SimulationState/Running/SmallStep"])
  532. def _Main_SimulationFlow_Waiting_0_exec(self, parameters):
  533. diff = accurate_time.time() - self.realtime_start_time
  534. self.clock = diff * self.realtime_scale
  535. def _Main_SimulationFlow_Waiting_1_guard(self, parameters):
  536. return self.waitTime() / 1000.0 <= self.sccd_yield()
  537. def _Main_SimulationFlow_DoSimulation_MacroStepPrepared_0_exec(self, parameters):
  538. print('Going to MicroStepProcessed... ')
  539. self.raiseInternalEvent(Event("small_step_done", None, []))
  540. def _Main_SimulationFlow_DoSimulation_MicroStepProcessed_0_exec(self, parameters):
  541. print('Going to MicroStepPrepared... ')
  542. def _Main_SimulationFlow_DoSimulation_MicroStepProcessed_0_guard(self, parameters):
  543. return self.selectedTransition != None
  544. def _Main_SimulationFlow_DoSimulation_MicroStepProcessed_1_exec(self, parameters):
  545. print('Going to CheckTermination and advancing time... ')
  546. self.advanceTime()
  547. print(self.clock / 1000.0)
  548. print(self.elapsed / 1000.0)
  549. self.raiseInternalEvent(Event("big_step_done", None, []))
  550. def _Main_SimulationFlow_DoSimulation_MicroStepProcessed_1_guard(self, parameters):
  551. return self.selectedTransition == None
  552. def _Main_SimulationFlow_DoSimulation_PreMicroStepPrepared_0_guard(self, parameters):
  553. return self.inState(["/Main/SimulationState/Running"])
  554. def _Main_SimulationFlow_DoSimulation_MicroStepPrepared_0_exec(self, parameters):
  555. print('Going to MicroStepProcessed, taking transition and reading events... ')
  556. print('Transition to be taken: ' + str(self.selectedTransition))
  557. self.currentState = self.selectedTransition.target
  558. self.elapsed = 0
  559. self.processEvent(self.currentEvent)
  560. print('New state: ' + str(self.currentState))
  561. self.currentEvent = self.getInputEventAt(self.clock / 1000.0)
  562. self.selectedTransition = self.model.getTransitionFrom(self.currentState, self.currentEvent, self.elapsed)
  563. print(self.currentEvent)
  564. print(self.selectedTransition)
  565. def _Main_BreakpointManager_Listening_0_exec(self, parameters):
  566. name = parameters[0]
  567. function = parameters[1]
  568. enabled = parameters[2]
  569. disable_on_trigger = parameters[3]
  570. result = self.addBreakpoint(name, function, bool(enabled), bool(disable_on_trigger))
  571. self.big_step.outputEvent(Event("add_breakpoint_result", "user_output", [result]))
  572. def _Main_BreakpointManager_Listening_1_exec(self, parameters):
  573. name = parameters[0]
  574. result = self.delBreakpoint(name)
  575. self.big_step.outputEvent(Event("del_breakpoint_result", "user_output", [result]))
  576. def _Main_BreakpointManager_Listening_2_exec(self, parameters):
  577. name = parameters[0]
  578. result = self.toggleBreakpoint(name)
  579. self.big_step.outputEvent(Event("toggle_breakpoint_result", "user_output", [result]))
  580. def _Main_BreakpointManager_Listening_3_exec(self, parameters):
  581. self.big_step.outputEvent(Event("list_breakpoints_result", "user_output", [[bp.name for bp in self.breakpoints]]))
  582. def _Main_GodEventManager_Listening_0_exec(self, parameters):
  583. new_state = parameters[0]
  584. result = self.godEvent(new_state)
  585. self.big_step.outputEvent(Event("god_event_result", "user_output", [result]))
  586. self.big_step.outputEvent(Event("current_state", "user_output", [self.clock / 1000.0, self.currentState]))
  587. def _Main_GodEventManager_Listening_0_guard(self, parameters):
  588. new_state = parameters[0]
  589. return self.inState(["/Main/SimulationState/Paused"])
  590. def _Main_UserOutput_Waiting_0_exec(self, parameters):
  591. self.big_step.outputEvent(Event("terminated", "user_output", []))
  592. self.big_step.outputEvent(Event("current_state", "user_output", [self.clock / 1000.0, self.currentState]))
  593. def _Main_UserOutput_Waiting_1_exec(self, parameters):
  594. self.big_step.outputEvent(Event("paused", "user_output", []))
  595. self.big_step.outputEvent(Event("current_state", "user_output", [self.clock / 1000.0, self.currentState]))
  596. def _Main_UserOutput_Waiting_2_exec(self, parameters):
  597. self.big_step.outputEvent(Event("big_step_done", "user_output", []))
  598. self.big_step.outputEvent(Event("current_state", "user_output", [self.clock / 1000.0, self.currentState]))
  599. def _Main_UserOutput_Waiting_2_guard(self, parameters):
  600. return self.inState(["/Main/SimulationState/Running/Realtime"]) or self.inState(["/Main/SimulationState/Running/BigStep"]) or self.inState(["/Main/SimulationState/Running/BigStepDone"])
  601. def _Main_UserOutput_Waiting_3_exec(self, parameters):
  602. self.big_step.outputEvent(Event("small_step_done", "user_output", []))
  603. self.big_step.outputEvent(Event("current_state", "user_output", [self.clock / 1000.0, self.currentState]))
  604. def _Main_UserOutput_Waiting_3_guard(self, parameters):
  605. return self.inState(["/Main/SimulationState/Running/SmallStep"]) or self.inState(["/Main/SimulationState/Running/SmallStepDone"])
  606. def _Main_UserOutput_Waiting_4_exec(self, parameters):
  607. self.big_step.outputEvent(Event("breakpoint_triggered", "user_output", [self.triggered_bp]))
  608. self.big_step.outputEvent(Event("current_state", "user_output", [self.clock / 1000.0, self.currentState]))
  609. def initializeStatechart(self):
  610. # enter default state
  611. self.default_targets = self.states["/Main"].getEffectiveTargetStates()
  612. RuntimeClassBase.initializeStatechart(self)
  613. class ObjectManager(ObjectManagerBase):
  614. def __init__(self, controller):
  615. ObjectManagerBase.__init__(self, controller)
  616. def instantiate(self, class_name, construct_params):
  617. if class_name == "FSASimulator":
  618. instance = FSASimulator(self.controller, construct_params[0], construct_params[1])
  619. instance.associations = {}
  620. else:
  621. raise Exception("Cannot instantiate class " + class_name)
  622. return instance
  623. class Controller(ThreadsControllerBase):
  624. def __init__(self, amodel, events, keep_running = None, behind_schedule_callback = None):
  625. if keep_running == None: keep_running = True
  626. if behind_schedule_callback == None: behind_schedule_callback = None
  627. ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
  628. self.addInputPort("user_input")
  629. self.addInputPort("user_output")
  630. self.object_manager.createInstance("FSASimulator", [amodel, events])