• No se han encontrado resultados

Cuadro de Variables

3.4. Dise˜ no del Sistema

3.4.1. Configuraci´on del Entorno

En la secci´on 3.3, se introdujo la configuraci´on del entorno virtual de Python. A manera de refrescamiento, el lector recordar´a que dicho entorno se utiliz´o para desarrollar los modelos computacionales que, previamente, estaban basados en los modelos din´amicos planteados en la secci´on 3.2. En esta nueva secci´on, se pretende reutilizar el mismo entorno e introducir dos nuevos para completar un ambiente como el expuesto en la figura 3.6. El plan: aprovechar la interacci´on entre dichos entornos para simular un sistema de control y adquisici´on de datos.

Figura 3.6: Entorno virtual.

El directorio myControlProject contiene todos los archivos y directorios del proyecto. La estructura del ´arbol de archivos se ilustra en la figura 3.7.

Figura 3.7: Configuraci´on del ´arbol de archivos del entorno virtual del proyecto. Fuente propia.

Configuraci´on del Entorno mysql

El entorno m´as sencillo de configurar es el contenedor con el sistema MySQL. No hace falta crear unDockerfile, como se hizo con el caso dePython, ya que la imagen MySQLse puede descargar directamente delhubde Docker*. Para descargar la imagen se ejecuta en la terminal bash

1 ~/ m y C o n t r o l P r o j e c t $ d o c k e r p u l l m y s q l : l a t e s t

Esto extrae la imagen mysql:latest directamente del hub y la instala en el sistema local. Uno puede ejecutar el comando docker images para asegurarse de que ladocker imagese instal´o correctamente. Siguiendo el modelo de la figura 3.6, se procede a crear el contenedorbomburcomo sigue,

1 ~/ m y C o n t r o l P r o j e c t $ d o c k e r run - - n a m e b o m b u r - v $(pwd) / d a t a b a s e :/ var / lib / m y s q l \

2 - e M Y S Q L _ R O O T _ P A S S W O R D = f a r a d a y \

3 - - n e t w o r k b i l b o - - ip 1 7 2 . 3 1 . 0 . 2 \

4 - d m y s q l : l a t e s t

Para correr una terminal interactiva, dentro del contenedor bombur, se puede ejecutar en la terminal

1 ~/ m y C o n t r o l P r o j e c t $ d o c k e r e x e c - it b o m b u r / bin / b a s h

Una vez dentro del contenedor se puede ingresar al sistema MySQLcon el siguiente comando,

1 $ m y s q l - u r o o t - p

*

CAP´ITULO 3. MARCO METODOL ´OGICO P´agina 44

La base de datos control_system_db almacenar´a todas las tablas de los sensores con los datos, as´ı como la configuraci´on, de los sensores y posteriormente los modelos del sistemaDjango. La base de datos se crea a continuaci´on

1 mysql > C R E A T E D A T A B A S E c o n t r o l _ s y s t e m _ d b ;

Una de las grandes ventajas de utilizar Docker es que, una vez finalizada la simulaci´on y se hayan hecho los ajustes, las mismas docker image se puede utilizar para generar los entornos de producci´on.

Configuraci´on del Entorno Django

La configuraci´on del servidor web es la m´as compleja de todas, as´ı que la presente secci´on se limita a demostrar la composici´on del entorno virtual, la base de datos y cualquier otro c´odigo que concierne al sistema de control solamente. En general, el servidor se configura siguiendo los pasos de la documentaci´on oficial (Django Software Foundation, 2020). Primero lo primero, se debe crear la docker image* como sigue,

1 ~/ m y C o n t r o l P r o j e c t / D j a n g o $ d o c k e r b u i l d - - tag c o n t r o l _ d j a n g o : 0 . 1 .

Lo siguiente es crear el contenedor ejecutando,

1 ~/ m y C o n t r o l P r o j e c t $ d o c k e r run - t - v $(pwd) / D j a n g o / a p a c h e :/ etc / a p a c h e 2 \

2 - v $(pwd) / D j a n g o / src :/ usr / src / app - w / usr / src / app \

3 - p 8 0 0 0 : 8 0 0 0 - p 8 0 : 8 0 - - n a m e b o f u r \

4 - - n e t w o r k b i l b o - - ip 1 7 2 . 3 1 . 0 . 3 \

5 - d c o n t r o l _ d j a n g o : 0 . 1

y finalmente se corre la siguiente l´ınea para ejecutar una terminal interactiva dentro del contenedor.

1 ~/ m y C o n t r o l P r o j e c t $ d o c k e r e x e c - it b o f u r / bin / b a s h

