anejo 2: programa completo de matlabbibing.us.es/proyectos/abreproy/4802/descargar... · anejo 2:...

27
Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de todos los archivos de MATLAB creadas para este proyecto. Archivo ayuda.m Este archivo contiene el mensaje de ayuda que se muestra por pantalla cuando el usuario pulsa el botón “ayuda” en la interfaz gráfica. function ayuda() fprintf('\n'); disp('CONTROL DE LA PLANTA MEDIANTE MATLAB:'); fprintf('\n'); disp(' Una vez ejecutado el comando "control_planta", Matlab conectará'); disp(' con el servidor de OPC y se abrirá la pantalla de control.'); fprintf('\n Pulse cualquier tecla para continuar.'); pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'); disp(' La pantalla de control permite al usuario programar un bucle de control'); disp(' sin tener que preocuparse de la comunicación con OPC.'); disp(' En "Función de control" se debe introducir el nombre de la función'); disp(' que se haya programado para controlar la planta.'); disp(' El bucle de control se compone de las siguientes partes (en orden):'); fprintf('\n'); fprintf('\t -> Lectura de las variables del autómata\n'); fprintf('\t -> Llamada a la función de control\n'); fprintf('\t -> Escritura de las variables del autómata\n'); fprintf('\t -> Escritura en Excel\n'); fprintf('\n Pulse cualquier tecla para continuar.'); pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'); disp(' La función de control debe cumplir algunos requisitos.'); disp(' En primer lugar, la función debe tener acceso a las variables globales'); disp(' que representan los distintos sensores y actuadors de la planta:'); fprintf('\n') fprintf('\t B1: Bomba de alimentación\n'); fprintf('\t B2: Bomba de recirculación\n'); fprintf('\t V4: Válvula de agua caliente\n'); fprintf('\t V5: Válvula de agua fría\n'); fprintf('\t V8: Válvula de agua de recirculación\n'); fprintf('\t PWM: Tiempo de encendido de la modulación PWM\n'); fprintf('\t RES: Resistencia del depósito de trabajo\n'); fprintf('\t TERMO: Resistencia del tanque de agua caliente\n'); fprintf('\n'); fprintf('\t FT1: Caudal de agua caliente\n'); fprintf('\t TT1: Temperatura de agua caliente\n'); fprintf('\t FT2: Caudal de agua fría\n'); fprintf('\t TT2: Temperatura de agua fría\n'); fprintf('\t FT3: Caudal de agua de salida\n'); fprintf('\t TT3: Temperatura de agua de salida\n'); fprintf('\t FT4: Caudal del circuito de recirculación\n'); fprintf('\t TT1: Temperatura de agua de recirculación\n'); fprintf('\t LT1: Nivel de agua del depósito de trabajo\n'); fprintf('\t TT5: Temperatura de agua del depósito\n'); Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.136

Upload: others

Post on 08-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

Anejo 2: Programa completo de MATLAB

A continuación se muestran el código (en crudo) de todos los archivos de MATLAB creadas para este proyecto.

Archivo ayuda.m

Este archivo contiene el mensaje de ayuda que se muestra por pantalla cuando el usuario pulsa el botón “ayuda” en la interfaz gráfica.

