Jelajahi Sumber

not sure what i changed...

Joeri Exelmans 8 bulan lalu
induk
melakukan
4edb74ac4f
100 mengubah file dengan 7082 tambahan dan 3415 penghapusan
  1. 0 4
      microwave/README
  2. 29 0
      microwave/README.txt
  3. 1 1
      microwave/YAKINDU_WORKSPACE/42_DoorHistory/.project
  4. 0 0
      microwave/YAKINDU_WORKSPACE/05_EmptyModel/.settings/org.eclipse.core.resources.prefs
  5. 1 1
      microwave/YAKINDU_WORKSPACE/42_DoorHistory/Statechart.sgen
  6. 116 0
      microwave/YAKINDU_WORKSPACE/05_EmptyModel/Statechart.ysc
  7. 0 0
      microwave/YAKINDU_WORKSPACE/05_EmptyModel/src/yakindu/__init__.py
  8. 0 0
      microwave/YAKINDU_WORKSPACE/05_EmptyModel/src/yakindu/rx.py
  9. 37 71
      microwave/YAKINDU_WORKSPACE/90_AfterTransition/srcgen/statechart.py
  10. 18 6
      microwave/YAKINDU_WORKSPACE/10_OnOffModel/Statechart.ysc
  11. 16 0
      microwave/YAKINDU_WORKSPACE/10_OnOffModel/srcgen/statechart.py
  12. 14 2
      microwave/YAKINDU_WORKSPACE/11_EnterExitActions/Statechart.ysc
  13. 17 0
      microwave/YAKINDU_WORKSPACE/11_EnterExitActions/srcgen/statechart.py
  14. 1 1
      microwave/YAKINDU_WORKSPACE/40_Door/.project
  15. 0 0
      microwave/YAKINDU_WORKSPACE/20_Door/.settings/org.eclipse.core.resources.prefs
  16. 1 1
      microwave/YAKINDU_WORKSPACE/40_Door/Statechart.sgen
  17. 181 0
      microwave/YAKINDU_WORKSPACE/20_Door/Statechart.ysc
  18. 0 0
      microwave/YAKINDU_WORKSPACE/20_Door/src/yakindu/__init__.py
  19. 0 0
      microwave/YAKINDU_WORKSPACE/20_Door/src/yakindu/rx.py
  20. 56 56
      microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/srcgen/statechart.py
  21. 0 139
      microwave/YAKINDU_WORKSPACE/20_TimerFlat/Statechart.ysc
  22. 23 0
      microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/.project
  23. 0 0
      microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/.settings/org.eclipse.core.resources.prefs
  24. 15 0
      microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/Statechart.sgen
  25. 181 0
      microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/Statechart.ysc
  26. 0 0
      microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/src/yakindu/__init__.py
  27. 0 0
      microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/src/yakindu/rx.py
  28. 56 50
      microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/srcgen/statechart.py
  29. 0 167
      microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/Statechart.ysc
  30. 1 1
      microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/.project
  31. 0 0
      microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/.settings/org.eclipse.core.resources.prefs
  32. 1 1
      microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/Statechart.sgen
  33. 228 0
      microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/Statechart.ysc
  34. 0 0
      microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/src/yakindu/__init__.py
  35. 0 0
      microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/src/yakindu/rx.py
  36. 391 0
      microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/srcgen/statechart.py
  37. 0 178
      microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/Statechart.ysc
  38. 12 0
      microwave/YAKINDU_WORKSPACE/30_Orthogonality/Statechart.ysc
  39. 28 0
      microwave/YAKINDU_WORKSPACE/30_Orthogonality/srcgen/statechart.py
  40. 1 1
      microwave/YAKINDU_WORKSPACE/50_ChildLock/.project
  41. 0 0
      microwave/YAKINDU_WORKSPACE/30_Timer/.settings/org.eclipse.core.resources.prefs
  42. 1 1
      microwave/YAKINDU_WORKSPACE/50_ChildLock/Statechart.sgen
  43. 240 0
      microwave/YAKINDU_WORKSPACE/30_Timer/Statechart.ysc
  44. 0 0
      microwave/YAKINDU_WORKSPACE/30_Timer/src/yakindu/__init__.py
  45. 0 0
      microwave/YAKINDU_WORKSPACE/30_Timer/src/yakindu/rx.py
  46. 402 0
      microwave/YAKINDU_WORKSPACE/30_Timer/srcgen/statechart.py
  47. 23 0
      microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/.project
  48. 0 0
      microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/.settings/org.eclipse.core.resources.prefs
  49. 15 0
      microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/Statechart.sgen
  50. 264 0
      microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/Statechart.ysc
  51. 0 0
      microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/src/yakindu/__init__.py
  52. 0 0
      microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/src/yakindu/rx.py
  53. 439 0
      microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/srcgen/statechart.py
  54. 1 1
      microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/.project
  55. 0 0
      microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/.settings/org.eclipse.core.resources.prefs
  56. 1 1
      microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/Statechart.sgen
  57. 281 0
      microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/Statechart.ysc
  58. 0 0
      microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/src/yakindu/__init__.py
  59. 0 0
      microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/src/yakindu/rx.py
  60. 158 46
      microwave/YAKINDU_WORKSPACE/20_TimerFlat/srcgen/statechart.py
  61. 1 1
      microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/.project
  62. 0 0
      microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/.settings/org.eclipse.core.resources.prefs
  63. 1 1
      microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/Statechart.sgen
  64. 338 0
      microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/Statechart.ysc
  65. 0 0
      microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/src/yakindu/__init__.py
  66. 0 0
      microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/src/yakindu/rx.py
  67. 500 0
      microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/srcgen/statechart.py
  68. 0 349
      microwave/YAKINDU_WORKSPACE/40_Door/Statechart.ysc
  69. 23 0
      microwave/YAKINDU_WORKSPACE/40_Orthogonality/.project
  70. 3 0
      microwave/YAKINDU_WORKSPACE/40_Orthogonality/.settings/org.eclipse.core.resources.prefs
  71. 15 0
      microwave/YAKINDU_WORKSPACE/40_Orthogonality/Statechart.sgen
  72. 452 0
      microwave/YAKINDU_WORKSPACE/40_Orthogonality/Statechart.ysc
  73. 5 0
      microwave/YAKINDU_WORKSPACE/40_Orthogonality/src/yakindu/__init__.py
  74. 48 0
      microwave/YAKINDU_WORKSPACE/40_Orthogonality/src/yakindu/rx.py
  75. 144 80
      microwave/YAKINDU_WORKSPACE/42_DoorHistory/srcgen/statechart.py
  76. 0 396
      microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/Statechart.ysc
  77. 0 409
      microwave/YAKINDU_WORKSPACE/42_DoorHistory/Statechart.ysc
  78. 0 617
      microwave/YAKINDU_WORKSPACE/50_ChildLock/Statechart.ysc
  79. 0 718
      microwave/YAKINDU_WORKSPACE/50_ChildLock/srcgen/statechart.py
  80. 1 1
      microwave/YAKINDU_WORKSPACE/20_TimerFlat/.project
  81. 3 0
      microwave/YAKINDU_WORKSPACE/50_History/.settings/org.eclipse.core.resources.prefs
  82. 1 1
      microwave/YAKINDU_WORKSPACE/20_TimerFlat/Statechart.sgen
  83. 465 0
      microwave/YAKINDU_WORKSPACE/50_History/Statechart.ysc
  84. 5 0
      microwave/YAKINDU_WORKSPACE/50_History/src/yakindu/__init__.py
  85. 48 0
      microwave/YAKINDU_WORKSPACE/50_History/src/yakindu/rx.py
  86. 183 55
      microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/srcgen/statechart.py
  87. 23 0
      microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/.project
  88. 3 0
      microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/.settings/org.eclipse.core.resources.prefs
  89. 15 0
      microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/Statechart.sgen
  90. 489 0
      microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/Statechart.ysc
  91. 5 0
      microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/src/yakindu/__init__.py
  92. 48 0
      microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/src/yakindu/rx.py
  93. 223 58
      microwave/YAKINDU_WORKSPACE/40_Door/srcgen/statechart.py
  94. 23 0
      microwave/YAKINDU_WORKSPACE/70_ChildLock/.project
  95. 3 0
      microwave/YAKINDU_WORKSPACE/70_ChildLock/.settings/org.eclipse.core.resources.prefs
  96. 15 0
      microwave/YAKINDU_WORKSPACE/70_ChildLock/Statechart.sgen
  97. 696 0
      microwave/YAKINDU_WORKSPACE/70_ChildLock/Statechart.ysc
  98. 5 0
      microwave/YAKINDU_WORKSPACE/70_ChildLock/src/yakindu/__init__.py
  99. 48 0
      microwave/YAKINDU_WORKSPACE/70_ChildLock/src/yakindu/rx.py
  100. 0 0
      microwave/YAKINDU_WORKSPACE/70_ChildLock/srcgen/statechart.py

+ 0 - 4
microwave/README

@@ -1,4 +0,0 @@
-Dependencies
-============
-
-To run the 'run.py' Python script, you need Python 3 with the TkInter library.

+ 29 - 0
microwave/README.txt

@@ -0,0 +1,29 @@
+1. Opening the examples
+=======================
+
+  The directory 'YAKINDU_WORKSPACE' is a workspace that you can open in YAKINDU (or as they prefer to be called these days: "itemis CREATE").
+
+  Every example will show up as a project.
+
+
+2. Running the Python code
+==========================
+
+
+  Python Dependencies
+  -------------------
+
+    - Python >= 3 (tested with Python 3.12)
+    - TkInter (included in most Python-distributions)
+    - (optional) simpleaudio (for sound effects)
+
+  Running
+  -------
+
+    To run the examples:
+
+      python run.py <PROJECTNAME>
+
+    for instance:
+
+      python run.py 70_ChildLock

+ 1 - 1
microwave/YAKINDU_WORKSPACE/42_DoorHistory/.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>42_DoorHistory</name>
+	<name>05_EmptyModel</name>
 	<comment></comment>
 	<projects>
 	</projects>

microwave/YAKINDU_WORKSPACE/20_TimerFlat/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/05_EmptyModel/.settings/org.eclipse.core.resources.prefs


+ 1 - 1
microwave/YAKINDU_WORKSPACE/42_DoorHistory/Statechart.sgen