Ya dentro del contenedor se debe crear el proyecto system.

1 r o o t @ c o n t a i n e r _ i d :/ usr / src / app /# django - a d m i n c r e a t e p r o j e c t s y s t e m

Djangocrea dentro del directoriosystemtodos los archivos, y dem´as directorios, necesarios para la configuraci´on del servidor. Por orden, se cambia el nombre del directoriosystemacontrol system.

Por defecto Django utiliza el sistema sqlite para administrar las bases de datos. Para cambiar esta configuraci´on se edita el archivocontrol system/settings.pycomo sigue

1 D A T A B A S E S = { 2 ’ d e f a u l t ’: { 3 ’ E N G I N E ’: ’ d j a n g o . db . b a c k e n d s . m y s q l ’, 4 ’ O P T I O N S ’: { 5 ’ r e a d _ d e f a u l t _ f i l e ’: os . p a t h . j o i n ( B A S E _ D I R , ’ m y s q l / my . cnf ’) 6 } , 7 } 8 } *

El archivomysql/my.cnfcontiene la informaci´on de configuraci´on y credenciales para acceder a la base de datos inicializada en la secci´on 3.4.1.

Modelos de Django

En la secci´on 2.3.4 se introdujeron algunos conceptos y elementos deDjango. En esta secci´on se explica c´omo crear la aplicaci´on que administrar´a la interacci´on con el o los controladores. Siguiendo la terminolog´ıa de los sistemas de control se decide llamar a dicha aplicaci´on plant.

1 r o o t @ c o n t a i n e r _ i d :/ usr / src / app / c o n t r o l _ s y s t e m # p y t h o n m a n a g e . py s t a r t a p p p l a n t

El comando anterior crea el directoriocontrol system/plant, donde se encuentra el archivo models.py. Dentro de este archivo se crean las clasesTransmitterySensorData.

1 c l a s s T r a n s m i t t e r ( m o d e l s . M o d e l ) :

2

3 x m t r _ t a g = m o d e l s . C h a r F i e l d ( m a x _ l e n g t h =32 , u n i q u e = True , n u l l = False , b l a n k = F a l s e )

4 x m t r _ p i n s = m o d e l s . C h a r F i e l d ( m a x _ l e n g t h =128 , b l a n k = F a l s e ) # For f u t u r e use , to c o n f i g u r e the s e n s o r f r o m the web

5 x m t r _ d e s c r i p t i o n = m o d e l s . T e x t F i e l d ( b l a n k = True , n u l l = T r u e ) 6 X M T R _ S T A T E S = [ 7 (’ ON ’, ’ O n l i n e ’) , 8 (’ OF ’, ’ O f f l i n e ’) , 9 (’ UK ’, ’ U n k n o w n ’) , 10 (’ ER ’, ’ E r r o r ’) , 11 ] 12 x m t r _ s t a t e = m o d e l s . C h a r F i e l d ( m a x _ l e n g t h =2 , c h o i c e s = X M T R _ S T A T E S ) 13 14 def _ _ s t r _ _ ( s e l f ) : 15 r e t u r n s e l f . x m t r _ t a g

Listing 3.1: Clase Transmitter

1 c l a s s S e n s o r D a t a ( m o d e l s . M o d e l ) : 2 3 x m t r _ i d = m o d e l s . F o r e i g n K e y (’ T r a n s m i t t e r ’, o n _ d e l e t e = m o d e l s . C A S C A D E ) 4 s e n s o r _ m e s s a g e = m o d e l s . C h a r F i e l d ( m a x _ l e n g t h = 1 2 8 ) 5 t i m e s t a m p = m o d e l s . D a t e T i m e F i e l d ( a u t o _ n o w _ a d d = T r u e ) 6 7 def _ _ s t r _ _ ( s e l f ) : 8 r e t u r n ’ M e a s u r m e n t f r o m t r a n s m i t t e r ’ + str( s e l f . x m t r _ i d )

Listing 3.2: Clase SensorData

Para migrar los modelos a la base de datos, se corren los siguientes dos comandos en la terminal

1 r o o t @ c o n t a i n e r _ i d :/ usr / src / app / c o n t r o l _ s y s t e m # p y t h o n m a n a g e . py m a k e m i g r a t i o n s

2 ...

3 r o o t @ c o n t a i n e r _ i d :/ usr / src / app / c o n t r o l _ s y s t e m # p y t h o n m a n a g e . py m i g r a t e

