El código fue realizado utilizando una combinación de programación estructurada y programación orientada a objetos. En la siguiente imagen se observa un esquema que representa la jerarquía del programa:
En la primera columna se encuentra el archivo main o principal, el cual se encarga de la creación de la ventana gráfica y del llamado de los archivos "handlers", los cuales se observan en la columna dos (Análisis, Entonación, Lógica difusa y Simulación), los archivos "handler" tienen la tarea de manejar la interfaz gráfica y hacer de enlace entre el usuario y las rutinas.
Los archivos de rutinas se observan en la tercera columna, su función es la de realizar los cálculos necesarios que solicite el usuario por medio de la interfaz gráfica.
La interfaz gráfica fue realizada utilizando PySide2, las funciones de Laboratorio Virtual fueron separadas en pestañas. En las siguientes imágenes se señalan cada uno de los componentes que integran cada función.
- Pestañas de funciones
- Selector de representación
- Coeficientes de la función de transferencia
- Agregado de Delay
- Discretización del proceso
- Datos del análisis
- Botón para realizar el análisis
- Pestañas de gráficas
- Gráfica con Matplotlib
- Barra de herramientas de la gráfica
- Matrices de estados
- Función de entonación automática
- Resolución de los sliders
- Sliders de ganancias
- Sliders de tiempo y coeficiente N
- Gráfica con PyQtGraph
- Carga del archivo CSV
- Separador del archivo CSV
- SPAN de la variable del proceso
- SPAN de la entrada al proceso (EFC)
- Slider para ajustar
$t_1$ - Gráfica de la variable del proceso
- Gráfica de la entrada al proceso (EFC)
- Número de entradas y salidas
- Selección de esquema de control
- Botón para iniciar el diseño
- Botón para cargar un diseño
- Botones para salvar los diseños
- Botón para exportar el diseño a FIS
- Pestañas para el diseño
- Información general
- Estructura de entradas y salidas
- Esquema de control
- Número de entrada/salida
- Nombre de la entrada/salida
- Número de etiquetas
- Rango de la entrada/salida
- Método de defuzzificacion
- Número de etiqueta
- Nombre de la etiqueta
- Tipo de función de membresía
- Definición de la función de membresía
- Gráfica de las funciones de membresía
- Lista de reglas
- Lógica de las premisas
- Etiquetas de las entradas
- Opción para negar la entrada
- Etiquetas de las salidas
- Peso de la salida
- Botón para agregar una regla
- Botón para cambiar una regla
- Botón para eliminar una regla
- Botón para crear el controlador y realizar pruebas
- Activación de reglas de forma gráfica para las entradas
- Slider para asignar entrada
- Valor de entrada
- Activación de reglas de forma gráfica para las salidas
- Valor de salida
- Respuesta del controlador
- Barra indicadora de altura (para dos entradas)
- Pestañas de simulación
- Esquema de control
- Barras de configuración
- Botón para simular
- Gráfica de respuesta del sistema
- Gráfica de la señal de control
- Barra de configuración general
- Selección del esquema de control
- Tiempo de simulación
- Valor del setpoint
- Setpoint avanzado (variable)
- Barra de configuración avanzada
- Orden del atraso por PADE
- Activación del filtro para la derivada
- Selección del método de Runge-Kutta
- Tolerancia relativa para el paso variable
- Tolerancia absoluta para el paso variable
- Máximo incremento del tamaño de paso
- Mínimo decremento del tamaño de paso
- Factor de seguridad para el paso variable
- Botón para reiniciar la configuración
- Barra de bloques adicionales
- Activación del sensor
- Numerador del sensor
- Denominador del sensor
- Activación del accionador
- Numerador del accionador
- Denominador del accionador
- Activación del saturador
- Límite inferior del saturador
- Límite superior del saturador
- Barra de configuración del controlador
- Controlador difuso
- Ganancia proporcional del PID
- Ganancia integral del PID
- Ganancia derivativa del PID
- Coeficiente N