@@ -1,6 +1,6 @@
 GeneratorModel for create::python {
 
-	const PROJECT : string = "42_DoorHistory"
+	const PROJECT : string = "05_EmptyModel"
 
 	const FOLDER : string = "srcgen"
 

File diff ditekan karena terlalu besar
+ 116 - 0
microwave/YAKINDU_WORKSPACE/05_EmptyModel/Statechart.ysc


microwave/YAKINDU_WORKSPACE/20_TimerFlat/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/05_EmptyModel/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/20_TimerFlat/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/05_EmptyModel/src/yakindu/rx.py


+ 37 - 71
microwave/YAKINDU_WORKSPACE/90_AfterTransition/srcgen/statechart.py

@@ -15,7 +15,7 @@ class Statechart:
 		""" State Enum
 		"""
 		(
-			main_region_magnetron_off,
+			main_region_magnetronoff,
 			main_region_magnetron_on,
 			null_state
 		) = range(3)
@@ -48,10 +48,6 @@ class Statechart:
 		for __state_index in range(1):
 			self.__state_vector[__state_index] = self.State.null_state
 		
-		# for timed statechart:
-		self.timer_service = None
-		self.__time_events = [None] * 2
-		
 		# initializations:
 		self.__is_executing = False
 	
@@ -70,24 +66,12 @@ class Statechart:
 		"""Checks if the state is currently active.
 		"""
 		s = state
-		if s == self.__State.main_region_magnetron_off:
-			return self.__state_vector[0] == self.__State.main_region_magnetron_off
+		if s == self.__State.main_region_magnetronoff:
+			return self.__state_vector[0] == self.__State.main_region_magnetronoff
 		if s == self.__State.main_region_magnetron_on:
 			return self.__state_vector[0] == self.__State.main_region_magnetron_on
 		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()
 	
@@ -151,87 +135,70 @@ class Statechart:
 		"""
 		self.door_closed = True
 	
-	def __entry_action_main_region_magnetron_off(self):
-		"""Entry action for state 'MagnetronOff'..
-		"""
-		self.timer_service.set_timer(self, 0, 500, False)
-		
-	def __entry_action_main_region_magnetron_on(self):
-		"""Entry action for state 'MagnetronOn'..
-		"""
-		self.timer_service.set_timer(self, 1, 500, False)
-		self.turn_magnetron_on_observable.next()
-		
-	def __exit_action_main_region_magnetron_off(self):
-		"""Exit action for state 'MagnetronOff'..
-		"""
-		self.timer_service.unset_timer(self, 0)
-		
-	def __exit_action_main_region_magnetron_on(self):
-		"""Exit action for state 'MagnetronOn'..
-		"""
-		self.timer_service.unset_timer(self, 1)
-		self.turn_magnetron_off_observable.next()
-		
-	def __enter_sequence_main_region_magnetron_off_default(self):
-		"""'default' enter sequence for state MagnetronOff.
+	def __enter_sequence_main_region_magnetronoff_default(self):
+		"""'default' enter sequence for state Magnetronoff.
 		"""
-		self.__entry_action_main_region_magnetron_off()
-		self.__state_vector[0] = self.State.main_region_magnetron_off
+		#'default' enter sequence for state Magnetronoff
+		self.__state_vector[0] = self.State.main_region_magnetronoff
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
-		self.__entry_action_main_region_magnetron_on()
+		#'default' enter sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.main_region_magnetron_on
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
-	def __exit_sequence_main_region_magnetron_off(self):
-		"""Default exit sequence for state MagnetronOff.
+	def __exit_sequence_main_region_magnetronoff(self):
+		"""Default exit sequence for state Magnetronoff.
 		"""
+		#Default exit sequence for state Magnetronoff
 		self.__state_vector[0] = self.State.null_state
-		self.__exit_action_main_region_magnetron_off()
 		
 	def __exit_sequence_main_region_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.null_state
-		self.__exit_action_main_region_magnetron_on()
 		
 	def __exit_sequence_main_region(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
-		if state == self.State.main_region_magnetron_off:
-			self.__exit_sequence_main_region_magnetron_off()
+		if state == self.State.main_region_magnetronoff:
+			self.__exit_sequence_main_region_magnetronoff()
 		elif state == self.State.main_region_magnetron_on:
 			self.__exit_sequence_main_region_magnetron_on()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
-		self.__enter_sequence_main_region_magnetron_off_default()
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_magnetronoff_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
-	def __main_region_magnetron_off_react(self, transitioned_before):
-		"""Implementation of __main_region_magnetron_off_react function.
+	def __main_region_magnetronoff_react(self, transitioned_before):
+		"""Implementation of __main_region_magnetronoff_react function.
 		"""
+		#The reactions of state Magnetronoff.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
-			if self.__time_events[0]:
-				self.__exit_sequence_main_region_magnetron_off()
-				self.__time_events[0] = False
+			if self.start_pressed:
+				self.__exit_sequence_main_region_magnetronoff()
+				self.turn_magnetron_on_observable.next()
 				self.__enter_sequence_main_region_magnetron_on_default()
 				transitioned_after = 0
 		return transitioned_after
@@ -240,12 +207,13 @@ class Statechart:
 	def __main_region_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
-			if self.__time_events[1]:
+			if self.stop_pressed:
 				self.__exit_sequence_main_region_magnetron_on()
-				self.__time_events[1] = False
-				self.__enter_sequence_main_region_magnetron_off_default()
+				self.turn_magnetron_off_observable.next()
+				self.__enter_sequence_main_region_magnetronoff_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -258,16 +226,14 @@ class Statechart:
 		self.increase_time_pressed = False
 		self.door_opened = False
 		self.door_closed = False
-		self.__time_events[0] = False
-		self.__time_events[1] = False
 	
 	
 	def __micro_step(self):
 		"""Implementation of __micro_step function.
 		"""
 		state = self.__state_vector[0]
-		if state == self.State.main_region_magnetron_off:
-			self.__main_region_magnetron_off_react(-1)
+		if state == self.State.main_region_magnetronoff:
+			self.__main_region_magnetronoff_react(-1)
 		elif state == self.State.main_region_magnetron_on:
 			self.__main_region_magnetron_on_react(-1)
 	
@@ -275,9 +241,7 @@ class Statechart:
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
-		if self.timer_service is None:
-			raise ValueError('Timer service must be set.')
-		
+		#Performs a 'run to completion' step.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
@@ -299,12 +263,11 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
-		if self.timer_service is None:
-			raise ValueError('Timer service must be set.')
-		
+		#Activates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -312,10 +275,13 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
+		self.__state_vector[0] = self.State.null_state
 		self.__is_executing = False
 	
 	

+ 18 - 6
microwave/YAKINDU_WORKSPACE/10_OnOffModel/Statechart.ysc

@@ -34,7 +34,7 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_1zAkgaxJEe2SdOFvAhnR8A" fontName="Verdana" fillColor="15720400" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_1zAkgqxJEe2SdOFvAhnR8A"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_1zCZsKxJEe2SdOFvAhnR8A" name="isHorizontal" booleanValue="true"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1zAkg6xJEe2SdOFvAhnR8A" x="144" y="122"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1zAkg6xJEe2SdOFvAhnR8A" x="144" y="122" width="135" height="53"/>
         </children>
         <children xmi:id="_2B0ckKxJEe2SdOFvAhnR8A" type="Entry" element="_2BynYKxJEe2SdOFvAhnR8A">
           <children xmi:id="_2B1DoKxJEe2SdOFvAhnR8A" type="BorderItemLabelContainer">
@@ -65,6 +65,18 @@
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_k_MXIaxLEe2SdOFvAhnR8A" name="isHorizontal" booleanValue="true"/>
           <layoutConstraint xsi:type="notation:Bounds" xmi:id="_k_Kh86xLEe2SdOFvAhnR8A" x="156" y="315" width="107" height="53"/>
         </children>
+        <children xsi:type="notation:Shape" xmi:id="_l5yzMI_REe6BZdbMZ2j9yg" type="Note" fontName="Verdana" description="Basic solution:&#xA; - can turn it on/off&#xA; - no timer&#xA; - opening door is unsafe" fillColor="13369343" transparency="0" lineColor="6737151" lineWidth="1">
+          <children xsi:type="notation:BasicDecorationNode" xmi:id="_l50oYI_REe6BZdbMZ2j9yg" type="DiagramName">
+            <element xsi:nil="true"/>
+          </children>
+          <children xsi:type="notation:BasicDecorationNode" xmi:id="_l50oYY_REe6BZdbMZ2j9yg" type="Description">
+            <element xsi:nil="true"/>
+          </children>
+          <styles xsi:type="notation:TextStyle" xmi:id="_l5yzMY_REe6BZdbMZ2j9yg"/>
+          <styles xsi:type="notation:LineTypeStyle" xmi:id="_l5yzMo_REe6BZdbMZ2j9yg"/>
+          <element xsi:nil="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_l5yzM4_REe6BZdbMZ2j9yg" x="493" y="185" width="160" height="82"/>
+        </children>
         <layoutConstraint xsi:type="notation:Bounds" xmi:id="_D1kIMKxEEe2zPcKEzbpeTQ"/>
       </children>
       <styles xsi:type="notation:ShapeStyle" xmi:id="_D1kIMaxEEe2zPcKEzbpeTQ" fontName="Verdana" fillColor="16448250" lineColor="12632256"/>
@@ -89,27 +101,27 @@
       </children>
       <styles xsi:type="notation:ConnectorStyle" xmi:id="_2TFywaxJEe2SdOFvAhnR8A" routing="Rectilinear" lineColor="4210752"/>
       <styles xsi:type="notation:FontStyle" xmi:id="_2TGZ0KxJEe2SdOFvAhnR8A" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_2TFywqxJEe2SdOFvAhnR8A" points="[1, 6, -24, -51]$[-10, 51, -35, -6]"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_2TFywqxJEe2SdOFvAhnR8A" points="[2, 6, -55, -51]$[2, 31, -55, -26]"/>
     </edges>
     <edges xmi:id="_oDSaQKxLEe2SdOFvAhnR8A" type="Transition" element="_oDRMIKxLEe2SdOFvAhnR8A" source="_1zAkgKxJEe2SdOFvAhnR8A" target="_k_Kh8KxLEe2SdOFvAhnR8A">
       <children xsi:type="notation:DecorationNode" xmi:id="_oDTBUaxLEe2SdOFvAhnR8A" type="TransitionExpression">
         <styles xsi:type="notation:ShapeStyle" xmi:id="_oDTBUqxLEe2SdOFvAhnR8A"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_oDTBU6xLEe2SdOFvAhnR8A" x="9" y="-97"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_oDTBU6xLEe2SdOFvAhnR8A" x="4" y="-87"/>
       </children>
       <styles xsi:type="notation:ConnectorStyle" xmi:id="_oDSaQaxLEe2SdOFvAhnR8A" routing="Rectilinear" lineColor="4210752"/>
       <styles xsi:type="notation:FontStyle" xmi:id="_oDTBUKxLEe2SdOFvAhnR8A" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_oDSaQqxLEe2SdOFvAhnR8A" points="[6, 16, 0, -182]$[27, 208, 21, 10]"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_oDSaQqxLEe2SdOFvAhnR8A" points="[-20, 16, -3, -182]$[-20, 156, -3, -42]"/>
       <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_oDUPcKxLEe2SdOFvAhnR8A" id="(0.8518518518518519,0.6981132075471698)"/>
       <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_oDUPcaxLEe2SdOFvAhnR8A" id="(0.8037383177570093,0.7924528301886793)"/>
     </edges>
     <edges xmi:id="_s1_7UKxLEe2SdOFvAhnR8A" type="Transition" element="_s1-tMKxLEe2SdOFvAhnR8A" source="_k_Kh8KxLEe2SdOFvAhnR8A" target="_1zAkgKxJEe2SdOFvAhnR8A">
       <children xsi:type="notation:DecorationNode" xmi:id="_s2AiYKxLEe2SdOFvAhnR8A" type="TransitionExpression">
         <styles xsi:type="notation:ShapeStyle" xmi:id="_s2AiYaxLEe2SdOFvAhnR8A"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_s2AiYqxLEe2SdOFvAhnR8A" x="-4" y="-68"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_s2AiYqxLEe2SdOFvAhnR8A" x="3" y="-74"/>
       </children>
       <styles xsi:type="notation:ConnectorStyle" xmi:id="_s1_7UaxLEe2SdOFvAhnR8A" routing="Rectilinear" lineColor="4210752"/>
       <styles xsi:type="notation:FontStyle" xmi:id="_s1_7U6xLEe2SdOFvAhnR8A" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_s1_7UqxLEe2SdOFvAhnR8A" points="[-1, -4, -22, 167]$[-1, -144, -22, 27]"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_s1_7UqxLEe2SdOFvAhnR8A" points="[-1, -4, -35, 167]$[-1, -144, -35, 27]"/>
       <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_s2BwgKxLEe2SdOFvAhnR8A" id="(0.19626168224299065,0.07547169811320754)"/>
     </edges>
   </notation:Diagram>

+ 16 - 0
microwave/YAKINDU_WORKSPACE/10_OnOffModel/srcgen/statechart.py

@@ -138,33 +138,39 @@ class Statechart:
 	def __enter_sequence_main_region_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
+		#'default' enter sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.main_region_magnetron_off
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
+		#'default' enter sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.main_region_magnetron_on
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __exit_sequence_main_region_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#Default exit sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.null_state
 		
 	def __exit_sequence_main_region_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.null_state
 		
 	def __exit_sequence_main_region(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
 		if state == self.State.main_region_magnetron_off:
 			self.__exit_sequence_main_region_magnetron_off()
@@ -174,17 +180,20 @@ class Statechart:
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_magnetron_off_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_magnetron_off_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_off_react function.
 		"""
+		#The reactions of state MagnetronOff.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.start_pressed:
@@ -198,6 +207,7 @@ class Statechart:
 	def __main_region_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
@@ -231,6 +241,7 @@ class Statechart:
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
+		#Performs a 'run to completion' step.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
@@ -252,9 +263,11 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
+		#Activates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -262,10 +275,13 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
+		self.__state_vector[0] = self.State.null_state
 		self.__is_executing = False
 	
 	

+ 14 - 2
microwave/YAKINDU_WORKSPACE/11_EnterExitActions/Statechart.ysc

@@ -65,6 +65,18 @@
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_k_MXIaxLEe2SdOFvAhnR8A" name="isHorizontal" booleanValue="true"/>
           <layoutConstraint xsi:type="notation:Bounds" xmi:id="_k_Kh86xLEe2SdOFvAhnR8A" x="86" y="306" width="235" height="80"/>
         </children>
+        <children xsi:type="notation:Shape" xmi:id="_rUC1YI_REe6BZdbMZ2j9yg" type="Note" fontName="Verdana" description="Same as previous, but uses&#xA; enter/exit actions" fillColor="13369343" transparency="0" lineColor="6737151" lineWidth="1">
+          <children xsi:type="notation:BasicDecorationNode" xmi:id="_rUFRoI_REe6BZdbMZ2j9yg" type="DiagramName">
+            <element xsi:nil="true"/>
+          </children>
+          <children xsi:type="notation:BasicDecorationNode" xmi:id="_rUFRoY_REe6BZdbMZ2j9yg" type="Description">
+            <element xsi:nil="true"/>
+          </children>
+          <styles xsi:type="notation:TextStyle" xmi:id="_rUC1YY_REe6BZdbMZ2j9yg"/>
+          <styles xsi:type="notation:LineTypeStyle" xmi:id="_rUC1Yo_REe6BZdbMZ2j9yg"/>
+          <element xsi:nil="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_rUC1Y4_REe6BZdbMZ2j9yg" x="501" y="193"/>
+        </children>
         <layoutConstraint xsi:type="notation:Bounds" xmi:id="_D1kIMKxEEe2zPcKEzbpeTQ"/>
       </children>
       <styles xsi:type="notation:ShapeStyle" xmi:id="_D1kIMaxEEe2zPcKEzbpeTQ" fontName="Verdana" fillColor="16448250" lineColor="12632256"/>
@@ -94,7 +106,7 @@
     <edges xmi:id="_oDSaQKxLEe2SdOFvAhnR8A" type="Transition" element="_oDRMIKxLEe2SdOFvAhnR8A" source="_1zAkgKxJEe2SdOFvAhnR8A" target="_k_Kh8KxLEe2SdOFvAhnR8A">
       <children xsi:type="notation:DecorationNode" xmi:id="_oDTBUaxLEe2SdOFvAhnR8A" type="TransitionExpression">
         <styles xsi:type="notation:ShapeStyle" xmi:id="_oDTBUqxLEe2SdOFvAhnR8A"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_oDTBU6xLEe2SdOFvAhnR8A" x="12" y="-63"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_oDTBU6xLEe2SdOFvAhnR8A" x="60" y="-20"/>
       </children>
       <styles xsi:type="notation:ConnectorStyle" xmi:id="_oDSaQaxLEe2SdOFvAhnR8A" routing="Rectilinear" lineColor="4210752"/>
       <styles xsi:type="notation:FontStyle" xmi:id="_oDTBUKxLEe2SdOFvAhnR8A" fontName="Verdana"/>
@@ -105,7 +117,7 @@
     <edges xmi:id="_s1_7UKxLEe2SdOFvAhnR8A" type="Transition" element="_s1-tMKxLEe2SdOFvAhnR8A" source="_k_Kh8KxLEe2SdOFvAhnR8A" target="_1zAkgKxJEe2SdOFvAhnR8A">
       <children xsi:type="notation:DecorationNode" xmi:id="_s2AiYKxLEe2SdOFvAhnR8A" type="TransitionExpression">
         <styles xsi:type="notation:ShapeStyle" xmi:id="_s2AiYaxLEe2SdOFvAhnR8A"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_s2AiYqxLEe2SdOFvAhnR8A" x="-8" y="-68"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_s2AiYqxLEe2SdOFvAhnR8A" x="-49" y="-26"/>
       </children>
       <styles xsi:type="notation:ConnectorStyle" xmi:id="_s1_7UaxLEe2SdOFvAhnR8A" routing="Rectilinear" lineColor="4210752"/>
       <styles xsi:type="notation:FontStyle" xmi:id="_s1_7U6xLEe2SdOFvAhnR8A" fontName="Verdana"/>

+ 17 - 0
microwave/YAKINDU_WORKSPACE/11_EnterExitActions/srcgen/statechart.py

@@ -138,22 +138,26 @@ class Statechart:
 	def __entry_action_main_region_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
+		#Entry action for state 'MagnetronOn'.
 		self.turn_magnetron_on_observable.next()
 		
 	def __exit_action_main_region_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
+		#Exit action for state 'MagnetronOn'.
 		self.turn_magnetron_off_observable.next()
 		
 	def __enter_sequence_main_region_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
+		#'default' enter sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.main_region_magnetron_off
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
+		#'default' enter sequence for state MagnetronOn
 		self.__entry_action_main_region_magnetron_on()
 		self.__state_vector[0] = self.State.main_region_magnetron_on
 		self.__state_conf_vector_changed = True
@@ -161,22 +165,26 @@ class Statechart:
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __exit_sequence_main_region_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#Default exit sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.null_state
 		
 	def __exit_sequence_main_region_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.null_state
 		self.__exit_action_main_region_magnetron_on()
 		
 	def __exit_sequence_main_region(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
 		if state == self.State.main_region_magnetron_off:
 			self.__exit_sequence_main_region_magnetron_off()
@@ -186,17 +194,20 @@ class Statechart:
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_magnetron_off_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_magnetron_off_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_off_react function.
 		"""
+		#The reactions of state MagnetronOff.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.start_pressed:
@@ -209,6 +220,7 @@ class Statechart:
 	def __main_region_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
@@ -241,6 +253,7 @@ class Statechart:
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
+		#Performs a 'run to completion' step.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
@@ -262,9 +275,11 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
+		#Activates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -272,9 +287,11 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
 		self.__is_executing = False
 	

+ 1 - 1
microwave/YAKINDU_WORKSPACE/40_Door/.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>40_Door</name>
+	<name>20_Door</name>
 	<comment></comment>
 	<projects>
 	</projects>

microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/20_Door/.settings/org.eclipse.core.resources.prefs


+ 1 - 1
microwave/YAKINDU_WORKSPACE/40_Door/Statechart.sgen

@@ -1,6 +1,6 @@
 GeneratorModel for create::python {
 
-	const PROJECT : string = "40_Door"
+	const PROJECT : string = "20_Door"
 
 	const FOLDER : string = "srcgen"
 

File diff ditekan karena terlalu besar
+ 181 - 0
microwave/YAKINDU_WORKSPACE/20_Door/Statechart.ysc


microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/20_Door/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/20_Door/src/yakindu/rx.py


+ 56 - 56
microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/srcgen/statechart.py

@@ -17,8 +17,9 @@ class Statechart:
 		(
 			main_region_magnetron_off,
 			main_region_magnetron_on,
+			main_region_door_open,
 			null_state
-		) = range(3)
+		) = range(4)
 	
 	
 	def __init__(self):
@@ -41,8 +42,6 @@ class Statechart:
 		self.ring_bell_observable = Observable()
 		
 		self.in_event_queue = queue.Queue()
-		self.__remaining_time = None
-		
 		# enumeration of all states:
 		self.__State = Statechart.State
 		self.__state_conf_vector_changed = None
@@ -50,12 +49,7 @@ class Statechart:
 		for __state_index in range(1):
 			self.__state_vector[__state_index] = self.State.null_state
 		
-		# for timed statechart:
-		self.timer_service = None
-		self.__time_events = [None] * 1
-		
 		# initializations:
-		self.__remaining_time = 0
 		self.__is_executing = False
 	
 	def is_active(self):
@@ -77,20 +71,10 @@ class Statechart:
 			return self.__state_vector[0] == self.__State.main_region_magnetron_off
 		if s == self.__State.main_region_magnetron_on:
 			return self.__state_vector[0] == self.__State.main_region_magnetron_on
+		if s == self.__State.main_region_door_open:
+			return self.__state_vector[0] == self.__State.main_region_door_open
 		return False
 		
-	def time_elapsed(self, event_id):
-		"""Add time events to in event queue
-		"""
-		if event_id in range(1):
-			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()
 	
@@ -99,7 +83,6 @@ class Statechart:
 			return self.in_event_queue.get()
 		return None
 	
-	
 	def raise_start_pressed(self):
 		"""Raise method for event start_pressed.
 		"""
@@ -158,95 +141,100 @@ class Statechart:
 	def __entry_action_main_region_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
-		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		#Entry action for state 'MagnetronOn'.
 		self.turn_magnetron_on_observable.next()
 		
 	def __exit_action_main_region_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
-		self.timer_service.unset_timer(self, 0)
+		#Exit action for state 'MagnetronOn'.
 		self.turn_magnetron_off_observable.next()
 		
 	def __enter_sequence_main_region_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
+		#'default' enter sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.main_region_magnetron_off
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
+		#'default' enter sequence for state MagnetronOn
 		self.__entry_action_main_region_magnetron_on()
 		self.__state_vector[0] = self.State.main_region_magnetron_on
 		self.__state_conf_vector_changed = True
 		
+	def __enter_sequence_main_region_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_door_open
+		self.__state_conf_vector_changed = True
+		
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __exit_sequence_main_region_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#Default exit sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.null_state
 		
 	def __exit_sequence_main_region_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.null_state
 		self.__exit_action_main_region_magnetron_on()
 		
+	def __exit_sequence_main_region_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#Default exit sequence for state DoorOpen
+		self.__state_vector[0] = self.State.null_state
+		
 	def __exit_sequence_main_region(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
 		if state == self.State.main_region_magnetron_off:
 			self.__exit_sequence_main_region_magnetron_off()
 		elif state == self.State.main_region_magnetron_on:
 			self.__exit_sequence_main_region_magnetron_on()
-		
-	def __react_main_region__choice_0(self):
-		"""The reactions of state null..
-		"""
-		if self.__remaining_time == 0:
-			self.ring_bell_observable.next()
-			self.__enter_sequence_main_region_magnetron_off_default()
-		else:
-			self.__enter_sequence_main_region_magnetron_on_default()
+		elif state == self.State.main_region_door_open:
+			self.__exit_sequence_main_region_door_open()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_magnetron_off_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_magnetron_off_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_off_react function.
 		"""
+		#The reactions of state MagnetronOff.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.start_pressed:
 				self.__exit_sequence_main_region_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_magnetron_on_default()
 				transitioned_after = 0
-			elif self.increase_time_pressed:
+			elif self.door_opened:
 				self.__exit_sequence_main_region_magnetron_off()
-				self.__remaining_time = self.__remaining_time + 10
-				self.set_displayed_time_observable.next(self.__remaining_time)
-				self.__enter_sequence_main_region_magnetron_off_default()
-				transitioned_after = 0
-			elif self.stop_pressed:
-				self.__exit_sequence_main_region_magnetron_off()
-				self.__remaining_time = 0
-				self.set_displayed_time_observable.next(0)
-				self.__enter_sequence_main_region_magnetron_off_default()
+				self.__enter_sequence_main_region_door_open_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -254,18 +242,29 @@ class Statechart:
 	def __main_region_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
 				self.__exit_sequence_main_region_magnetron_on()
 				self.__enter_sequence_main_region_magnetron_off_default()
 				transitioned_after = 0
-			elif self.__time_events[0]:
+			elif self.door_opened:
 				self.__exit_sequence_main_region_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__choice_0()
+				self.__enter_sequence_main_region_door_open_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_door_open()
+				self.__enter_sequence_main_region_magnetron_off_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -278,7 +277,6 @@ class Statechart:
 		self.increase_time_pressed = False
 		self.door_opened = False
 		self.door_closed = False
-		self.__time_events[0] = False
 	
 	
 	def __micro_step(self):
@@ -289,14 +287,14 @@ class Statechart:
 			self.__main_region_magnetron_off_react(-1)
 		elif state == self.State.main_region_magnetron_on:
 			self.__main_region_magnetron_on_react(-1)
+		elif state == self.State.main_region_door_open:
+			self.__main_region_door_open_react(-1)
 	
 	
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
-		if self.timer_service is None:
-			raise ValueError('Timer service must be set.')
-		
+		#Performs a 'run to completion' step.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
@@ -318,12 +316,11 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
-		if self.timer_service is None:
-			raise ValueError('Timer service must be set.')
-		
+		#Activates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -331,10 +328,13 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
+		self.__state_vector[0] = self.State.null_state
 		self.__is_executing = False
 	
 	

File diff ditekan karena terlalu besar
+ 0 - 139
microwave/YAKINDU_WORKSPACE/20_TimerFlat/Statechart.ysc


+ 23 - 0
microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/.project

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>21_DoorEnterExitActions</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.yakindu.sct.builder.SCTBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>com.yakindu.sct.builder.SCTNature</nature>
+	</natures>
+</projectDescription>

microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/.settings/org.eclipse.core.resources.prefs


+ 15 - 0
microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/Statechart.sgen

@@ -0,0 +1,15 @@
+GeneratorModel for create::python {
+
+	const PROJECT : string = "21_DoorEnterExitActions"
+
+	const FOLDER : string = "srcgen"
+
+	statechart Statechart {
+
+		feature Outlet {
+			targetProject = PROJECT
+			targetFolder = FOLDER
+			libraryTargetFolder = "src"
+		}
+	}
+}

File diff ditekan karena terlalu besar
+ 181 - 0
microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/Statechart.ysc


microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/21_DoorEnterExitActions/src/yakindu/rx.py


+ 56 - 50
microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/srcgen/statechart.py

@@ -17,8 +17,9 @@ class Statechart:
 		(
 			main_region_magnetron_off,
 			main_region_magnetron_on,
+			main_region_door_open,
 			null_state
-		) = range(3)
+		) = range(4)
 	
 	
 	def __init__(self):
@@ -41,8 +42,6 @@ class Statechart:
 		self.ring_bell_observable = Observable()
 		
 		self.in_event_queue = queue.Queue()
-		self.__remaining_time = None
-		
 		# enumeration of all states:
 		self.__State = Statechart.State
 		self.__state_conf_vector_changed = None
@@ -50,12 +49,7 @@ class Statechart:
 		for __state_index in range(1):
 			self.__state_vector[__state_index] = self.State.null_state
 		
-		# for timed statechart:
-		self.timer_service = None
-		self.__time_events = [None] * 1
-		
 		# initializations:
-		self.__remaining_time = 0
 		self.__is_executing = False
 	
 	def is_active(self):
@@ -77,20 +71,10 @@ class Statechart:
 			return self.__state_vector[0] == self.__State.main_region_magnetron_off
 		if s == self.__State.main_region_magnetron_on:
 			return self.__state_vector[0] == self.__State.main_region_magnetron_on
+		if s == self.__State.main_region_door_open:
+			return self.__state_vector[0] == self.__State.main_region_door_open
 		return False
 		
-	def time_elapsed(self, event_id):
-		"""Add time events to in event queue
-		"""
-		if event_id in range(1):
-			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()
 	
@@ -99,7 +83,6 @@ class Statechart:
 			return self.in_event_queue.get()
 		return None
 	
-	
 	def raise_start_pressed(self):
 		"""Raise method for event start_pressed.
 		"""
@@ -158,89 +141,100 @@ class Statechart:
 	def __entry_action_main_region_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
-		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		#Entry action for state 'MagnetronOn'.
 		self.turn_magnetron_on_observable.next()
 		
 	def __exit_action_main_region_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
-		self.timer_service.unset_timer(self, 0)
+		#Exit action for state 'MagnetronOn'.
 		self.turn_magnetron_off_observable.next()
 		
 	def __enter_sequence_main_region_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
+		#'default' enter sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.main_region_magnetron_off
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
+		#'default' enter sequence for state MagnetronOn
 		self.__entry_action_main_region_magnetron_on()
 		self.__state_vector[0] = self.State.main_region_magnetron_on
 		self.__state_conf_vector_changed = True
 		
+	def __enter_sequence_main_region_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_door_open
+		self.__state_conf_vector_changed = True
+		
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __exit_sequence_main_region_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#Default exit sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.null_state
 		
 	def __exit_sequence_main_region_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.null_state
 		self.__exit_action_main_region_magnetron_on()
 		
+	def __exit_sequence_main_region_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#Default exit sequence for state DoorOpen
+		self.__state_vector[0] = self.State.null_state
+		
 	def __exit_sequence_main_region(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
 		if state == self.State.main_region_magnetron_off:
 			self.__exit_sequence_main_region_magnetron_off()
 		elif state == self.State.main_region_magnetron_on:
 			self.__exit_sequence_main_region_magnetron_on()
-		
-	def __react_main_region__choice_0(self):
-		"""The reactions of state null..
-		"""
-		if self.__remaining_time == 0:
-			self.ring_bell_observable.next()
-			self.__enter_sequence_main_region_magnetron_off_default()
-		else:
-			self.__enter_sequence_main_region_magnetron_on_default()
+		elif state == self.State.main_region_door_open:
+			self.__exit_sequence_main_region_door_open()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_magnetron_off_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_magnetron_off_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_off_react function.
 		"""
+		#The reactions of state MagnetronOff.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.start_pressed:
 				self.__exit_sequence_main_region_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_magnetron_on_default()
 				transitioned_after = 0
-			elif self.increase_time_pressed:
+			elif self.door_opened:
 				self.__exit_sequence_main_region_magnetron_off()
-				self.__remaining_time = self.__remaining_time + 10
-				self.set_displayed_time_observable.next(self.__remaining_time)
-				self.__enter_sequence_main_region_magnetron_off_default()
+				self.__enter_sequence_main_region_door_open_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -248,18 +242,29 @@ class Statechart:
 	def __main_region_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
 				self.__exit_sequence_main_region_magnetron_on()
 				self.__enter_sequence_main_region_magnetron_off_default()
 				transitioned_after = 0
-			elif self.__time_events[0]:
+			elif self.door_opened:
 				self.__exit_sequence_main_region_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__choice_0()
+				self.__enter_sequence_main_region_door_open_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_door_open()
+				self.__enter_sequence_main_region_magnetron_off_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -272,7 +277,6 @@ class Statechart:
 		self.increase_time_pressed = False
 		self.door_opened = False
 		self.door_closed = False
-		self.__time_events[0] = False
 	
 	
 	def __micro_step(self):
@@ -283,14 +287,14 @@ class Statechart:
 			self.__main_region_magnetron_off_react(-1)
 		elif state == self.State.main_region_magnetron_on:
 			self.__main_region_magnetron_on_react(-1)
+		elif state == self.State.main_region_door_open:
+			self.__main_region_door_open_react(-1)
 	
 	
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
-		if self.timer_service is None:
-			raise ValueError('Timer service must be set.')
-		
+		#Performs a 'run to completion' step.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
@@ -312,12 +316,11 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
-		if self.timer_service is None:
-			raise ValueError('Timer service must be set.')
-		
+		#Activates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -325,10 +328,13 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
+		self.__state_vector[0] = self.State.null_state
 		self.__is_executing = False
 	
 	

File diff ditekan karena terlalu besar
+ 0 - 167
microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/Statechart.ysc


+ 1 - 1
microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>41_DoorHierarchy</name>
+	<name>22_DoorHierarchy</name>
 	<comment></comment>
 	<projects>
 	</projects>

microwave/YAKINDU_WORKSPACE/40_Door/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/.settings/org.eclipse.core.resources.prefs


+ 1 - 1
microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/Statechart.sgen

@@ -1,6 +1,6 @@
 GeneratorModel for create::python {
 
-	const PROJECT : string = "41_DoorHierarchy"
+	const PROJECT : string = "22_DoorHierarchy"
 
 	const FOLDER : string = "srcgen"
 

File diff ditekan karena terlalu besar
+ 228 - 0
microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/Statechart.ysc


microwave/YAKINDU_WORKSPACE/40_Door/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/40_Door/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/src/yakindu/rx.py


+ 391 - 0
microwave/YAKINDU_WORKSPACE/22_DoorHierarchy/srcgen/statechart.py

@@ -0,0 +1,391 @@
+"""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_door_closed,
+			main_region_door_closed_r1magnetron_on,
+			main_region_door_closed_r1magnetron_off,
+			main_region_door_open,
+			null_state
+		) = range(5)
+	
+	
+	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.in_event_queue = queue.Queue()
+		# enumeration of all states:
+		self.__State = Statechart.State
+		self.__state_conf_vector_changed = None
+		self.__state_vector = [None] * 1
+		for __state_index in range(1):
+			self.__state_vector[__state_index] = self.State.null_state
+		
+		# initializations:
+		self.__is_executing = False
+	
+	def is_active(self):
+		"""Checks if the state machine is active.
+		"""
+		return self.__state_vector[0] 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_door_closed:
+			return (self.__state_vector[0] >= self.__State.main_region_door_closed)\
+				and (self.__state_vector[0] <= self.__State.main_region_door_closed_r1magnetron_off)
+		if s == self.__State.main_region_door_closed_r1magnetron_on:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_on
+		if s == self.__State.main_region_door_closed_r1magnetron_off:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_off
+		if s == self.__State.main_region_door_open:
+			return self.__state_vector[0] == self.__State.main_region_door_open
+		return False
+		
+	def __execute_queued_event(self, func):
+		func()
+	
+	def __get_next_event(self):
+		if not self.in_event_queue.empty():
+			return self.in_event_queue.get()
+		return None
+	
+	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 __entry_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Entry action for state 'MagnetronOn'..
+		"""
+		#Entry action for state 'MagnetronOn'.
+		self.turn_magnetron_on_observable.next()
+		
+	def __exit_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Exit action for state 'MagnetronOn'..
+		"""
+		#Exit action for state 'MagnetronOn'.
+		self.turn_magnetron_off_observable.next()
+		
+	def __enter_sequence_main_region_door_closed_default(self):
+		"""'default' enter sequence for state doorClosed.
+		"""
+		#'default' enter sequence for state doorClosed
+		self.__enter_sequence_main_region_door_closed_r1_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_on_default(self):
+		"""'default' enter sequence for state MagnetronOn.
+		"""
+		#'default' enter sequence for state MagnetronOn
+		self.__entry_action_main_region_door_closed_r1_magnetron_on()
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_on
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_off_default(self):
+		"""'default' enter sequence for state MagnetronOff.
+		"""
+		#'default' enter sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_off
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_door_open
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_default(self):
+		"""'default' enter sequence for region main region.
+		"""
+		#'default' enter sequence for region main region
+		self.__react_main_region__entry_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_door_closed_r1__entry_default()
+		
+	def __exit_sequence_main_region_door_closed(self):
+		"""Default exit sequence for state doorClosed.
+		"""
+		#Default exit sequence for state doorClosed
+		self.__exit_sequence_main_region_door_closed_r1()
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_on(self):
+		"""Default exit sequence for state MagnetronOn.
+		"""
+		#Default exit sequence for state MagnetronOn
+		self.__state_vector[0] = self.State.main_region_door_closed
+		self.__exit_action_main_region_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_off(self):
+		"""Default exit sequence for state MagnetronOff.
+		"""
+		#Default exit sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed
+		
+	def __exit_sequence_main_region_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#Default exit sequence for state DoorOpen
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region(self):
+		"""Default exit sequence for region main region.
+		"""
+		#Default exit sequence for region main region
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed:
+			self.__exit_sequence_main_region_door_closed()
+		elif state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		elif state == self.State.main_region_door_open:
+			self.__exit_sequence_main_region_door_open()
+		
+	def __exit_sequence_main_region_door_closed_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		
+	def __react_main_region_door_closed_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+		
+	def __react_main_region__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_default()
+		
+	def __react(self, transitioned_before):
+		"""Implementation of __react function.
+		"""
+		#State machine reactions.
+		return transitioned_before
+	
+	
+	def __main_region_door_closed_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_react function.
+		"""
+		#The reactions of state doorClosed.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_opened:
+				self.__exit_sequence_main_region_door_closed()
+				self.__enter_sequence_main_region_door_open_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_on_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_on_react function.
+		"""
+		#The reactions of state MagnetronOn.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.stop_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_off_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_off_react function.
+		"""
+		#The reactions of state MagnetronOff.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.start_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_door_open()
+				self.__enter_sequence_main_region_door_closed_default()
+				transitioned_after = 0
+		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
+	
+	
+	def __micro_step(self):
+		"""Implementation of __micro_step function.
+		"""
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__main_region_door_closed_r1_magnetron_on_react(-1)
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__main_region_door_closed_r1_magnetron_off_react(-1)
+		elif state == self.State.main_region_door_open:
+			self.__main_region_door_open_react(-1)
+	
+	
+	def run_cycle(self):
+		"""Implementation of run_cycle function.
+		"""
+		#Performs a 'run to completion' step.
+		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()
+			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.
+		"""
+		#Activates the state machine.
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
+		self.__enter_sequence_main_region_default()
+		self.__is_executing = False
+	
+	
+	def exit(self):
+		"""Implementation of exit function.
+		"""
+		#Deactivates the state machine.
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
+		self.__exit_sequence_main_region()
+		self.__state_vector[0] = self.State.null_state
+		self.__is_executing = False
+	
+	
+	def trigger_without_event(self):
+		"""Implementation of triggerWithoutEvent function.
+		"""
+		self.run_cycle()
+	

File diff ditekan karena terlalu besar
+ 0 - 178
microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/Statechart.ysc


+ 12 - 0
microwave/YAKINDU_WORKSPACE/30_Orthogonality/Statechart.ysc

@@ -170,6 +170,18 @@
           <styles xsi:type="notation:NamedStyle" xmi:id="_OGqG4qxQEe2w-MF-SB4lMg" name="allowColors"/>
           <layoutConstraint xsi:type="notation:Bounds" xmi:id="_OGqG46xQEe2w-MF-SB4lMg" x="177" y="11"/>
         </children>
+        <children xsi:type="notation:Shape" xmi:id="_LM3BEI_SEe6BZdbMZ2j9yg" type="Note" fontName="Verdana" description="here, the timer&#xA;can also be increased&#xA;while the magnetron is running." fillColor="13369343" transparency="0" lineColor="6737151" lineWidth="1">
+          <children xsi:type="notation:BasicDecorationNode" xmi:id="_LM4PMI_SEe6BZdbMZ2j9yg" type="DiagramName">
+            <element xsi:nil="true"/>
+          </children>
+          <children xsi:type="notation:BasicDecorationNode" xmi:id="_LM4PMY_SEe6BZdbMZ2j9yg" type="Description">
+            <element xsi:nil="true"/>
+          </children>
+          <styles xsi:type="notation:TextStyle" xmi:id="_LM3BEY_SEe6BZdbMZ2j9yg"/>
+          <styles xsi:type="notation:LineTypeStyle" xmi:id="_LM3BEo_SEe6BZdbMZ2j9yg"/>
+          <element xsi:nil="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LM3BE4_SEe6BZdbMZ2j9yg" x="1443" y="207" width="199" height="65"/>
+        </children>
         <layoutConstraint xsi:type="notation:Bounds" xmi:id="_D1kIMKxEEe2zPcKEzbpeTQ"/>
       </children>
       <styles xsi:type="notation:ShapeStyle" xmi:id="_D1kIMaxEEe2zPcKEzbpeTQ" fontName="Verdana" fillColor="16448250" lineColor="12632256"/>

+ 28 - 0
microwave/YAKINDU_WORKSPACE/30_Orthogonality/srcgen/statechart.py

@@ -57,6 +57,7 @@ class Statechart:
 		self.__time_events = [None] * 1
 		
 		# initializations:
+		#Default init sequence for statechart Statechart
 		self.__remaining_time = 0
 		self.__is_executing = False
 		self.__state_conf_vector_position = None
@@ -166,24 +167,28 @@ class Statechart:
 	def __entry_action_main_region_orthogonal_state_r1_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
+		#Entry action for state 'MagnetronOn'.
 		self.timer_service.set_timer(self, 0, (1 * 1000), False)
 		self.turn_magnetron_on_observable.next()
 		
 	def __exit_action_main_region_orthogonal_state_r1_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
+		#Exit action for state 'MagnetronOn'.
 		self.timer_service.unset_timer(self, 0)
 		self.turn_magnetron_off_observable.next()
 		
 	def __enter_sequence_main_region_orthogonal_state_default(self):
 		"""'default' enter sequence for state OrthogonalState.
 		"""
+		#'default' enter sequence for state OrthogonalState
 		self.__enter_sequence_main_region_orthogonal_state_r1_default()
 		self.__enter_sequence_main_region_orthogonal_state_r2_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
+		#'default' enter sequence for state MagnetronOn
 		self.__entry_action_main_region_orthogonal_state_r1_magnetron_on()
 		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1magnetron_on
 		self.__state_conf_vector_position = 0
@@ -192,6 +197,7 @@ class Statechart:
 	def __enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
+		#'default' enter sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1magnetron_off
 		self.__state_conf_vector_position = 0
 		self.__state_conf_vector_changed = True
@@ -199,6 +205,7 @@ class Statechart:
 	def __enter_sequence_main_region_orthogonal_state_r2_time_control_default(self):
 		"""'default' enter sequence for state TimeControl.
 		"""
+		#'default' enter sequence for state TimeControl
 		self.__state_vector[1] = self.State.main_region_orthogonal_state_r2time_control
 		self.__state_conf_vector_position = 1
 		self.__state_conf_vector_changed = True
@@ -206,21 +213,25 @@ class Statechart:
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_default(self):
 		"""'default' enter sequence for region r1.
 		"""
+		#'default' enter sequence for region r1
 		self.__react_main_region_orthogonal_state_r1__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r2_default(self):
 		"""'default' enter sequence for region r2.
 		"""
+		#'default' enter sequence for region r2
 		self.__react_main_region_orthogonal_state_r2__entry_default()
 		
 	def __exit_sequence_main_region_orthogonal_state_r1_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
 		self.__state_vector[0] = self.State.null_state
 		self.__state_conf_vector_position = 0
 		self.__exit_action_main_region_orthogonal_state_r1_magnetron_on()
@@ -228,18 +239,21 @@ class Statechart:
 	def __exit_sequence_main_region_orthogonal_state_r1_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#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_orthogonal_state_r2_time_control(self):
 		"""Default exit sequence for state TimeControl.
 		"""
+		#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(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
 		if state == self.State.main_region_orthogonal_state_r1magnetron_on:
 			self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_on()
@@ -252,6 +266,7 @@ class Statechart:
 	def __react_main_region_orthogonal_state_r1__choice_0(self):
 		"""The reactions of state null..
 		"""
+		#The reactions of state null.
 		if self.__remaining_time == 0:
 			self.ring_bell_observable.next()
 			self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default()
@@ -261,33 +276,39 @@ class Statechart:
 	def __react_main_region_orthogonal_state_r1__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default()
 		
 	def __react_main_region_orthogonal_state_r2__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r2_time_control_default()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_orthogonal_state_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_react function.
 		"""
+		#The reactions of state OrthogonalState.
 		return self.__react(transitioned_before)
 	
 	
 	def __main_region_orthogonal_state_r1_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
@@ -307,6 +328,7 @@ class Statechart:
 	def __main_region_orthogonal_state_r1_magnetron_off_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_magnetron_off_react function.
 		"""
+		#The reactions of state MagnetronOff.
 		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.start_pressed:
@@ -327,6 +349,7 @@ class Statechart:
 	def __main_region_orthogonal_state_r2_time_control_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r2_time_control_react function.
 		"""
+		#The reactions of state TimeControl.
 		transitioned_after = transitioned_before
 		if transitioned_after < 1:
 			if self.increase_time_pressed:
@@ -368,6 +391,7 @@ class Statechart:
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
+		#Performs a 'run to completion' step.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
@@ -392,12 +416,14 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
+		#Activates the state machine.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -405,9 +431,11 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
 		self.__is_executing = False
 	

+ 1 - 1
microwave/YAKINDU_WORKSPACE/50_ChildLock/.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>50_ChildLock</name>
+	<name>30_Timer</name>
 	<comment></comment>
 	<projects>
 	</projects>

microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/30_Timer/.settings/org.eclipse.core.resources.prefs


+ 1 - 1
microwave/YAKINDU_WORKSPACE/50_ChildLock/Statechart.sgen

@@ -1,6 +1,6 @@
 GeneratorModel for create::python {
 
-	const PROJECT : string = "50_ChildLock"
+	const PROJECT : string = "30_Timer"
 
 	const FOLDER : string = "srcgen"
 

File diff ditekan karena terlalu besar
+ 240 - 0
microwave/YAKINDU_WORKSPACE/30_Timer/Statechart.ysc


microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/30_Timer/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/30_Timer/src/yakindu/rx.py


+ 402 - 0
microwave/YAKINDU_WORKSPACE/30_Timer/srcgen/statechart.py

@@ -0,0 +1,402 @@
+"""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_door_closed,
+			main_region_door_closed_r1magnetron_on,
+			main_region_door_closed_r1magnetron_off,
+			main_region_door_open,
+			null_state
+		) = range(5)
+	
+	
+	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.in_event_queue = queue.Queue()
+		self.__remaining_time = None
+		
+		# enumeration of all states:
+		self.__State = Statechart.State
+		self.__state_conf_vector_changed = None
+		self.__state_vector = [None] * 1
+		for __state_index in range(1):
+			self.__state_vector[__state_index] = self.State.null_state
+		
+		# initializations:
+		#Default init sequence for statechart Statechart
+		self.__remaining_time = 0
+		self.__is_executing = False
+	
+	def is_active(self):
+		"""Checks if the state machine is active.
+		"""
+		return self.__state_vector[0] 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_door_closed:
+			return (self.__state_vector[0] >= self.__State.main_region_door_closed)\
+				and (self.__state_vector[0] <= self.__State.main_region_door_closed_r1magnetron_off)
+		if s == self.__State.main_region_door_closed_r1magnetron_on:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_on
+		if s == self.__State.main_region_door_closed_r1magnetron_off:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_off
+		if s == self.__State.main_region_door_open:
+			return self.__state_vector[0] == self.__State.main_region_door_open
+		return False
+		
+	def __execute_queued_event(self, func):
+		func()
+	
+	def __get_next_event(self):
+		if not self.in_event_queue.empty():
+			return self.in_event_queue.get()
+		return None
+	
+	
+	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 __entry_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Entry action for state 'MagnetronOn'..
+		"""
+		#Entry action for state 'MagnetronOn'.
+		self.turn_magnetron_on_observable.next()
+		
+	def __exit_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Exit action for state 'MagnetronOn'..
+		"""
+		#Exit action for state 'MagnetronOn'.
+		self.turn_magnetron_off_observable.next()
+		
+	def __enter_sequence_main_region_door_closed_default(self):
+		"""'default' enter sequence for state doorClosed.
+		"""
+		#'default' enter sequence for state doorClosed
+		self.__enter_sequence_main_region_door_closed_r1_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_on_default(self):
+		"""'default' enter sequence for state MagnetronOn.
+		"""
+		#'default' enter sequence for state MagnetronOn
+		self.__entry_action_main_region_door_closed_r1_magnetron_on()
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_on
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_off_default(self):
+		"""'default' enter sequence for state MagnetronOff.
+		"""
+		#'default' enter sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_off
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_door_open
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_default(self):
+		"""'default' enter sequence for region main region.
+		"""
+		#'default' enter sequence for region main region
+		self.__react_main_region__entry_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_door_closed_r1__entry_default()
+		
+	def __exit_sequence_main_region_door_closed(self):
+		"""Default exit sequence for state doorClosed.
+		"""
+		#Default exit sequence for state doorClosed
+		self.__exit_sequence_main_region_door_closed_r1()
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_on(self):
+		"""Default exit sequence for state MagnetronOn.
+		"""
+		#Default exit sequence for state MagnetronOn
+		self.__state_vector[0] = self.State.main_region_door_closed
+		self.__exit_action_main_region_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_off(self):
+		"""Default exit sequence for state MagnetronOff.
+		"""
+		#Default exit sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed
+		
+	def __exit_sequence_main_region_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#Default exit sequence for state DoorOpen
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region(self):
+		"""Default exit sequence for region main region.
+		"""
+		#Default exit sequence for region main region
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed:
+			self.__exit_sequence_main_region_door_closed()
+		elif state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		elif state == self.State.main_region_door_open:
+			self.__exit_sequence_main_region_door_open()
+		
+	def __exit_sequence_main_region_door_closed_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		
+	def __react_main_region_door_closed_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+		
+	def __react_main_region__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_default()
+		
+	def __react(self, transitioned_before):
+		"""Implementation of __react function.
+		"""
+		#State machine reactions.
+		return transitioned_before
+	
+	
+	def __main_region_door_closed_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_react function.
+		"""
+		#The reactions of state doorClosed.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_opened:
+				self.__exit_sequence_main_region_door_closed()
+				self.__enter_sequence_main_region_door_open_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_on_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_on_react function.
+		"""
+		#The reactions of state MagnetronOn.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.stop_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_off_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_off_react function.
+		"""
+		#The reactions of state MagnetronOff.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.start_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+			elif self.increase_time_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__remaining_time = self.__remaining_time + 1
+				self.set_displayed_time_observable.next(self.__remaining_time)
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_door_open()
+				self.__enter_sequence_main_region_door_closed_default()
+				transitioned_after = 0
+		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
+	
+	
+	def __micro_step(self):
+		"""Implementation of __micro_step function.
+		"""
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__main_region_door_closed_r1_magnetron_on_react(-1)
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__main_region_door_closed_r1_magnetron_off_react(-1)
+		elif state == self.State.main_region_door_open:
+			self.__main_region_door_open_react(-1)
+	
+	
+	def run_cycle(self):
+		"""Implementation of run_cycle function.
+		"""
+		#Performs a 'run to completion' step.
+		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()
+			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.
+		"""
+		#Activates the state machine.
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
+		self.__enter_sequence_main_region_default()
+		self.__is_executing = False
+	
+	
+	def exit(self):
+		"""Implementation of exit function.
+		"""
+		#Deactivates the state machine.
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
+		self.__exit_sequence_main_region()
+		self.__state_vector[0] = self.State.null_state
+		self.__is_executing = False
+	
+	
+	def trigger_without_event(self):
+		"""Implementation of triggerWithoutEvent function.
+		"""
+		self.run_cycle()
+	

+ 23 - 0
microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/.project

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>31_TimerTimeoutWrong</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.yakindu.sct.builder.SCTBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>com.yakindu.sct.builder.SCTNature</nature>
+	</natures>
+</projectDescription>

microwave/YAKINDU_WORKSPACE/42_DoorHistory/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/.settings/org.eclipse.core.resources.prefs


+ 15 - 0
microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/Statechart.sgen

@@ -0,0 +1,15 @@
+GeneratorModel for create::python {
+
+	const PROJECT : string = "31_TimerTimeoutWrong"
+
+	const FOLDER : string = "srcgen"
+
+	statechart Statechart {
+
+		feature Outlet {
+			targetProject = PROJECT
+			targetFolder = FOLDER
+			libraryTargetFolder = "src"
+		}
+	}
+}

File diff ditekan karena terlalu besar
+ 264 - 0
microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/Statechart.ysc


microwave/YAKINDU_WORKSPACE/42_DoorHistory/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/42_DoorHistory/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/src/yakindu/rx.py


+ 439 - 0
microwave/YAKINDU_WORKSPACE/31_TimerTimeoutWrong/srcgen/statechart.py

@@ -0,0 +1,439 @@
+"""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_door_closed,
+			main_region_door_closed_r1magnetron_on,
+			main_region_door_closed_r1magnetron_off,
+			main_region_door_open,
+			null_state
+		) = range(5)
+	
+	
+	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.in_event_queue = queue.Queue()
+		self.__remaining_time = None
+		
+		# enumeration of all states:
+		self.__State = Statechart.State
+		self.__state_conf_vector_changed = None
+		self.__state_vector = [None] * 1
+		for __state_index in range(1):
+			self.__state_vector[__state_index] = self.State.null_state
+		
+		# for timed statechart:
+		self.timer_service = None
+		self.__time_events = [None] * 1
+		
+		# initializations:
+		#Default init sequence for statechart Statechart
+		self.__remaining_time = 0
+		self.__is_executing = False
+	
+	def is_active(self):
+		"""Checks if the state machine is active.
+		"""
+		return self.__state_vector[0] 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_door_closed:
+			return (self.__state_vector[0] >= self.__State.main_region_door_closed)\
+				and (self.__state_vector[0] <= self.__State.main_region_door_closed_r1magnetron_off)
+		if s == self.__State.main_region_door_closed_r1magnetron_on:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_on
+		if s == self.__State.main_region_door_closed_r1magnetron_off:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_off
+		if s == self.__State.main_region_door_open:
+			return self.__state_vector[0] == self.__State.main_region_door_open
+		return False
+		
+	def time_elapsed(self, event_id):
+		"""Add time events to in event queue
+		"""
+		if event_id in range(1):
+			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.in_event_queue.empty():
+			return self.in_event_queue.get()
+		return None
+	
+	
+	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 __entry_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Entry action for state 'MagnetronOn'..
+		"""
+		#Entry action for state 'MagnetronOn'.
+		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		self.turn_magnetron_on_observable.next()
+		
+	def __exit_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Exit action for state 'MagnetronOn'..
+		"""
+		#Exit action for state 'MagnetronOn'.
+		self.timer_service.unset_timer(self, 0)
+		self.turn_magnetron_off_observable.next()
+		
+	def __enter_sequence_main_region_door_closed_default(self):
+		"""'default' enter sequence for state doorClosed.
+		"""
+		#'default' enter sequence for state doorClosed
+		self.__enter_sequence_main_region_door_closed_r1_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_on_default(self):
+		"""'default' enter sequence for state MagnetronOn.
+		"""
+		#'default' enter sequence for state MagnetronOn
+		self.__entry_action_main_region_door_closed_r1_magnetron_on()
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_on
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_off_default(self):
+		"""'default' enter sequence for state MagnetronOff.
+		"""
+		#'default' enter sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_off
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_door_open
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_default(self):
+		"""'default' enter sequence for region main region.
+		"""
+		#'default' enter sequence for region main region
+		self.__react_main_region__entry_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_door_closed_r1__entry_default()
+		
+	def __exit_sequence_main_region_door_closed(self):
+		"""Default exit sequence for state doorClosed.
+		"""
+		#Default exit sequence for state doorClosed
+		self.__exit_sequence_main_region_door_closed_r1()
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_on(self):
+		"""Default exit sequence for state MagnetronOn.
+		"""
+		#Default exit sequence for state MagnetronOn
+		self.__state_vector[0] = self.State.main_region_door_closed
+		self.__exit_action_main_region_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_off(self):
+		"""Default exit sequence for state MagnetronOff.
+		"""
+		#Default exit sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed
+		
+	def __exit_sequence_main_region_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#Default exit sequence for state DoorOpen
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region(self):
+		"""Default exit sequence for region main region.
+		"""
+		#Default exit sequence for region main region
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed:
+			self.__exit_sequence_main_region_door_closed()
+		elif state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		elif state == self.State.main_region_door_open:
+			self.__exit_sequence_main_region_door_open()
+		
+	def __exit_sequence_main_region_door_closed_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		
+	def __react_main_region_door_closed_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+		
+	def __react_main_region__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_default()
+		
+	def __react(self, transitioned_before):
+		"""Implementation of __react function.
+		"""
+		#State machine reactions.
+		return transitioned_before
+	
+	
+	def __main_region_door_closed_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_react function.
+		"""
+		#The reactions of state doorClosed.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_opened:
+				self.__exit_sequence_main_region_door_closed()
+				self.__enter_sequence_main_region_door_open_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_on_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_on_react function.
+		"""
+		#The reactions of state MagnetronOn.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.stop_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+			elif self.__time_events[0]:
+				self.__exit_sequence_main_region_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.__enter_sequence_main_region_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+			elif self.__remaining_time == 0:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+				self.ring_bell_observable.next()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_off_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_off_react function.
+		"""
+		#The reactions of state MagnetronOff.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.start_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+			elif self.increase_time_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__remaining_time = self.__remaining_time + 1
+				self.set_displayed_time_observable.next(self.__remaining_time)
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_door_open()
+				self.__enter_sequence_main_region_door_closed_default()
+				transitioned_after = 0
+		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
+	
+	
+	def __micro_step(self):
+		"""Implementation of __micro_step function.
+		"""
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__main_region_door_closed_r1_magnetron_on_react(-1)
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__main_region_door_closed_r1_magnetron_off_react(-1)
+		elif state == self.State.main_region_door_open:
+			self.__main_region_door_open_react(-1)
+	
+	
+	def run_cycle(self):
+		"""Implementation of run_cycle function.
+		"""
+		#Performs a 'run to completion' step.
+		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()
+			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.
+		"""
+		#Activates the state machine.
+		if self.timer_service is None:
+			raise ValueError('Timer service must be set.')
+		
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
+		self.__enter_sequence_main_region_default()
+		self.__is_executing = False
+	
+	
+	def exit(self):
+		"""Implementation of exit function.
+		"""
+		#Deactivates the state machine.
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
+		self.__exit_sequence_main_region()
+		self.__state_vector[0] = self.State.null_state
+		self.__is_executing = False
+	
+	
+	def trigger_without_event(self):
+		"""Implementation of triggerWithoutEvent function.
+		"""
+		self.run_cycle()
+	

+ 1 - 1
microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>21_TimerFlatStopCondition</name>
+	<name>32_TimerTimeoutAlmostCorrect</name>
 	<comment></comment>
 	<projects>
 	</projects>

microwave/YAKINDU_WORKSPACE/50_ChildLock/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/.settings/org.eclipse.core.resources.prefs


+ 1 - 1
microwave/YAKINDU_WORKSPACE/21_TimerFlatStopCondition/Statechart.sgen

@@ -1,6 +1,6 @@
 GeneratorModel for create::python {
 
-	const PROJECT : string = "21_TimerFlatStopCondition"
+	const PROJECT : string = "32_TimerTimeoutAlmostCorrect"
 
 	const FOLDER : string = "srcgen"
 

File diff ditekan karena terlalu besar
+ 281 - 0
microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/Statechart.ysc


microwave/YAKINDU_WORKSPACE/50_ChildLock/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/50_ChildLock/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/32_TimerTimeoutAlmostCorrect/src/yakindu/rx.py


+ 158 - 46
microwave/YAKINDU_WORKSPACE/20_TimerFlat/srcgen/statechart.py

@@ -15,10 +15,12 @@ class Statechart:
 		""" State Enum
 		"""
 		(
-			main_region_magnetron_off,
-			main_region_magnetron_on,
+			main_region_door_closed,
+			main_region_door_closed_r1magnetron_on,
+			main_region_door_closed_r1magnetron_off,
+			main_region_door_open,
 			null_state
-		) = range(3)
+		) = range(5)
 	
 	
 	def __init__(self):
@@ -55,6 +57,7 @@ class Statechart:
 		self.__time_events = [None] * 1
 		
 		# initializations:
+		#Default init sequence for statechart Statechart
 		self.__remaining_time = 0
 		self.__is_executing = False
 	
@@ -73,10 +76,15 @@ class Statechart:
 		"""Checks if the state is currently active.
 		"""
 		s = state
-		if s == self.__State.main_region_magnetron_off:
-			return self.__state_vector[0] == self.__State.main_region_magnetron_off
-		if s == self.__State.main_region_magnetron_on:
-			return self.__state_vector[0] == self.__State.main_region_magnetron_on
+		if s == self.__State.main_region_door_closed:
+			return (self.__state_vector[0] >= self.__State.main_region_door_closed)\
+				and (self.__state_vector[0] <= self.__State.main_region_door_closed_r1magnetron_off)
+		if s == self.__State.main_region_door_closed_r1magnetron_on:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_on
+		if s == self.__State.main_region_door_closed_r1magnetron_off:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_off
+		if s == self.__State.main_region_door_open:
+			return self.__state_vector[0] == self.__State.main_region_door_open
 		return False
 		
 	def time_elapsed(self, event_id):
@@ -155,100 +163,197 @@ class Statechart:
 		"""
 		self.door_closed = True
 	
-	def __entry_action_main_region_magnetron_on(self):
+	def __entry_action_main_region_door_closed_r1_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
+		#Entry action for state 'MagnetronOn'.
 		self.timer_service.set_timer(self, 0, (1 * 1000), False)
 		self.turn_magnetron_on_observable.next()
 		
-	def __exit_action_main_region_magnetron_on(self):
+	def __exit_action_main_region_door_closed_r1_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
+		#Exit action for state 'MagnetronOn'.
 		self.timer_service.unset_timer(self, 0)
 		self.turn_magnetron_off_observable.next()
 		
-	def __enter_sequence_main_region_magnetron_off_default(self):
+	def __enter_sequence_main_region_door_closed_default(self):
+		"""'default' enter sequence for state doorClosed.
+		"""
+		#'default' enter sequence for state doorClosed
+		self.__enter_sequence_main_region_door_closed_r1_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_on_default(self):
+		"""'default' enter sequence for state MagnetronOn.
+		"""
+		#'default' enter sequence for state MagnetronOn
+		self.__entry_action_main_region_door_closed_r1_magnetron_on()
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_on
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
-		self.__state_vector[0] = self.State.main_region_magnetron_off
+		#'default' enter sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_off
 		self.__state_conf_vector_changed = True
 		
-	def __enter_sequence_main_region_magnetron_on_default(self):
-		"""'default' enter sequence for state MagnetronOn.
+	def __enter_sequence_main_region_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
 		"""
-		self.__entry_action_main_region_magnetron_on()
-		self.__state_vector[0] = self.State.main_region_magnetron_on
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_door_open
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
-	def __exit_sequence_main_region_magnetron_off(self):
+	def __enter_sequence_main_region_door_closed_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_door_closed_r1__entry_default()
+		
+	def __exit_sequence_main_region_door_closed(self):
+		"""Default exit sequence for state doorClosed.
+		"""
+		#Default exit sequence for state doorClosed
+		self.__exit_sequence_main_region_door_closed_r1()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_on(self):
+		"""Default exit sequence for state MagnetronOn.
+		"""
+		#Default exit sequence for state MagnetronOn
+		self.__state_vector[0] = self.State.null_state
+		self.__exit_action_main_region_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#Default exit sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.null_state
 		
-	def __exit_sequence_main_region_magnetron_on(self):
-		"""Default exit sequence for state MagnetronOn.
+	def __exit_sequence_main_region_door_open(self):
+		"""Default exit sequence for state DoorOpen.
 		"""
+		#Default exit sequence for state DoorOpen
 		self.__state_vector[0] = self.State.null_state
-		self.__exit_action_main_region_magnetron_on()
 		
 	def __exit_sequence_main_region(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
-		if state == self.State.main_region_magnetron_off:
-			self.__exit_sequence_main_region_magnetron_off()
-		elif state == self.State.main_region_magnetron_on:
-			self.__exit_sequence_main_region_magnetron_on()
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		elif state == self.State.main_region_door_open:
+			self.__exit_sequence_main_region_door_open()
+		
+	def __exit_sequence_main_region_door_closed_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		
+	def __react_main_region_door_closed_r1__choice_0(self):
+		"""The reactions of state null..
+		"""
+		#The reactions of state null.
+		if self.__remaining_time == 0:
+			self.ring_bell_observable.next()
+			self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+		else:
+			self.__enter_sequence_main_region_door_closed_r1_magnetron_on_default()
+		
+	def __react_main_region_door_closed_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
-		self.__enter_sequence_main_region_magnetron_off_default()
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
-	def __main_region_magnetron_off_react(self, transitioned_before):
-		"""Implementation of __main_region_magnetron_off_react function.
+	def __main_region_door_closed_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_react function.
 		"""
+		#The reactions of state doorClosed.
 		transitioned_after = self.__react(transitioned_before)
 		if transitioned_after < 0:
-			if self.start_pressed:
-				self.__exit_sequence_main_region_magnetron_off()
-				self.__enter_sequence_main_region_magnetron_on_default()
-				transitioned_after = 0
-			elif self.increase_time_pressed:
-				self.__exit_sequence_main_region_magnetron_off()
-				self.__remaining_time = self.__remaining_time + 10
-				self.set_displayed_time_observable.next(self.__remaining_time)
-				self.__enter_sequence_main_region_magnetron_off_default()
+			if self.door_opened:
+				self.__exit_sequence_main_region_door_closed()
+				self.__enter_sequence_main_region_door_open_default()
 				transitioned_after = 0
 		return transitioned_after
 	
 	
-	def __main_region_magnetron_on_react(self, transitioned_before):
-		"""Implementation of __main_region_magnetron_on_react function.
+	def __main_region_door_closed_r1_magnetron_on_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_on_react function.
 		"""
-		transitioned_after = self.__react(transitioned_before)
+		#The reactions of state MagnetronOn.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
-				self.__exit_sequence_main_region_magnetron_on()
-				self.__enter_sequence_main_region_magnetron_off_default()
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
 				transitioned_after = 0
 			elif self.__time_events[0]:
-				self.__exit_sequence_main_region_magnetron_on()
+				self.__exit_sequence_main_region_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.__enter_sequence_main_region_magnetron_on_default()
+				self.__react_main_region_door_closed_r1__choice_0()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_off_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_off_react function.
+		"""
+		#The reactions of state MagnetronOff.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.start_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+			elif self.increase_time_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__remaining_time = self.__remaining_time + 1
+				self.set_displayed_time_observable.next(self.__remaining_time)
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_door_open()
+				self.__enter_sequence_main_region_door_closed_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -268,15 +373,18 @@ class Statechart:
 		"""Implementation of __micro_step function.
 		"""
 		state = self.__state_vector[0]
-		if state == self.State.main_region_magnetron_off:
-			self.__main_region_magnetron_off_react(-1)
-		elif state == self.State.main_region_magnetron_on:
-			self.__main_region_magnetron_on_react(-1)
+		if state == self.State.main_region_door_closed_r1magnetron_on:
+			self.__main_region_door_closed_r1_magnetron_on_react(-1)
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__main_region_door_closed_r1_magnetron_off_react(-1)
+		elif state == self.State.main_region_door_open:
+			self.__main_region_door_open_react(-1)
 	
 	
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
+		#Performs a 'run to completion' step.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
@@ -301,12 +409,14 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
+		#Activates the state machine.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -314,9 +424,11 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
 		self.__is_executing = False
 	

+ 1 - 1
microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>22_TimerFlatClearTime</name>
+	<name>33_TimerTimeoutCorrect</name>
 	<comment></comment>
 	<projects>
 	</projects>

microwave/YAKINDU_WORKSPACE/90_AfterTransition/.settings/org.eclipse.core.resources.prefs → microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/.settings/org.eclipse.core.resources.prefs


+ 1 - 1
microwave/YAKINDU_WORKSPACE/22_TimerFlatClearTime/Statechart.sgen

@@ -1,6 +1,6 @@
 GeneratorModel for create::python {
 
-	const PROJECT : string = "22_TimerFlatClearTime"
+	const PROJECT : string = "33_TimerTimeoutCorrect"
 
 	const FOLDER : string = "srcgen"
 

File diff ditekan karena terlalu besar
+ 338 - 0
microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/Statechart.ysc


microwave/YAKINDU_WORKSPACE/90_AfterTransition/src/yakindu/__init__.py → microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/src/yakindu/__init__.py


microwave/YAKINDU_WORKSPACE/90_AfterTransition/src/yakindu/rx.py → microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/src/yakindu/rx.py


+ 500 - 0
microwave/YAKINDU_WORKSPACE/33_TimerTimeoutCorrect/srcgen/statechart.py

@@ -0,0 +1,500 @@
+"""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_door_closed,
+			main_region_door_closed_r1magnetron_on,
+			main_region_door_closed_r1magnetron_on_r1check_time,
+			main_region_door_closed_r1magnetron_off,
+			main_region_door_open,
+			null_state
+		) = range(6)
+	
+	
+	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.in_event_queue = queue.Queue()
+		self.__remaining_time = None
+		
+		# enumeration of all states:
+		self.__State = Statechart.State
+		self.__state_conf_vector_changed = None
+		self.__state_vector = [None] * 1
+		for __state_index in range(1):
+			self.__state_vector[__state_index] = self.State.null_state
+		
+		# for timed statechart:
+		self.timer_service = None
+		self.__time_events = [None] * 1
+		
+		# initializations:
+		#Default init sequence for statechart Statechart
+		self.__remaining_time = 0
+		self.__is_executing = False
+	
+	def is_active(self):
+		"""Checks if the state machine is active.
+		"""
+		return self.__state_vector[0] 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_door_closed:
+			return (self.__state_vector[0] >= self.__State.main_region_door_closed)\
+				and (self.__state_vector[0] <= self.__State.main_region_door_closed_r1magnetron_off)
+		if s == self.__State.main_region_door_closed_r1magnetron_on:
+			return (self.__state_vector[0] >= self.__State.main_region_door_closed_r1magnetron_on)\
+				and (self.__state_vector[0] <= self.__State.main_region_door_closed_r1magnetron_on_r1check_time)
+		if s == self.__State.main_region_door_closed_r1magnetron_on_r1check_time:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_on_r1check_time
+		if s == self.__State.main_region_door_closed_r1magnetron_off:
+			return self.__state_vector[0] == self.__State.main_region_door_closed_r1magnetron_off
+		if s == self.__State.main_region_door_open:
+			return self.__state_vector[0] == self.__State.main_region_door_open
+		return False
+		
+	def time_elapsed(self, event_id):
+		"""Add time events to in event queue
+		"""
+		if event_id in range(1):
+			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.in_event_queue.empty():
+			return self.in_event_queue.get()
+		return None
+	
+	
+	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 __entry_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Entry action for state 'MagnetronOn'..
+		"""
+		#Entry action for state 'MagnetronOn'.
+		self.turn_magnetron_on_observable.next()
+		
+	def __entry_action_main_region_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Entry action for state 'CheckTime'..
+		"""
+		#Entry action for state 'CheckTime'.
+		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		
+	def __exit_action_main_region_door_closed_r1_magnetron_on(self):
+		"""Exit action for state 'MagnetronOn'..
+		"""
+		#Exit action for state 'MagnetronOn'.
+		self.turn_magnetron_off_observable.next()
+		
+	def __exit_action_main_region_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Exit action for state 'CheckTime'..
+		"""
+		#Exit action for state 'CheckTime'.
+		self.timer_service.unset_timer(self, 0)
+		
+	def __enter_sequence_main_region_door_closed_default(self):
+		"""'default' enter sequence for state doorClosed.
+		"""
+		#'default' enter sequence for state doorClosed
+		self.__enter_sequence_main_region_door_closed_r1_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_on_default(self):
+		"""'default' enter sequence for state MagnetronOn.
+		"""
+		#'default' enter sequence for state MagnetronOn
+		self.__entry_action_main_region_door_closed_r1_magnetron_on()
+		self.__enter_sequence_main_region_door_closed_r1_magnetron_on_r1_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time_default(self):
+		"""'default' enter sequence for state CheckTime.
+		"""
+		#'default' enter sequence for state CheckTime
+		self.__entry_action_main_region_door_closed_r1_magnetron_on_r1_check_time()
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_on_r1check_time
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_off_default(self):
+		"""'default' enter sequence for state MagnetronOff.
+		"""
+		#'default' enter sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_door_closed_r1magnetron_off
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_door_open
+		self.__state_conf_vector_changed = True
+		
+	def __enter_sequence_main_region_default(self):
+		"""'default' enter sequence for region main region.
+		"""
+		#'default' enter sequence for region main region
+		self.__react_main_region__entry_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_door_closed_r1__entry_default()
+		
+	def __enter_sequence_main_region_door_closed_r1_magnetron_on_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_door_closed_r1_magnetron_on_r1__entry_default()
+		
+	def __exit_sequence_main_region_door_closed(self):
+		"""Default exit sequence for state doorClosed.
+		"""
+		#Default exit sequence for state doorClosed
+		self.__exit_sequence_main_region_door_closed_r1()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_on(self):
+		"""Default exit sequence for state MagnetronOn.
+		"""
+		#Default exit sequence for state MagnetronOn
+		self.__exit_sequence_main_region_door_closed_r1_magnetron_on_r1()
+		self.__exit_action_main_region_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Default exit sequence for state CheckTime.
+		"""
+		#Default exit sequence for state CheckTime
+		self.__state_vector[0] = self.State.null_state
+		self.__exit_action_main_region_door_closed_r1_magnetron_on_r1_check_time()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_off(self):
+		"""Default exit sequence for state MagnetronOff.
+		"""
+		#Default exit sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#Default exit sequence for state DoorOpen
+		self.__state_vector[0] = self.State.null_state
+		
+	def __exit_sequence_main_region(self):
+		"""Default exit sequence for region main region.
+		"""
+		#Default exit sequence for region main region
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		elif state == self.State.main_region_door_open:
+			self.__exit_sequence_main_region_door_open()
+		
+	def __exit_sequence_main_region_door_closed_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+		
+	def __exit_sequence_main_region_door_closed_r1_magnetron_on_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time()
+		
+	def __react_main_region_door_closed_r1_magnetron_on_r1__choice_0(self):
+		"""The reactions of state null..
+		"""
+		#The reactions of state null.
+		if self.__remaining_time == 0:
+			self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+			self.ring_bell_observable.next()
+			self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+		else:
+			self.__enter_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time_default()
+		
+	def __react_main_region_door_closed_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+		
+	def __react_main_region_door_closed_r1_magnetron_on_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time_default()
+		
+	def __react_main_region__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_door_closed_default()
+		
+	def __react(self, transitioned_before):
+		"""Implementation of __react function.
+		"""
+		#State machine reactions.
+		return transitioned_before
+	
+	
+	def __main_region_door_closed_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_react function.
+		"""
+		#The reactions of state doorClosed.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_opened:
+				self.__exit_sequence_main_region_door_closed()
+				self.__enter_sequence_main_region_door_open_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_on_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_on_react function.
+		"""
+		#The reactions of state MagnetronOn.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.stop_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_on()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_on_r1_check_time_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_on_r1_check_time_react function.
+		"""
+		#The reactions of state CheckTime.
+		transitioned_after = self.__main_region_door_closed_r1_magnetron_on_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.__time_events[0]:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_on_r1_check_time()
+				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_door_closed_r1_magnetron_on_r1__choice_0()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_closed_r1_magnetron_off_react(self, transitioned_before):
+		"""Implementation of __main_region_door_closed_r1_magnetron_off_react function.
+		"""
+		#The reactions of state MagnetronOff.
+		transitioned_after = self.__main_region_door_closed_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.start_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+			elif self.increase_time_pressed:
+				self.__exit_sequence_main_region_door_closed_r1_magnetron_off()
+				self.__remaining_time = self.__remaining_time + 1
+				self.set_displayed_time_observable.next(self.__remaining_time)
+				self.__enter_sequence_main_region_door_closed_r1_magnetron_off_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_door_open()
+				self.__enter_sequence_main_region_door_closed_default()
+				transitioned_after = 0
+		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
+	
+	
+	def __micro_step(self):
+		"""Implementation of __micro_step function.
+		"""
+		state = self.__state_vector[0]
+		if state == self.State.main_region_door_closed_r1magnetron_on_r1check_time:
+			self.__main_region_door_closed_r1_magnetron_on_r1_check_time_react(-1)
+		elif state == self.State.main_region_door_closed_r1magnetron_off:
+			self.__main_region_door_closed_r1_magnetron_off_react(-1)
+		elif state == self.State.main_region_door_open:
+			self.__main_region_door_open_react(-1)
+	
+	
+	def run_cycle(self):
+		"""Implementation of run_cycle function.
+		"""
+		#Performs a 'run to completion' step.
+		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()
+			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.
+		"""
+		#Activates the state machine.
+		if self.timer_service is None:
+			raise ValueError('Timer service must be set.')
+		
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
+		self.__enter_sequence_main_region_default()
+		self.__is_executing = False
+	
+	
+	def exit(self):
+		"""Implementation of exit function.
+		"""
+		#Deactivates the state machine.
+		if self.__is_executing:
+			return
+		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
+		self.__exit_sequence_main_region()
+		self.__is_executing = False
+	
+	
+	def trigger_without_event(self):
+		"""Implementation of triggerWithoutEvent function.
+		"""
+		self.run_cycle()
+	

File diff ditekan karena terlalu besar
+ 0 - 349
microwave/YAKINDU_WORKSPACE/40_Door/Statechart.ysc


+ 23 - 0
microwave/YAKINDU_WORKSPACE/40_Orthogonality/.project

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>40_Orthogonality</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.yakindu.sct.builder.SCTBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>com.yakindu.sct.builder.SCTNature</nature>
+	</natures>
+</projectDescription>

+ 3 - 0
microwave/YAKINDU_WORKSPACE/40_Orthogonality/.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+encoding/Statechart.ysc=UTF-8

+ 15 - 0
microwave/YAKINDU_WORKSPACE/40_Orthogonality/Statechart.sgen

@@ -0,0 +1,15 @@
+GeneratorModel for create::python {
+
+	const PROJECT : string = "40_Orthogonality"
+
+	const FOLDER : string = "srcgen"
+
+	statechart Statechart {
+
+		feature Outlet {
+			targetProject = PROJECT
+			targetFolder = FOLDER
+			libraryTargetFolder = "src"
+		}
+	}
+}

File diff ditekan karena terlalu besar
+ 452 - 0
microwave/YAKINDU_WORKSPACE/40_Orthogonality/Statechart.ysc


+ 5 - 0
microwave/YAKINDU_WORKSPACE/40_Orthogonality/src/yakindu/__init__.py

@@ -0,0 +1,5 @@
+"""
+
+Empty file that initializes the package it is contained in.
+
+"""

+ 48 - 0
microwave/YAKINDU_WORKSPACE/40_Orthogonality/src/yakindu/rx.py

@@ -0,0 +1,48 @@
+"""Implementation for Observer and Observables used for out events.
+Generated by itemis CREATE code generator.
+"""
+
+
+class Observer():
+	"""Observer implementation.
+	"""
+
+	def next(self, value=None):
+		"""Abstract next method, which must be implemented."""
+		raise NotImplementedError('user must define next() to use this base class')
+
+
+class Observable():
+	"""Observable implementation.
+	"""
+
+	def __init__(self):
+		self.observers = []
+
+	def next(self, value=None):
+		"""Calls next function from every observer.
+		"""
+		for observer in self.observers:
+			if observer is not None:
+				if value is None:
+					observer.next()
+				else:
+					observer.next(value)
+
+	def subscribe(self, observer):
+		"""Subscribe on specified observer.
+		"""
+		if observer is not None:
+			self.observers.append(observer)
+			return True
+		return False
+
+	def unsubscribe(self, observer):
+		"""Unsubscribe from specified observer.
+		"""
+		if observer is None:
+			return False
+		if observer in self.observers:
+			self.observers.remove(observer)
+			return True
+		return False

+ 144 - 80
microwave/YAKINDU_WORKSPACE/42_DoorHistory/srcgen/statechart.py

@@ -16,13 +16,14 @@ class Statechart:
 		"""
 		(
 			main_region_orthogonal_state,
-			main_region_orthogonal_state_r1door_open,
 			main_region_orthogonal_state_r1door_closed,
 			main_region_orthogonal_state_r1door_closed_r1magnetron_on,
+			main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time,
 			main_region_orthogonal_state_r1door_closed_r1magnetron_off,
+			main_region_orthogonal_state_r1door_open,
 			main_region_orthogonal_state_r2time_control,
 			null_state
-		) = range(7)
+		) = range(8)
 	
 	
 	def __init__(self):
@@ -58,12 +59,8 @@ class Statechart:
 		self.timer_service = None
 		self.__time_events = [None] * 1
 		
-		# history vector:
-		self.__history_vector = [None] * 1
-		for __history_index in range(1):
-			self.__history_vector[__history_index] = self.State.null_state
-		
 		# initializations:
+		#Default init sequence for statechart Statechart
 		self.__remaining_time = 0
 		self.__is_executing = False
 		self.__state_conf_vector_position = None
@@ -86,15 +83,18 @@ class Statechart:
 		if s == self.__State.main_region_orthogonal_state:
 			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state)\
 				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r2time_control)
-		if s == self.__State.main_region_orthogonal_state_r1door_open:
-			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_open
 		if s == self.__State.main_region_orthogonal_state_r1door_closed:
 			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state_r1door_closed)\
 				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off)
 		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on
+			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on)\
+				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time)
+		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time
 		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off
+		if s == self.__State.main_region_orthogonal_state_r1door_open:
+			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_open
 		if s == self.__State.main_region_orthogonal_state_r2time_control:
 			return self.__state_vector[1] == self.__State.main_region_orthogonal_state_r2time_control
 		return False
@@ -178,53 +178,76 @@ class Statechart:
 	def __entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
-		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		#Entry action for state 'MagnetronOn'.
 		self.turn_magnetron_on_observable.next()
 		
+	def __entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Entry action for state 'CheckTime'..
+		"""
+		#Entry action for state 'CheckTime'.
+		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		
 	def __exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
-		self.timer_service.unset_timer(self, 0)
+		#Exit action for state 'MagnetronOn'.
 		self.turn_magnetron_off_observable.next()
 		
+	def __exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Exit action for state 'CheckTime'..
+		"""
+		#Exit action for state 'CheckTime'.
+		self.timer_service.unset_timer(self, 0)
+		
 	def __enter_sequence_main_region_orthogonal_state_default(self):
 		"""'default' enter sequence for state OrthogonalState.
 		"""
+		#'default' enter sequence for state OrthogonalState
 		self.__enter_sequence_main_region_orthogonal_state_r1_default()
 		self.__enter_sequence_main_region_orthogonal_state_r2_default()
 		
-	def __enter_sequence_main_region_orthogonal_state_r1_door_open_default(self):
-		"""'default' enter sequence for state DoorOpen.
-		"""
-		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_open
-		self.__state_conf_vector_position = 0
-		self.__state_conf_vector_changed = True
-		
 	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_default(self):
-		"""'default' enter sequence for state DoorClosed.
+		"""'default' enter sequence for state doorClosed.
 		"""
+		#'default' enter sequence for state doorClosed
 		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
+		#'default' enter sequence for state MagnetronOn
 		self.__entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
-		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default()
+		
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default(self):
+		"""'default' enter sequence for state CheckTime.
+		"""
+		#'default' enter sequence for state CheckTime
+		self.__entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time
 		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_orthogonal_state_r1_door_closed_r1_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
+		#'default' enter sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.main_region_orthogonal_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_orthogonal_state_r1_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_open
+		self.__state_conf_vector_position = 0
+		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_orthogonal_state_r2_time_control_default(self):
 		"""'default' enter sequence for state TimeControl.
 		"""
+		#'default' enter sequence for state TimeControl
 		self.__state_vector[1] = self.State.main_region_orthogonal_state_r2time_control
 		self.__state_conf_vector_position = 1
 		self.__state_conf_vector_changed = True
@@ -232,72 +255,87 @@ class Statechart:
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_default(self):
 		"""'default' enter sequence for region r1.
 		"""
+		#'default' enter sequence for region r1
 		self.__react_main_region_orthogonal_state_r1__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_default(self):
 		"""'default' enter sequence for region r1.
 		"""
+		#'default' enter sequence for region r1
 		self.__react_main_region_orthogonal_state_r1_door_closed_r1__entry_default()
 		
-	def __shallow_enter_sequence_main_region_orthogonal_state_r1_door_closed_r1(self):
-		"""shallow enterSequence with history in child r1.
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default(self):
+		"""'default' enter sequence for region r1.
 		"""
-		state = self.__history_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
-		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
-			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
+		#'default' enter sequence for region r1
+		self.__react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r2_default(self):
 		"""'default' enter sequence for region r2.
 		"""
+		#'default' enter sequence for region r2
 		self.__react_main_region_orthogonal_state_r2__entry_default()
 		
-	def __exit_sequence_main_region_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_orthogonal_state_r1_door_closed(self):
-		"""Default exit sequence for state DoorClosed.
+		"""Default exit sequence for state doorClosed.
 		"""
+		#Default exit sequence for state doorClosed
 		self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1()
 		
 	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
+		self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1()
+		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Default exit sequence for state CheckTime.
+		"""
+		#Default exit sequence for state CheckTime
 		self.__state_vector[0] = self.State.null_state
 		self.__state_conf_vector_position = 0
-		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
 		
 	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#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_orthogonal_state_r1_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#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_orthogonal_state_r2_time_control(self):
 		"""Default exit sequence for state TimeControl.
 		"""
+		#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(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1door_open:
-			self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
-		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
+		elif state == self.State.main_region_orthogonal_state_r1door_open:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
 		state = self.__state_vector[1]
 		if state == self.State.main_region_orthogonal_state_r2time_control:
 			self.__exit_sequence_main_region_orthogonal_state_r2_time_control()
@@ -305,77 +343,81 @@ class Statechart:
 	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1(self):
 		"""Default exit sequence for region r1.
 		"""
+		#Default exit sequence for region r1
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
 		
-	def __react_main_region_orthogonal_state_r1_door_closed_r1__choice_0(self):
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__choice_0(self):
 		"""The reactions of state null..
 		"""
+		#The reactions of state null.
 		if self.__remaining_time == 0:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 			self.ring_bell_observable.next()
 			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 		else:
-			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default()
 		
 	def __react_main_region_orthogonal_state_r1_door_closed_r1__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 		
-	def __react_main_region_orthogonal_state_r1_door_closed_r1_h(self):
-		"""Default react sequence for shallow history entry h.
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default(self):
+		"""Default react sequence for initial entry .
 		"""
-		#Enter the region with shallow history
-		if self.__history_vector[0] is not self.State.null_state:
-			self.__shallow_enter_sequence_main_region_orthogonal_state_r1_door_closed_r1()
-		else:
-			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default()
 		
 	def __react_main_region_orthogonal_state_r1__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_default()
 		
 	def __react_main_region_orthogonal_state_r2__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r2_time_control_default()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_orthogonal_state_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_react function.
 		"""
+		#The reactions of state OrthogonalState.
 		return self.__react(transitioned_before)
 	
 	
-	def __main_region_orthogonal_state_r1_door_open_react(self, transitioned_before):
-		"""Implementation of __main_region_orthogonal_state_r1_door_open_react function.
-		"""
-		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
-		if transitioned_after < 0:
-			if self.door_closed:
-				self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
-				self.__react_main_region_orthogonal_state_r1_door_closed_r1_h()
-				transitioned_after = 0
-		return transitioned_after
-	
-	
 	def __main_region_orthogonal_state_r1_door_closed_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_door_closed_react function.
 		"""
+		#The reactions of state doorClosed.
 		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.door_opened:
@@ -388,18 +430,28 @@ class Statechart:
 	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__main_region_orthogonal_state_r1_door_closed_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
 				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 				transitioned_after = 0
-			elif self.__time_events[0]:
-				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		return transitioned_after
+	
+	
+	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react function.
+		"""
+		#The reactions of state CheckTime.
+		transitioned_after = self.__main_region_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_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
 				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_orthogonal_state_r1_door_closed_r1__choice_0()
+				self.__react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__choice_0()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -407,19 +459,25 @@ class Statechart:
 	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react function.
 		"""
+		#The reactions of state MagnetronOff.
 		transitioned_after = self.__main_region_orthogonal_state_r1_door_closed_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.start_pressed:
 				self.__exit_sequence_main_region_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_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
 				transitioned_after = 0
-			elif self.stop_pressed:
-				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
-				self.__remaining_time = 0
-				self.set_displayed_time_observable.next(0)
-				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
+		return transitioned_after
+	
+	
+	def __main_region_orthogonal_state_r1_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
+				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -427,11 +485,12 @@ class Statechart:
 	def __main_region_orthogonal_state_r2_time_control_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r2_time_control_react function.
 		"""
+		#The reactions of state TimeControl.
 		transitioned_after = transitioned_before
 		if transitioned_after < 1:
 			if self.increase_time_pressed:
 				self.__exit_sequence_main_region_orthogonal_state_r2_time_control()
-				self.__remaining_time = self.__remaining_time + 10
+				self.__remaining_time = self.__remaining_time + 1
 				self.set_displayed_time_observable.next(self.__remaining_time)
 				self.__enter_sequence_main_region_orthogonal_state_r2_time_control_default()
 				transitioned_after = 1
@@ -455,12 +514,12 @@ class Statechart:
 		transitioned = -1
 		self.__state_conf_vector_position = 0
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1door_open:
-			transitioned = self.__main_region_orthogonal_state_r1_door_open_react(transitioned)
-		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react(transitioned)
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react(transitioned)
 		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react(transitioned)
+		elif state == self.State.main_region_orthogonal_state_r1door_open:
+			transitioned = self.__main_region_orthogonal_state_r1_door_open_react(transitioned)
 		if self.__state_conf_vector_position < 1:
 			state = self.__state_vector[1]
 			if state == self.State.main_region_orthogonal_state_r2time_control:
@@ -470,6 +529,7 @@ class Statechart:
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
+		#Performs a 'run to completion' step.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
@@ -494,12 +554,14 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
+		#Activates the state machine.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -507,9 +569,11 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
 		self.__is_executing = False
 	

File diff ditekan karena terlalu besar
+ 0 - 396
microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/Statechart.ysc


File diff ditekan karena terlalu besar
+ 0 - 409
microwave/YAKINDU_WORKSPACE/42_DoorHistory/Statechart.ysc


File diff ditekan karena terlalu besar
+ 0 - 617
microwave/YAKINDU_WORKSPACE/50_ChildLock/Statechart.ysc


+ 0 - 718
microwave/YAKINDU_WORKSPACE/50_ChildLock/srcgen/statechart.py

@@ -1,718 +0,0 @@
-"""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_off,
-			main_region_child_lockable_r1orthogonal_state_r2time_control,
-			main_region_child_lockable_r2detect_clicks,
-			null_state
-		) = range(10)
-	
-	
-	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
-		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 __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.timer_service.set_timer(self, 0, (1 * 1000), False)
-		self.turn_magnetron_on_observable.next()
-		
-	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.timer_service.unset_timer(self, 0)
-		self.turn_magnetron_off_observable.next()
-		
-	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.__state_vector[0] = self.State.main_region_child_lockable_r1orthogonal_state_r1door_closed_r1magnetron_on
-		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_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:
-			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_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.__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()
-		
-	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:
-			self.__exit_sequence_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:
-			self.__exit_sequence_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:
-			self.__exit_sequence_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_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.ring_bell_observable.next()
-			self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
-		else:
-			self.__enter_sequence_main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
-		
-	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__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(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
-			elif 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:
-			transitioned = self.__main_region_child_lockable_r1_orthogonal_state_r1_door_closed_r1_magnetron_on_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()
-	

+ 1 - 1
microwave/YAKINDU_WORKSPACE/20_TimerFlat/.project

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>20_TimerFlat</name>
+	<name>50_History</name>
 	<comment></comment>
 	<projects>
 	</projects>

+ 3 - 0
microwave/YAKINDU_WORKSPACE/50_History/.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+encoding/Statechart.ysc=UTF-8

+ 1 - 1
microwave/YAKINDU_WORKSPACE/20_TimerFlat/Statechart.sgen

@@ -1,6 +1,6 @@
 GeneratorModel for create::python {
 
-	const PROJECT : string = "20_TimerFlat"
+	const PROJECT : string = "50_History"
 
 	const FOLDER : string = "srcgen"
 

File diff ditekan karena terlalu besar
+ 465 - 0
microwave/YAKINDU_WORKSPACE/50_History/Statechart.ysc


+ 5 - 0
microwave/YAKINDU_WORKSPACE/50_History/src/yakindu/__init__.py

@@ -0,0 +1,5 @@
+"""
+
+Empty file that initializes the package it is contained in.
+
+"""

+ 48 - 0
microwave/YAKINDU_WORKSPACE/50_History/src/yakindu/rx.py

@@ -0,0 +1,48 @@
+"""Implementation for Observer and Observables used for out events.
+Generated by itemis CREATE code generator.
+"""
+
+
+class Observer():
+	"""Observer implementation.
+	"""
+
+	def next(self, value=None):
+		"""Abstract next method, which must be implemented."""
+		raise NotImplementedError('user must define next() to use this base class')
+
+
+class Observable():
+	"""Observable implementation.
+	"""
+
+	def __init__(self):
+		self.observers = []
+
+	def next(self, value=None):
+		"""Calls next function from every observer.
+		"""
+		for observer in self.observers:
+			if observer is not None:
+				if value is None:
+					observer.next()
+				else:
+					observer.next(value)
+
+	def subscribe(self, observer):
+		"""Subscribe on specified observer.
+		"""
+		if observer is not None:
+			self.observers.append(observer)
+			return True
+		return False
+
+	def unsubscribe(self, observer):
+		"""Unsubscribe from specified observer.
+		"""
+		if observer is None:
+			return False
+		if observer in self.observers:
+			self.observers.remove(observer)
+			return True
+		return False

+ 183 - 55
microwave/YAKINDU_WORKSPACE/41_DoorHierarchy/srcgen/statechart.py

@@ -16,13 +16,14 @@ class Statechart:
 		"""
 		(
 			main_region_orthogonal_state,
-			main_region_orthogonal_state_r1door_open,
 			main_region_orthogonal_state_r1door_closed,
 			main_region_orthogonal_state_r1door_closed_r1magnetron_on,
+			main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time,
 			main_region_orthogonal_state_r1door_closed_r1magnetron_off,
+			main_region_orthogonal_state_r1door_open,
 			main_region_orthogonal_state_r2time_control,
 			null_state
-		) = range(7)
+		) = range(8)
 	
 	
 	def __init__(self):
@@ -58,7 +59,13 @@ class Statechart:
 		self.timer_service = None
 		self.__time_events = [None] * 1
 		
+		# history vector:
+		self.__history_vector = [None] * 1
+		for __history_index in range(1):
+			self.__history_vector[__history_index] = self.State.null_state
+		
 		# initializations:
+		#Default init sequence for statechart Statechart
 		self.__remaining_time = 0
 		self.__is_executing = False
 		self.__state_conf_vector_position = None
@@ -81,15 +88,18 @@ class Statechart:
 		if s == self.__State.main_region_orthogonal_state:
 			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state)\
 				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r2time_control)
-		if s == self.__State.main_region_orthogonal_state_r1door_open:
-			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_open
 		if s == self.__State.main_region_orthogonal_state_r1door_closed:
 			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state_r1door_closed)\
 				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off)
 		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on
+			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on)\
+				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time)
+		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time
 		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off
+		if s == self.__State.main_region_orthogonal_state_r1door_open:
+			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_open
 		if s == self.__State.main_region_orthogonal_state_r2time_control:
 			return self.__state_vector[1] == self.__State.main_region_orthogonal_state_r2time_control
 		return False
@@ -173,51 +183,78 @@ class Statechart:
 	def __entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
-		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		#Entry action for state 'MagnetronOn'.
 		self.turn_magnetron_on_observable.next()
 		
+	def __entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Entry action for state 'CheckTime'..
+		"""
+		#Entry action for state 'CheckTime'.
+		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		
 	def __exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
-		self.timer_service.unset_timer(self, 0)
+		#Exit action for state 'MagnetronOn'.
 		self.turn_magnetron_off_observable.next()
 		
+	def __exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Exit action for state 'CheckTime'..
+		"""
+		#Exit action for state 'CheckTime'.
+		self.timer_service.unset_timer(self, 0)
+		
 	def __enter_sequence_main_region_orthogonal_state_default(self):
 		"""'default' enter sequence for state OrthogonalState.
 		"""
+		#'default' enter sequence for state OrthogonalState
 		self.__enter_sequence_main_region_orthogonal_state_r1_default()
 		self.__enter_sequence_main_region_orthogonal_state_r2_default()
 		
-	def __enter_sequence_main_region_orthogonal_state_r1_door_open_default(self):
-		"""'default' enter sequence for state DoorOpen.
-		"""
-		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_open
-		self.__state_conf_vector_position = 0
-		self.__state_conf_vector_changed = True
-		
 	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_default(self):
-		"""'default' enter sequence for state DoorClosed.
+		"""'default' enter sequence for state doorClosed.
 		"""
+		#'default' enter sequence for state doorClosed
 		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
+		#'default' enter sequence for state MagnetronOn
 		self.__entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
-		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default()
+		self.__history_vector[0] = self.__state_vector[0]
+		
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default(self):
+		"""'default' enter sequence for state CheckTime.
+		"""
+		#'default' enter sequence for state CheckTime
+		self.__entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time
 		self.__state_conf_vector_position = 0
 		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
+		#'default' enter sequence for state MagnetronOff
 		self.__state_vector[0] = self.State.main_region_orthogonal_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_orthogonal_state_r1_door_open_default(self):
+		"""'default' enter sequence for state DoorOpen.
+		"""
+		#'default' enter sequence for state DoorOpen
+		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_open
+		self.__state_conf_vector_position = 0
+		self.__state_conf_vector_changed = True
 		
 	def __enter_sequence_main_region_orthogonal_state_r2_time_control_default(self):
 		"""'default' enter sequence for state TimeControl.
 		"""
+		#'default' enter sequence for state TimeControl
 		self.__state_vector[1] = self.State.main_region_orthogonal_state_r2time_control
 		self.__state_conf_vector_position = 1
 		self.__state_conf_vector_changed = True
@@ -225,63 +262,97 @@ class Statechart:
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_default(self):
 		"""'default' enter sequence for region r1.
 		"""
+		#'default' enter sequence for region r1
 		self.__react_main_region_orthogonal_state_r1__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_default(self):
 		"""'default' enter sequence for region r1.
 		"""
+		#'default' enter sequence for region r1
 		self.__react_main_region_orthogonal_state_r1_door_closed_r1__entry_default()
 		
+	def __shallow_enter_sequence_main_region_orthogonal_state_r1_door_closed_r1(self):
+		"""shallow enterSequence with history in child r1.
+		"""
+		#shallow enterSequence with history in child r1
+		state = self.__history_vector[0]
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
+		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
+		
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default()
+		
 	def __enter_sequence_main_region_orthogonal_state_r2_default(self):
 		"""'default' enter sequence for region r2.
 		"""
+		#'default' enter sequence for region r2
 		self.__react_main_region_orthogonal_state_r2__entry_default()
 		
-	def __exit_sequence_main_region_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_orthogonal_state_r1_door_closed(self):
-		"""Default exit sequence for state DoorClosed.
+		"""Default exit sequence for state doorClosed.
 		"""
+		#Default exit sequence for state doorClosed
 		self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1()
 		
 	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
+		self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1()
+		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Default exit sequence for state CheckTime.
+		"""
+		#Default exit sequence for state CheckTime
 		self.__state_vector[0] = self.State.null_state
 		self.__state_conf_vector_position = 0
-		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
 		
 	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#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_orthogonal_state_r1_door_open(self):
+		"""Default exit sequence for state DoorOpen.
+		"""
+		#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_orthogonal_state_r2_time_control(self):
 		"""Default exit sequence for state TimeControl.
 		"""
+		#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(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1door_open:
-			self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
-		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
+		elif state == self.State.main_region_orthogonal_state_r1door_open:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
 		state = self.__state_vector[1]
 		if state == self.State.main_region_orthogonal_state_r2time_control:
 			self.__exit_sequence_main_region_orthogonal_state_r2_time_control()
@@ -289,68 +360,91 @@ class Statechart:
 	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1(self):
 		"""Default exit sequence for region r1.
 		"""
+		#Default exit sequence for region r1
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
 		
-	def __react_main_region_orthogonal_state_r1_door_closed_r1__choice_0(self):
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__choice_0(self):
 		"""The reactions of state null..
 		"""
+		#The reactions of state null.
 		if self.__remaining_time == 0:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 			self.ring_bell_observable.next()
 			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 		else:
-			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default()
 		
 	def __react_main_region_orthogonal_state_r1_door_closed_r1__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default()
+		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_h(self):
+		"""Default react sequence for shallow history entry h.
+		"""
+		#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_orthogonal_state_r1_door_closed_r1()
+		else:
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
+		
 	def __react_main_region_orthogonal_state_r1__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_default()
 		
 	def __react_main_region_orthogonal_state_r2__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r2_time_control_default()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_orthogonal_state_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_react function.
 		"""
+		#The reactions of state OrthogonalState.
 		return self.__react(transitioned_before)
 	
 	
-	def __main_region_orthogonal_state_r1_door_open_react(self, transitioned_before):
-		"""Implementation of __main_region_orthogonal_state_r1_door_open_react function.
-		"""
-		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
-		if transitioned_after < 0:
-			if self.door_closed:
-				self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
-				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_default()
-				transitioned_after = 0
-		return transitioned_after
-	
-	
 	def __main_region_orthogonal_state_r1_door_closed_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_door_closed_react function.
 		"""
+		#The reactions of state doorClosed.
 		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.door_opened:
@@ -363,18 +457,28 @@ class Statechart:
 	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react function.
 		"""
+		#The reactions of state MagnetronOn.
 		transitioned_after = self.__main_region_orthogonal_state_r1_door_closed_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
 				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 				transitioned_after = 0
-			elif self.__time_events[0]:
-				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		return transitioned_after
+	
+	
+	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react function.
+		"""
+		#The reactions of state CheckTime.
+		transitioned_after = self.__main_region_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_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
 				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_orthogonal_state_r1_door_closed_r1__choice_0()
+				self.__react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__choice_0()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -382,12 +486,17 @@ class Statechart:
 	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react function.
 		"""
+		#The reactions of state MagnetronOff.
 		transitioned_after = self.__main_region_orthogonal_state_r1_door_closed_react(transitioned_before)
 		if transitioned_after < 0:
-			if self.start_pressed:
+			if (self.start_pressed) and (self.__remaining_time == 0):
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
+				self.__remaining_time = 10
+				self.set_displayed_time_observable.next(10)
+				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+			elif (self.start_pressed) and (self.__remaining_time > 0):
 				self.__exit_sequence_main_region_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_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
 				transitioned_after = 0
 			elif self.stop_pressed:
@@ -399,14 +508,28 @@ class Statechart:
 		return transitioned_after
 	
 	
+	def __main_region_orthogonal_state_r1_door_open_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_open_react function.
+		"""
+		#The reactions of state DoorOpen.
+		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_closed:
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
+				self.__react_main_region_orthogonal_state_r1_door_closed_r1_h()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
 	def __main_region_orthogonal_state_r2_time_control_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r2_time_control_react function.
 		"""
+		#The reactions of state TimeControl.
 		transitioned_after = transitioned_before
 		if transitioned_after < 1:
 			if self.increase_time_pressed:
 				self.__exit_sequence_main_region_orthogonal_state_r2_time_control()
-				self.__remaining_time = self.__remaining_time + 10
+				self.__remaining_time = self.__remaining_time + 1
 				self.set_displayed_time_observable.next(self.__remaining_time)
 				self.__enter_sequence_main_region_orthogonal_state_r2_time_control_default()
 				transitioned_after = 1
@@ -430,12 +553,12 @@ class Statechart:
 		transitioned = -1
 		self.__state_conf_vector_position = 0
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1door_open:
-			transitioned = self.__main_region_orthogonal_state_r1_door_open_react(transitioned)
-		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
-			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react(transitioned)
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react(transitioned)
 		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
 			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react(transitioned)
+		elif state == self.State.main_region_orthogonal_state_r1door_open:
+			transitioned = self.__main_region_orthogonal_state_r1_door_open_react(transitioned)
 		if self.__state_conf_vector_position < 1:
 			state = self.__state_vector[1]
 			if state == self.State.main_region_orthogonal_state_r2time_control:
@@ -445,6 +568,7 @@ class Statechart:
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
+		#Performs a 'run to completion' step.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
@@ -469,12 +593,14 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
+		#Activates the state machine.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -482,9 +608,11 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
 		self.__is_executing = False
 	

+ 23 - 0
microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/.project

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>60_ExtraFeatures</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.yakindu.sct.builder.SCTBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>com.yakindu.sct.builder.SCTNature</nature>
+	</natures>
+</projectDescription>

+ 3 - 0
microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+encoding/Statechart.ysc=UTF-8

+ 15 - 0
microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/Statechart.sgen

@@ -0,0 +1,15 @@
+GeneratorModel for create::python {
+
+	const PROJECT : string = "60_ExtraFeatures"
+
+	const FOLDER : string = "srcgen"
+
+	statechart Statechart {
+
+		feature Outlet {
+			targetProject = PROJECT
+			targetFolder = FOLDER
+			libraryTargetFolder = "src"
+		}
+	}
+}

File diff ditekan karena terlalu besar
+ 489 - 0
microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/Statechart.ysc


+ 5 - 0
microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/src/yakindu/__init__.py

@@ -0,0 +1,5 @@
+"""
+
+Empty file that initializes the package it is contained in.
+
+"""

+ 48 - 0
microwave/YAKINDU_WORKSPACE/60_ExtraFeatures/src/yakindu/rx.py

@@ -0,0 +1,48 @@
+"""Implementation for Observer and Observables used for out events.
+Generated by itemis CREATE code generator.
+"""
+
+
+class Observer():
+	"""Observer implementation.
+	"""
+
+	def next(self, value=None):
+		"""Abstract next method, which must be implemented."""
+		raise NotImplementedError('user must define next() to use this base class')
+
+
+class Observable():
+	"""Observable implementation.
+	"""
+
+	def __init__(self):
+		self.observers = []
+
+	def next(self, value=None):
+		"""Calls next function from every observer.
+		"""
+		for observer in self.observers:
+			if observer is not None:
+				if value is None:
+					observer.next()
+				else:
+					observer.next(value)
+
+	def subscribe(self, observer):
+		"""Subscribe on specified observer.
+		"""
+		if observer is not None:
+			self.observers.append(observer)
+			return True
+		return False
+
+	def unsubscribe(self, observer):
+		"""Unsubscribe from specified observer.
+		"""
+		if observer is None:
+			return False
+		if observer in self.observers:
+			self.observers.remove(observer)
+			return True
+		return False

+ 223 - 58
microwave/YAKINDU_WORKSPACE/40_Door/srcgen/statechart.py

@@ -16,12 +16,14 @@ class Statechart:
 		"""
 		(
 			main_region_orthogonal_state,
-			main_region_orthogonal_state_r1magnetron_on,
-			main_region_orthogonal_state_r1magnetron_off,
+			main_region_orthogonal_state_r1door_closed,
+			main_region_orthogonal_state_r1door_closed_r1magnetron_on,
+			main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time,
+			main_region_orthogonal_state_r1door_closed_r1magnetron_off,
 			main_region_orthogonal_state_r1door_open,
 			main_region_orthogonal_state_r2time_control,
 			null_state
-		) = range(6)
+		) = range(8)
 	
 	
 	def __init__(self):
@@ -57,7 +59,13 @@ class Statechart:
 		self.timer_service = None
 		self.__time_events = [None] * 1
 		
+		# history vector:
+		self.__history_vector = [None] * 1
+		for __history_index in range(1):
+			self.__history_vector[__history_index] = self.State.null_state
+		
 		# initializations:
+		#Default init sequence for statechart Statechart
 		self.__remaining_time = 0
 		self.__is_executing = False
 		self.__state_conf_vector_position = None
@@ -80,10 +88,16 @@ class Statechart:
 		if s == self.__State.main_region_orthogonal_state:
 			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state)\
 				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r2time_control)
-		if s == self.__State.main_region_orthogonal_state_r1magnetron_on:
-			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1magnetron_on
-		if s == self.__State.main_region_orthogonal_state_r1magnetron_off:
-			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1magnetron_off
+		if s == self.__State.main_region_orthogonal_state_r1door_closed:
+			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state_r1door_closed)\
+				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off)
+		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on:
+			return (self.__state_vector[0] >= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on)\
+				and (self.__state_vector[0] <= self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time)
+		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time
+		if s == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
+			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_closed_r1magnetron_off
 		if s == self.__State.main_region_orthogonal_state_r1door_open:
 			return self.__state_vector[0] == self.__State.main_region_orthogonal_state_r1door_open
 		if s == self.__State.main_region_orthogonal_state_r2time_control:
