Ver código fonte

now with god events

Simon Van Mierlo 9 anos atrás
pai
commit
d38e5eb2cc

+ 13 - 22
debugging_fsa_cbd_composition/fsa_cbd_simulator/HierarchicalSimulator/fsa_sim_simulation.xml

@@ -22,6 +22,7 @@
             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
         ]]>
         ]]>
         </body>
         </body>
     </method>
     </method>
@@ -47,14 +48,10 @@
         </body>
         </body>
     </method>
     </method>
     <method name="godEvent">
     <method name="godEvent">
-        <parameter name="new_state" />
+        <parameter name="selected_transition" />
         <body>
         <body>
         <![CDATA[
         <![CDATA[
-            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
+            self.selected_transition = selected_transition
         ]]>
         ]]>
         </body>
         </body>
     </method>
     </method>
@@ -62,20 +59,8 @@
         <parallel id="Main">
         <parallel id="Main">
             <state id="ModeSelector" initial="Paused">
             <state id="ModeSelector" initial="Paused">
                 <state id="Paused">
                 <state id="Paused">
-                    <transition target="../Running/SmallStep" event="FSASmallStep.Execute">
-                        <!-- used for state event transitions (and is None if none is detected) -->
-                        <parameter name="selected_transition" />
-                        <script>
-                            self.selected_transition = selected_transition
-                        </script>
-                    </transition>
-                    <transition target="../Running/BigStep" event="FSABigStep.Execute">
-                        <!-- used for state event transitions (and is None if none is detected) -->
-                        <parameter name="selected_transition" />
-                        <script>
-                            self.selected_transition = selected_transition
-                        </script>
-                    </transition>
+                    <transition target="../Running/SmallStep" event="FSASmallStep.Execute" />
+                    <transition target="../Running/BigStep" event="FSABigStep.Execute" />
                     <!-- In case a small step finishes a big step... -->
                     <!-- In case a small step finishes a big step... -->
                     <transition target="." event="FSABigStep.Finished">
                     <transition target="." event="FSABigStep.Finished">
                         <parameter name="clock" />
                         <parameter name="clock" />
@@ -249,11 +234,17 @@
                         <raise event="FSABigStep.Execute" scope="narrow" target="'child_simulator'">
                         <raise event="FSABigStep.Execute" scope="narrow" target="'child_simulator'">
                             <parameter expr="self.selected_transition" />
                             <parameter expr="self.selected_transition" />
                         </raise>
                         </raise>
+                        <script>
+                            self.selected_transition = None
+                        </script>
                     </transition>
                     </transition>
                     <transition target="../ExecutingSmallStep" cond="INSTATE('../../ModeSelector/Running/SmallStep') and INSTATE('../../ChildState/Initialized') and not self.endCondition()">
                     <transition target="../ExecutingSmallStep" cond="INSTATE('../../ModeSelector/Running/SmallStep') and INSTATE('../../ChildState/Initialized') and not self.endCondition()">
                         <raise event="FSASmallStep.Execute" scope="narrow" target="'child_simulator'">
                         <raise event="FSASmallStep.Execute" scope="narrow" target="'child_simulator'">
                             <parameter expr="self.selected_transition" />
                             <parameter expr="self.selected_transition" />
                         </raise>
                         </raise>
+                        <script>
+                            self.selected_transition = None
+                        </script>
                     </transition>
                     </transition>
                     <transition target="../Stopped" cond="self.endCondition()">
                     <transition target="../Stopped" cond="self.endCondition()">
                         <script>
                         <script>
@@ -280,9 +271,9 @@
             <state id="GodEventManager" initial="Listening">
             <state id="GodEventManager" initial="Listening">
                 <state id="Listening">
                 <state id="Listening">
                     <transition target="." event="FSASimulation.GodEvent" cond="INSTATE('../../ModeSelector/Paused')">
                     <transition target="." event="FSASimulation.GodEvent" cond="INSTATE('../../ModeSelector/Paused')">
-                        <parameter name="new_state" />
+                        <parameter name="selected_transition" />
                         <script>
                         <script>
-                            result = self.godEvent(new_state)
+                            result = self.godEvent(selected_transition)
                         </script>
                         </script>
                         <raise event="FSASimulation.GodEventResult" scope="narrow" target="'parent'">
                         <raise event="FSASimulation.GodEventResult" scope="narrow" target="'parent'">
                             <parameter expr="result" />
                             <parameter expr="result" />

+ 59 - 29
debugging_fsa_cbd_composition/fsa_cbd_simulator/HierarchicalSimulator/target.py

@@ -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):

+ 16 - 3
debugging_fsa_cbd_composition/fsa_cbd_simulator/HierarchicalSimulator/woven_sim_simulation.xml

@@ -704,7 +704,7 @@
                     </transition>
                     </transition>
                 </state>
                 </state>
                 <state id="ExecutingCBD">
                 <state id="ExecutingCBD">
-                    <transition target="../Executing" event="CBDBigStep.Finished">
+                    <transition target="../CheckingForStateEvent" event="CBDBigStep.Finished">
                         <parameter name="cbd_clock" />
                         <parameter name="cbd_clock" />
                         <parameter name="cbd_iteration" />
                         <parameter name="cbd_iteration" />
                         <parameter name="cbd_time_next" />
                         <parameter name="cbd_time_next" />
@@ -718,10 +718,23 @@
                             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()
                         </script>
                         </script>
-                        <raise event="FSASmallStep.Execute" scope="narrow" target="'child_fsa_simulator'">
+                    </transition>
+                </state>
+                <state id="CheckingForStateEvent">
+                    <transition target="../Executing" cond="self.woven_triggered_when_transition == None">
+                        <raise event="FSASmallStep.Execute" scope="narrow" target="'child_fsa_simulator'" />
+                        <script># print 'Executing a FSA small step... (after CBD big step)'</script>
+                    </transition>
+                    <transition target="../SendingGodEvent" cond="not (self.woven_triggered_when_transition == None)">
+                        <raise event="FSASimulation.GodEvent" scope="narrow" target="'child_fsa_simulator'">
                             <parameter expr="self.woven_triggered_when_transition" />
                             <parameter expr="self.woven_triggered_when_transition" />
                         </raise>
                         </raise>
-                        <script># print 'Executing a FSA small step... (after CBD big step)'</script>
+                    </transition>
+                </state>
+                <state id="SendingGodEvent">
+                    <transition target="../Executing" event="FSASimulation.GodEventResult">
+                        <raise event="FSASmallStep.Execute" scope="narrow" target="'child_fsa_simulator'" />
+                        <script># print 'Executing a FSA small step... (after CBD big step -- state event detected)'</script>
                     </transition>
                     </transition>
                 </state>
                 </state>
                 <state id="Executing">
                 <state id="Executing">