Está en la página 1de 9

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

78

5. Interfaz Gráfica de MATLAB


5.1 Introducción a MATLAB .........................................................Pag. 79

5.2 Conexión con OPC ...................................................................Pag. 79

5.3 Interfaz gráfica..........................................................................Pag. 82

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

5.1 Introducción a MATLAB

Si bien las pantallas de Vijeo Citect son una herramienta adecuada para el
manejo de la planta por parte del usuario, no es por ello menos cierto que la
programación en Vijeo de un algoritmo de control es difícil y problemática. Por ello, se
ha añadido a la aplicación la posibilidad de programar los algoritmos de control en
MATLAB para su posterior ensayo en la planta.

MATLAB es una herramienta de cálculo, considerablemente flexible y de


amplia utilidad. MATLAB cuenta con una gran variedad de herramientas para distintas
aplicaciones (toolbox) y también permite al usuario crear las suyas propias en un
lenguaje sencillo. Como contrapartida, MATLAB es lento al ejecutar estas funciones.
Puesto que los tiempos característicos de la planta no son particularmente cortos, se ha
considerado que la velocidad de MATLAB será suficiente para la aplicación.

Para este proyecto en concreto se necesitarán tres toolbox en particular: el de


OPC, que servirá para conectar con el autómata; el de GUIDE, gracias al cual se ha
desarrollado una aplicación gráfica, y el de funciones de entradas y salidas, con el que
se crearán históricos en Excel. Estas herramientas pueden encontrarse en las siguientes
carpetas:

C:\Archivos de programa\MATLAB\R2007a\toolbox\opc\opc7
C:\Archivos de programa\MATLAB\R2007a\toolbox\matlab\guide
C:\Archivos de programa\MATLAB\R2007a\toolbox\matlab\iofun

Se recomienda utilizar la versión 7.4.0 de MATLAB (también llamada “versión


2007”) por haber sido programada la aplicación sobre dicha versión.

5.2 Conexión con OPC

Para la conexión de MATLAB con OPC, deben haberse seguido los primeros 5
pasos indicados en la sección 4.1 (conexión con OPC). Por comodidad, también se
resumen aquí.

1º Abrir la pantalla de variables de Unity y seleccionar todas las variables que se


deseen exportar. Hacer clic sobre ellas con el botón derecho y escoger “Exportación
seleccionada” en el menú.

2º Exportar las variables a un archivo de tipo XVM.

3º Abrir la aplicación OFS Configuration Tool y crear un nuevo alias (si es que no está
creado ya). En este proyecto el alias debe llamarse “Planta_”.

4º Comprobar (y en su caso rectificar) que las siguientes propiedades del alias Planta_:
¾ Device address: 84.3.54.82 (para el autómata) ó 127.0.0.1 (para el simulador)

7
Sustituir “C:\Archivos de programa\MATLAB\R2007a” por el directorio de instalación. Para la versión
7.4.0 de MATLAB, éste es el directorio de instalación por defecto.
Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.80

¾ Symbol table file: El nombre del archivo al que se exportaron las variables en el
segundo paso.
¾ Preload settings: Device
¾ Consistency level: Debug
Guardar la configuración y salir.

5º Volver a Unity Pro, conectar con el autómata o con el simulador y transferir el


programa.

No es necesario seguir con los otros pasos, ya que el acceso de MATLAB a las
variables del autómata no depende de la conexión entre OPC y Vijeo.

Una vez que las variables de Unity están exportadas a OPC, se deben importar
desde MATLAB. La aplicación creada en este proyecto puede hacer esto, pero se
detallan aquí los pasos a seguir para futuros proyectos.

1º Declarar una variable global por cada variable que se vaya a importar. Por ejemplo,
para importar la variable asociada a la válvula de recirculación creamos una variable
global llamada “ValvulaRecir”:

global ValvulaRecir;

Se deben declarar también como globales las variables de la conexión y del grupo de
trabajo que se vayan a usar:

global da grupo;

2º Definir una conexión con OPC y conectar. En general el identificador del servidor
de OPC es para Unity es “Schneider-Aut.OFS.2”. La conexión se hace así:

da=opcda('127.0.0.1','Schneider-Aut.OFS.2'); %definir conexión da


connect(da); %conectar a la conexión da

Si el identificador del servidor fuera otro, se podría conocer el nombre de éste así:

servidores = opcserverinfo('127.0.0.1'); %buscar todos los servidores de OPC


allservers=cliente.ServerID %(sin “;”)

Al hacer esto se mostrará la lisa de servidores de OPC. De entre todos ellos se


deberá identificar el de la aplicación.

3º Crear un grupo de trabajo y definir las variables del mismo. Las variables del grupo
son estructuras en las que se guardan los valores de las variables importadas.

grupo = addgroup(da); %Añadir conexión “da” al grupo de trabajo “grupo”