@@ -166,42 +180,73 @@ class Statechart:
 		"""
 		self.door_closed = True
 	
-	def __entry_action_main_region_orthogonal_state_r1_magnetron_on(self):
+	def __entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Entry action for state 'MagnetronOn'..
 		"""
-		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		#Entry action for state 'MagnetronOn'.
 		self.turn_magnetron_on_observable.next()
 		
-	def __exit_action_main_region_orthogonal_state_r1_magnetron_on(self):
+	def __entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Entry action for state 'CheckTime'..
+		"""
+		#Entry action for state 'CheckTime'.
+		self.timer_service.set_timer(self, 0, (1 * 1000), False)
+		
+	def __exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Exit action for state 'MagnetronOn'..
 		"""
-		self.timer_service.unset_timer(self, 0)
+		#Exit action for state 'MagnetronOn'.
 		self.turn_magnetron_off_observable.next()
 		
+	def __exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Exit action for state 'CheckTime'..
+		"""
+		#Exit action for state 'CheckTime'.
+		self.timer_service.unset_timer(self, 0)
+		
 	def __enter_sequence_main_region_orthogonal_state_default(self):
 		"""'default' enter sequence for state OrthogonalState.
 		"""
+		#'default' enter sequence for state OrthogonalState
 		self.__enter_sequence_main_region_orthogonal_state_r1_default()
 		self.__enter_sequence_main_region_orthogonal_state_r2_default()
 		
-	def __enter_sequence_main_region_orthogonal_state_r1_magnetron_on_default(self):
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_default(self):
+		"""'default' enter sequence for state doorClosed.
+		"""
+		#'default' enter sequence for state doorClosed
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_default()
+		
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default(self):
 		"""'default' enter sequence for state MagnetronOn.
 		"""
-		self.__entry_action_main_region_orthogonal_state_r1_magnetron_on()
-		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1magnetron_on
+		#'default' enter sequence for state MagnetronOn
+		self.__entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default()
+		self.__history_vector[0] = self.__state_vector[0]
+		
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default(self):
+		"""'default' enter sequence for state CheckTime.
+		"""
+		#'default' enter sequence for state CheckTime
+		self.__entry_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time
 		self.__state_conf_vector_position = 0
 		self.__state_conf_vector_changed = True
 		
-	def __enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default(self):
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default(self):
 		"""'default' enter sequence for state MagnetronOff.
 		"""
-		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1magnetron_off
+		#'default' enter sequence for state MagnetronOff
+		self.__state_vector[0] = self.State.main_region_orthogonal_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_orthogonal_state_r1_door_open_default(self):
 		"""'default' enter sequence for state DoorOpen.
 		"""
+		#'default' enter sequence for state DoorOpen
 		self.__state_vector[0] = self.State.main_region_orthogonal_state_r1door_open
 		self.__state_conf_vector_position = 0
 		self.__state_conf_vector_changed = True
@@ -209,6 +254,7 @@ class Statechart:
 	def __enter_sequence_main_region_orthogonal_state_r2_time_control_default(self):
 		"""'default' enter sequence for state TimeControl.
 		"""
+		#'default' enter sequence for state TimeControl
 		self.__state_vector[1] = self.State.main_region_orthogonal_state_r2time_control
 		self.__state_conf_vector_position = 1
 		self.__state_conf_vector_changed = True
@@ -216,136 +262,248 @@ class Statechart:
 	def __enter_sequence_main_region_default(self):
 		"""'default' enter sequence for region main region.
 		"""
+		#'default' enter sequence for region main region
 		self.__react_main_region__entry_default()
 		
 	def __enter_sequence_main_region_orthogonal_state_r1_default(self):
 		"""'default' enter sequence for region r1.
 		"""
+		#'default' enter sequence for region r1
 		self.__react_main_region_orthogonal_state_r1__entry_default()
 		
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_orthogonal_state_r1_door_closed_r1__entry_default()
+		
+	def __shallow_enter_sequence_main_region_orthogonal_state_r1_door_closed_r1(self):
+		"""shallow enterSequence with history in child r1.
+		"""
+		#shallow enterSequence with history in child r1
+		state = self.__history_vector[0]
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
+		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
+		
+	def __enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_default(self):
+		"""'default' enter sequence for region r1.
+		"""
+		#'default' enter sequence for region r1
+		self.__react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default()
+		
 	def __enter_sequence_main_region_orthogonal_state_r2_default(self):
 		"""'default' enter sequence for region r2.
 		"""
+		#'default' enter sequence for region r2
 		self.__react_main_region_orthogonal_state_r2__entry_default()
 		
-	def __exit_sequence_main_region_orthogonal_state_r1_magnetron_on(self):
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed(self):
+		"""Default exit sequence for state doorClosed.
+		"""
+		#Default exit sequence for state doorClosed
+		self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1()
+		
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on(self):
 		"""Default exit sequence for state MagnetronOn.
 		"""
+		#Default exit sequence for state MagnetronOn
+		self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1()
+		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time(self):
+		"""Default exit sequence for state CheckTime.
+		"""
+		#Default exit sequence for state CheckTime
 		self.__state_vector[0] = self.State.null_state
 		self.__state_conf_vector_position = 0
-		self.__exit_action_main_region_orthogonal_state_r1_magnetron_on()
+		self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
 		
-	def __exit_sequence_main_region_orthogonal_state_r1_magnetron_off(self):
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off(self):
 		"""Default exit sequence for state MagnetronOff.
 		"""
+		#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_orthogonal_state_r1_door_open(self):
 		"""Default exit sequence for state DoorOpen.
 		"""
+		#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_orthogonal_state_r2_time_control(self):
 		"""Default exit sequence for state TimeControl.
 		"""
+		#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(self):
 		"""Default exit sequence for region main region.
 		"""
+		#Default exit sequence for region main region
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1magnetron_on:
-			self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_on()
-		elif state == self.State.main_region_orthogonal_state_r1magnetron_off:
-			self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_off()
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
 		elif state == self.State.main_region_orthogonal_state_r1door_open:
 			self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
 		state = self.__state_vector[1]
 		if state == self.State.main_region_orthogonal_state_r2time_control:
 			self.__exit_sequence_main_region_orthogonal_state_r2_time_control()
 		
-	def __react_main_region_orthogonal_state_r1__choice_0(self):
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+			self.__exit_action_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
+		
+	def __exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1(self):
+		"""Default exit sequence for region r1.
+		"""
+		#Default exit sequence for region r1
+		state = self.__state_vector[0]
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
+		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__choice_0(self):
 		"""The reactions of state null..
 		"""
+		#The reactions of state null.
 		if self.__remaining_time == 0:
+			self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
 			self.ring_bell_observable.next()
-			self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default()
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 		else:
-			self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_on_default()
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default()
+		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
+		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__entry_default(self):
+		"""Default react sequence for initial entry .
+		"""
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_default()
+		
+	def __react_main_region_orthogonal_state_r1_door_closed_r1_h(self):
+		"""Default react sequence for shallow history entry h.
+		"""
+		#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_orthogonal_state_r1_door_closed_r1()
+		else:
+			self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 		
 	def __react_main_region_orthogonal_state_r1__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
-		self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default()
+		#Default react sequence for initial entry 
+		self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_default()
 		
 	def __react_main_region_orthogonal_state_r2__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_r2_time_control_default()
 		
 	def __react_main_region__entry_default(self):
 		"""Default react sequence for initial entry .
 		"""
+		#Default react sequence for initial entry 
 		self.__enter_sequence_main_region_orthogonal_state_default()
 		
 	def __react(self, transitioned_before):
 		"""Implementation of __react function.
 		"""
+		#State machine reactions.
 		return transitioned_before
 	
 	
 	def __main_region_orthogonal_state_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_react function.
 		"""