function ayuda() fprintf('\n');disp('CONTROL DE LA PLANTA MEDIANTE MATLAB:');fprintf('\n');disp(' Una vez ejecutado el comando "control_planta", Matlab conectará');disp(' con el servidor de OPC y se abrirá la pantalla de control.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' La pantalla de control permite al usuario programar un bucle de control');disp(' sin tener que preocuparse de la comunicación con OPC.');disp(' En "Función de control" se debe introducir el nombre de la función');disp(' que se haya programado para controlar la planta.');disp(' El bucle de control se compone de las siguientes partes (en orden):');fprintf('\n');fprintf('\t -> Lectura de las variables del autómata\n'); fprintf('\t -> Llamada a la función de control\n');fprintf('\t -> Escritura de las variables del autómata\n');fprintf('\t -> Escritura en Excel\n');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' La función de control debe cumplir algunos requisitos.');disp(' En primer lugar, la función debe tener acceso a las variables globales');disp(' que representan los distintos sensores y actuadors de la planta:');fprintf('\n')fprintf('\t B1: Bomba de alimentación\n');fprintf('\t B2: Bomba de recirculación\n');fprintf('\t V4: Válvula de agua caliente\n');fprintf('\t V5: Válvula de agua fría\n');fprintf('\t V8: Válvula de agua de recirculación\n');fprintf('\t PWM: Tiempo de encendido de la modulación PWM\n');fprintf('\t RES: Resistencia del depósito de trabajo\n'); fprintf('\t TERMO: Resistencia del tanque de agua caliente\n');fprintf('\n');fprintf('\t FT1: Caudal de agua caliente\n');fprintf('\t TT1: Temperatura de agua caliente\n');fprintf('\t FT2: Caudal de agua fría\n');fprintf('\t TT2: Temperatura de agua fría\n');fprintf('\t FT3: Caudal de agua de salida\n');fprintf('\t TT3: Temperatura de agua de salida\n');fprintf('\t FT4: Caudal del circuito de recirculación\n');fprintf('\t TT1: Temperatura de agua de recirculación\n');fprintf('\t LT1: Nivel de agua del depósito de trabajo\n'); fprintf('\t TT5: Temperatura de agua del depósito\n');

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.136

Page 2: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

fprintf('\t PT1: Presión del depósito de trabajo\n');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');F=figure();imshow(imread('ImMat.bmp'));disp(' Las variables del primer grupo (que en la imagen aparecen subrayadas)');disp(' son variables de lectura y escritura. Al terminar la ejecución de la');disp(' función de control sus valores se enviarán al autómata. En la pantalla');disp(' Vijeo Citect "Mímico 2D" de la planta, estas variables deben estar');disp(' configuradas como MAT para que el autómata acepte estos valroes.');disp(' Si la variable está configurada como AUTO o MAN, el valor se ignora.');disp(' Las otras variables son de sólo lectura: MATLAB almacenará su valor');disp(' durante la ejecución de la función de control, pero lo sobreescribirá');disp(' al volver al inicio del bucle de control.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');figure(F);close; disp(' Las dimensiones de las variables son las siguientes:');disp(' ·Válvulas en tanto por ciento.');disp(' ·Caudales en litros por minuto.');disp(' ·Temperaturas en grados.')disp(' ·Presión en bares.'); disp(' ·Bombas y resistencias sin unidad y en binario (0 ó 1).');disp(' PWM indica el número de centésimas de segundo que la resistencia estará');disp(' encendida en cada segundo. Además, entre PWM y RES sólo una se envía');disp(' al autómata cada vez, según éste haya sido configurado.');fprintf('\n');disp(' Para la comodidad del usuario se han añadido 5 variables de propósito'); disp(' general, que pueden ser modificadas por el usuario desde MATLAB o');disp(' desde Vijeo Citect: AUX_A, AUX_B, AUX_C, AUX_D, y AUX_E');disp(' También se puede acceder desde MATLAB a las referencias de los contro-');disp(' ladores del autómata: FC1, FC2, FC4, TC5, LC1 y Ratio se refieren');disp(' respectivamente a las referencias de caudal caliente, caudal frío,');disp(' caudal de recirculación, temperatura del depósito, nivel del depósito');disp(' y proporción de agua caliente a la entrada del depósito.');disp(' Estas variables se deben declarar como globales, y su funcionamiento');disp(' es el mismo que el de las variables de lectura y escritura: se envían');disp(' al autómata al final de cada ejecución de la funciónde control.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' La otra condición que debe cumplir la función de control se refiere a');disp(' sus propias variables de entrada y salida. La función debe recibir UNA');disp(' variable de entrada y debe devolver UNA variable de salida.'); disp(' En la primera ejecución del bucle, la función recibirá por entrada');disp(' la cadena de caracteres ''inicio'' y podrá devolver cualquier valor');disp(' que el usuario considere necesario para el siguiente ciclo.');disp(' En cada nuevo ciclo, la función recibirá la variable de salida que');disp(' devolvió en el ciclo aterior. Esto permite guardar variables de un');disp(' ciclo al siguiente sin necesidad de más variables globales.');disp(' La variable de salida puede ser un vector o una matriz de cualquier');disp(' dimensión, aunque a mayor memoria, mayor tiempo de ejecución.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' Así pues la función de control sigue el siguiente esquema:');fprintf('\nfunction Salida=funcion(Entrada)\n \n%%Variables de entrada (sensores)\n');

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.137

Page 3: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

fprintf('global FT1 FT2 FT3 FT4 LT1 PT1 TT1 TT2 TT3 TT4 TT5;\n');fprintf('%%Variables de salida (actuadores)\nglobal B1 B2 V4 V5 V8 PWM RES TERMO;\n');fprintf('%%Variables definidas por el usuario\nglobal AUX_A AUX_B AUX_C AUX_D AUX_E;\n \n');fprintf('if ischar(Entrada)\n \n %%Entrada es una cadena de caracteres\n \n');fprintf(' if(STRCMP(Entrada,''inicio''))\n \n %%Algoritmo de inicialización\n');fprintf(' %%Asociar un valor a Salida\n\n end\nelse\n \n');fprintf(' %%Algoritmo de control \n %%Asociar un valor a ')fprintf('B1, B2, V4, V5, V8, RES, PWM y/o TERMO\n \nend\n \n');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' Puesto que la ejecución de funciones de MATLAB es considerablemente');disp(' lenta, la duración del ciclo de control puede variar de un ciclo a otro.');disp(' Para evitar esto, en la pantalla de control, se puede introducir la');disp(' "duración de un ciclo de control". Cuando MATLAB termina un ciclo de');disp(' control, no empezará con el siguiente hasta que haya pasado un cierto');disp(' tiempo desde que se empezó el mismo ciclo. Debe entenderse este tiempo');disp(' como el mínimo tiempo que puede haber entre dos ciclos consecutivos.'); disp(' MATLAB inicia cada ciclo "a la primera oportunidad después de que pase');disp(' el tiempo de ciclo". Por ejemplo: si en "duración de un tiempo de');disp(' ciclo" se introduce un 2, el segundo ciclo se ejecutará, tan pronto');disp(' como sea posible siempre que ya hayan pasado 2 segundos, el tercero');disp(' después de que hayan pasado 4, el cuarto después de 6, etc.');disp(' Si la ejecución de un ciclo tiene mayor duración de la indicada, de');disp(' la indicada, los ciclos siguientes se ejecutarán antes (si esto es');disp(' posible) de modo que el error en tiempo vuelva a cero.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');fprintf(' A modo de ejemplo, se ha hecho correr el programa durante 10 ciclos\n');fprintf(' con una duración de ciclo de control de 2 segundos, con el fin de\n');fprintf(' comprobar la fluctuación del tiempo de muestreo. A continuación se\n'); fprintf(' muestra el instante en que se empezó cada ciclo en este ejemplo\n \n');fprintf('\t0,022469616\n\t2,031324093\n\t4,025760257\n\t6,023338441\n\t8,026029565\n\t10,02472661\n');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' En "Número de ciclos de control" se debe introducir el número de');disp(' iteraciones que el programa debe ejecutar antes de pararse. Si este');disp(' número se deja como 0, el bucle se ejecuta indefinidamente. En ambos');disp(' casos, si el autómata abandona el modo automático, la función deja');disp(' de ejecutarse.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' Por último, el programa también puede pasar a excel los valores de');disp(' las variables que el usuario considere oportunas. Para ello, en');disp(' "Archivo de Excel", debe introducirse el nombre (incluida la extensión)');disp(' de un archivo de excel que ya exista y se encuentre en el directorio');disp(' de trabajo o en el path de MATLAB. Durante el ciclo de inicialización');disp(' se creará una nueva hoja en el archivo, y en cada nuevo ciclo, se');disp(' añadirá una línea. Cada casilla de verificación de la pantalla de');disp(' control se corresponde con una variable del autómata. Las variables');disp(' que correspondan a casillas marcadas se añairán a estas líneas.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' También se pueden añadir los valores al histórico cada cierto número de');

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.138

Page 4: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

disp(' ciclos de control. Basta introducir este valor en "Número de ciclos entre');disp(' muestras del histórico. Por defecto este valor es 1, es decir, cada ciclo.');fprintf('\n');disp(' Una vez configurada la función de control, el tiempo y número de ciclos,'); disp(' y el paso a excel, pulse en el botón "ejecutar" para iniciar el bucle.');fprintf('\n Pulse cualquier tecla para continuar.');pause fprintf('\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b');disp(' Para salir del programa, debe pulsarse el botón "Salir". Si se cierra');disp(' la ventana sin pulsar este botón, la conexión con OPC no se cerrará,');disp(' y se podrá controlar la planta desde la pantalla de comandos o desde');disp(' otra función (consultar documentación). Para desconectarse de OPC,');disp(' ejecute la función "desconectar()".');

Archivo celda.m

El archivo celda contiene una función auxiliar (celda) que convierte los índices de fila y columna de una hoja de Excel en la una cadena de caracteres para este programa. Por ejemplo, si el índice de la fila es 20 y el de la columna es 3, la función devuelve la cadena de caracteres ‘C20’. Los valores de los índices deben ser posibles para una hoja de Excel, es decir, el índice de fila debe estar entre 1 y 65536; y el de columna, entre 1 y 256.

function cadena=celda(fil, col)% CASILLA=celda(FILA, COLUMNA) devuelve la cadena de caracteres que % determinan una celda en Microsoft Excel. Por ejemplo si FILA vale 2 y% COLUMNA vale 5, CASILLA será 'E2'. De esta forma se pueden usar en Excel% los mismos índices que se usan en MATLAB.%% Se recuerda que una hoja de Excel contiene un máximo de 65536 filas y 256% columnas, siendo la última celda 'IV65536'.

