traffic.mdepth 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. Model Traffic {
  2. Node State {
  3. name : String {id};
  4. red : boolean = false;
  5. green : boolean = false;
  6. yellow : boolean = false;
  7. timed : TimedTransition[0..1];
  8. interrupts : InterruptTransition[*];
  9. }
  10. Node InitialState[1] : State {
  11. }
  12. Node Transition {
  13. target : State;
  14. }
  15. Node TimedTransition : Transition {
  16. after : int;
  17. }
  18. Node InterruptTransition : Transition {
  19. interrupt : String;
  20. }
  21. Node Time[1] {
  22. clock : int = 0;
  23. }
  24. Node Interrupt {
  25. at : int;
  26. event : String;
  27. next : Interrupt[0..1];
  28. }
  29. }
  30. Traffic trafficLight {
  31. // standard routine
  32. InitialState red {
  33. name = "red";
  34. red = true;
  35. timed = toGreen;
  36. interrupts = [policeManOn, terminate];
  37. }
  38. State green {
  39. name = "green";
  40. green = true;
  41. timed = toYellow;
  42. interrupts = [policeManOn, terminate];
  43. }
  44. State yellow {
  45. name = "yellow";
  46. yellow = true;
  47. timed = toRed;
  48. interrupts = [policeManOn, terminate];
  49. }
  50. TimedTransition toGreen {
  51. after = 10000;
  52. target = green;
  53. }
  54. TimedTransition toYellow {
  55. after = 6000;
  56. target = yellow;
  57. }
  58. TimedTransition toRed {
  59. after = 2000;
  60. target = red;
  61. }// blinking routine
  62. State blinkOn {
  63. name = "blink";
  64. yellow = true;
  65. timed = toOff;
  66. interrupts = [lightsOn, terminate];
  67. }
  68. State blinkOff {
  69. name = "unblink";
  70. timed = toOn;
  71. interrupts = [lightsOn, terminate];
  72. }
  73. TimedTransition toOn {
  74. after = 1000;
  75. target = blinkOn;
  76. }
  77. TimedTransition toOff {
  78. after = 1000;
  79. target = blinkOff;
  80. }
  81. // transitions between routines
  82. InterruptTransition policeManOn {
  83. interrupt = "Policeman";
  84. target = blinkOn;
  85. }
  86. InterruptTransition lightsOn {
  87. interrupt = "Light";
  88. target = red;
  89. }
  90. // terminate
  91. State terminated {
  92. name = "STOP";
  93. }
  94. InterruptTransition terminate {
  95. interrupt = "stop";
  96. target = terminated;
  97. }
  98. // environment
  99. Time t {
  100. }
  101. Interrupt i1 {
  102. at = 40000;
  103. event = "Policeman";
  104. next = i2;
  105. }
  106. Interrupt i2 {
  107. at = 60000;
  108. event = "Light";
  109. next = i3;
  110. }
  111. Interrupt i3 {
  112. at = 90000;
  113. event = "stop";
  114. }
  115. }