+		#The reactions of state OrthogonalState.
 		return self.__react(transitioned_before)
 	
 	
-	def __main_region_orthogonal_state_r1_magnetron_on_react(self, transitioned_before):
-		"""Implementation of __main_region_orthogonal_state_r1_magnetron_on_react function.
+	def __main_region_orthogonal_state_r1_door_closed_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_closed_react function.
 		"""
+		#The reactions of state doorClosed.
 		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
+		if transitioned_after < 0:
+			if self.door_opened:
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed()
+				self.__enter_sequence_main_region_orthogonal_state_r1_door_open_default()
+				transitioned_after = 0
+		return transitioned_after
+	
+	
+	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_react function.
+		"""
+		#The reactions of state MagnetronOn.
+		transitioned_after = self.__main_region_orthogonal_state_r1_door_closed_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.stop_pressed:
-				self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_on()
-				self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default()
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on()
+				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 				transitioned_after = 0
-			elif self.__time_events[0]:
-				self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_on()
+		return transitioned_after
+	
+	
+	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react function.
+		"""
+		#The reactions of state CheckTime.
+		transitioned_after = self.__main_region_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_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time()
 				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_orthogonal_state_r1__choice_0()
-				transitioned_after = 0
-			elif self.door_opened:
-				self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_on()
-				self.__enter_sequence_main_region_orthogonal_state_r1_door_open_default()
+				self.__react_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1__choice_0()
 				transitioned_after = 0
 		return transitioned_after
 	
 	