num=0;%Caracteres ASCII que componen el número de la fila:if (fil<1000)

if fil(fil<100) if (fil<10) num=1; else num=2; end

else num=3;

endelse

if (fil<10000) num=4;

else num=5;

endendcadfil=zeros(1,num);for i=1:num cadfil(i)=floor(fil/(10^(num-i))); fil=fil-(cadfil(i)*(10^(num-i))); cadfil(i)=cadfil(i)+48; %'0'=char(48)end

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.139

Page 5: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

%Caracteres ASCII que componen la letra de la columna:if (col<27) num=1;else num=2;endcadcol=zeros(1,num);for j=1:num cadcol(j)=floor(col/(26^(num-j))); col=col-(cadcol(j)*(26^(num-j))); cadcol(j)=cadcol(j)+64; %'A'=char(65)end

cadena=char([cadcol cadfil]);

Archivo conectar.m

Este archivo contiene un e ecutable de MATLAB para conectar con OPC. e crean las variables globales utilizadas en el método manual de control con MATLAB pero no las correspondientes a la interfaz gráfica.

%Conexión con OPC y creación de variables

%Declaración de variables globales%Grupoglobal da grupo;%Señalesglobal MARCHA PARADA;%OPCglobal AuxMat1 AuxMat2 AuxMat3 AuxMat4 AuxMat5;global BombaAlim BombaAlimConf BombaRecir BombaRecirConf;global CaudalCaliente CaudalFrio CaudalSalida CaudalRecir;global NivelDeposito PresionDeposito;global RefCaudalCaliente RefCaudalFrio RefCaudalRecir;global RefNivel RefRatio RefTemp;global Resistencia ResistenciaPWM ResTermo;global TempCaliente TempFria TempSalida TempRecir TempDeposito;global ValvulaCaliente ValvulaFria ValvulaRecir;

%Conexión con OPCda=opcda('127.0.0.1','Schneider-Aut.OFS.2');connect(da);grupo=addgroup(da);

%Declaración de variables de OPC:AuxMat1=additem(grupo,'planta_!Aux_Mat_1'); %Variable auxiliar definida por el usuarioAuxMat2=additem(grupo,'planta_!Aux_Mat_2'); %Variable auxiliar definida por el usuarioAuxMat3=additem(grupo,'planta_!Aux_Mat_3'); %Variable auxiliar definida por el usuarioAuxMat4=additem(grupo,'planta_!Aux_Mat_4'); %Variable auxiliar definida por el usuarioAuxMat5=additem(grupo,'planta_!Aux_Mat_5'); %Variable auxiliar definida por el usuarioBombaAlim=additem(grupo,'planta_!BOMBA_ALIM_MAT'); %Bomba de alimentación (orden de marcha)BombaAlimConf=additem(grupo,'planta_!conf_bomba_a'); %Bomba de alimentación (confirmación)

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.140

Page 6: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

BombaRecirConf=additem(grupo,'planta_!conf_bomba_r'); %Bomba de recirculación (confirmación)CaudalCaliente=additem(grupo,'planta_!caudal_caliente'); %Caudal de agua calienteCaudalFrio=additem(grupo,'planta_!caudal_frio'); %Caudal de agua fríaCaudalSalida=additem(grupo,'planta_!caudal_salida'); %Caudal de agua saliente del depósitoCaudalRecir=additem(grupo,'planta_!caudal_recirculacion'); %Caudal de agua del circuito de recirculaciónNivelDeposito=additem(grupo,'planta_!niv_deposito'); %Nivel de agua del depositoPresionDeposito=additem(grupo,'planta_!presion_deposito'); %Presión del depósito

RefCaudalCaliente=additem(grupo,'planta_!RefCaudalCaliente'); %Referencia del caudal calienteRefCaudalFrio=additem(grupo,'planta_!RefCaudalFrio'); %Referencia del caudal fríoRefCaudalRecir=additem(grupo,'planta_!RefCaudalRecirculacion'); %Referencia del caudal de recirculaciónRefNivel=additem(grupo,'planta_!RefNivel'); %Referencia del nivel del depósitoRefRatio=additem(grupo,'planta_!RefNivProporcion'); %Referencia de proporción de agua de entradaRefTemp=additem(grupo,'planta_!RefTempDeposito'); %Referencia de temperatura del depósito

Resistencia=additem(grupo,'planta_!RESISTENCIA_MAT'); %Resistencia del interior del depósito (orden de marcha)ResistenciaPWM=additem(grupo,'planta_!PWM_RESISTENCIA_MAT'); %Modulación por ancho de pulsos de la resistenciaResTermo=additem(grupo,'planta_!TERMO_MAT'); %Grupo caliente (orden de marcha)TempCaliente=additem(grupo,'planta_!tem_caliente'); %Temperatura de agua calienteTempFria=additem(grupo,'planta_!tem_fria'); %Temperatura de agua fríaTempSalida=additem(grupo,'planta_!tem_salida'); %Temperatura de saliente del depositosTempRecir=additem(grupo,'planta_!tem_recirculacion'); %Temperatura de agua recirculanteTempDeposito=additem(grupo,'planta_!tem_deposito'); %Temperatura del agua del depósitoValvulaCaliente=additem(grupo,'planta_!VAL_CALIENTE_MAT'); %Válvula de agua caliente V4ValvulaFria=additem(grupo,'planta_!VAL_FRIA_MAT'); %Válvula de agua fría V5ValvulaRecir=additem(grupo,'planta_!VAL_RECIRCULACION_MAT'); %Valvula de agua de recirculación V8MARCHA=additem(grupo,'planta_!Modo_Auto_M'); %Modo automático en marchaPARADA=additem(grupo,'planta_!Modo_Auto_P'); %Modo automático en parada

Archivo control_planta.m

El ejecutable incluido en este archivo es similar al de conectar.m. En este caso, además, abre la interfaz gráfica y se crean las variables globales para las nuevas funciones.

% Conecta MATLAB con OPC, declara variables globales para intercambiar% datos con el autómata de la planta y abre la interfaz con el usuario% propia de MATLAB.

clc;

%Declaración de variables globales%Grupoglobal da grupo;%Variables de entrada (sensores)global FT1 FT2 FT3 FT4 LT1 PT1 TT1 TT2 TT3 TT4 TT5;%Variables de salida (actuadores)global B1 B2 V4 V5 V8 PWM RES TERMO;

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.141

Page 7: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

%Variables de referenciaglobal FC1 FC2 FC4 LC1 TC5 Ratio;%Variables definidas por el usuarioglobal AUX_A AUX_B AUX_C AUX_D AUX_E;%Señalesglobal MARCHA PARADA;%Intermediasglobal AuxMat1 AuxMat2 AuxMat3 AuxMat4 AuxMat5;global BombaAlim BombaAlimConf BombaRecir BombaRecirConf;global CaudalCaliente CaudalFrio CaudalSalida CaudalRecir;global NivelDeposito PresionDeposito;global RefCaudalCaliente RefCaudalFrio RefCaudalRecir;global RefNivel RefRatio RefTemp;global Resistencia ResistenciaPWM ResTermo;global TempCaliente TempFria TempSalida TempRecir TempDeposito;global ValvulaCaliente ValvulaFria ValvulaRecir;%Propias de la aplicaciónglobal FuncionControl NumeroCiclos TiempoCiclo ArchivoDeExcel;global VarExcel niterexcel;VarExcel = zeros(1,25);