ValvulaRecir=additem('127.0.0.1', 'planta_!VAL_RECIRCULACION_MAT');

En este ejemplo se asocia la variable “VAL_RECIRCULACION_MAT” (de Unity)


a la estructura “ValvulaRecir” de MATLAB. Como la estructura es una variable
global, cualquier función de MATLAB podrá tener acceso a ella. No se pueden
Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.81

asociar a MATLAB las variables de entrada o salida del autómata, sino solamente
las marcas internas.

Para leer y escribir en estas variables, se usan las funciones read y write. Por
ejemplo, si se desea leer el valor de la válvula de recirculación, se ejecuta lo siguiente:

ValorLeido=read(ValvulaRecir);

ValorLeido será una estructura con los campos ItemID, Value, Quality,
TimeStamp y Error. El valor se almacena en Value. El instante de lectura se almacena
en TimeStamp (lo cual es útil si se desea historiar el tiempo de ejecución de un
algoritmo). Quality y Error indican la calidad de lectura y los errores producidos.
ItemID contiene el nombre de la variable original (con el prefijo de OPC y un signo de
exclamación). Así pues, en este ejemplo la apertura de la válvula de recirculación es:

V8=ValorLeido.Value;

Si por el contrario se quiere escribir un valor en una variable, sólo es necesario


proporcionar este valor (no se necesita el resto de la estructura):

write(ValvulaRecir, 30);

Para desconectar MATLAB de OPC de forma segura antes de cerrar la


aplicación, se debe utilizar la función disconect:

disconnect(da);

Una vez hecho esto, se recomienda eliminar las variables globales:

clear global ValvulaRecir da grupo;

Para agilizar el proceso de conexión y desconexión, se han creado las funciones


conectar y desconectar, que pueden ejecutarse desde la pantalla de comando o desde
cualquier otra función. Las variables creadas para las comunicaciones son las siguientes:

Nombre Descripción
BombaAlim Orden de marcha de la bomba de alimentación
BombaAlimConf Señal de confirmación de la bomba de alimentación
BombaRecir Orden de marcha de la bomba de recirculación
BombaRecirConf Señal de confirmación de la bomba de recirculación
CaudalCaliente Caudal del circuito de entrada de agua caliente
CaudalFrio Caudal del circuito de entrada de agua fría
CaudalSalida Caudal del circuito de salida de agua
CaudalRecir Caudal del circuito recirculación
NivelDeposito Nivel de agua del interior del depósito de trabajo
PresionDeposito Presión del interior del depósito de trabajo
Resistencia Orden de marcha de la resistencia del depósito de trabajo
ResistenciaPWM Porcentaje de tiempo de encendido de la modulación PWM
ResTermo Orden de marcha de la resistencia del grupo caliente
ValvulaCaliente Apertura de la válvula del circuito de entrada de agua caliente
Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.82

ValvulaFria Apertura de la válvula del circuito de entrada de agua fría


ValvulaRecir Apertura de la válvula del circuito de recirculación
TempCaliente Temperatura del circuito de entrada de agua caliente
TempFria Temperatura del circuito de entrada de agua fría
TempSalida Temperatura del circuito de salida de agua
TempRecir Temperatura del circuito de recirculación
TempDeposito Temperatura del agua del interior del depósito
AuxMat1
AuxMat2 Variables auxiliares de propósito general. Sus valores se muestran
AuxMat3 en el mímico de Vijeo Citect, lo que permite al usuario cambiar
AuxMat4 parámetros sin necesidad de reprogramar todo el algoritmo.
AuxMat5
RefCaudalCaliente Referencia de caudal de agua caliente
RefCaudalFrio Referencia de caudal de agua fría
RefCaudalRecir Referencia de caudal de agua de recirculación
RefNivel Referencia de nivel de agua del depósito
RefRatio Porcentaje de agua caliente de entrada para el algoritmo de nivel
RefTemp Referencia de temperatura del agua del depósito

5.3 Interfaz gráfica

Como ya se ha mencionado, se
ha creado una interfaz gráfica en
MATLAB para hacer más intuitiva la
labor del usuario. Esta interfaz consiste
en una ventana creada con el toolbox
GUIDE (GUI Design Environment) que
consta de varios casilleros que el
operario puede rellenar.

Después de que el usuario haya


programado su algoritmo en una función
de MATLAB, (ver programación), podrá
abrir esta ventana ejecutando
“control_planta”. Con esto, además se
establecerá la conexión entre MATLAB
y OPC y se crearán las variables
globales. Una vez abierta la ventana, en
el primer campo, el usuario debe indicar
el nombre de la función que ejecuta su
algoritmo. Esta función será llamada una
vez por cada ciclo de muestreo. Puesto
que el tiempo de ejecución del algoritmo
puede ser muy variable, se debe indicar
también (en el segundo casillero) la
duración en segundos del ciclo de Fig. 5.1: Interfaz gráfica de MATLAB.
control, es decir, el tiempo de muestreo.
Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.83

