Código fuente para discreto_generator

""" 
Archivo para compilar las funciones encargadas de la simulacion en tiempo discreto utilizando numba, las funciones quedan guardadas en el archivo: discreto_sim.cp37-win32.pyd y pueden ser importadas desde el archivo como una funcion de un modulo
"""
 

from numba.pycc import CC
import numpy as np


cc = CC('discreto_sim')


[documentos]@cc.export('ss_discreta', '(f8[::1,:], f8[:,::1], f8[:,::1], f8[:,::1], f8[:,::1], f8, f8)') def ss_discreta(A, B, C, D, x, _, inputValue): """ Funcion para calcular la respuesta del sistema por medio de la representacion discreta de las ecuaciones de espacio de estados :param ss: Representacion del sistema :type ss: LTI :param x: Vector de estado :type x: numpyArray :param _: No importa :type _: float :param inputValue: Valor de entrada al sistema :type inputValue: float """ x = np.dot(A, x) + B*inputValue y = np.dot(C, x) + D*inputValue return y[0, 0], x
[documentos]@cc.export('PID_discreto', '(f8, f8, f8, f8[::1], f8, f8, f8)') def PID_discreto(error, ts, s_integral, error_anterior, kp, ki, kd): """ Funcion para calcular el PID en forma discreta :param error: Señal de error :type error: float :param ts: Periodo de muestreo :type ts: float :param s_integral: Acumulador de la señal integral :type s_integral: float :param error_anterior: deque con el error anterior :type error_anterior: deque Object :param kp: Ganancia proporcional :type kp: float :param ki: Ganancia integral :type ki: float :param kd: Ganancia derivativa :type kd: float """ s_proporcional = error s_integral = s_integral + (error + error_anterior[0])*ts/2 s_derivativa = (error - error_anterior[0]) / ts s_control = s_proporcional*kp + s_integral*ki + s_derivativa*kd error_anterior[0] = error return s_control, s_integral, error_anterior
[documentos]@cc.export('derivadas_discretas', '(f8, f8, f8[::1])') def derivadas_discretas(error, ts, error_anterior): """ Funcion para calcular la derivada del error y la segunda derivada del error :param error: Señal de error :type error: float :param ts: Periodo de muestreo :type ts: float :param error_anterior: deque con el error anterior :type error_anterior: deque Object """ s_derivativa = (error-error_anterior[0]) / ts s_derivativa2 = (error - 2 * error_anterior[0] + error_anterior[1]) / (ts**2) error_anterior[1] = error_anterior[0] error_anterior[0] = error return s_derivativa, s_derivativa2, error_anterior
if __name__ == '__main__': cc.compile()