window_sa_canonical.BASE.sa 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. semantic adaptation reactive mealy WindowSA windowSA
  2. at "./path/to/WindowSA.fmu"
  3. for inner fmu Window window
  4. at "./path/to/Window.fmu"
  5. with input ports displacement (rad), speed (rad/s), reaction_force (N)
  6. with output ports height (m), reaction_torque (N.m)
  7. input ports reaction_force,
  8. displacement,
  9. speed
  10. output ports disp,
  11. tau
  12. param INIT_WINDOWSA_REACTION_FORCE := 0.0,
  13. INIT_WINDOWSA_DISPLACEMENT := 0.0,
  14. INIT_WINDOWSA_SPEED := 0.0,
  15. INIT_WINDOW_REACTION_TORQUE := 0.0,
  16. INIT_WINDOW_REACTION_HEIGHT := 0.0;
  17. control rules {
  18. do_step(window, t, H);
  19. return H;
  20. }
  21. in var stored_windowsa_reaction_force := INIT_WINDOWSA_REACTION_FORCE,
  22. stored_windowsa_displacement := INIT_WINDOWSA_DISPLACEMENT,
  23. stored_windowsa_speed := INIT_WINDOWSA_SPEED;
  24. in rules {
  25. true -> {
  26. stored_windowsa_reaction_force := windowSA.reaction_force;
  27. stored_windowsa_displacement := windowSA.displacement;
  28. stored_windowsa_speed := windowSA.speed;
  29. } --> {
  30. window.reaction_force := stored_windowsa_reaction_force;
  31. window.displacement := stored_windowsa_displacement;
  32. window.speed := stored_windowsa_speed;
  33. };
  34. }
  35. out var stored_window_reaction_torque := INIT_WINDOW_REACTION_TORQUE,
  36. stored_window_height := INIT_WINDOW_REACTION_HEIGHT;
  37. out rules {
  38. true -> {
  39. stored_window_reaction_torque := window.reaction_torque;
  40. stored_window_height := window.height;
  41. } --> {
  42. windowSA.tau := - stored_window_reaction_torque;
  43. windowSA.disp := stored_window_height / 100;
  44. };
  45. }