def __init__(self, Kp=1, Ti=0, Td=0, dt=1, N=float('inf'), alpha=None, beta=None, **opt): """ Arguments: ---------- Kp : `float` Proportional gain. Default ``Kp``=1. Ti : `float` Integral time constant. Default ``Ti``=0. Td : `float` Derivative time constant. Default ``Td``=0. dt : `float` Sampling period. Default ``dt``=1 N : `float` Derivative filter coefficient Default ``N``=float('inf') alpha : `float` Alpha coefficient for two-degree of freedom controller. Default ``alpha``=None beta : `float` Alpha coefficient for two-degree of freedom controller. Default ``alpha``=None """ self.P_block = Models.Gain(Kp=Kp, dt=dt, **opt) if Kp else None self.I_block = Models.Integral(Ki=Kp / Ti, dt=dt, **opt) if Ti else None self.D_block = None self.P2_block = None self.D2_block = None if Td: self.D_block = Models.Derivative(Kd=Td * Kp, dt=dt, **opt) if N == float('inf') \ else Models.StateSpace(ABCD=[[[-N / Td]], [[1]], [[- N ** 2 / Td]], [[N]]], dt=dt, K=Kp, **opt) if alpha: self.P2_block = Models.Gain(Kp=Kp * alpha, **opt) if beta: self.D2_block = Models.Derivative(Kd=Kp * Td * beta, dt=dt, **opt) if N == float('inf') \ else Models.StateSpace(ABCD=[[[-N / Td]], [[1]], [[- N ** 2 / Td]], [[N]]], dt=dt, K=Kp * beta, **opt) super().__init__(in_len=1, name='PID_Parallel', **opt)
def __init__(self, Kp=0, Ti=0, Td=0, dt=1, N=float('inf'), **opt): """ Arguments: ---------- Kp : `float` Proportional gain. Default ``Kp``=1. Ti : `float` Integral time constant. Default ``Ti``=0. Td : `float` Derivative time constant. Default ``Td``=0. dt : `float` Sampling period. Default ``dt``=1 N : `float` Derivative filter coefficient Default ``N``=float('inf') """ self.P_block = Models.Gain(Kp=Kp, dt=dt, **opt) if Kp else None self.I_block = Models.Integral(Ki=1 / Ti, dt=dt, **opt) if Ti else None self.D_block = None if Td: self.D_block = Models.Derivative(Kd=Td, dt=dt, **opt) if N == float('inf') \ else Models.StateSpace(ABCD=[[[-N / Td]], [[1]], [[- N ** 2 / Td]], [[N]]], dt=dt, **opt) super().__init__(in_len=1, name='PID_Serial', **opt)