model_01c_flat_nodoor.xml 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <single_instance_cd>
  2. <!-- "Syntactic"-variant with "Choice" state, modeled as non-stable state -->
  3. <delta>1 ms</delta>
  4. <statechart>
  5. <semantics
  6. big_step_maximality="syntactic"
  7. input_event_lifeline="whole"
  8. same_source_priority="explicit"
  9. />
  10. <datamodel>
  11. time = 0;
  12. checkStartTime = func {
  13. if (time == 0) time = 30;
  14. };
  15. </datamodel>
  16. <inport name="in">
  17. <event name="start"/>
  18. <event name="stop"/>
  19. <event name="increase_time"/>
  20. <event name="door_opened"/>
  21. <event name="door_closed"/>
  22. </inport>
  23. <outport name="out">
  24. <event name="micro_on"/>
  25. <event name="micro_off"/>
  26. <event name="set_time"/>
  27. <event name="ping"/>
  28. </outport>
  29. <root initial="NotRunning">
  30. <state id="Running" stable="true">
  31. <onentry> <raise port="out" event="micro_on"/> </onentry>
  32. <onexit> <raise port="out" event="micro_off"/> </onexit>
  33. <transition port="in" event="stop" target="../NotRunning"/>
  34. <transition after="1 s" target="../Choice">
  35. <code> time -= 1; </code>
  36. <raise port="out" event="set_time">
  37. <param expr="time"/>
  38. </raise>
  39. </transition>
  40. <transition port="in" event="increase_time" target=".">
  41. <code> time += 10; </code>
  42. <raise port="out" event="set_time">
  43. <param expr="time"/>
  44. </raise>
  45. </transition>
  46. </state>
  47. <state id="Choice">
  48. <transition cond="time > 0" target="../Running"/>
  49. <transition cond="time == 0" target="../NotRunning"/>
  50. </state>
  51. <state id="NotRunning" stable="true">
  52. <transition port="in" event="start" target="../Running">
  53. <code> checkStartTime(); </code>
  54. <raise port="out" event="set_time">
  55. <param expr="time"/>
  56. </raise>
  57. </transition>
  58. <transition port="in" event="stop" target=".">
  59. <code> time = 0; </code>
  60. <raise port="out" event="set_time">
  61. <param expr="time"/>
  62. </raise>
  63. </transition>
  64. <transition port="in" event="increase_time" target=".">
  65. <code> time += 10; </code>
  66. <raise port="out" event="set_time">
  67. <param expr="time"/>
  68. </raise>
  69. </transition>
  70. </state>
  71. </root>
  72. </statechart>
  73. </single_instance_cd>