lazy.sa 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. module Lazy_SA
  2. semantic adaptation reactive moore LazySA lazy_sa
  3. at "./path/to/LazySA.fmu"
  4. for inner fmu Controller controller
  5. at "./path/to/Controller.fmu"
  6. with input ports obj_detected, passenger_up, passenger_down, passenger_stop, driver_up, driver_down, driver_stop
  7. with output ports up, down, stop
  8. input ports obj_detected -> controller.obj_detected
  9. output ports up, down, stop
  10. param INIT_UP := 0.0,
  11. INIT_DOWN := 0.0,
  12. INIT_STOP := 0.0;
  13. control var tn := -1.0,
  14. tl := -1.0,
  15. refresh_outputs := true;
  16. control rules {
  17. if (tl < 0.0){
  18. tl := t;
  19. }
  20. refresh_outputs := false;
  21. var step_size := min(H, tn - t);
  22. if (lazy_sa.obj_detected or (t+H) >= tn){
  23. refresh_outputs := true;
  24. var step_to_be_done := (t+H-tl);
  25. var step_done := do_step(controller, t, step_to_be_done);
  26. tn := tl + step_done + get_next_time_step(controller);
  27. step_size := tl + step_done - t;
  28. tl := tl + step_done;
  29. }
  30. return step_size;
  31. }
  32. out var stored_up := INIT_UP,
  33. stored_down := INIT_DOWN,
  34. stored_stop := INIT_STOP;
  35. out rules{
  36. true -> {
  37. if (refresh_outputs){
  38. stored_up := controller.up;
  39. stored_down := controller.down;
  40. stored_stop := controller.stop;
  41. }
  42. } --> {
  43. lazy_sa.up := stored_up;
  44. lazy_sa.down := stored_down;
  45. lazy_sa.stop := stored_stop;
  46. };
  47. }