-	def __main_region_orthogonal_state_r1_magnetron_off_react(self, transitioned_before):
-		"""Implementation of __main_region_orthogonal_state_r1_magnetron_off_react function.
+	def __main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react(self, transitioned_before):
+		"""Implementation of __main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react function.
 		"""
-		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
+		#The reactions of state MagnetronOff.
+		transitioned_after = self.__main_region_orthogonal_state_r1_door_closed_react(transitioned_before)
 		if transitioned_after < 0:
-			if self.start_pressed:
-				self.__exit_sequence_main_region_orthogonal_state_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_orthogonal_state_r1_magnetron_on_default()
+			if (self.start_pressed) and (self.__remaining_time == 0):
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
+				self.__remaining_time = 10
+				self.set_displayed_time_observable.next(10)
+				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
+				transitioned_after = 0
+			elif (self.start_pressed) and (self.__remaining_time > 0):
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
+				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_default()
 				transitioned_after = 0
 			elif self.stop_pressed:
-				self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_off()
+				self.__exit_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off()
 				self.__remaining_time = 0
 				self.set_displayed_time_observable.next(0)
-				self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default()
-				transitioned_after = 0
-			elif self.door_opened:
-				self.__exit_sequence_main_region_orthogonal_state_r1_magnetron_off()
-				self.__enter_sequence_main_region_orthogonal_state_r1_door_open_default()
+				self.__enter_sequence_main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_default()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -353,11 +511,12 @@ class Statechart:
 	def __main_region_orthogonal_state_r1_door_open_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r1_door_open_react function.
 		"""