%Conexión con OPCda=opcda('127.0.0.1','Schneider-Aut.OFS.2');connect(da);grupo=addgroup(da);

%Declaración de variables de OPC:AuxMat1=additem(grupo,'planta_!Aux_Mat_1'); %Variable auxiliar definida por el usuarioAuxMat2=additem(grupo,'planta_!Aux_Mat_2'); %Variable auxiliar definida por el usuarioAuxMat3=additem(grupo,'planta_!Aux_Mat_3'); %Variable auxiliar definida por el usuarioAuxMat4=additem(grupo,'planta_!Aux_Mat_4'); %Variable auxiliar definida por el usuarioAuxMat5=additem(grupo,'planta_!Aux_Mat_5'); %Variable auxiliar definida por el usuarioBombaAlim=additem(grupo,'planta_!BOMBA_ALIM_MAT'); %Bomba de alimentación (orden de marcha)BombaAlimConf=additem(grupo,'planta_!conf_bomba_a'); %Bomba de alimentación (confirmación)BombaRecir=additem(grupo,'planta_!BOMBA_RECIR_MAT'); %Bomba de recirculación (orden de marcha)BombaRecirConf=additem(grupo,'planta_!conf_bomba_r'); %Bomba de recirculación (confirmación)CaudalCaliente=additem(grupo,'planta_!caudal_caliente'); %Caudal de agua calienteCaudalFrio=additem(grupo,'planta_!caudal_frio'); %Caudal de agua fríaCaudalSalida=additem(grupo,'planta_!caudal_salida'); %Caudal de agua saliente del depósitoCaudalRecir=additem(grupo,'planta_!caudal_recirculacion'); %Caudal de agua del circuito de recirculaciónNivelDeposito=additem(grupo,'planta_!niv_deposito'); %Nivel de agua del depositoPresionDeposito=additem(grupo,'planta_!presion_deposito'); %Presión del depósito

RefCaudalCaliente=additem(grupo,'planta_!RefCaudalCaliente'); %Referencia del caudal calienteRefCaudalFrio=additem(grupo,'planta_!RefCaudalFrio'); %Referencia del caudal fríoRefCaudalRecir=additem(grupo,'planta_!RefCaudalRecirculacion'); %Referencia del caudal de recirculaciónRefNivel=additem(grupo,'planta_!RefNivel'); %Referencia del nivel del depósitoRefRatio=additem(grupo,'planta_!RefNivProporcion'); %Referencia de proporción de agua de entradaRefTemp=additem(grupo,'planta_!RefTempDeposito'); %Referencia de temperatura del depósito

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.142

Page 8: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

Resistencia=additem(grupo,'planta_!RESISTENCIA_MAT'); %Resistencia del interior del depósito (orden de marcha)ResistenciaPWM=additem(grupo,'planta_!PWM_RESISTENCIA_MAT'); %Modulación por ancho de pulsos de la resistenciaResTermo=additem(grupo,'planta_!TERMO_MAT'); %Grupo caliente (orden de marcha)TempCaliente=additem(grupo,'planta_!tem_caliente'); %Temperatura de agua calienteTempFria=additem(grupo,'planta_!tem_fria'); %Temperatura de agua fríaTempSalida=additem(grupo,'planta_!tem_salida'); %Temperatura de saliente del depositosTempRecir=additem(grupo,'planta_!tem_recirculacion'); %Temperatura de agua recirculanteTempDeposito=additem(grupo,'planta_!tem_deposito'); %Temperatura del agua del depósitoValvulaCaliente=additem(grupo,'planta_!VAL_CALIENTE_MAT'); %Válvula de agua caliente V4ValvulaFria=additem(grupo,'planta_!VAL_FRIA_MAT'); %Válvula de agua fría V5ValvulaRecir=additem(grupo,'planta_!VAL_RECIRCULACION_MAT'); %Valvula de agua de recirculación V8MARCHA=additem(grupo,'planta_!Modo_Auto_M'); %Modo automático en marchaPARADA=additem(grupo,'planta_!Modo_Auto_P'); %Modo automático en parada

%Nombre corto% AUX_A=AuxMat1;% AUX_B=AuxMat2;% AUX_C=AuxMat3;% AUX_D=AuxMat4;% AUX_E=AuxMat5;% B1=BombaAlim;% B1C=BombaAlimConf;% B2=BombaRecir;% B2C=BombaRecirConf;% FT1=CaudalCaliente;% FT2=CaudalFrio;% FT3=CaudalSalida;% FT4=CaudalRecir;% LT1=Nivel;% PT1=Presion;% PWM=ResistenciaPWM;% RES=Resistencia;% TERMO=Termo;% TT1=TempCaliente;% TT2=TempFria;% TT3=TempSalida;% TT4=TempRecir;% TT5=TempDeposito;% V4=ValvulaCaliente;% V5=ValvulaFria;% V8=ValvulaRecir

%Apertura de la interfaz con el usuario.gui_mat;

Archivo desconectar.m

Con el ejecutable desconectar, descrito en este archivo, se eliminan las variables globales y la conexión creada en los dos archivos anteriores (conectar y control_planta). El código del archivo se ejecuta al pulsar el botón “salir” de la interfaz gráfica. También puede cerrarse la ventana para mantener las variables y la conexión, y ejecutarse manualmente más tarde.

%Eliminacion de variables y desconexión de OPC:

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.143

Page 9: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

%Grupoglobal da grupo; %Variables de entrada (sensores)global FT1 FT2 FT3 FT4 LT1 PT1 TT1 TT2 TT3 TT4 TT5; %Variables de salida (actuadores)global B1 B2 V4 V5 V8 PWM RES TERMO; %Variables de referenciaglobal FC1 FC2 FC4 LC1 TC5 Ratio; %Variables definidas por el usuarioglobal AUX_A AUX_B AUX_C AUX_D AUX_E; %Señalesglobal MARCHA PARADA; %Intermediasglobal AuxMat1 AuxMat2 AuxMat3 AuxMat4 AuxMat5; global BombaAlim BombaAlimConf BombaRecir BombaRecirConf; global CaudalCaliente CaudalFrio CaudalSalida CaudalRecir; global NivelDeposito PresionDeposito; global RefCaudalCaliente RefCaudalFrio RefCaudalRecir; global RefNivel RefRatio RefTemp; global Resistencia ResistenciaPWM ResTermo; global ValvulaCaliente ValvulaFria ValvulaRecir; global TempCaliente TempFria TempSalida TempRecir TempDeposito; %Propias de la aplicaciónglobal FuncionControl NumeroCiclos TiempoCiclo ArchivoDeExcel; global VarExcel niterexcel;

