Esempio n. 1
0
    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)
Esempio n. 2
0
    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)