+		#The reactions of state DoorOpen.
 		transitioned_after = self.__main_region_orthogonal_state_react(transitioned_before)
 		if transitioned_after < 0:
 			if self.door_closed:
 				self.__exit_sequence_main_region_orthogonal_state_r1_door_open()
-				self.__enter_sequence_main_region_orthogonal_state_r1_magnetron_off_default()
+				self.__react_main_region_orthogonal_state_r1_door_closed_r1_h()
 				transitioned_after = 0
 		return transitioned_after
 	
@@ -365,11 +524,12 @@ class Statechart:
 	def __main_region_orthogonal_state_r2_time_control_react(self, transitioned_before):
 		"""Implementation of __main_region_orthogonal_state_r2_time_control_react function.
 		"""
+		#The reactions of state TimeControl.
 		transitioned_after = transitioned_before
 		if transitioned_after < 1:
 			if self.increase_time_pressed:
 				self.__exit_sequence_main_region_orthogonal_state_r2_time_control()
-				self.__remaining_time = self.__remaining_time + 10
+				self.__remaining_time = self.__remaining_time + 1
 				self.set_displayed_time_observable.next(self.__remaining_time)
 				self.__enter_sequence_main_region_orthogonal_state_r2_time_control_default()
 				transitioned_after = 1
@@ -393,10 +553,10 @@ class Statechart:
 		transitioned = -1
 		self.__state_conf_vector_position = 0
 		state = self.__state_vector[0]
