|
@@ -1,7 +1,7 @@
|
|
|
"""
|
|
"""
|
|
|
Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
|
|
Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
|
|
|
|
|
|
|
|
-Date: Wed Nov 30 16:15:48 2016
|
|
|
|
|
|
|
+Date: Wed Nov 30 17:39:12 2016
|
|
|
|
|
|
|
|
Model author: Sadaf Mustafiz and Claudio Gomes and Simon Van Mierlo
|
|
Model author: Sadaf Mustafiz and Claudio Gomes and Simon Van Mierlo
|
|
|
Model name: FSASimulator_Coordinator
|
|
Model name: FSASimulator_Coordinator
|
|
@@ -1037,26 +1037,32 @@ class WovenSimulator_Simulation(RuntimeClassBase):
|
|
|
# state /Main/SimulationFlow/ExecutingCBD
|
|
# state /Main/SimulationFlow/ExecutingCBD
|
|
|
self.states["/Main/SimulationFlow/ExecutingCBD"] = State(52, "/Main/SimulationFlow/ExecutingCBD", self)
|
|
self.states["/Main/SimulationFlow/ExecutingCBD"] = State(52, "/Main/SimulationFlow/ExecutingCBD", self)
|
|
|
|
|
|
|
|
|
|
+ # state /Main/SimulationFlow/CheckingForStateEvent
|
|
|
|
|
+ self.states["/Main/SimulationFlow/CheckingForStateEvent"] = State(53, "/Main/SimulationFlow/CheckingForStateEvent", self)
|
|
|
|
|
+
|
|
|
|
|
+ # state /Main/SimulationFlow/SendingGodEvent
|
|
|
|
|
+ self.states["/Main/SimulationFlow/SendingGodEvent"] = State(54, "/Main/SimulationFlow/SendingGodEvent", self)
|
|
|
|
|
+
|
|
|
# state /Main/SimulationFlow/Executing
|
|
# state /Main/SimulationFlow/Executing
|
|
|
- self.states["/Main/SimulationFlow/Executing"] = State(53, "/Main/SimulationFlow/Executing", self)
|
|
|
|
|
|
|
+ self.states["/Main/SimulationFlow/Executing"] = State(55, "/Main/SimulationFlow/Executing", self)
|
|
|
|
|
|
|
|
# state /Main/SimulationFlow/Stopped
|
|
# state /Main/SimulationFlow/Stopped
|
|
|
- self.states["/Main/SimulationFlow/Stopped"] = State(54, "/Main/SimulationFlow/Stopped", self)
|
|
|
|
|
|
|
+ self.states["/Main/SimulationFlow/Stopped"] = State(56, "/Main/SimulationFlow/Stopped", self)
|
|
|
|
|
|
|
|
# state /Main/BreakpointManager
|
|
# state /Main/BreakpointManager
|
|
|
- self.states["/Main/BreakpointManager"] = State(55, "/Main/BreakpointManager", self)
|
|
|
|
|
|
|
+ self.states["/Main/BreakpointManager"] = State(57, "/Main/BreakpointManager", self)
|
|
|
|
|
|
|
|
# state /Main/BreakpointManager/Listening
|
|
# state /Main/BreakpointManager/Listening
|
|
|
- self.states["/Main/BreakpointManager/Listening"] = State(56, "/Main/BreakpointManager/Listening", self)
|
|
|
|
|
|
|
+ self.states["/Main/BreakpointManager/Listening"] = State(58, "/Main/BreakpointManager/Listening", self)
|
|
|
|
|
|
|
|
# state /Main/ParentCommunicator
|
|
# state /Main/ParentCommunicator
|
|
|
- self.states["/Main/ParentCommunicator"] = State(57, "/Main/ParentCommunicator", self)
|
|
|
|
|
|
|
+ self.states["/Main/ParentCommunicator"] = State(59, "/Main/ParentCommunicator", self)
|
|
|
|
|
|
|
|
# state /Main/ParentCommunicator/Forwarding
|
|
# state /Main/ParentCommunicator/Forwarding
|
|
|
- self.states["/Main/ParentCommunicator/Forwarding"] = State(58, "/Main/ParentCommunicator/Forwarding", self)
|
|
|
|
|
|
|
+ self.states["/Main/ParentCommunicator/Forwarding"] = State(60, "/Main/ParentCommunicator/Forwarding", self)
|
|
|
|
|
|
|
|
# state /Stopped
|
|
# state /Stopped
|
|
|
- self.states["/Stopped"] = State(59, "/Stopped", self)
|
|
|
|
|
|
|
+ self.states["/Stopped"] = State(61, "/Stopped", self)
|
|
|
|
|
|
|
|
# add children
|
|
# add children
|
|
|
self.states[""].addChild(self.states["/Main"])
|
|
self.states[""].addChild(self.states["/Main"])
|
|
@@ -1111,6 +1117,8 @@ class WovenSimulator_Simulation(RuntimeClassBase):
|
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/WaitingRealtime"])
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/WaitingRealtime"])
|
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/SteppedInto"])
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/SteppedInto"])
|
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/ExecutingCBD"])
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/ExecutingCBD"])
|
|
|
|
|
+ self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/CheckingForStateEvent"])
|
|
|
|
|
+ self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/SendingGodEvent"])
|
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Executing"])
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Executing"])
|
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Stopped"])
|
|
self.states["/Main/SimulationFlow"].addChild(self.states["/Main/SimulationFlow/Stopped"])
|
|
|
self.states["/Main/SimulationFlow/SteppedInto"].addChild(self.states["/Main/SimulationFlow/SteppedInto/Waiting"])
|
|
self.states["/Main/SimulationFlow/SteppedInto"].addChild(self.states["/Main/SimulationFlow/SteppedInto/Waiting"])
|
|
@@ -1465,11 +1473,29 @@ class WovenSimulator_Simulation(RuntimeClassBase):
|
|
|
self.states["/Main/SimulationFlow/SteppedInto/SettleBeforeWaiting"].addTransition(_Main_SimulationFlow_SteppedInto_SettleBeforeWaiting_0)
|
|
self.states["/Main/SimulationFlow/SteppedInto/SettleBeforeWaiting"].addTransition(_Main_SimulationFlow_SteppedInto_SettleBeforeWaiting_0)
|
|
|
|
|
|
|
|
# transition /Main/SimulationFlow/ExecutingCBD
|
|
# transition /Main/SimulationFlow/ExecutingCBD
|
|
|
- _Main_SimulationFlow_ExecutingCBD_0 = Transition(self, self.states["/Main/SimulationFlow/ExecutingCBD"], [self.states["/Main/SimulationFlow/Executing"]])
|
|
|
|
|
|
|
+ _Main_SimulationFlow_ExecutingCBD_0 = Transition(self, self.states["/Main/SimulationFlow/ExecutingCBD"], [self.states["/Main/SimulationFlow/CheckingForStateEvent"]])
|
|
|
_Main_SimulationFlow_ExecutingCBD_0.setAction(self._Main_SimulationFlow_ExecutingCBD_0_exec)
|
|
_Main_SimulationFlow_ExecutingCBD_0.setAction(self._Main_SimulationFlow_ExecutingCBD_0_exec)
|
|
|
_Main_SimulationFlow_ExecutingCBD_0.setTrigger(Event("CBDBigStep.Finished", None))
|
|
_Main_SimulationFlow_ExecutingCBD_0.setTrigger(Event("CBDBigStep.Finished", None))
|
|
|
self.states["/Main/SimulationFlow/ExecutingCBD"].addTransition(_Main_SimulationFlow_ExecutingCBD_0)
|
|
self.states["/Main/SimulationFlow/ExecutingCBD"].addTransition(_Main_SimulationFlow_ExecutingCBD_0)
|
|
|
|
|
|
|
|
|
|
+ # transition /Main/SimulationFlow/CheckingForStateEvent
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_0 = Transition(self, self.states["/Main/SimulationFlow/CheckingForStateEvent"], [self.states["/Main/SimulationFlow/Executing"]])
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_0.setAction(self._Main_SimulationFlow_CheckingForStateEvent_0_exec)
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_0.setTrigger(None)
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_0.setGuard(self._Main_SimulationFlow_CheckingForStateEvent_0_guard)
|
|
|
|
|
+ self.states["/Main/SimulationFlow/CheckingForStateEvent"].addTransition(_Main_SimulationFlow_CheckingForStateEvent_0)
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_1 = Transition(self, self.states["/Main/SimulationFlow/CheckingForStateEvent"], [self.states["/Main/SimulationFlow/SendingGodEvent"]])
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_1.setAction(self._Main_SimulationFlow_CheckingForStateEvent_1_exec)
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_1.setTrigger(None)
|
|
|
|
|
+ _Main_SimulationFlow_CheckingForStateEvent_1.setGuard(self._Main_SimulationFlow_CheckingForStateEvent_1_guard)
|
|
|
|
|
+ self.states["/Main/SimulationFlow/CheckingForStateEvent"].addTransition(_Main_SimulationFlow_CheckingForStateEvent_1)
|
|
|
|
|
+
|
|
|
|
|
+ # transition /Main/SimulationFlow/SendingGodEvent
|
|
|
|
|
+ _Main_SimulationFlow_SendingGodEvent_0 = Transition(self, self.states["/Main/SimulationFlow/SendingGodEvent"], [self.states["/Main/SimulationFlow/Executing"]])
|
|
|
|
|
+ _Main_SimulationFlow_SendingGodEvent_0.setAction(self._Main_SimulationFlow_SendingGodEvent_0_exec)
|
|
|
|
|
+ _Main_SimulationFlow_SendingGodEvent_0.setTrigger(Event("FSASimulation.GodEventResult", None))
|
|
|
|
|
+ self.states["/Main/SimulationFlow/SendingGodEvent"].addTransition(_Main_SimulationFlow_SendingGodEvent_0)
|
|
|
|
|
+
|
|
|
# transition /Main/SimulationFlow/Executing
|
|
# transition /Main/SimulationFlow/Executing
|
|
|
_Main_SimulationFlow_Executing_0 = Transition(self, self.states["/Main/SimulationFlow/Executing"], [self.states["/Main/SimulationFlow/SettleBeforeCheckTermination"]])
|
|
_Main_SimulationFlow_Executing_0 = Transition(self, self.states["/Main/SimulationFlow/Executing"], [self.states["/Main/SimulationFlow/SettleBeforeCheckTermination"]])
|
|
|
_Main_SimulationFlow_Executing_0.setAction(self._Main_SimulationFlow_Executing_0_exec)
|
|
_Main_SimulationFlow_Executing_0.setAction(self._Main_SimulationFlow_Executing_0_exec)
|
|
@@ -1885,9 +1911,24 @@ class WovenSimulator_Simulation(RuntimeClassBase):
|
|
|
self.cbd_iteration = cbd_iteration
|
|
self.cbd_iteration = cbd_iteration
|
|
|
self.cbd_time_next = cbd_time_next
|
|
self.cbd_time_next = cbd_time_next
|
|
|
self.woven_triggered_when_transition = self.wovenGetTriggeredWhenTransition()
|
|
self.woven_triggered_when_transition = self.wovenGetTriggeredWhenTransition()
|
|
|
- self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_fsa_simulator', Event("FSASmallStep.Execute", None, [self.woven_triggered_when_transition])]))
|
|
|
|
|
|
|
+
|
|
|
|
|
+ def _Main_SimulationFlow_CheckingForStateEvent_0_exec(self, parameters):
|
|
|
|
|
+ self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_fsa_simulator', Event("FSASmallStep.Execute", None, [])]))
|
|
|
# print 'Executing a FSA small step... (after CBD big step)'
|
|
# print 'Executing a FSA small step... (after CBD big step)'
|
|
|
|
|
|
|
|
|
|
+ def _Main_SimulationFlow_CheckingForStateEvent_0_guard(self, parameters):
|
|
|
|
|
+ return self.woven_triggered_when_transition == None
|
|
|
|
|
+
|
|
|
|
|
+ def _Main_SimulationFlow_CheckingForStateEvent_1_exec(self, parameters):
|
|
|
|
|
+ self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_fsa_simulator', Event("FSASimulation.GodEvent", None, [self.woven_triggered_when_transition])]))
|
|
|
|
|
+
|
|
|
|
|
+ def _Main_SimulationFlow_CheckingForStateEvent_1_guard(self, parameters):
|
|
|
|
|
+ return not (self.woven_triggered_when_transition == None)
|
|
|
|
|
+
|
|
|
|
|
+ def _Main_SimulationFlow_SendingGodEvent_0_exec(self, parameters):
|
|
|
|
|
+ self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_fsa_simulator', Event("FSASmallStep.Execute", None, [])]))
|
|
|
|
|
+ # print 'Executing a FSA small step... (after CBD big step -- state event detected)'
|
|
|
|
|
+
|
|
|
def _Main_SimulationFlow_Executing_0_exec(self, parameters):
|
|
def _Main_SimulationFlow_Executing_0_exec(self, parameters):
|
|
|
fsa_clock = parameters[0]
|
|
fsa_clock = parameters[0]
|
|
|
fsa_state = parameters[1]
|
|
fsa_state = parameters[1]
|
|
@@ -1959,6 +2000,7 @@ class FSASimulator_Simulation(RuntimeClassBase):
|
|
|
self.elapsed = 0
|
|
self.elapsed = 0
|
|
|
self.time_next = self.delta
|
|
self.time_next = self.delta
|
|
|
self.state = self.model.initialState
|
|
self.state = self.model.initialState
|
|
|
|
|
+ self.selected_transition = None
|
|
|
|
|
|
|
|
|
|
|
|
|
# user defined method
|
|
# user defined method
|
|
@@ -1977,12 +2019,8 @@ class FSASimulator_Simulation(RuntimeClassBase):
|
|
|
|
|
|
|
|
|
|
|
|
|
# user defined method
|
|
# user defined method
|
|
|
- def godEvent(self, new_state):
|
|
|
|
|
- filtered_states = [s for s in self.model.states if s.name == new_state]
|
|
|
|
|
- if not len(filtered_states) == 1:
|
|
|
|
|
- return -1
|
|
|
|
|
- self.state = filtered_states[0]
|
|
|
|
|
- return 0
|
|
|
|
|
|
|
+ def godEvent(self, selected_transition):
|
|
|
|
|
+ self.selected_transition = selected_transition
|
|
|
|
|
|
|
|
|
|
|
|
|
# builds Statechart structure
|
|
# builds Statechart structure
|
|
@@ -2127,11 +2165,9 @@ class FSASimulator_Simulation(RuntimeClassBase):
|
|
|
|
|
|
|
|
# transition /Main/ModeSelector/Paused
|
|
# transition /Main/ModeSelector/Paused
|
|
|
_Main_ModeSelector_Paused_0 = Transition(self, self.states["/Main/ModeSelector/Paused"], [self.states["/Main/ModeSelector/Running/SmallStep"]])
|
|
_Main_ModeSelector_Paused_0 = Transition(self, self.states["/Main/ModeSelector/Paused"], [self.states["/Main/ModeSelector/Running/SmallStep"]])
|
|
|
- _Main_ModeSelector_Paused_0.setAction(self._Main_ModeSelector_Paused_0_exec)
|
|
|
|
|
_Main_ModeSelector_Paused_0.setTrigger(Event("FSASmallStep.Execute", None))
|
|
_Main_ModeSelector_Paused_0.setTrigger(Event("FSASmallStep.Execute", None))
|
|
|
self.states["/Main/ModeSelector/Paused"].addTransition(_Main_ModeSelector_Paused_0)
|
|
self.states["/Main/ModeSelector/Paused"].addTransition(_Main_ModeSelector_Paused_0)
|
|
|
_Main_ModeSelector_Paused_1 = Transition(self, self.states["/Main/ModeSelector/Paused"], [self.states["/Main/ModeSelector/Running/BigStep"]])
|
|
_Main_ModeSelector_Paused_1 = Transition(self, self.states["/Main/ModeSelector/Paused"], [self.states["/Main/ModeSelector/Running/BigStep"]])
|
|
|
- _Main_ModeSelector_Paused_1.setAction(self._Main_ModeSelector_Paused_1_exec)
|
|
|
|
|
_Main_ModeSelector_Paused_1.setTrigger(Event("FSABigStep.Execute", None))
|
|
_Main_ModeSelector_Paused_1.setTrigger(Event("FSABigStep.Execute", None))
|
|
|
self.states["/Main/ModeSelector/Paused"].addTransition(_Main_ModeSelector_Paused_1)
|
|
self.states["/Main/ModeSelector/Paused"].addTransition(_Main_ModeSelector_Paused_1)
|
|
|
_Main_ModeSelector_Paused_2 = Transition(self, self.states["/Main/ModeSelector/Paused"], [self.states["/Main/ModeSelector/Paused"]])
|
|
_Main_ModeSelector_Paused_2 = Transition(self, self.states["/Main/ModeSelector/Paused"], [self.states["/Main/ModeSelector/Paused"]])
|
|
@@ -2280,14 +2316,6 @@ class FSASimulator_Simulation(RuntimeClassBase):
|
|
|
def _Main_SimulationFlow_SettleBeforeCheckTermination_exit(self):
|
|
def _Main_SimulationFlow_SettleBeforeCheckTermination_exit(self):
|
|
|
self.removeTimer(1)
|
|
self.removeTimer(1)
|
|
|
|
|
|
|
|
- def _Main_ModeSelector_Paused_0_exec(self, parameters):
|
|
|
|
|
- selected_transition = parameters[0]
|
|
|
|
|
- self.selected_transition = selected_transition
|
|
|
|
|
-
|
|
|
|
|
- def _Main_ModeSelector_Paused_1_exec(self, parameters):
|
|
|
|
|
- selected_transition = parameters[0]
|
|
|
|
|
- self.selected_transition = selected_transition
|
|
|
|
|
-
|
|
|
|
|
def _Main_ModeSelector_Paused_2_exec(self, parameters):
|
|
def _Main_ModeSelector_Paused_2_exec(self, parameters):
|
|
|
clock = parameters[0]
|
|
clock = parameters[0]
|
|
|
state = parameters[1]
|
|
state = parameters[1]
|
|
@@ -2359,12 +2387,14 @@ class FSASimulator_Simulation(RuntimeClassBase):
|
|
|
|
|
|
|
|
def _Main_SimulationFlow_CheckTermination_0_exec(self, parameters):
|
|
def _Main_SimulationFlow_CheckTermination_0_exec(self, parameters):
|
|
|
self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_simulator', Event("FSABigStep.Execute", None, [self.selected_transition])]))
|
|
self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_simulator', Event("FSABigStep.Execute", None, [self.selected_transition])]))
|
|
|
|
|
+ self.selected_transition = None
|
|
|
|
|
|
|
|
def _Main_SimulationFlow_CheckTermination_0_guard(self, parameters):
|
|
def _Main_SimulationFlow_CheckTermination_0_guard(self, parameters):
|
|
|
return self.inState(["/Main/ModeSelector/Running/BigStep"]) and self.inState(["/Main/ChildState/Initialized"]) and not self.endCondition()
|
|
return self.inState(["/Main/ModeSelector/Running/BigStep"]) and self.inState(["/Main/ChildState/Initialized"]) and not self.endCondition()
|
|
|
|
|
|
|
|
def _Main_SimulationFlow_CheckTermination_1_exec(self, parameters):
|
|
def _Main_SimulationFlow_CheckTermination_1_exec(self, parameters):
|
|
|
self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_simulator', Event("FSASmallStep.Execute", None, [self.selected_transition])]))
|
|
self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'child_simulator', Event("FSASmallStep.Execute", None, [self.selected_transition])]))
|
|
|
|
|
+ self.selected_transition = None
|
|
|
|
|
|
|
|
def _Main_SimulationFlow_CheckTermination_1_guard(self, parameters):
|
|
def _Main_SimulationFlow_CheckTermination_1_guard(self, parameters):
|
|
|
return self.inState(["/Main/ModeSelector/Running/SmallStep"]) and self.inState(["/Main/ChildState/Initialized"]) and not self.endCondition()
|
|
return self.inState(["/Main/ModeSelector/Running/SmallStep"]) and self.inState(["/Main/ChildState/Initialized"]) and not self.endCondition()
|
|
@@ -2379,12 +2409,12 @@ class FSASimulator_Simulation(RuntimeClassBase):
|
|
|
return self.endCondition()
|
|
return self.endCondition()
|
|
|
|
|
|
|
|
def _Main_GodEventManager_Listening_0_exec(self, parameters):
|
|
def _Main_GodEventManager_Listening_0_exec(self, parameters):
|
|
|
- new_state = parameters[0]
|
|
|
|
|
- result = self.godEvent(new_state)
|
|
|
|
|
|
|
+ selected_transition = parameters[0]
|
|
|
|
|
+ result = self.godEvent(selected_transition)
|
|
|
self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("FSASimulation.GodEventResult", None, [result])]))
|
|
self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("FSASimulation.GodEventResult", None, [result])]))
|
|
|
|
|
|
|
|
def _Main_GodEventManager_Listening_0_guard(self, parameters):
|
|
def _Main_GodEventManager_Listening_0_guard(self, parameters):
|
|
|
- new_state = parameters[0]
|
|
|
|
|
|
|
+ selected_transition = parameters[0]
|
|
|
return self.inState(["/Main/ModeSelector/Paused"])
|
|
return self.inState(["/Main/ModeSelector/Paused"])
|
|
|
|
|
|
|
|
def initializeStatechart(self):
|
|
def initializeStatechart(self):
|