lazy.sa 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. semantic adaptation reactive moore LazySA lazy_sa
  2. at "./path/to/LazySA.fmu"
  3. for inner fmu Controller controller
  4. at "./path/to/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. output ports up, down, stop
  9. param INIT_UP := 0.0,
  10. INIT_DOWN := 0.0,
  11. INIT_STOP := 0.0;
  12. control var tn := -1.0,
  13. tl := -1.0;
  14. control rules {
  15. if (tl < 0.0){
  16. tl := t;
  17. }
  18. var step_size := min(H, tn - t);
  19. if (lazy_sa.obj_detected or (t+H) >= tn){
  20. var step_to_be_done := (t+H-tl);
  21. var step_done := do_step(controller, t, step_to_be_done);
  22. tn := tl + step_done + get_next_time_step(controller);
  23. step_size := tl + step_done - t;
  24. tl := tl + step_done;
  25. }
  26. return step_size;
  27. }
  28. out var stored_up := INIT_UP,
  29. stored_down := INIT_DOWN,
  30. stored_stop := INIT_STOP;
  31. out rules{
  32. true -> {
  33. stored_up := controller.up;
  34. stored_down := controller.down;
  35. stored_stop := controller.stop;
  36. } --> {
  37. lazy_sa.up := stored_up;
  38. lazy_sa.down := stored_down;
  39. lazy_sa.stop := stored_stop;
  40. };
  41. }