En el futuro se podr´ıa desarrollar una elegante interfaz, para administrar y registrar instrumentos en el sistema. Sin embargo, por el momento, y para efectos de la simulaci´on, se hace uso del panel de administraci´on deDjango. En la figura 3.8 se muestra una captura de pantalla de la p´agina principal, mientras que en la figura 3.9 se muestra la ventana en donde se registran y se editan los transmisores.

CAP´ITULO 3. MARCO METODOL ´OGICO P´agina 46

Figura 3.8: Panel de Administraci´on de Django.

3.4.2. Simulaci´on

Aprovech´andose de los modelos computacionales desarrollados en las secciones 3.3.3 y 3.3.4, y de los modelos establecidos en la secci´on 3.4.1 se puede sacar provecho de los entornos virtuales para dise˜nar una simulaci´on que valide el sistema de control. Los pasos para llevar a cabo dicha simulaci´on se presentan en las siguientes secciones.

Accediendo a las Bases de Datos

Tanto el Sistema de Control como el sensor deben poder tener acceso a la base de datos. El sistema de control administra y define los modelos de la base de datos, adem´as de que despliega la informaci´on desde una interfaz cuando el usuario lo solicita. El sensor escribe los datos mesurados en las tablas definidas por el sistema de control, as´ı como otros estados y variables de inter´es que puedan llegar a definirse. Despu´es de crear un usuario, y asignarle los permisos de acceso necesarios, la base de datos, control_system_db, puede ser accedida desde el contenedorBifur.

