|
|
@@ -0,0 +1,784 @@
|
|
|
+"""Implementation of statechart statechart.
|
|
|
+Generated by itemis CREATE code generator.
|
|
|
+"""
|
|
|
+
|
|
|
+import queue
|
|
|
+import sys, os
|
|
|
+sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../src')))
|
|
|
+from yakindu.rx import Observable
|
|
|
+
|
|
|
+class Statechart:
|
|
|
+ """Implementation of the state machine Statechart.
|
|
|
+ """
|
|
|
+
|
|
|
+ class State:
|
|
|
+ """ State Enum
|
|
|
+ """
|
|
|
+ (
|
|
|
+ main_region_child_lockable,
|
|
|
+ main_region_child_lockable_r1locked,
|
|
|
+ main_region_child_lockable_r1orthogonal_state,
|
|
|
+ main_region_child_lockable_r1orthogonal_state_r1door_open,
|
|
|
+ main_region_child_lockable_r1orthogonal_state_r1door_closed,
|
|
|
+ main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on,
|
|
|
+ main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a,
|
|
|
+ main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off,
|
|
|
+ main_region_child_lockable_r1orthogonal_state_r2time_control,
|
|
|
+ main_region_child_lockable_r2detect_clicks,
|
|
|
+ null_state
|
|
|
+ ) = range(11)
|
|
|
+
|
|
|
+
|
|
|
+ def __init__(self):
|
|
|
+ """ Declares all necessary variables including list of states, histories etc.
|
|
|
+ """
|
|
|
+
|
|
|
+ self.start_pressed = None
|
|
|
+ self.stop_pressed = None
|
|
|
+ self.increase_time_pressed = None
|
|
|
+ self.door_opened = None
|
|
|
+ self.door_closed = None
|
|
|
+ self.turn_magnetron_on = None
|
|
|
+ self.turn_magnetron_on_observable = Observable()
|
|
|
+ self.turn_magnetron_off = None
|
|
|
+ self.turn_magnetron_off_observable = Observable()
|
|
|
+ self.set_displayed_time = None
|
|
|
+ self.set_displayed_time_value = None
|
|
|
+ self.set_displayed_time_observable = Observable()
|
|
|
+ self.ring_bell = None
|
|
|
+ self.ring_bell_observable = Observable()
|
|
|
+
|
|
|
+ self.__internal_event_queue = queue.Queue()
|
|
|
+ self.in_event_queue = queue.Queue()
|
|
|
+ self.__remaining_time = None
|
|
|
+ self.__clicks = None
|
|
|
+ self.lock_unlock = None
|
|
|
+
|
|
|
+ # enumeration of all states:
|
|
|
+ self.__State = Statechart.State
|
|
|
+ self.__state_conf_vector_changed = None
|
|
|
+ self.__state_vector = [None] * 3
|
|
|
+ for __state_index in range(3):
|
|
|
+ self.__state_vector[__state_index] = self.State.null_state
|
|
|
+
|
|
|
+ # for timed statechart:
|
|
|
+ self.timer_service = None
|
|
|
+ self.__time_events = [None] * 2
|
|
|
+
|
|
|
+ # history vector:
|
|
|
+ self.__history_vector = [None] * 1
|
|
|
+ for __history_index in range(1):
|
|
|
+ self.__history_vector[__history_index] = self.State.null_state
|
|
|
+
|
|
|
+ # initializations:
|
|
|
+ self.__remaining_time = 0
|
|
|
+ self.__clicks = 0
|
|
|
+ self.__is_executing = False
|
|
|
+ self.__state_conf_vector_position = None
|
|
|
+
|
|
|
+ def is_active(self):
|
|
|
+ """Checks if the state machine is active.
|
|
|
+ """
|
|
|
+ return self.__state_vector[0] is not self.__State.null_state or self.__state_vector[1] is not self.__State.null_state or self.__state_vector[2] is not self.__State.null_state
|
|
|
+
|
|
|
+ def is_final(self):
|
|
|
+ """Checks if the statemachine is final.
|
|
|
+ Always returns 'false' since this state machine can never become final.
|
|
|
+ """
|
|
|
+ return False
|
|
|
+
|
|
|
+ def is_state_active(self, state):
|
|
|
+ """Checks if the state is currently active.
|
|
|
+ """
|
|
|
+ s = state
|
|
|
+ if s == self.__State.main_region_child_lockable:
|
|
|
+ return (self.__state_vector[0] >= self.__State.main_region_child_lockable)\
|
|
|
+ and (self.__state_vector[0] <= self.__State.main_region_child_lockable_r2detect_clicks)
|
|
|
+ if s == self.__State.main_region_child_lockable_r1locked:
|
|
|
+ return self.__state_vector[0] == self.__State.main_region_child_lockable_r1locked
|
|
|
+ if s == self.__State.main_region_child_lockable_r1orthogonal_state:
|
|
|
+ return (self.__state_vector[0] >= self.__State.main_region_child_lockable_r1orthogonal_state)\
|
|
|
+ and (self.__state_vector[0] <= self.__State.main_region_child_lockable_r1orthogonal_state_r2time_control)
|
|
|
+ if s == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_open:
|
|
|
+ return self.__state_vector[0] == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_open
|
|
|
+ if s == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed:
|
|
|
+ return (self.__state_vector[0] >= self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed)\
|
|
|
+ and (self.__state_vector[0] <= self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off)
|
|
|
+ if s == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on:
|
|
|
+ return (self.__state_vector[0] >= self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on)\
|
|
|
+ and (self.__state_vector[0] <= self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a)
|
|
|
+ if s == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a:
|
|
|
+ return self.__state_vector[0] == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a
|
|
|
+ if s == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off:
|
|
|
+ return self.__state_vector[0] == self.__State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off
|
|
|
+ if s == self.__State.main_region_child_lockable_r1orthogonal_state_r2time_control:
|
|
|
+ return self.__state_vector[1] == self.__State.main_region_child_lockable_r1orthogonal_state_r2time_control
|
|
|
+ if s == self.__State.main_region_child_lockable_r2detect_clicks:
|
|
|
+ return self.__state_vector[2] == self.__State.main_region_child_lockable_r2detect_clicks
|
|
|
+ return False
|
|
|
+
|
|
|
+ def time_elapsed(self, event_id):
|
|
|
+ """Add time events to in event queue
|
|
|
+ """
|
|
|
+ if event_id in range(2):
|
|
|
+ self.in_event_queue.put(lambda: self.raise_time_event(event_id))
|
|
|
+ self.run_cycle()
|
|
|
+
|
|
|
+ def raise_time_event(self, event_id):
|
|
|
+ """Raise timed events using the event_id.
|
|
|
+ """
|
|
|
+ self.__time_events[event_id] = True
|
|
|
+
|
|
|
+ def __execute_queued_event(self, func):
|
|
|
+ func()
|
|
|
+
|
|
|
+ def __get_next_event(self):
|
|
|
+ if not self.__internal_event_queue.empty():
|
|
|
+ return self.__internal_event_queue.get()
|
|
|
+ if not self.in_event_queue.empty():
|
|
|
+ return self.in_event_queue.get()
|
|
|
+ return None
|
|
|
+
|
|
|
+
|
|
|
+ def raise_lock_unlock(self):
|
|
|
+ """Raise method for event lock_unlock.
|
|
|
+ """
|
|
|
+ self.__internal_event_queue.put(self.__raise_lock_unlock_call)
|
|
|
+
|
|
|
+ def __raise_lock_unlock_call(self):
|
|
|
+ """Raise callback for event lock_unlock.
|
|
|
+ """
|
|
|
+ self.lock_unlock = True
|
|
|
+
|
|
|
+ def raise_start_pressed(self):
|
|
|
+ """Raise method for event start_pressed.
|
|
|
+ """
|
|
|
+ self.in_event_queue.put(self.__raise_start_pressed_call)
|
|
|
+ self.run_cycle()
|
|
|
+
|
|
|
+ def __raise_start_pressed_call(self):
|
|
|
+ """Raise callback for event start_pressed.
|
|
|
+ """
|
|
|
+ self.start_pressed = True
|
|
|
+
|
|
|
+ def raise_stop_pressed(self):
|
|
|
+ """Raise method for event stop_pressed.
|
|
|
+ """
|
|
|
+ self.in_event_queue.put(self.__raise_stop_pressed_call)
|
|
|
+ self.run_cycle()
|
|
|
+
|
|
|
+ def __raise_stop_pressed_call(self):
|
|
|
+ """Raise callback for event stop_pressed.
|
|
|
+ """
|
|
|
+ self.stop_pressed = True
|
|
|
+
|
|
|
+ def raise_increase_time_pressed(self):
|
|
|
+ """Raise method for event increase_time_pressed.
|
|
|
+ """
|
|
|
+ self.in_event_queue.put(self.__raise_increase_time_pressed_call)
|
|
|
+ self.run_cycle()
|
|
|
+
|
|
|
+ def __raise_increase_time_pressed_call(self):
|
|
|
+ """Raise callback for event increase_time_pressed.
|
|
|
+ """
|
|
|
+ self.increase_time_pressed = True
|
|
|
+
|
|
|
+ def raise_door_opened(self):
|
|
|
+ """Raise method for event door_opened.
|
|
|
+ """
|
|
|
+ self.in_event_queue.put(self.__raise_door_opened_call)
|
|
|
+ self.run_cycle()
|
|
|
+
|
|
|
+ def __raise_door_opened_call(self):
|
|
|
+ """Raise callback for event door_opened.
|
|
|
+ """
|
|
|
+ self.door_opened = True
|
|
|
+
|
|
|
+ def raise_door_closed(self):
|
|
|
+ """Raise method for event door_closed.
|
|
|
+ """
|
|
|
+ self.in_event_queue.put(self.__raise_door_closed_call)
|
|
|
+ self.run_cycle()
|
|
|
+
|
|
|
+ def __raise_door_closed_call(self):
|
|
|
+ """Raise callback for event door_closed.
|
|
|
+ """
|
|
|
+ self.door_closed = True
|
|
|
+
|
|
|
+ def __effect_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_tr1(self):
|
|
|
+ """.
|
|
|
+ """
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
|
|
|
+
|
|
|
+ def __entry_action_main_region_child_lockable_r1_locked(self):
|
|
|
+ """Entry action for state 'Locked'..
|
|
|
+ """
|
|
|
+ self.set_displayed_time_observable.next(9999)
|
|
|
+
|
|
|
+ def __entry_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
|
|
|
+ """Entry action for state 'MagnetronOn'..
|
|
|
+ """
|
|
|
+ self.turn_magnetron_on_observable.next()
|
|
|
+
|
|
|
+ def __entry_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a(self):
|
|
|
+ """Entry action for state 'A'..
|
|
|
+ """
|
|
|
+ self.timer_service.set_timer(self, 0, (1 * 1000), False)
|
|
|
+
|
|
|
+ def __entry_action_main_region_child_lockable_r2_detect_clicks(self):
|
|
|
+ """Entry action for state 'DetectClicks'..
|
|
|
+ """
|
|
|
+ self.timer_service.set_timer(self, 1, 500, False)
|
|
|
+
|
|
|
+ def __exit_action_main_region_child_lockable_r1_locked(self):
|
|
|
+ """Exit action for state 'Locked'..
|
|
|
+ """
|
|
|
+ self.set_displayed_time_observable.next(self.__remaining_time)
|
|
|
+
|
|
|
+ def __exit_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
|
|
|
+ """Exit action for state 'MagnetronOn'..
|
|
|
+ """
|
|
|
+ self.turn_magnetron_off_observable.next()
|
|
|
+
|
|
|
+ def __exit_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a(self):
|
|
|
+ """Exit action for state 'A'..
|
|
|
+ """
|
|
|
+ self.timer_service.unset_timer(self, 0)
|
|
|
+
|
|
|
+ def __exit_action_main_region_child_lockable_r2_detect_clicks(self):
|
|
|
+ """Exit action for state 'DetectClicks'..
|
|
|
+ """
|
|
|
+ self.timer_service.unset_timer(self, 1)
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_default(self):
|
|
|
+ """'default' enter sequence for state ChildLockable.
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_default()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r2_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_locked_default(self):
|
|
|
+ """'default' enter sequence for state Locked.
|
|
|
+ """
|
|
|
+ self.__entry_action_main_region_child_lockable_r1_locked()
|
|
|
+ self.__state_vector[0] = self.State.main_region_child_lockable_r1locked
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+ self.__state_conf_vector_changed = True
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_default(self):
|
|
|
+ """'default' enter sequence for state OrthogonalState.
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_default()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r2_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_open_default(self):
|
|
|
+ """'default' enter sequence for state DoorOpen.
|
|
|
+ """
|
|
|
+ self.__state_vector[0] = self.State.main_region_child_lockable_r1orthogonal_state_r1door_open
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+ self.__state_conf_vector_changed = True
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_default(self):
|
|
|
+ """'default' enter sequence for state DoorClosed.
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_default(self):
|
|
|
+ """'default' enter sequence for state MagnetronOn.
|
|
|
+ """
|
|
|
+ self.__entry_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default()
|
|
|
+ self.__history_vector[0] = self.__state_vector[0]
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a_default(self):
|
|
|
+ """'default' enter sequence for state A.
|
|
|
+ """
|
|
|
+ self.__entry_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a()
|
|
|
+ self.__state_vector[0] = self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+ self.__state_conf_vector_changed = True
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default(self):
|
|
|
+ """'default' enter sequence for state MagnetronOff.
|
|
|
+ """
|
|
|
+ self.__state_vector[0] = self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+ self.__state_conf_vector_changed = True
|
|
|
+ self.__history_vector[0] = self.__state_vector[0]
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r2_time_control_default(self):
|
|
|
+ """'default' enter sequence for state TimeControl.
|
|
|
+ """
|
|
|
+ self.__state_vector[1] = self.State.main_region_child_lockable_r1orthogonal_state_r2time_control
|
|
|
+ self.__state_conf_vector_position = 1
|
|
|
+ self.__state_conf_vector_changed = True
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r2_detect_clicks_default(self):
|
|
|
+ """'default' enter sequence for state DetectClicks.
|
|
|
+ """
|
|
|
+ self.__entry_action_main_region_child_lockable_r2_detect_clicks()
|
|
|
+ self.__state_vector[2] = self.State.main_region_child_lockable_r2detect_clicks
|
|
|
+ self.__state_conf_vector_position = 2
|
|
|
+ self.__state_conf_vector_changed = True
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_default(self):
|
|
|
+ """'default' enter sequence for region main region.
|
|
|
+ """
|
|
|
+ self.__react_main_region__entry_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_default(self):
|
|
|
+ """'default' enter sequence for region r1.
|
|
|
+ """
|
|
|
+ self.__react_main_region_child_lockable_r1__entry_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_default(self):
|
|
|
+ """'default' enter sequence for region r1.
|
|
|
+ """
|
|
|
+ self.__react_main_region_child_lockable_r1_orthogonal_state_r1__entry_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_default(self):
|
|
|
+ """'default' enter sequence for region r1.
|
|
|
+ """
|
|
|
+ self.__react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1__entry_default()
|
|
|
+
|
|
|
+ def __shallow_enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1(self):
|
|
|
+ """shallow enterSequence with history in child r1.
|
|
|
+ """
|
|
|
+ state = self.__history_vector[0]
|
|
|
+ if state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a:
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off:
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default(self):
|
|
|
+ """'default' enter sequence for region r1.
|
|
|
+ """
|
|
|
+ self.__react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r1_orthogonal_state_r2_default(self):
|
|
|
+ """'default' enter sequence for region r2.
|
|
|
+ """
|
|
|
+ self.__react_main_region_child_lockable_r1_orthogonal_state_r2__entry_default()
|
|
|
+
|
|
|
+ def __enter_sequence_main_region_child_lockable_r2_default(self):
|
|
|
+ """'default' enter sequence for region r2.
|
|
|
+ """
|
|
|
+ self.__react_main_region_child_lockable_r2__entry_default()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_locked(self):
|
|
|
+ """Default exit sequence for state Locked.
|
|
|
+ """
|
|
|
+ self.__state_vector[0] = self.State.null_state
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+ self.__exit_action_main_region_child_lockable_r1_locked()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state(self):
|
|
|
+ """Default exit sequence for state OrthogonalState.
|
|
|
+ """
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1()
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r2()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_open(self):
|
|
|
+ """Default exit sequence for state DoorOpen.
|
|
|
+ """
|
|
|
+ self.__state_vector[0] = self.State.null_state
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed(self):
|
|
|
+ """Default exit sequence for state DoorClosed.
|
|
|
+ """
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
|
|
|
+ """Default exit sequence for state MagnetronOn.
|
|
|
+ """
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1()
|
|
|
+ self.__exit_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a(self):
|
|
|
+ """Default exit sequence for state A.
|
|
|
+ """
|
|
|
+ self.__state_vector[0] = self.State.null_state
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+ self.__exit_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off(self):
|
|
|
+ """Default exit sequence for state MagnetronOff.
|
|
|
+ """
|
|
|
+ self.__state_vector[0] = self.State.null_state
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r2_time_control(self):
|
|
|
+ """Default exit sequence for state TimeControl.
|
|
|
+ """
|
|
|
+ self.__state_vector[1] = self.State.null_state
|
|
|
+ self.__state_conf_vector_position = 1
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r2_detect_clicks(self):
|
|
|
+ """Default exit sequence for state DetectClicks.
|
|
|
+ """
|
|
|
+ self.__state_vector[2] = self.State.null_state
|
|
|
+ self.__state_conf_vector_position = 2
|
|
|
+ self.__exit_action_main_region_child_lockable_r2_detect_clicks()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region(self):
|
|
|
+ """Default exit sequence for region main region.
|
|
|
+ """
|
|
|
+ state = self.__state_vector[0]
|
|
|
+ if state == self.State.main_region_child_lockable_r1locked:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_locked()
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_open:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_open()
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a()
|
|
|
+ self.__exit_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off()
|
|
|
+ state = self.__state_vector[1]
|
|
|
+ if state == self.State.main_region_child_lockable_r1orthogonal_state_r2time_control:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r2_time_control()
|
|
|
+ state = self.__state_vector[2]
|
|
|
+ if state == self.State.main_region_child_lockable_r2detect_clicks:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r2_detect_clicks()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1(self):
|
|
|
+ """Default exit sequence for region r1.
|
|
|
+ """
|
|
|
+ state = self.__state_vector[0]
|
|
|
+ if state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_open:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_open()
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a()
|
|
|
+ self.__exit_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1(self):
|
|
|
+ """Default exit sequence for region r1.
|
|
|
+ """
|
|
|
+ state = self.__state_vector[0]
|
|
|
+ if state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a()
|
|
|
+ self.__exit_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1(self):
|
|
|
+ """Default exit sequence for region r1.
|
|
|
+ """
|
|
|
+ state = self.__state_vector[0]
|
|
|
+ if state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a()
|
|
|
+
|
|
|
+ def __exit_sequence_main_region_child_lockable_r1_orthogonal_state_r2(self):
|
|
|
+ """Default exit sequence for region r2.
|
|
|
+ """
|
|
|
+ state = self.__state_vector[1]
|
|
|
+ if state == self.State.main_region_child_lockable_r1orthogonal_state_r2time_control:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r2_time_control()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1__choice_0(self):
|
|
|
+ """The reactions of state null..
|
|
|
+ """
|
|
|
+ if self.__remaining_time == 0:
|
|
|
+ self.__entry_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ self.__react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_done()
|
|
|
+ self.__history_vector[0] = self.__state_vector[0]
|
|
|
+ else:
|
|
|
+ self.__entry_action_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a_default()
|
|
|
+ self.__history_vector[0] = self.__state_vector[0]
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r2__choice_0(self):
|
|
|
+ """The reactions of state null..
|
|
|
+ """
|
|
|
+ if self.__clicks == 3:
|
|
|
+ self.raise_lock_unlock()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r2_detect_clicks_default()
|
|
|
+ else:
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r2_detect_clicks_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default(self):
|
|
|
+ """Default react sequence for initial entry .
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1__entry_default(self):
|
|
|
+ """Default react sequence for initial entry .
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_h(self):
|
|
|
+ """Default react sequence for shallow history entry h.
|
|
|
+ """
|
|
|
+ #Enter the region with shallow history
|
|
|
+ if self.__history_vector[0] is not self.State.null_state:
|
|
|
+ self.__shallow_enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1()
|
|
|
+ else:
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1_orthogonal_state_r1__entry_default(self):
|
|
|
+ """Default react sequence for initial entry .
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1_orthogonal_state_r2__entry_default(self):
|
|
|
+ """Default react sequence for initial entry .
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r2_time_control_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1__entry_default(self):
|
|
|
+ """Default react sequence for initial entry .
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r2__entry_default(self):
|
|
|
+ """Default react sequence for initial entry .
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r2_detect_clicks_default()
|
|
|
+
|
|
|
+ def __react_main_region__entry_default(self):
|
|
|
+ """Default react sequence for initial entry .
|
|
|
+ """
|
|
|
+ self.__enter_sequence_main_region_child_lockable_default()
|
|
|
+
|
|
|
+ def __react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_done(self):
|
|
|
+ """The reactions of exit done..
|
|
|
+ """
|
|
|
+ self.__effect_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_tr1()
|
|
|
+
|
|
|
+ def __react(self, transitioned_before):
|
|
|
+ """Implementation of __react function.
|
|
|
+ """
|
|
|
+ return transitioned_before
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_react function.
|
|
|
+ """
|
|
|
+ return self.__react(transitioned_before)
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_locked_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_locked_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = self.__main_region_child_lockable_react(transitioned_before)
|
|
|
+ if transitioned_after < 0:
|
|
|
+ if self.lock_unlock:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_locked()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_default()
|
|
|
+ transitioned_after = 0
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_orthogonal_state_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_orthogonal_state_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = self.__main_region_child_lockable_react(transitioned_before)
|
|
|
+ if transitioned_after < 0:
|
|
|
+ if self.lock_unlock:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_locked_default()
|
|
|
+ transitioned_after = 1
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_orthogonal_state_r1_door_open_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_orthogonal_state_r1_door_open_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = self.__main_region_child_lockable_r1_orthogonal_state_react(transitioned_before)
|
|
|
+ if transitioned_after < 0:
|
|
|
+ if self.door_closed:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_open()
|
|
|
+ self.__react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_h()
|
|
|
+ transitioned_after = 0
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = self.__main_region_child_lockable_r1_orthogonal_state_react(transitioned_before)
|
|
|
+ if transitioned_after < 0:
|
|
|
+ if self.door_opened:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_open_default()
|
|
|
+ transitioned_after = 0
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = self.__main_region_child_lockable_r1_orthogonal_state_r1_door_closed_react(transitioned_before)
|
|
|
+ if transitioned_after < 0:
|
|
|
+ if self.stop_pressed:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
|
|
|
+ transitioned_after = 0
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = self.__main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_react(transitioned_before)
|
|
|
+ if transitioned_after < 0:
|
|
|
+ if self.__time_events[0]:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on()
|
|
|
+ self.__remaining_time = self.__remaining_time - 1
|
|
|
+ self.set_displayed_time_observable.next(self.__remaining_time)
|
|
|
+ self.__time_events[0] = False
|
|
|
+ self.__react_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1__choice_0()
|
|
|
+ transitioned_after = 0
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = self.__main_region_child_lockable_r1_orthogonal_state_r1_door_closed_react(transitioned_before)
|
|
|
+ if transitioned_after < 0:
|
|
|
+ if self.start_pressed:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off()
|
|
|
+ self.__remaining_time = 10 if self.__remaining_time == 0 else self.__remaining_time
|
|
|
+ self.set_displayed_time_observable.next(self.__remaining_time)
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
|
|
|
+ transitioned_after = 0
|
|
|
+ elif self.stop_pressed:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off()
|
|
|
+ self.__remaining_time = 0
|
|
|
+ self.set_displayed_time_observable.next(0)
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
|
|
|
+ transitioned_after = 0
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r1_orthogonal_state_r2_time_control_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r1_orthogonal_state_r2_time_control_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = transitioned_before
|
|
|
+ if transitioned_after < 1:
|
|
|
+ if self.increase_time_pressed:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r1_orthogonal_state_r2_time_control()
|
|
|
+ self.__remaining_time = self.__remaining_time + 10
|
|
|
+ self.set_displayed_time_observable.next(self.__remaining_time)
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r2_time_control_default()
|
|
|
+ transitioned_after = 1
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __main_region_child_lockable_r2_detect_clicks_react(self, transitioned_before):
|
|
|
+ """Implementation of __main_region_child_lockable_r2_detect_clicks_react function.
|
|
|
+ """
|
|
|
+ transitioned_after = transitioned_before
|
|
|
+ if transitioned_after < 2:
|
|
|
+ if self.stop_pressed:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r2_detect_clicks()
|
|
|
+ self.__clicks = self.__clicks + 1
|
|
|
+ self.__react_main_region_child_lockable_r2__choice_0()
|
|
|
+ transitioned_after = 2
|
|
|
+ elif self.__time_events[1]:
|
|
|
+ self.__exit_sequence_main_region_child_lockable_r2_detect_clicks()
|
|
|
+ self.__clicks = 0
|
|
|
+ self.__time_events[1] = False
|
|
|
+ self.__enter_sequence_main_region_child_lockable_r2_detect_clicks_default()
|
|
|
+ transitioned_after = 2
|
|
|
+ return transitioned_after
|
|
|
+
|
|
|
+
|
|
|
+ def __clear_in_events(self):
|
|
|
+ """Implementation of __clear_in_events function.
|
|
|
+ """
|
|
|
+ self.start_pressed = False
|
|
|
+ self.stop_pressed = False
|
|
|
+ self.increase_time_pressed = False
|
|
|
+ self.door_opened = False
|
|
|
+ self.door_closed = False
|
|
|
+ self.__time_events[0] = False
|
|
|
+ self.__time_events[1] = False
|
|
|
+
|
|
|
+
|
|
|
+ def __clear_internal_events(self):
|
|
|
+ """Implementation of __clear_internal_events function.
|
|
|
+ """
|
|
|
+ self.lock_unlock = False
|
|
|
+
|
|
|
+
|
|
|
+ def __micro_step(self):
|
|
|
+ """Implementation of __micro_step function.
|
|
|
+ """
|
|
|
+ transitioned = -1
|
|
|
+ self.__state_conf_vector_position = 0
|
|
|
+ state = self.__state_vector[0]
|
|
|
+ if state == self.State.main_region_child_lockable_r1locked:
|
|
|
+ transitioned = self.__main_region_child_lockable_r1_locked_react(transitioned)
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_open:
|
|
|
+ transitioned = self.__main_region_child_lockable_r1_orthogonal_state_r1_door_open_react(transitioned)
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on_r1a:
|
|
|
+ transitioned = self.__main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_a_react(transitioned)
|
|
|
+ elif state == self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_off:
|
|
|
+ transitioned = self.__main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_react(transitioned)
|
|
|
+ if self.__state_conf_vector_position < 1:
|
|
|
+ state = self.__state_vector[1]
|
|
|
+ if state == self.State.main_region_child_lockable_r1orthogonal_state_r2time_control:
|
|
|
+ transitioned = self.__main_region_child_lockable_r1_orthogonal_state_r2_time_control_react(transitioned)
|
|
|
+ if self.__state_conf_vector_position < 2:
|
|
|
+ state = self.__state_vector[2]
|
|
|
+ if state == self.State.main_region_child_lockable_r2detect_clicks:
|
|
|
+ self.__main_region_child_lockable_r2_detect_clicks_react(transitioned)
|
|
|
+
|
|
|
+
|
|
|
+ def run_cycle(self):
|
|
|
+ """Implementation of run_cycle function.
|
|
|
+ """
|
|
|
+ if self.timer_service is None:
|
|
|
+ raise ValueError('Timer service must be set.')
|
|
|
+
|
|
|
+ if self.__is_executing:
|
|
|
+ return
|
|
|
+ self.__is_executing = True
|
|
|
+ next_event = self.__get_next_event()
|
|
|
+ if next_event is not None:
|
|
|
+ self.__execute_queued_event(next_event)
|
|
|
+ condition_0 = True
|
|
|
+ while condition_0:
|
|
|
+ self.__micro_step()
|
|
|
+ self.__clear_in_events()
|
|
|
+ self.__clear_internal_events()
|
|
|
+ condition_0 = False
|
|
|
+ next_event = self.__get_next_event()
|
|
|
+ if next_event is not None:
|
|
|
+ self.__execute_queued_event(next_event)
|
|
|
+ condition_0 = True
|
|
|
+ self.__is_executing = False
|
|
|
+
|
|
|
+
|
|
|
+ def enter(self):
|
|
|
+ """Implementation of enter function.
|
|
|
+ """
|
|
|
+ if self.timer_service is None:
|
|
|
+ raise ValueError('Timer service must be set.')
|
|
|
+
|
|
|
+ if self.__is_executing:
|
|
|
+ return
|
|
|
+ self.__is_executing = True
|
|
|
+ self.__enter_sequence_main_region_default()
|
|
|
+ self.__is_executing = False
|
|
|
+
|
|
|
+
|
|
|
+ def exit(self):
|
|
|
+ """Implementation of exit function.
|
|
|
+ """
|
|
|
+ if self.__is_executing:
|
|
|
+ return
|
|
|
+ self.__is_executing = True
|
|
|
+ self.__exit_sequence_main_region()
|
|
|
+ self.__is_executing = False
|
|
|
+
|
|
|
+
|
|
|
+ def trigger_without_event(self):
|
|
|
+ """Implementation of triggerWithoutEvent function.
|
|
|
+ """
|
|
|
+ self.run_cycle()
|
|
|
+
|