-		if state == self.State.main_region_orthogonal_state_r1magnetron_on:
-			transitioned = self.__main_region_orthogonal_state_r1_magnetron_on_react(transitioned)
-		elif state == self.State.main_region_orthogonal_state_r1magnetron_off:
-			transitioned = self.__main_region_orthogonal_state_r1_magnetron_off_react(transitioned)
+		if state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_on_r1check_time:
+			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_on_r1_check_time_react(transitioned)
+		elif state == self.State.main_region_orthogonal_state_r1door_closed_r1magnetron_off:
+			transitioned = self.__main_region_orthogonal_state_r1_door_closed_r1_magnetron_off_react(transitioned)
 		elif state == self.State.main_region_orthogonal_state_r1door_open:
 			transitioned = self.__main_region_orthogonal_state_r1_door_open_react(transitioned)
 		if self.__state_conf_vector_position < 1:
@@ -408,6 +568,7 @@ class Statechart:
 	def run_cycle(self):
 		"""Implementation of run_cycle function.
 		"""
+		#Performs a 'run to completion' step.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
@@ -432,12 +593,14 @@ class Statechart:
 	def enter(self):
 		"""Implementation of enter function.
 		"""
+		#Activates the state machine.
 		if self.timer_service is None:
 			raise ValueError('Timer service must be set.')
 		
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default enter sequence for statechart Statechart
 		self.__enter_sequence_main_region_default()
 		self.__is_executing = False
 	