%Variables de entrada (sensores)clear global B1C B2C FT1 FT2 FT3 FT4 LT1 PT1 TT1 TT2 TT3 TT4 TT5;%Variables de salida (actuadores)clear global B1 B2 V4 V5 V8 PWM RES TERMO;%Variables de referenciaclear global FC1 FC2 FC4 LC1 TC5 Ratio;%Variables definidas por el usuarioclear global AUX_A AUX_B AUX_C AUX_D AUX_E;%Señalesclear global MARCHA PARADA;%Intermediasclear global AuxMat1 AuxMat2 AuxMat3 AuxMat4 AuxMat5;clear global BombaAlim BombaAlimConf BombaRecir BombaRecirConf;clear global CaudalCaliente CaudalFrio CaudalSalida CaudalRecir;clear global NivelDeposito PresionDeposito;clear global RefCaudalCaliente RefCaudalFrio RefCaudalRecir;clear global RefNivel RefRatio RefTemp;clear global Resistencia ResistenciaPWM ResTermo;clear global ValvulaCaliente ValvulaFria ValvulaRecir;clear global TempCaliente TempFria TempSalida TempRecir TempDeposito;%Propias de la aplicaciónclear global FuncionControl NumeroCiclos TiempoCiclo ArchivoDeExcel;clear global VarExcel niterexcel;%Grupodisconnect(da); clear global da grupo;

Archivo gui_mat.m

Este es el archivo asociado a la interfaz gráfica, y por lo tanto el más largo. En él se describen los procedimientos al crear y modificar cada elemento de control (casillas

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.144

Page 10: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

de verificación, campos de texto y botones). Parte de las funciones aquí mostradas se crean automáticamente al durante la edición de la interfaz gráfica (ver ayuda relacionada con el editor GUIDE de MATLAB).

function varargout = gui_mat(varargin) % GUI_MAT M-file for gui_mat.fig% GUI_MAT, by itself, creates a new GUI_MAT or raises the existing% singleton*.%% H = GUI_MAT returns the handle to a new GUI_MAT or the handle to% the existing singleton*.%% GUI_MAT('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in GUI_MAT.M with the given input arguments.%% GUI_MAT('Property','Value',...) creates a new GUI_MAT or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before gui_mat_OpeningFunction gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to gui_mat_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help gui_mat

% Last Modified by GUIDE v2.5 08-May-2010 19:03:35

% Begin initialization code - DO NOT EDITgui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @gui_mat_OpeningFcn, ... 'gui_OutputFcn', @gui_mat_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end

if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end% End initialization code - DO NOT EDIT

% --- Executes just before gui_mat is made visible.function gui_mat_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to gui_mat (see VARARGIN)

% Choose default command line output for gui_mathandles.output = hObject;

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.145

Page 11: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

% Update handles structureguidata(hObject, handles);

% UIWAIT makes gui_mat wait for user response (see UIRESUME)% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.function varargout = gui_mat_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structurevarargout{1} = handles.output;

% Salir: Al pulsar el botónfunction pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)close(gcbf);desconectar;

% Ayuda: Al pulsar el botón:function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)pause on;ayuda;%Aquí tengo que llamar a la función de ayuda.

% Ejecutar: Al pulsar el botón:function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

%Variables globales%Variables de entrada (sensores)global FT1 FT2 FT3 FT4 LT1 PT1 TT1 TT2 TT3 TT4 TT5; %Variables de salida (actuadores)global B1 B2 V4 V5 V8 PWM RES TERMO; %Variables de referenciaglobal FC1 FC2 FC4 LC1 TC5 Ratio; %Variables definidas por el usuarioglobal AUX_A AUX_B AUX_C AUX_D AUX_E; %Señalesglobal MARCHA PARADA; %Intermediasglobal AuxMat1 AuxMat2 AuxMat3 AuxMat4 AuxMat5;

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.146

Page 12: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

global BombaAlim BombaAlimConf BombaRecir BombaRecirConf; global CaudalCaliente CaudalFrio CaudalSalida CaudalRecir; global NivelDeposito PresionDeposito; global RefCaudalCaliente RefCaudalFrio RefCaudalRecir; global RefNivel RefRatio RefTemp; global Resistencia ResistenciaPWM ResTermo; global TempCaliente TempFria TempSalida TempRecir TempDeposito; global ValvulaCaliente ValvulaFria ValvulaRecir; %Propias de la aplicaciónglobal FuncionControl NumeroCiclos TiempoCiclo ArchivoDeExcel; global VarExcel niterexcel; %Variables locales intermedias:FT1_=0;FT2_=0;FT3_=0;FT4_=0;LT1_=0;TT1_=0;TT2_=0;TT3_=0;TT4_=0;TT5_=0;PT1_=0;B1_=0;B2_=0;

%Compruebo que la función es válidaif (length(FuncionControl) == 0); disp('Debe especificar una función de control.')

returnend

%Compruebo si hay que mandar un histórico a excelif (length(ArchivoDeExcel) > 0) [TIPO, HOJAS]=XLSFINFO(ArchivoDeExcel);

if (strcmp(TIPO,'Microsoft Excel Spreadsheet')) historiar=1; [i, NumHojas]=size(HOJAS); HOJA=NumHojas+1; clear i NumHojas;

else disp('El archivo de Excel indicado no se puede abrir.'); disp('Los resultados no se guardarán.'); historiar=0;

end clear TIPO NumHojas;else historiar=0; end

%Ciclo de inicialización:continuar=0;%Esperando a la señal para empezar.while(continuar==0) AutoParada=read(PARADA); AutoMarcha=read(MARCHA);

if (AutoParada.Value) pause(0.01);

else if (AutoMarcha.Value)

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.147

Page 13: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

continuar=1; else disp('La planta debe estar en modo automático para poder controlarla'); disp('desde MATLAB. Pase al modo Parada de configuración o Ensayo'); disp('en marcha y vuelva a intentarlo.'); disp(''); disp('Ejecución abortada'); return; end

endendclear continuar;

%Lecturalectura=read(AuxMat1);AUX_A=lectura.Value;lectura=read(AuxMat2);AUX_B=lectura.Value;lectura=read(AuxMat3);AUX_C=lectura.Value;lectura=read(AuxMat4);AUX_D=lectura.Value;lectura=read(AuxMat5);AUX_E=lectura.Value;lectura=read(BombaAlimConf); B1=lectura.Value;lectura=read(BombaRecirConf);B2=lectura.Value;lectura=read(CaudalCaliente); FT1=lectura.Value; lectura=read(RefCaudalCaliente);FC1=lectura.Value;lectura=read(CaudalFrio); FT2=lectura.Value; lectura=read(RefCaudalFrio); FC2=lectura.Value;lectura=read(CaudalSalida);FT3=lectura.Value; lectura=read(CaudalRecir); FT4=lectura.Value; lectura=read(RefCaudalRecir);FC4=lectura.Value;lectura=read(NivelDeposito);LT1=lectura.Value; lectura=read(RefNivel); LC1=lectura.Value;lectura=read(PresionDeposito); PT1=lectura.Value;lectura=read(RefRatio);Ratio=lectura.Value;lectura=read(Resistencia); RES=lectura.Value;lectura=read(ResistenciaPWM); PWM=lectura.Value; lectura=read(ResTermo); TERMO=lectura.Value; lectura=read(TempCaliente);TT1=lectura.Value; lectura=read(TempFria); TT2=lectura.Value;

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.148

