WindowFMU.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from units.CTSimulationUnit_Euler import CTSimulationUnit_Euler
  2. class WindowFMU(CTSimulationUnit_Euler):
  3. def __init__(self, name, num_rtol, num_atol, internal_step_size, J, r, b, c):
  4. self.omega_input = "omega_input"
  5. self.theta_input = "theta_input"
  6. self.tau = "tau"
  7. self.x = "x"
  8. self.v = "v"
  9. self.omega = "omega"
  10. self.theta = "theta"
  11. input_vars = [self.omega_input, self.theta_input]
  12. def calc_v(x, u):
  13. return r * x[self.omega]
  14. def calc_x(x, u):
  15. return r * x[self.theta]
  16. def calc_tau(x,u):
  17. return c * ( u[self.theta_input] - x[self.theta] ) - b * calc_v(x,u)
  18. def der_theta(x, u):
  19. return x[self.omega]
  20. def der_omega(x, u):
  21. return calc_tau(x,u) / J
  22. state_derivatives = {
  23. self.theta: der_theta,
  24. self.omega: der_omega
  25. }
  26. output_functions = {
  27. self.v : calc_v,
  28. self.x : calc_x,
  29. self.tau: calc_tau
  30. }
  31. CTSimulationUnit_Euler.__init__(self, name, num_rtol, num_atol, internal_step_size, state_derivatives, output_functions, input_vars)