model_03_orthogonal.xml 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <single_instance_cd>
  2. <delta>1 ms</delta>
  3. <statechart>
  4. <semantics
  5. big_step_maximality="take_many"
  6. combo_step_maximality="take_one"
  7. input_event_lifeline="first_combo_step"
  8. hierarchical_priority="source_parent"
  9. orthogonal_priority="explicit"
  10. same_source_priority="explicit"
  11. />
  12. <datamodel>
  13. time = 0;
  14. checkStartTime = func {
  15. if (time == 0) time = 30;
  16. };
  17. </datamodel>
  18. <inport name="in">
  19. <event name="start"/>
  20. <event name="stop"/>
  21. <event name="increase_time"/>
  22. <event name="door_opened"/>
  23. <event name="door_closed"/>
  24. </inport>
  25. <outport name="out">
  26. <event name="micro_on"/>
  27. <event name="micro_off"/>
  28. <event name="set_time"/>
  29. <event name="ping"/>
  30. </outport>
  31. <root>
  32. <parallel id="P">
  33. <state id="Main" initial="DoorClosed">
  34. <state id="DoorClosed" initial="NotRunning">
  35. <transition port="in" event="door_opened" target="../DoorOpen"/>
  36. <state id="Running">
  37. <onentry> <raise port="out" event="micro_on"/> </onentry>
  38. <onexit> <raise port="out" event="micro_off"/> </onexit>
  39. <transition port="in" event="stop" target="../NotRunning"/>
  40. <transition after="1 s" target=".">
  41. <code> time -= 1; </code>
  42. <raise port="out" event="set_time">
  43. <param expr="time"/>
  44. </raise>
  45. </transition>
  46. <transition cond="time == 0" target="../NotRunning"/>
  47. </state>
  48. <state id="NotRunning">
  49. <transition port="in" event="start" target="../Running">
  50. <code> checkStartTime(); </code>
  51. <raise port="out" event="set_time">
  52. <param expr="time"/>
  53. </raise>
  54. </transition>
  55. <transition port="in" event="stop" target=".">
  56. <code> time = 0; </code>
  57. <raise port="out" event="set_time">
  58. <param expr="time"/>
  59. </raise>
  60. </transition>
  61. </state>
  62. </state>
  63. <state id="DoorOpen">
  64. <transition port="in" event="door_closed" target="../DoorClosed"/>
  65. </state>
  66. </state>
  67. <state id="TimeIncrease">
  68. <state id="Default">
  69. <transition port="in" event="increase_time" target=".">
  70. <code> time += 10; </code>
  71. <raise port="out" event="set_time">
  72. <param expr="time"/>
  73. </raise>
  74. </transition>
  75. </state>
  76. </state>
  77. </parallel>
  78. </root>
  79. </statechart>
  80. </single_instance_cd>