Page 14: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

lectura=read(TempSalida); TT3=lectura.Value; lectura=read(TempRecir);TT4=lectura.Value; lectura=read(TempDeposito); TT5=lectura.Value; lectura=read(RefTemp); TC5=lectura.Value;lectura=read(ValvulaCaliente); V4=lectura.Value;lectura=read(ValvulaFria); V5=lectura.Value;lectura=read(ValvulaRecir);V8=lectura.Value;

%Inicio de la función de controlVariableInterna=feval(FuncionControl,'inicio');%Inicio de excelif (historiar==1) t=lectura.TimeStamp; contiterexcel=0; Linea={'Año' 'Mes' 'Día' 'Hora' 'Minuto' 'Segundo'}; xlswrite(ArchivoDeExcel, {'Título del Ensayo:'}, HOJA, 'A1'); xlswrite(ArchivoDeExcel, {'Inicio:'}, HOJA, 'A3'); xlswrite(ArchivoDeExcel, t, HOJA, 'B3'); xlswrite(ArchivoDeExcel, Linea, HOJA, 'B4'); fil=7; Linea2=[]; Linea3={};

if(VarExcel(1)) Linea2={'Inicio'}; Linea3=[{''};{''};{'Tiempo(s)'}];

endif(VarExcel(2))

Linea2=[Linea2 FT1]; Linea3=[Linea3 [{''};{''};{'Caudal Agua Caliente (l/min)'}]];

endif(VarExcel(3))

Linea2=[Linea2 FT2]; Linea3=[Linea3 [{''};{''};{'Caudal Agua Fria (l/min)'}]];

endif(VarExcel(4))

Linea2=[Linea2 FT3]; Linea3=[Linea3 [{''};{''};{'Caudal Agua Salida (l/min)'}]];

endif(VarExcel(5))

Linea2=[Linea2 FT4]; Linea3=[Linea3 [{''};{''};{'Caudal Agua Recirculación (l/min)'}]];

endif(VarExcel(6))

Linea2=[Linea2 LT1]; Linea3=[Linea3 [{''};{''};{'Nivel (cm)'}]];

endif(VarExcel(7))

Linea2=[Linea2 TT1]; Linea3=[Linea3 [{''};{''};{'Temperatura Agua Caliente (ºC)'}]];

endif(VarExcel(8))

Linea2=[Linea2 TT2]; Linea3=[Linea3 [{''};{''};{'Temperatura Agua Fría (ºC)'}]];

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.149

Page 15: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

endif(VarExcel(9))

Linea2=[Linea2 TT3]; Linea3=[Linea3 [{''};{''};{'Temperatura Agua Salida (ºC)'}]];

endif(VarExcel(10))

Linea2=[Linea2 TT4]; Linea3=[Linea3 [{''};{''};{'Temperatura Agua Recirculación (ºC)'}]];

endif(VarExcel(11))

Linea2=[Linea2 TT5]; Linea3=[Linea3 [{''};{''};{'Temperatura Agua Depósito (ºC)'}]];

endif(VarExcel(12))

Linea2=[Linea2 PT1]; Linea3=[Linea3 [{''};{''};{'Presión Depósito (bar)'}]];

endif(VarExcel(13))

Linea2=[Linea2 V4]; Linea3=[Linea3 [{''};{''};{'Válvula Agua Caliente (%)'}]];

endif(VarExcel(14))

Linea2=[Linea2 V5]; Linea3=[Linea3 [{''};{''};{'Válvula Agua Fría (%)'}]];

endif(VarExcel(15))

Linea2=[Linea2 V8]; Linea3=[Linea3 [{''};{''};{'Válvula Agua Recirculación (%)'}]];

endif(VarExcel(16))

Linea2=[Linea2 PWM]; Linea3=[Linea3 [{''};{''};{'Anchura de Pulsos PWM (%)'}]];

endif(VarExcel(17))

Linea2=[Linea2 AUX_A]; Linea3=[Linea3 [{''};{''};{'Variable auxiliar A'}]];

endif(VarExcel(18))

Linea2=[Linea2 AUX_B]; Linea3=[Linea3 [{''};{''};{'Variable auxiliar B'}]];

endif(VarExcel(19))

Linea2=[Linea2 AUX_C]; Linea3=[Linea3 [{''};{''};{'Variable auxiliar C'}]];

endif(VarExcel(20))

Linea2=[Linea2 AUX_D]; Linea3=[Linea3 [{''};{''};{'Variable auxiliar D'}]];

endif(VarExcel(21))

Linea2=[Linea2 AUX_E]; Linea3=[Linea3 [{''};{''};{'Variable auxiliar E'}]];

endif(VarExcel(22))

Linea2=[Linea2 B1]; Linea3=[Linea3 [{''};{''};{'Bomba Alimentación'}]];

endif(VarExcel(23))

Linea2=[Linea2 B2]; Linea3=[Linea3 [{''};{''};{'Bomba Recirculación'}]];

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.150

Page 16: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

endif(VarExcel(24))

Linea2=[Linea2 RES]; Linea3=[Linea3 [{''};{''};{'Resistencia Depósito'}]];

endif(VarExcel(25))

Linea2=[Linea2 TERMO]; Linea3=[Linea3 [{''};{''};{'Resistencia Grupo Termo'}]];

end Linea=Linea3(3,:); Linea3(1,1)={'Viene de la página anterior'}; col=length(Linea); xlswrite(ArchivoDeExcel, Linea, HOJA, celda(6,1)); xlswrite(ArchivoDeExcel, Linea2, HOJA, celda(7,1)); clear Linea2; Linea=zeros(1,col); end

tic;contciclos=0;

%Todos los demás ciclos:while((NumeroCiclos<=0) || (contciclos<NumeroCiclos)) contciclos=contciclos+1;

%Lectura lectura=read(AuxMat1); AUX_A=lectura.Value; lectura=read(AuxMat2); AUX_B=lectura.Value; lectura=read(AuxMat3); AUX_C=lectura.Value; lectura=read(AuxMat4); AUX_D=lectura.Value; lectura=read(AuxMat5); AUX_E=lectura.Value; lectura=read(BombaAlimConf); B1=lectura.Value; lectura=read(BombaRecirConf); B2=lectura.Value; lectura=read(CaudalCaliente); FT1=lectura.Value; lectura=read(CaudalFrio); FT2=lectura.Value; lectura=read(CaudalSalida); FT3=lectura.Value; lectura=read(CaudalRecir); FT4=lectura.Value; lectura=read(NivelDeposito); LT1=lectura.Value; lectura=read(PresionDeposito); PT1=lectura.Value; lectura=read(Resistencia); RES=lectura.Value; lectura=read(ResistenciaPWM); PWM=lectura.Value; lectura=read(ResTermo); TERMO=lectura.Value; lectura=read(TempCaliente); TT1=lectura.Value;

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.151

