• No se han encontrado resultados

C.3 Pestaña scripts compilados ... 78 C.4 Pestaña conexión con Matlab™ ... 79

APÉNDICE D. DISEÑO DEL CONTROLADOR DIFUSO ...80

D.1Desarrollo... 80

D.1.1 Dinámica del proceso... 80 D.1.2 Diseño del controlador... 80 D.1.2 Defusificación ... 83 D.1.3 Definición de rangos... 83 D.1.4 Normalización ... 83 D.1.5 Implementación del controlador en Simulink™... 83

APÉNDICE E. IMPLEMENTACIÓN DE ESTRATEGIAS DE CONTROL ...85

E.1 Resultados de identificación y sintonización... 85 E.2 Cálculo de la ganancia de antealimentación ... 86

APÉNDICE F. DIVERSAS SINTONÍAS DE PID...87

F.1 Modelo del proceso ... 87 F.1 Sintonía por especificaciones de robustez ... 87 F.2 Regulador lineal cuadrático (LQR)... 89

G.2 Internal Model Control... 92 G.3 Predictor de Smith ... 92

APÉNDICE F. MANUAL DE INSTALACIÓN ...94 APÉNDICE H. MANUAL DE USO DE LA INTERFAZ ...96

H.1 Monitoreo de la estación de control de nivel ... 96 H.2 Ejecución de scripts compilados. ... 97 H.3 Conexión con Matlab™ y Simulink™. ... 97

Apéndice A. Implementación

A.1 Pseudo código para la configuración y manejo de un

puerto RS232

A continuación se muestran las principales funciones utilizadas y los parámetros utilizados.

Configuración del puerto RS232