Para conectarse desde el programa* del sensor a la base de datos se de incluye el siguiente c´odigo 1 i m p o r t m y s q l . c o n n e c t o r 2 3 m y d b = m y s q l . c o n n e c t o r . c o n n e c t ( 4 h o s t =" 1 7 2 . 3 1 . 0 . 2 ", # d i r e c c i ´o n ip del c o n t e n e d o r B o m b u r 5 u s e r =" x m t r ", 6 p a s s w o r d =" p y t h o n _ p a s s ", 7 d a t a b a s e =" c o n t r o l _ s y s t e m _ d b " 8 )

Para verificar si se tiene o no acceso a la base de datos, se puede ejecutar lo siguiente

1 m y c u r s o r = m y d b . c u r s o r ()

2

3 m y c u r s o r . e x e c u t e (" S H O W T A B L E S ; ")

4 for x in m y c u r s o r :

5 p r i n t( x )

que da como resultado

1 ( ’ p l a n t _ s e n s o r d a t a ’ ,)

2 ( ’ p l a n t _ t r a n s m i t t e r ’ ,)

Lo anterior quiere decir que el usuario xmtr solo tiene los privilegios para acceder a las tablas plant_sensordata y plant_transmitter. Por supuesto que existen m´as tablas dentro de la base de datos control_system_db, pero solo se pueden acceder desde el sistema de control.

Cada vez que se registra un nuevo sensor o transmisor en el sistema de control se asigna un IDunico en la base de datos. Este´ ID es importante porque cada dato o mensaje que se almacena en la tabla plant_sensordata tiene que estar asociado a un sensor. El siguiente c´odigo asigna el tag al sensor. Obviamente, dicho tag debe coincidir con el asignado desde el sistema de control.

CAP´ITULO 3. MARCO METODOL ´OGICO P´agina 48

1 X M T R _ T A G = ’ 01 - LT - 0 0 0 1 ’

2 X M T R _ I D = N o n e

Registrado el tag, elID puede recuperarse de la base de datos ejecutando

1 m y c u r s o r . e x e c u t e (" S E L E C T id , x m t r _ t a g F R O M p l a n t _ t r a n s m i t t e r ; ") 2 3 for x m t r in m y c u r s o r : 4 if x m t r [ 1 ] = = X M T R _ T A G : 5 X M T R _ I D = x m t r [0] 6 7 p r i n t(" The ID for t h i s t r a n s m i t t e r is : ", X M T R _ I D )

Si el XMTR_TAG coincide con alguno de los valores registrados en la base de datos, entonces el resultado en la pantalla es algo como lo siguiente

1 The ID for t h i s t r a n s m i t t e r is : 2

Interfaz Humano-M´aquina

La interfaz humano-m´aquina se desarrolla benefici´andose de los Templates o plantillas de Djangoy utilizando los lenguajes HTML,JavaScript, y CSS. Las plantillas se construyen de manera sencilla como cualquier otra p´agina web. Sin embargo, nuevamente se toma ventaja de las capacidades deDjangopara extraer la informaci´on de la base de datos e insertarlos o, mejor dicho, renderizarlos* en la plantilla.

Por simplicidad, no se pretende explicar como Djangomaneja las vistas y plantillas por lo tanto se le recomienda al lector revisar la documentaci´on oficial suministrada por Django Software Foundation (2020).

En la figura 3.10 se ilustra la captura de pantalla del dise˜no preliminar de la interfaz HMI. Para los gr´aficos, como el tanque que se ilustra en la misma figura, se decidi´o utilizar im´agenes vectorizadas en formato SVG. Se escoge el formatoSVG porque est´a basado en XMLy, por lo tanto, es bastante f´acil de manipular utilizando el lenguajeJavaScript.

A continuaci´on se demuestra c´omo manipular el tanque de la interfaz utilizandoJavaScript. La figura del tanque se desarrolla utilizando un editor como Inkscape. Sin entrar en mucho detalle, convenientemente se le asigna un ID a la imagen. Este proceso se ilustra en la figura 3.11. El c´odigo SVGes finalmente embebido en el c´odigoHTML, el resultado se puede nuevamente ver en la figura 3.10. Para poder seleccionar el tanque, dentro de la interfaz se ejecuta enJavaScript

1 l t 0 0 0 1 = d o c u m e n t . g e t E l e m e n t B y I d (’ lt -0001 - l e v e l ’)

Los atributos como la altura y posici´on vertical del tanque se selecciona por medio de las siguientes l´ıneas de c´odigo

1 l t 0 0 0 1 _ y = p a r s e F l o a t ( l t 0 0 0 1 . g e t A t t r i b u t e (’ y ’) )

2 l t 0 0 0 1 _ h = p a r s e F l o a t ( l t 0 0 0 1 . g e t A t t r i b u t e (’ h e i g h t ’) )

*

Figura 3.10: Captura de pantalla de la primera interfaz HMI.

Figura 3.11: Editor Inkscape

Estos atributos iniciales pueden servir como puntos de referencia para el programa. Sup´ongase que el nivel del tanque ha disminuido en una distancia l, que despu´es de ser escalada por el programa se almacena en la variable d. Considerando d=20,

CAP´ITULO 3. MARCO METODOL ´OGICO P´agina 50

1 d =20

2 l t 0 0 0 1 . s e t A t t r i b u t e (’ h e i g h t ’, l t 0 0 0 1 _ h - d )

3 l t 0 0 0 1 . s e t A t t r i b u t e (’ y ’, l t 0 0 0 1 _ y + d )

El resultado se muestra en la figura 3.12.

Figura 3.12: Manipulando la Planta con JavaScript. Fuente propia.

La interfaz o layout de la planta es dise˜nada usando un editor de im´agenes de vectores, como Inkscape, y el c´odigo es luego embebido en el c´odigo HTML de la plantilla que se incluye en el anexo C.2. Se debe tener mucho cuidado ya que por el momento no existe una integraci´on autom´atica entre la base de datos y la interfaz, raz´on por lo que toda integraci´on se debe de hacer manualmente asignando tanto losid correspondientes en la base de datos, como los tags en el archivo SVG. Esta es una oportunidad de mejora y ya existen ideas para optimizar este proceso. En la figura 3.13 se muestra un dise˜no m´as elaborado de la interfaz. N´otese como en el men´u de instrumentos se muestran solamente dos de estos, pero la interfaz gr´afica muestra m´as puntos de medici´on. Esto se d´a porque los instrumentos a´un no se han registrado en la base de datos (ver figura 3.9).

3.4.3. Selecci´on de Los Instrumentos

Encontr´andose tantas tecnolog´ıas en el mercado, un diestro ingeniero debe tener la capacidad para recomendar a un cliente y justificar la selecci´on de los instrumentos de medici´on. La variedad de

Figura 3.13: Captura de Pantalla de la Interfaz del Sistema de Control. Fuente propia.

t´ecnicas de medici´on suponen una capacidad de adaptarse a diferentes aplicaciones.

La selecci´on de los instrumentos dependen de algunos par´ametros que se enumeran a continuaci´on

1. Disponibilidad. La disponibilidad de proveedores locales ayuda a reducir los costos ya que, generalmente, compran al por mayor y el precio resulta m´as bajo.

2. Facilidad de instalaci´on. Existen sensores para una gran variedad de aplicaciones. A la hora de dimensionar un sensor debe considerarse la conexi´on al proceso que puede demandar material y costos adicionales.

3. Comunicaci´on y acondicionamiento de se˜nal. Digital no siempre quiere decir mejor. Muchos dispositivos ya incluyen los circuitos internos para el acondicionamiento de se˜nal, pero hay que asegurarse de que los protocolos sean compatibles con el hardware y las librer´ıas de software del controlador.

¿Medici´on de Nivel por Presi´on Diferencial o Ultrasonido?

Como se ha visto, existen varios m´etodos para medir el nivel de un l´ıquido. Dos de las tecnolog´ıas m´as usadas son la medici´on por presi´on diferencial y la medici´on por ondas ac´usticas o

CAP´ITULO 3. MARCO METODOL ´OGICO P´agina 52

Tabla 3.4: Comparaci´on entre algunos sensores para aplicaciones de nivel.

Sensor Principio Descripci´on Ventajas

Sensor HC-SR04 Ultras´onico Sensor econ´omico pero muy popular entre los aficionados. Posee un rango de entre 2cm a 400cm. F´acil de instalar e integrar con la librer´ıa de Software CircuitPython.

Econ´omico: Rango de precio en Costa Rica: $4 -$5

ABPDRRV060MGSA3 Presi´on Manom´etrica La serie APB de Honeywell ofrece sensores piezo-resistivos de alta precisi´on y estabilidad a largo plazo.

Precisi´on. Estabilidad

HSCMRRV001PD2A3 Presi´on Diferencial Serie TruStability deR

Honeywell

Mayor precisi´on y estabilidad.

ultrasonido. ¿Pero, cu´al es mejor?...

Ser´ıa ingenuo sugerir que una tecnolog´ıa es superior a otra, ya que ambas poseen ventajas y desventajas de acuerdo con la aplicaci´on. Por ejemplo, una caracter´ıstica bastante evidente es que la medici´on del sensor ultras´onico no depende de las propiedades f´ısicas del fluido, como la densidad, solamente de la distancia entre la superficie y el mismo sensor.

En general, los sensores ultras´onicos son m´as f´aciles de instalar y por lo tanto el costo de instalaci´on es menor con respecto a los instrumentos de presi´on, que s´ı deben estar en contacto directo con el proceso. Sin embargo, las mediciones de estos sensores llegan a verse afectadas por la presencia de espuma y vapores. Como se dijo antes, y ya se ha demostrado en (2.2.14), los sensores de presi´on son sensibles a los cambios de densidad. No obstante, los errores de medici´on provocados por cambios en la densidad pueden ser f´acilmente compensados midiendo la temperatura del contenedor.

En la tabla 3.4 se detallan algunos sensores considerados para el proyecto. Aunque todos son aptos, se prefiere utilizar el sensor HC-SR04. Aun cuando no es tan preciso es un sensor mucho m´as econ´omico ya que la serie APB puede costar hasta 4 veces m´as y la serie TruStability R hasta 10 veces m´as.

Los sensores de presi´on tambi´en presentan otro problema: la instalaci´on. Estos sensores necesitan de una conexi´on directa al proceso, es decir que se deben considerar l´ıneas conectadas a la base del tanque para que transporten el fluido hasta el sensor.

En resumen se elige el sensor HC-SR04 por las siguientes razones: 1. La aplicaci´on no demanda un grado de precisi´on tan alto.

2. En comparaci´on con otros sensores, es mucho m´as econ´omico. 3. Es de no contacto, propiedad que facilita la instalaci´on.

4. No se espera que haya presencia de vapores o espuma.

Elementos de Temperatura

Para la medici´on de temperatura se encontraron dos opciones:

El sensor DS18B20. Salida digital. Arian RTD Pt100. Salida anal´ogica.

Ambos sensores presentan un rango de operaci´on similar, entre −55C y 125C. Sin embargo, el DS18B20 posee un par de ventajas por encima del RTD Pt100. Primero, la se˜nal de salida ya est´a acondicionada por lo que ninguna conversi´on resistencia-temperatura es necesaria. Segundo, el costo es hasta un 50 % menor que el sensor Arian cuando se busca en tiendas locales como crcibernetica.com o microjpm.com.

El proceso de instalaci´on es similar. Sin embargo, antes de poder utilizar el DS18B20 en un computadorRaspberry PI se debe habilitar la interfaz One-Wire. Para hacerlo, se debe realizar los siguientes pasos

1. Editar el archivo /boot/config.txt, agregar en la ´ultima linea dtoverlay=w1-gpio, guardar el archivo y reiniciar el sistema (Circuit Basics, s.f.).

2. Ejecutar el comando sudo modprobe w1-gpio para registrar el sensor, y luego sudo modprobe w1-therm para indicarle al Raspberry PI que se trata de un sensor de temperatura (PiHome, 2017).

La informaci´on del sensor se almacena en el archivo /sys/bus/w1/devices/<dev_addrs>/w1_slave. Este archivo, por supuesto, se puede leer utilizando un programa escrito enPython.

Documento similar