@@ -445,9 +608,11 @@ class Statechart:
 	def exit(self):
 		"""Implementation of exit function.
 		"""
+		#Deactivates the state machine.
 		if self.__is_executing:
 			return
 		self.__is_executing = True
+		#Default exit sequence for statechart Statechart
 		self.__exit_sequence_main_region()
 		self.__is_executing = False
 	

+ 23 - 0
microwave/YAKINDU_WORKSPACE/70_ChildLock/.project

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>70_ChildLock</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.yakindu.sct.builder.SCTBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>com.yakindu.sct.builder.SCTNature</nature>
+	</natures>
+</projectDescription>

+ 3 - 0
microwave/YAKINDU_WORKSPACE/70_ChildLock/.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+encoding/Statechart.ysc=UTF-8

+ 15 - 0
microwave/YAKINDU_WORKSPACE/70_ChildLock/Statechart.sgen

@@ -0,0 +1,15 @@
+GeneratorModel for create::python {
+
+	const PROJECT : string = "70_ChildLock"
+
+	const FOLDER : string = "srcgen"
+
+	statechart Statechart {
+
+		feature Outlet {
+			targetProject = PROJECT
+			targetFolder = FOLDER
+			libraryTargetFolder = "src"
+		}
+	}
+}

File diff ditekan karena terlalu besar
+ 696 - 0
microwave/YAKINDU_WORKSPACE/70_ChildLock/Statechart.ysc


+ 5 - 0
microwave/YAKINDU_WORKSPACE/70_ChildLock/src/yakindu/__init__.py

@@ -0,0 +1,5 @@
+"""
+
+Empty file that initializes the package it is contained in.
+
+"""

+ 48 - 0
microwave/YAKINDU_WORKSPACE/70_ChildLock/src/yakindu/rx.py

@@ -0,0 +1,48 @@
+"""Implementation for Observer and Observables used for out events.
+Generated by itemis CREATE code generator.
+"""
+
+
+class Observer():
+	"""Observer implementation.
+	"""
+
+	def next(self, value=None):
+		"""Abstract next method, which must be implemented."""
+		raise NotImplementedError('user must define next() to use this base class')
+
+
+class Observable():
+	"""Observable implementation.
+	"""
+
+	def __init__(self):
+		self.observers = []
+
+	def next(self, value=None):
+		"""Calls next function from every observer.
+		"""
+		for observer in self.observers:
+			if observer is not None:
+				if value is None:
+					observer.next()
+				else:
+					observer.next(value)
+
+	def subscribe(self, observer):
+		"""Subscribe on specified observer.
+		"""
+		if observer is not None:
+			self.observers.append(observer)
+			return True
+		return False
+
+	def unsubscribe(self, observer):
+		"""Unsubscribe from specified observer.
+		"""
+		if observer is None:
+			return False
+		if observer in self.observers:
+			self.observers.remove(observer)
+			return True
+		return False

+ 0 - 0
microwave/YAKINDU_WORKSPACE/70_ChildLock/srcgen/statechart.py


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini