def __init__(self, n, A, B, C, D, Ak, Bk, Ck, Q, R, Kp, Ki, epsilon, Ts, plant): self.reduced_model = ReducedModel(n, A, B, C, D) self.feedback_controller = Controller(Kp, Ki, n, Ak, Bk, Ck, Q, R) self.delay_block = DelayBlock(epsilon, Ts) self.plant = plant self.y_err = 0.0 self.y = 0.0 self.rm_out = 0.0 self.u = 0.0
class Model: def __init__(self, n, A, B, C, D, Ak, Bk, Ck, Q, R, Kp, Ki, epsilon, Ts, plant): self.reduced_model = ReducedModel(n, A, B, C, D) self.feedback_controller = Controller(Kp, Ki, n, Ak, Bk, Ck, Q, R) self.delay_block = DelayBlock(epsilon, Ts) self.plant = plant self.y_err = 0.0 self.y = 0.0 self.rm_out = 0.0 self.u = 0.0 def closed_loop(self, y_top, y_bottom): self.rm_out = self.reduced_model.compute_y(self.u) self.y_err = (self.rm_out - self.delay_block.get_last_entry()) + y_bottom - self.y self.delay_block.update(self.rm_out) controller_out = self.feedback_controller.compute_next_u(self.y_err) self.u = y_top + controller_out self.y = self.plant.compute_y(self.u) return self.y