lazy_canonical.sa 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. semantic adaptation reactive moore LazySA lazy_sa
  2. at "./path/to/LazySA.fmu"
  3. for inner fmu Controller controller
  4. at "test_input/single_folder_spec/lazy/Controller.fmu"
  5. with input ports obj_detected, passenger_up, passenger_down, passenger_stop, driver_up, driver_down, driver_stop
  6. with output ports up, down, stop
  7. input ports obj_detected -> controller.obj_detected,
  8. passenger_up -> controller.passenger_up,
  9. passenger_down -> controller.passenger_down,
  10. passenger_stop -> controller.passenger_stop,
  11. driver_up -> controller.driver_up,
  12. driver_down -> controller.driver_down,
  13. driver_stop -> controller.driver_stop
  14. output ports up, down, stop
  15. param INIT_OBJ_DETECTED := false,
  16. INIT_PASSENGER_UP := false,
  17. INIT_PASSENGER_DOWN := false,
  18. INIT_PASSENGER_STOP := false,
  19. INIT_DRIVER_UP := false,
  20. INIT_DRIVER_DOWN := false,
  21. INIT_DRIVER_STOP := false,
  22. INIT_UP := false,
  23. INIT_DOWN := false,
  24. INIT_STOP := false;
  25. control var tn := -1.0,
  26. tl := -1.0,
  27. prev_obj_detected := INIT_OBJ_DETECTED,
  28. prev_passenger_up := INIT_PASSENGER_UP,
  29. prev_passenger_down := INIT_PASSENGER_DOWN,
  30. prev_passenger_stop := INIT_PASSENGER_STOP,
  31. prev_driver_up := INIT_DRIVER_UP,
  32. prev_driver_down := INIT_DRIVER_DOWN,
  33. prev_driver_stop := INIT_DRIVER_STOP;
  34. control rules {
  35. if (tl < 0.0){
  36. tl := t;
  37. }
  38. var step_size := min(H, tn - t);
  39. if (lazy_sa.obj_detected != prev_obj_detected or
  40. lazy_sa.passenger_up != prev_passenger_up or
  41. lazy_sa.passenger_down != prev_passenger_down or
  42. lazy_sa.passenger_stop != prev_passenger_stop or
  43. lazy_sa.driver_up != prev_driver_up or
  44. lazy_sa.driver_down != prev_driver_down or
  45. lazy_sa.driver_stop != prev_driver_stop or
  46. (t+H) >= tn
  47. ){
  48. var step_to_be_done := (t+H-tl);
  49. var step_done := do_step(controller, t, step_to_be_done);
  50. tn := tl + step_done + get_next_time_step(controller);
  51. step_size := tl + step_done - t;
  52. tl := tl + step_done;
  53. }
  54. prev_obj_detected := lazy_sa.obj_detected;
  55. prev_passenger_up := lazy_sa.passenger_up;
  56. prev_passenger_down := lazy_sa.passenger_down;
  57. prev_passenger_stop := lazy_sa.passenger_stop;
  58. prev_driver_up := lazy_sa.driver_up;
  59. prev_driver_down := lazy_sa.driver_down;
  60. prev_driver_stop := lazy_sa.driver_stop;
  61. return step_size;
  62. }
  63. in var
  64. stored_sa_obj_detected := INIT_OBJ_DETECTED,
  65. stored_sa_passenger_up := INIT_PASSENGER_UP,
  66. stored_sa_passenger_down := INIT_PASSENGER_DOWN,
  67. stored_sa_passenger_stop := INIT_PASSENGER_STOP,
  68. stored_sa_driver_up := INIT_DRIVER_UP,
  69. stored_sa_driver_down := INIT_DRIVER_DOWN,
  70. stored_sa_driver_stop := INIT_DRIVER_STOP;
  71. in rules {
  72. true
  73. }
  74. out var
  75. stored_sa_up := INIT_UP,
  76. stored_sa_down := INIT_DOWN,
  77. stored_sa_stop := INIT_STOP;