OpenComConfig (NumeroDePuerto, “COM 1", Baudrate, Parity, Databits, Stopbits, TamañoFilaEntrada, TamañoFilaSalida)

Donde:

• NumeroDePuerto es el valor numérico del puerto al que se desea acceder. • Baudrate es la velocidad de operación en la línea de comunicación serial. • Parity es el valor del bit con el que cada transmisión empezará.

• Databits es el tamaño en bits de cada transmisión.

• Stopbits es el valor con el que se finaliza cada transmisión. • TamañoFilaEntrada es el valor de la fila de entrada.

• TamañoFilaSalida es el valor de la fila de salida.

Configuración de la interrupción de recepción.

InstallComCallback (NumeroDePuerto, TipoDeEvento, NumeroDeBytes, NombreDeLaFuncion);

Donde:

• NumeroDePuerto es el valor numérico del puerto en el que se desea instalar la interrupción.

• TipoDeEvento define el evento por el cual la interrupción se disparará. • NumeroDeBytes define la cantidad de bytes en la cual la interrupción se

Transmisión de datos desde la HMI al UDC 6300

• ComWrt (NumeroDePuerto, Mensaje, NumeroDeBytes) Donde:

• NumeroDePuerto es el valor numérico del puerto al que se desea escribir. • Mensajes es el tipo de petición que se le está haciendo al UDC 6300. • NumeroDeBytes es la cantidad de bytes que componen el mensaje a enviar.

A.2 Descripción del Bloque de Transmisión/Recepción desde

Matlab

La figura A.1 muestra el bloque de transmisión y recepción en las adquisiciones de datos en tiempo real hechas en Matlab.

Figura A.1 Bloque principal insertado en las simulaciones de Matlab y su correspondencia en el proceso.

1. Bloque se ajuste del tiempo de muestreo, default 5 Segundos, rango de 1ms a 10 minutos.

2. Escritura hacia la válvula de control del flujo de alimentación, default 0, rango de 0% a 100%.

3. Lectura del nivel del agua en el tanque, default 0, rango de 0 a 100%.

4. Lectura del flujo de agua de entrada al tanque, default 0, rango de 0 a 100%. 5. Lectura del flujo de agua de salida del tanque, default 0, rango de 0 a 100%.

Apéndice B. Implementación de un controlador PID en

ANSI C.

A continuación se muestra un controlador digital PID implementado en ANSI C en el lenguaje de programación DEV-C.

#include "controlador.h" #include <windows.h> #include <stdio.h> #include <stdlib.h> #include "comandos.h"

struct MODELVAR *INPUT_1 = NULL; struct MODELVAR *INPUT_2 = NULL; struct MODELVAR *INPUT_3 = NULL; struct MODELVAR *SETPOINT = NULL;

double e[10]; double u[10]; double y[10]; double proceso_actual; double manipulacion_actual; double setpoint_actual; double SAMPLE_TIME = 1000; double Kc = .001; double Ti = 10.0; double Td = 0.11;

DLLIMPORT void RegisterCommandsProcedure (CONTROLLERCOMMANDSPROC ProcedureCommands, struct DATA_NODE *ModelVarsNodePtr,

unsigned char *StopScriptFlagPtr) {

RegisterScriptCommandsProcedure (ProcedureCommands, ModelVarsNodePtr, StopScriptFlagPtr);

RegisterVar (&INPUT_1, "INPUT_1"); RegisterVar (&INPUT_2, "INPUT_2"); RegisterVar (&INPUT_3, "INPUT_3"); RegisterVar (&SETPOINT, "SETPOINT");

}

DLLIMPORT void InicializarControl (void) {

DisplayText("INICIALIZANDO");

}

DLLIMPORT void EjecutarControl (void) {

while(1) {

u[0]= u[1] + Kc*( e[0]-e[1] + (4) (SAMPLE_TIME/Ti)*(e[0]+e[1])/2 + (Td*(e[0]-2*e[1]+e[2])/SAMPLE_TIME)); if (u[0]>100) u[0]=99; (5) if (u[0]<0) u[0]=1; manipulacion_actual = u[0]; WriteValve(manipulacion_actual, 1); (6) e[9]=e[8]; e[8]=e[7]; e[7]=e[6]; e[6]=e[5]; e[5]=e[4]; (7) e[4]=e[3]; e[3]=e[2]; e[2]=e[1]; e[1]=e[0];

u[9]=u[8]; u[8]=u[7]; u[7]=u[6]; u[6]=u[5]; u[5]=e[4]; u[4]=u[3]; u[3]=u[2]; u[2]=u[1]; u[1]=u[0];

y[9]=y[8]; y[8]=y[7]; y[7]=y[6]; y[6]=y[5]; y[5]=y[4]; y[4]=y[3]; y[3]=y[2]; y[2]=y[1]; y[1]=y[0];

Sleep(SAMPLE_TIME); (8) }

}

DLLIMPORT void TerminarControl (void) {

DisplayText("TERMINANDO"); }

Un ciclo infinito es declarado de tal manera que la ejecución sea infinita a menos que el usuario la detenga, en (1) se define el tiempo de muestreo deseado, (2) y (3) realizan la lectura del estado de las variables INPUT_1 y SETPOINT, aquí mismo se almacenan en variables locales. En (4) se hace el cálculo del valor de manipulación a partir de los datos obtenidos, en (5) se incluyen dos líneas que saturan la manipulación, en (6) se escribe el valor de la manipulación deseada y se manda hacia la interfaz que se encarga de hacer la escritura al controlador UDC 6300 en la estación de monitoreo y control de nivel, en (7) se hacen los corrimientos de los arreglos que corresponden a la ecuación de diferencias, por último en (8) se detiene la ejecución de acuerdo al tiempo de muestreo deseado.

Apéndice C. Descripción de la interfaz

C.1 Pestaña de parámetros de comunicaciones

Figura C.1 Pestaña de parámetros de comunicaciones.

En esta pestaña se ajustan los parámetros de comunicaciones entre el UDC 6300 y la interfaz, es necesario tener perfecta concordancia para una comunicación exitosa.

1. Botón de Conexión. Una vez seleccionados los parámetros de comunicación

estos botones sirven para activar y desactivar la conexión al UDC6300.

2. Selector de Puerto. Este selector sirve para definir el puerto serial a utilizar en la

conexión, por default el puerto serial a usar es el COM 1.

3. Selector de Número de Bits. Parámetro necesario para definir el tamaño de la

trama de datos usada en la comunicación, por default la trama usada es 7 bits.

4. Selector de Velocidad. Parámetro necesario para definir la velocidad de

transmisión usada en la comunicación, por default la usada es 19200.

5. Selector de Paridad. Parámetro necesario para definir el tipo de paridad usada

en la comunicación con el UDC6300, por default la usada es EVEN.

8. Barra de Estado del UDC. En esta parte se reporta el estado del controlador. 9. Barra de Estado del Modo de Operación. Aquí se reporta el modo de

operación del controlador, automático, manual o monitoreo, por default manual.

10.Visualizador Grafico. Este elemento muestra el comportamiento de las señales a

monitorear.

11.Estado de Conexión. Aquí se muestra el estado de conexión del sistema, por

default es desconectado.

12.Pestañas de Acceso. La interfaz cuenta con una serie de pestañas que permiten

el acceso a las diferentes opciones disponibles.

13.Botón de Salida. Botón para salir de la aplicación.

Documento similar