Page 17: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

lectura=read(TempFria); TT2=lectura.Value; lectura=read(TempSalida); TT3=lectura.Value; lectura=read(TempRecir); TT4=lectura.Value; lectura=read(TempDeposito); TT5=lectura.Value; lectura=read(ValvulaCaliente); V4=lectura.Value; lectura=read(ValvulaFria); V5=lectura.Value; lectura=read(ValvulaRecir); V8=lectura.Value; AutoMarcha=read(MARCHA);

%Valor original de las variables de sólo lectura t=toc; FT1_=FT1; FT2_=FT2; FT3_=FT3; FT4_=FT4; LT1_=LT1; TT1_=TT1; TT2_=TT2; TT3_=TT3; TT4_=TT4; TT5_=TT5; PT1_=PT1; B1_=B1; B2_=B2;

%Llamada a la función de control VariableInterna=feval(FuncionControl, VariableInterna);

%Escritura write(AuxMat1, AUX_A); write(AuxMat2, AUX_B); write(AuxMat3, AUX_C); write(AuxMat4, AUX_D); write(AuxMat5, AUX_E); write(BombaAlim, B1); write(BombaRecir, B2); write(RefCaudalCaliente,FC1) write(RefCaudalFrio,FC2); write(RefCaudalRecir,FC4); write(RefNivel,LC1); write(RefTemp,TC5); write(RefRatio,Ratio); write(Resistencia, RES); write(ResTermo, TERMO); write(ValvulaCaliente, V4); write(ValvulaFria, V5); write(ValvulaRecir, V8); write(ResistenciaPWM, PWM);

%Excelif (historiar==1)

contiterexcel=contiterexcel+1; if (contiterexcel>=niterexcel)

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.152

Page 18: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

contiterexcel=0; fil=fil+1; if (fil>=65536) xlswrite(ArchivoDeExcel, 'Sigue en la próxima página', HOJA, A65536); HOJA=HOJA+1; xlswrite(ArchivoDeExcel, Linea3, HOJA, A1); fil=4; end col=0; if(VarExcel(1)) col=col+1; Linea(col)=t; end if(VarExcel(2)) col=col+1; Linea(col)=FT1_; end if(VarExcel(3)) col=col+1; Linea(col)=FT2_; end if(VarExcel(4)) col=col+1; Linea(col)=FT3_; end if(VarExcel(5)) col=col+1; Linea(col)=FT4_; end if(VarExcel(6)) col=col+1; Linea(col)=LT1_; end if(VarExcel(7)) col=col+1; Linea(col)=TT1_; end if(VarExcel(8)) col=col+1; Linea(col)=TT2_; end if(VarExcel(9)) col=col+1; Linea(col)=TT3_; end if(VarExcel(10)) col=col+1; Linea(col)=TT4_; end if(VarExcel(11)) col=col+1; Linea(col)=TT5_; end if(VarExcel(12)) col=col+1; Linea(col)=PT1_; end if(VarExcel(13)) col=col+1; Linea(col)=V4;

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.153

Page 19: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

end if(VarExcel(14)) col=col+1; Linea(col)=V5; end if(VarExcel(15)) col=col+1; Linea(col)=V8; end if(VarExcel(16)) col=col+1; Linea(col)=PWM; end if(VarExcel(17)) col=col+1; Linea(col)=AUX_A; end if(VarExcel(18)) col=col+1; Linea(col)=AUX_B; end if(VarExcel(19)) col=col+1; Linea(col)=AUX_C; end if(VarExcel(20)) col=col+1; Linea(col)=AUX_D; end if(VarExcel(21)) col=col+1; Linea(col)=AUX_E; end if(VarExcel(22)) col=col+1; Linea(col)=B1_; end if(VarExcel(23)) col=col+1; Linea(col)=B2_; end if(VarExcel(24)) col=col+1; Linea(col)=RES; end if(VarExcel(25)) col=col+1; Linea(col)=TERMO; end xlswrite(ArchivoDeExcel, Linea, HOJA, celda(fil,1)); end

end

%Salida del bucle y de la funciónif (AutoMarcha.Value==0)

disp('El modo automático ya no está en marcha'); disp('Saliendo de la función'); return

end

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.154

Page 20: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

%Espera de sincronizaciónwhile (toc<(TiempoCiclo*contciclos))

AutoMarcha=read(MARCHA); if (AutoMarcha.Value==0) disp('El modo automático ya no está en marcha'); disp('Saliendo de la función'); return end

endend

% Función de control: Al cambiar el textofunction edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text% str2double(get(hObject,'String')) returns contents of edit1 as a doubleglobal FuncionControl; FuncionControl = get(hObject,'String');

% --- Executes during object creation, after setting all properties.function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.global FuncionControl; if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');endset(hObject,'String','');FuncionControl = '';

% Tiempo de ciclo: Al cambiar el textofunction edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text% str2double(get(hObject,'String')) returns contents of edit2 as a doubleglobal TiempoCiclo; TiempoCiclo = str2double(get(hObject,'String'));

% --- Executes during object creation, after setting all properties.function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.155

Page 21: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.global TiempoCiclo; if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');endset(hObject,'String','1');TiempoCiclo = 1;