El algoritmo esperará a que se cumpla el periodo de muestreo antes de volver a ejecutar


la función. En cada ciclo de control, el programa hace las siguientes tareas:

1. Leer las variables de la planta (tanto si se usan como si no)


2. Ejecutar la función del usuario
3. Escribir el nuevo valor de las variables de la planta
4. Según el caso, enviar a Excel el valor de las variables

El tiempo indicado por el usuario debe ser suficientemente largo como para
realizar todas estas tareas. Si se cumple el tiempo de ciclo antes de terminar de ejecutar
un ciclo de control, el programa terminará de ejecutar este ciclo (como normalmente) y
empezará a ejecutar el siguiente inmediatamente después. El tiempo de retraso no se
acumula. Por ejemplo: si se ha impuesto un tiempo de ciclo de 3 segundos y el 2º ciclo
tarda 4 segundos en ejecutarse, entonces se impondrá un tiempo de ciclo de 2 segundos
(en lugar de 3) para el 3er ciclo. De esta manera los retrasos no se acumularán como
consecuencia de una duración de ciclo excesiva.

El usuario también debe proporcionar el tiempo de duración del ensayo. Esto se


hace introduciendo el número de ciclos en el tercer casillero. Por ejemplo, si el ciclo de
control tiene una duración de 5 segundos y el ensayo durará 10 minutos, se ejecutarán
120 ciclos de control.

Si se desea generar un histórico en Excel del ensayo, la aplicación puede


también automatizar la escritura en el mismo. Basta con indicar el nombre de un fichero
de Excel (previamente creado por el usuario) en el 4º campo. El fichero debe existir en
el path de MATLAB, y el nombre proporcionado debe contener la extensión del
mismo8. Probablemente no sea necesario mantener un registro de las variables en todos
los tiempos de muestreo, sino sólo cada cierto tiempo. En tal caso, el usuario puede
indicar al programa que escriba en Excel sólo cada cierto número de ciclos de control
escribiendo este número en “Número de ciclos entre muestras del histórico”.