% Número de ciclos: Al cambiar el textofunction edit3_Callback(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text% str2double(get(hObject,'String')) returns contents of edit3 as a doubleglobal NumeroCiclos; NumeroCiclos = str2double(get(hObject,'String'));

% --- Executes during object creation, after setting all properties.function edit3_CreateFcn(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.global NumeroCiclos; if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');endset(hObject,'String','0');NumeroCiclos=0;

% Archivo de Excel: Al cambiar el textofunction edit4_Callback(hObject, eventdata, handles) % hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit4 as text% str2double(get(hObject,'String')) returns contents of edit4 as a doubleglobal ArchivoDeExcel; ArchivoDeExcel=get(hObject,'String');

% --- Executes during object creation, after setting all properties.function edit4_CreateFcn(hObject, eventdata, handles) % hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.156

Page 22: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.global ArchivoDeExcel; if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');endset(hObject,'String','');ArchivoDeExcel='';

function edit5_Callback(hObject, eventdata, handles) % hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit5 as text% str2double(get(hObject,'String')) returns contents of edit5 as a doubleglobal niterexcel; niterexcel=str2double(get(hObject,'String'));

% --- Executes during object creation, after setting all properties.function edit5_CreateFcn(hObject, eventdata, handles) % hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.global niterexcel; if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');endset(hObject,'string',1);niterexcel=1;

% --- Executes on button press in checkbox_t.function checkbox_t_Callback(hObject, eventdata, handles) % hObject handle to checkbox_t (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_tglobal VarExcel; VarExcel(1)=get(hObject,'Value');

% --- Executes on button press in checkbox_FT1.function checkbox_FT1_Callback(hObject, eventdata, handles) % hObject handle to checkbox_FT1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_FT1global VarExcel; VarExcel(2)=get(hObject,'Value');

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.157

Page 23: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

% --- Executes on button press in checkbox_FT2.function checkbox_FT2_Callback(hObject, eventdata, handles) % hObject handle to checkbox_FT2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_FT2global VarExcel; VarExcel(3)=get(hObject,'Value');

% --- Executes on button press in checkbox_FT3.function checkbox_FT3_Callback(hObject, eventdata, handles) % hObject handle to checkbox_FT3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_FT3global VarExcel; VarExcel(4)=get(hObject,'Value');

% --- Executes on button press in checkbox_FT4.function checkbox_FT4_Callback(hObject, eventdata, handles) % hObject handle to checkbox_FT4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_FT4global VarExcel; VarExcel(5)=get(hObject,'Value');

% --- Executes on button press in checkbox_LT1.function checkbox_LT1_Callback(hObject, eventdata, handles) % hObject handle to checkbox_LT1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_LT1global VarExcel; VarExcel(6)=get(hObject,'Value');

% --- Executes on button press in checkbox_TT1.function checkbox_TT1_Callback(hObject, eventdata, handles) % hObject handle to checkbox_TT1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_TT1global VarExcel; VarExcel(7)=get(hObject,'Value');

% --- Executes on button press in checkbox_TT2.function checkbox_TT2_Callback(hObject, eventdata, handles) % hObject handle to checkbox_TT2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_TT2global VarExcel; VarExcel(8)=get(hObject,'Value');

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.158

Page 24: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

% --- Executes on button press in checkbox_TT3.function checkbox_TT3_Callback(hObject, eventdata, handles) % hObject handle to checkbox_TT3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_TT3global VarExcel; VarExcel(9)=get(hObject,'Value');

% --- Executes on button press in checkboxTT4.function checkboxTT4_Callback(hObject, eventdata, handles) % hObject handle to checkboxTT4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkboxTT4global VarExcel; VarExcel(10)=get(hObject,'Value');

% --- Executes on button press in checkboxTT5.function checkboxTT5_Callback(hObject, eventdata, handles) % hObject handle to checkboxTT5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkboxTT5global VarExcel; VarExcel(11)=get(hObject,'Value');

% --- Executes on button press in checkbox_PT1.function checkbox_PT1_Callback(hObject, eventdata, handles) % hObject handle to checkbox_PT1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_PT1global VarExcel; VarExcel(12)=get(hObject,'Value');

% --- Executes on button press in checkbox_V4.function checkbox_V4_Callback(hObject, eventdata, handles) % hObject handle to checkbox_V4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_V4global VarExcel; VarExcel(13)=get(hObject,'Value');

% --- Executes on button press in checkbox_V5.function checkbox_V5_Callback(hObject, eventdata, handles) % hObject handle to checkbox_V5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_V5global VarExcel; VarExcel(14)=get(hObject,'Value');

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.159

Page 25: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

% --- Executes on button press in checkbox_V8.function checkbox_V8_Callback(hObject, eventdata, handles) % hObject handle to checkbox_V8 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_V8global VarExcel; VarExcel(15)=get(hObject,'Value');

% --- Executes on button press in checkbox_PWM.function checkbox_PWM_Callback(hObject, eventdata, handles) % hObject handle to checkbox_PWM (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_PWMglobal VarExcel; VarExcel(16)=get(hObject,'Value');

% --- Executes on button press in checkbox_A.function checkbox_A_Callback(hObject, eventdata, handles) % hObject handle to checkbox_A (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_Aglobal VarExcel; VarExcel(17)=get(hObject,'Value');

% --- Executes on button press in checkbox_B.function checkbox_B_Callback(hObject, eventdata, handles) % hObject handle to checkbox_B (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_Bglobal VarExcel; VarExcel(18)=get(hObject,'Value');

% --- Executes on button press in checkbox_C.function checkbox_C_Callback(hObject, eventdata, handles) % hObject handle to checkbox_C (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_Cglobal VarExcel; VarExcel(19)=get(hObject,'Value');

% --- Executes on button press in checkbox_D.function checkbox_D_Callback(hObject, eventdata, handles) % hObject handle to checkbox_D (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_Dglobal VarExcel; VarExcel(20)=get(hObject,'Value');

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.160

Page 26: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

% --- Executes on button press in checkbox_E.function checkbox_E_Callback(hObject, eventdata, handles) % hObject handle to checkbox_E (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_Eglobal VarExcel; VarExcel(21)=get(hObject,'Value');

% --- Executes on button press in checkbox_B1.function checkbox_B1_Callback(hObject, eventdata, handles) % hObject handle to checkbox_B1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_B1global VarExcel; VarExcel(22)=get(hObject,'Value');

% --- Executes on button press in checkbox_B2.function checkbox_B2_Callback(hObject, eventdata, handles) % hObject handle to checkbox_B2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_B2global VarExcel; VarExcel(23)=get(hObject,'Value');

% --- Executes on button press in checkbox_RES.function checkbox_RES_Callback(hObject, eventdata, handles) % hObject handle to checkbox_RES (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_RESglobal VarExcel; VarExcel(24)=get(hObject,'Value');

% --- Executes on button press in checkbox_TERMO.function checkbox_TERMO_Callback(hObject, eventdata, handles) % hObject handle to checkbox_TERMO (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox_TERMOglobal VarExcel; VarExcel(25)=get(hObject,'Value');

Archivo plantilla.m

Este archivo no se utiliza en la programación de la interfaz gráfica ni en la conexión con OPC. El archivo se suministra como plantilla para que el usuario cree sus propias funciones de control con mayor facilidad.

function Salida=plantilla(Entrada)

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.161

Page 27: Anejo 2: Programa completo de MATLABbibing.us.es/proyectos/abreproy/4802/descargar... · Anejo 2: Programa completo de MATLAB A continuación se muestran el código (en crudo) de

%Variables de entrada (sensores)global FT1 FT2 FT3 FT4 LT1 PT1 TT1 TT2 TT3 TT4 TT5;

%Variables de salida (actuadores)global B1 B2 V4 V5 V8 PWM RES TERMO;

%Variables definidas por el usuarioglobal AUX_A AUX_B AUX_C AUX_D AUX_E;

if (ischar(Entrada)) %Entrada es una cadena de caracteresif(strcmp(Entrada,'inicio'))

%Inicializar el algoritmo aquí Salida=[]; %Asociar un valor a Salida

else error('Entrada no válida');

endelse

%Escribir el algoritmo de control aquí%Dar valores a B1, B2, V4, V5, V8, RES, PWM y/o TERMO

%Actualizar el valor de Salida para usarlo como siguiente Entrada Salida=Entrada; %Sustituir por la que será la próxima entrada

end

Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.162