La aplicación creará una nueva hoja para el archivo especificado (de modo que
se puedan hacer varios ensayos consecutivos y guardar los resultados en el mismo
fichero. La cabecera de la nueva hoja tendrá el siguiente aspecto:

Fig. 5.2: Fichero de Excel de salida.

8
Si no se da la extensión del archivo, MATLAB tratará de abrir el archivo del mismo nombre sin
extensión. Si este archivo no existe, mostrará un mensaje de alerta (warning) e intentará abrir el archivo
con el mismo nombre y la extensión xls. Si por el contrario existe un archivo con el nombre
proporcionado por el usuario y sin extensión (y no es un archivo de Microsoft Excel), se abortará la
ejecución y aparecerá un mensaje de error, ya que no se puede abrir el archivo.
Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.84

Puede observarse que se deja un espacio para el título del ensayo, y que se indica
la fecha y la hora a la que empezó. En esta hoja se incluirán periódicamente los valores
de las variables indicadas en las casillas de la parte inferior de la interfaz gráfica. Si el
número de muestras fuera demasiado alto como para llenar la hoja de Excel (el número
máximo de filas es 65536, que es el mayor valor alcanzable por un entero sin signo de
16 bits), se creará una hoja más, y se seguirá escribiendo en ella.

Para empezar el ensayo, el usuario debe llevar la planta al modo automático,


bien dejándola en “Parada de configuración” o bien en “Ensayo en marcha”. Una vez en
este estado, debe pulsarse el botón ejecutar de la interfaz gráfica. Esto creará la nueva
hoja en Excel y preparará el programa para su primer ciclo de control. Cuando se haya
llegado a este estado, si el estado de la planta no es “Ensayo en marcha”, el programa
esperará a que se alcance este estado (así se puede sincronizar con el inicio de algún
algoritmo interno del autómata). Una vez en marcha, el programa puede ser detenido en
cualquier momento haciendo que la planta salga del modo “Ensayo en marcha”. Por
ejemplo, si salta una alarma o se pulsa el botón de pánico, la ejecución del programa de
MATLAB será abortada. Este sistema también puede emplearse para ejecutar un
número indeterminado de ciclos de control, haciendo una parada de configuración para
indicar a MATLAB que el algoritmo debe detenerse.

La programación completa de la interfaz gráfica se encuentra en el anejo 2.

5.4 Programación

La programación de algoritmos en MATLAB puede hacerse de dos maneras:


bien utilizando la interfaz gráfica (por facilidad) o leyendo y escribiendo las variables
de forma manual (por eficiencia). En cualquiera de los casos, se recomienda evitar los
bucles de duración indeterminada (tipo while) y la recursividad, ya que MATLAB es
muy lento.

Si se pretende trabajar de forma manual, el programa debe llamar al ejecutable


“conectar”. Con esto se establecerá la conexión con OPC y se crearán las variables
globales expuestas en la tabla de la sección 5.2 (conexión con OPC y Excel). Para leer
el valor de las variables, úsese la función read (recuérdese que devuelve una estructura),
y para escribir, la función write. Cuando se haya terminado de utilizar la conexión con
OPC, debe lanzarse el ejecutable “desconectar” para cortar esta conexión. Aunque las
variables utilizadas se declaran como globales, si todo el algoritmo se describe en la
misma función (o si se pasan los valores como parámetros a las otras funciones), se
podrán tratar como locales, y no será necesario declararlas.

La programación de controladores preparada para ejecutarse con la interfaz


gráfica es más intuitiva, ya que no requiere el uso de las funciones read ni write. En este
caso el usuario programa una ley de control que se ejecuta periódicamente. La función
puede tener una variable de entrada y devolver una variable de salida. La salida de la
función en el ciclo n se tomará como entrada de la misma para el ciclo n+1. De esta
forma se pueden almacenar valores intermedios entre un ciclo y otro. Para el primer
ciclo, la entrada será una cadena de caracteres con la palabra ‘inicio’, que puede
utilizarse para hacer una inicialización del controlador.
Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.85

Las instrucciones para los actuadores no se devuelven a la salida, ni tampoco se


reciben como entrada. En lugar de eso, en la cabecera del programa deben declararse las
variables globales que se vayan a usar para enviar estos valores. Por ejemplo, el caudal
de agua de recirculación se almacena en la variable FF4 (el valor directamente, no toda
la estructura) y para usarlo, basta con escribir “global FF4;” en la cabecera de la
función. Siguiendo con el ejemplo, si a la vista de este caudal se quiere dar una apertura
del 60% a la válvula de recirculación, le asignamos este valor a la variable V8: V8=60.

A continuación se muestra una imagen para asociar las variables empleadas a


sus respectivos sensores y actuadores. Las variables de los actuadores están subrayadas.
Si se escribe sobre la variable de un sensor, el valor permanecerá en ella durante el resto
del ciclo de control, pero será reemplazado por la lectura del sensor en el ciclo
siguiente.

Fig. 5.3: Esquema de la planta con las variables de MATLAB.

Variable Tipo Significado


FT1 Sólo lectura Caudal de entrada de agua caliente
FT2 Sólo lectura Caudal de entrada de agua fría
FT3 Sólo lectura Caudal de agua de salida
FT4 Sólo lectura Caudal de agua de recirculación
LT1 Sólo lectura Nivel de agua del depósito
TT1 Sólo lectura Temperatura de agua caliente
TT2 Sólo lectura Temperatura de agua fría
TT3 Sólo lectura Temperatura de agua de salida
TT4 Sólo lectura Temperatura de agua de recirculación
TT5 Sólo lectura Temperatura de agua del depósito
V4 Lectura y escritura Válvula del circuito de agua caliente
V5 Lectura y escritura Válvula del circuito de agua fría
V8 Lectura y escritura Válvula del circuito de recirculación
PWM Lectura y escritura Porcentaje de tiempo de encendido de la PWM
Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.86

PT1 Sólo lectura Presión del depósito


B1 Lectura y escritura Bomba de alimentación
B2 Lectura y escritura Bomba de recirculación
RES Lectura y escritura Resistencia del depósito
TERMO Lectura y escritura Resistencia del grupo caliente
AUX_A Lectura y escritura
AUX_B Lectura y escritura
Variables definidas por el usuario para comunicaciones
AUX_C Lectura y escritura
con Vijeo.
AUX_D Lectura y escritura
AUX_E Lectura y escritura
FC1 Lectura y escritura Referencia de caudal de agua caliente
FC2 Lectura y escritura Referencia de caudal de agua fría
FC4 Lectura y escritura Referencia de caudal de recirculación
LC1 Lectura y escritura Referencia de nivel
TC5 Lectura y escritura Referencia de temperatura del depósito
Ratio Lectura y escritura Referencia de proporción de agua caliente (porcentaje)

También pueden declararse otras variables globales, que mantendrán su valor de


una ejecución de la función a la siguiente. Se adjunta una plantilla para la creación de
funciones de control aquí y en un archivo de MATLAB.

function Salida=probando(Entrada)

%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 usuario


global AUX_A AUX_B AUX_C AUX_D AUX_E;

if (ischar(Entrada)) %Entrada es una cadena de caracteres


if(STRCMP(Entrada,'inicio'))

%Inicializar el algoritmo aquí


Salida=0; %Asociar un valor a Salida

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

%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

end

También podría gustarte