Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTA DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Profesor Guía:
Santiago – Chile
2012
© Tomás Marcelo Castillo Castillo.
ii
iii
Dedicatoria.
iv
Agradecimientos
v
Tabla de Contenido.
Portada……………………………………………………………………………….i
Derecho de Autor………………………………………………………………….. ii
Dedicatoria………………………………………………………………………….. iv
Agradecimientos…………………………………………………………………… v
Tabla de Contenido………………………………………………………………... vi
Resumen…………………………………………………………………………… xxi
Capítulo I. Introducción.
Introducción……………………………………………………......................... 1
vi
2.1.3.3.1 Interrogación, informes por excepción, y
2.1.3.3.6 Radio……………………………………………………. 22
2.3.4.1 Características…………………………………………… 24
2.1.3.5.1 Características………………………………………… 25
2.1.3.5.2 Chequeos………………………………………………. 26
2.1.3.6 Comunicaciones……………………………………………….. 26
2.1.4.1 Fundamentos………………………………………………… 27
2.1.4.7 Estándares……………………………………………………... 31
vii
2.1.4.8 PLC’s contra RTU’s……………………………………………. 32
2.2.3 Historia…………………………………………………………………. 36
2.2.6.1 Arquitecturas…………………………………………………….43
2.2.6.5 Portabilidad……………………………………………………... 46
viii
2.3.3 Arquitectura de Android…………………………………………………. 51
2.3.3.5 Aplicaciones……………………………………………………………. 54
3.3 Sensores………………………………………………………………….57
ix
3.3.1.1.2.6 Sensor de movimiento de
ultrasonidos…………………………… 62
3.4.1 Actuador…………………………………………………………… 63
3.4.2.1 Electroválvulas………………………………………………… 66
3.4.2.4.1 Relé……………………………………………………. 66
x
3.5.2.2 Descripción del Módulo GM862……………………………… 73
xi
4.2.3.1 Implementación del Programa en la RTU
de los Sensores y Preactuador(relé)…..………………… 91
xii
4.3.5.2.1 Evento que controla el preactuador……………….113
xiii
4.4.2.1.1 Función onConnect..……………………………..... 137
xiv
5.4.2 Comunicación de la RTU con interfaz HMI y la RTU de los
sensores y preactuador……………………………………………. 172
5.5 Prueba general del sistema SCADA con el acceso por medio
de la RTU con interfaz HMI (Android)……………………………...……… 174
xv
Índice de Ilustraciones.
Capítulo II.
Figura 2 – 1 Arquitectura de Android………………………............................51
Capítulo III.
Figura 3 – 1 Arquitectura del Hardware………………………………………. 56
Capítulo IV.
Figura 4 – 1 Serial Arduino……………….……………………………………. 91
xvi
Figura 4 – 4 Función EnvioSMS en el módulo GPRS………………………. 103
xvii
Figura 4 – 20 Eventos al presionar botones en la HMI…….………………... 128
xviii
Figura 4 – 35 Programa para botón Encender, para la RTU
asociado al relé…………………………………………………… 145
Capítulo V.
xix
Figura 5 – 6 Mensaje de los Sensores……………..…………………………. 166
xx
TÍTULO: Diseño e implementación del sistema SCADA para equipos
móviles Android con software libre.
xxi
Capítulo I. Introducción.
1
En los últimos años los teléfonos móviles han experimentado una gran evolución,
desde los primeros terminales, grandes y pesados, pensados sólo para hablar
por teléfono en cualquier parte, a los últimos modelos, con los que el término
“medio de comunicación” se queda bastante pequeño.
La implementación del SCADA en los dispositivos con S.O. Android abre las
puertas para que el usuario se pueda trasladar por cualquier lugar del recinto de
trabajo, posibilitando el control, no solo en la central maestra, y manteniendo en
todo momento la supervisión de la planta industrial.
2
Por lo tanto, se concibe, diseña e implementa el Hardware y el Software para el
sistema SCADA. Al reunir las partes de Hardware necesario para el proyecto.
Como también la creación del programa para el microcontrolador programable
(Arduino). El software para la central de control (MTU) con S.O. Linux Ubuntu.
Finalmente, el desarrollo del software para equipos con S.O. Android.
El sistema SCADA consiste de tres partes, una en donde existe la interfaz entre
los sensores y un dispositivo para su control y comunicación, otra en la que se
procesa la información recibida por los sensores (MTU), implementada en un
PC servidor y finalmente los dispositivos acceso a la información que se
encuentra en la central de proceso, por medio de Smartphone, Tablet con S.O.
Android con conexión a la red WiFi o a través de Internet.
3
Se continua con el Capítulo IV, aquí se implementa la arquitectura de Software
en los dispositivos, tanto en la RTU como en la MTU. En sí, se crean los
programas necesarios para el desarrollo del sistema SCADA. Se conciben las
funciones necesarias para cada módulo RTU (Arduino), como también las
funciones para la MTU (Servidor Linux Ubuntu) y las funciones para la RTU con
interfaz HMI (Human Machine Interface) con sistema operativo Android.
4
CAPÍTULO II. Marco Teórico.
5
Los primeros sistemas automatizados SCADA fueron altamente modificados con
programas de aplicación específicos para atender a requisitos de algún proyecto
particular. Como ingenieros de varias industrias asistieron al diseño de estos
sistemas, su percepción de SCADA adquirió las características de su propia
industria. Proveedores de sistemas de software SCADA, deseando reutilizar su
trabajo previo sobre los nuevos proyectos, perpetuaron esta imagen de industria
específicos por su propia visión de los ambientes de control con los cuales tenían
experiencia. Solamente cuando nuevos proyectos requirieron funciones y
aplicaciones adicionales, hizo que los desarrolladores de sistemas SCADA
tuvieran la oportunidad de desarrollar experiencia en otras industrias.
Hoy, los proveedores de SCADA están diseñando sistemas que son pensados
para resolver las necesidades de muchas industrias, con módulos de software
industriales específicos disponibles para proporcionar las capacidades
requeridas comúnmente. No es inusual encontrar software SCADA
comercialmente disponible adaptado para procesamiento de papel y celulosa,
industrias de aceite y gas, hidroeléctricas, gerenciamiento y provisión de agua,
control de fluidos, etc. Puesto que los proveedores de SCADA aún tienen
tendencia en favor de algunas industrias sobre otras, los compradores de estos
sistemas a menudo dependen del proveedor para una comprensiva solución a su
requisito, y generalmente procurar seleccionar un vendedor que pueda ofrecer
una completa solución con un producto estándar que esté apuntado hacia las
necesidades específicas del usuario final. Si selecciona a un vendedor con
experiencia limitada en la industria del comprador, el comprador debe estar
preparado para asistir al esfuerzo de ingeniería necesario para desarrollar el
conocimiento adicional de la industria requerido por el vendedor para poner con
éxito el sistema en ejecución.
6
Para alcanzar un nivel aceptable de tolerancia de fallas con estos sistemas, es
común tener computadoras SCADA redundantes operando en paralelo en el
centro primario del control y un sistema de reserva del mismo situado en un área
geográficamente distante. Esta arquitectura proporciona la transferencia
automática de la responsabilidad del control de cualquier ordenador que pueda
llegar a ser inasequible por cualquier razón, a una computadora de reserva en
línea, sin interrupción significativa de las operaciones [1].
7
La realimentación comprende todas aquellas soluciones de aplicación que hacen
referencia a la captura de información de un proceso o planta, no necesariamente
industrial, para que, con esta información, sea posible realizar una serie de
análisis o estudios con los que se pueden obtener valiosos indicadores que
permitan una retroalimentación sobre un operador o sobre el propio proceso,
tales como:
8
abierto y utilizan comunicaciones generalmente locales (dentro de la planta) o
remotas (fuera de la planta), aunque algunos elementos de control a lazo cerrado
y/o de comunicaciones de corta distancia pueden también estar presentes.
Las comunicaciones pueden ser por vía de una red de área local (LAN), y son
normalmente confiables y de alta velocidad. Un sistema DCS emplea
generalmente cantidades significativas de control a lazo cerrado.
Un sistema SCADA por otra parte, generalmente cubre áreas geográficas más
grandes, y normalmente depende de una variedad de sistemas de comunicación
menos confiables que una LAN. El control a lazo cerrado en esta situación será
menos deseable. Un sistema SCADA se utiliza para vigilar y controlar la planta
industrial o el equipamiento. El control puede ser automático, o iniciado por
comandos de operador. La adquisición de datos es lograda en primer lugar por
las RTU que exploran las entradas de información de campo conectadas con
ellos (pueden también ser usados PLC (“Programmable Logic Controllers”).
9
• Datos digitales (on/off) que pueden tener alarmas asociadas a un
estado o al otro.
• Datos de pulsos (por ejemplo conteo de revoluciones de un medidor)
que serán normalmente contabilizados o acumulados.
Todas las MTU de SCADA deben presentar una serie de características, algunas
de estas son las siguientes:
10
• Gráficos de tendencia: Salvar los datos en una base de datos, y
ponerlos a disposición de los operadores en forma de gráficos.
• Procesamiento de Alarmas: Analizar los datos recogidos de las RTU
para ver si han ocurrido condiciones anormales, y alertar a personal de
operaciones sobre las mismas.
• Control: Control a Lazo Cerrado, e iniciados por operador.
• Visualizaciones: Gráficos del equipamiento actualizado para reflejar
datos del campo.
• Informes: La mayoría de los sistemas SCADA tienen un ordenador
dedicado a la producción de reportes conectado en red (LAN o similar)
con el principal.
• Mantenimiento del Sistema Mirror: Se debe mantener un sistema
idéntico con la capacidad segura de asumir el control inmediatamente
sí la principal falla.
• Interfaces con otros sistemas: Transferencia de datos hacia y desde
otros sistemas corporativos para, por ejemplo, el procesamiento de
órdenes de trabajo, de compra, la actualización de bases de datos, etc.
• Seguridad: Control de acceso a los distintos componentes del sistema.
• Administración de la red: Monitoreo de la red de comunicaciones.
• Administración de la Base de datos: Agregar nuevas estaciones,
puntos, gráficos, puntos de cambio de alarmas, y en general,
reconfigurar el sistema.
• Aplicaciones especiales: Casi todos los sistemas SCADA tendrán
cierto software de aplicación especial, asociado generalmente al
monitoreo y al control de la planta específica en la cual se está
utilizando. Recordemos que las necesidades de las diferentes
industrias pueden ser muy variadas.
11
• Sistemas expertos, sistemas de modelado: Los más avanzados
pueden incluir sistemas expertos incorporados, o capacidad de
modelado de datos [5].
12
2.1.3.2.1 Hardware en sistemas de supervisión: PLC y PC.
13
suficientemente rápida para aplicaciones "suaves" en tiempo real, gracias a su
arquitectura de micro-kernel.
14
utilizan diversos tipos de computadores por lo que hay interfaces para las
diversas arquitecturas internas, de las que el Bus PCI es el más utilizado en la
actualidad. En la industria es el bus COMPACT PCI el equivalente más
adecuado.
(1) 'Software' de manejo a nivel de registros para las interfaces, (2) programas de
usuario en lenguajes de alto nivel, utilizando rutinas suministradas por los
fabricantes de 'hardware', (3) Sistemas de desarrollo y generadores de código
15
fuente dedicados a la adquisición y procesamiento de data así como el control y
supervisión de procesos tal como LabVIEW antes mencionado, (4) 'Paquetes' de
control y supervisión de procesos, que permiten administrar el 'hardware' de
control de procesos basados en controladores lógicos programables (PLC),
supervisar los procesos y administrar redes de microcomputadores y de
controladores lógicos programables. La mayoría de Software de alta performance
para la Automatización Industrial se ejecuta bajo Microsoft Windows NT, 98 y
2000. Deben proveer una interfaz gráfica para su proceso, ya sea como Interfaz
Humano Máquina (HMI: “Human Machine Interface”), o como un sistema de
Supervisión, Control y Adquisición de Datos (SCADA) [5].
16
generados. Algunas variaciones en esto se han introducido para mejorar la
eficacia de comunicaciones. La unidad maestra podía solicitar solamente algunos
de los datos de una RTU en cada escaneo principal, y extraería los datos menos
importantes en una segundo escaneo disparado con una frecuencia más baja.
Con las RTU más inteligentes, se podían explorar independientemente sus
entradas de información, sobre una base continua, e incluso agrupar por hora los
datos. La unidad maestra entonces escaneaba a la RTU si tiene cualquier cosa
para informar. Si nada hubiera cambiado desde la vez última, la RTU enviaba sin
novedad, y la unidad maestra se movería a la RTU siguiente. Para asegurarse
de que un cierto acontecimiento no fue revisado, ocasionalmente la unidad
maestra haría una escaneo completo como una revisión completa del sistema.
Está claro lo que implica cuando una entrada de información digital ha cambiado,
pero el uso del informe por excepción con valores analógicos significa que un
cierto cambio del umbral está definido (típicamente 1-2%), y sobre éste se ha
producido algún cambio. El informe por excepción puede reducir dramáticamente
el tráfico de comunicaciones, siempre y cuando los datos estén cambiando en
forma relativamente lenta. Cuando se están midiendo parámetros altamente
volátiles puede aumentar drásticamente el tráfico. En este caso una solución es
poner estos parámetros volátiles en una encuesta rutinaria, sacrificando una
cierta exactitud en la hora de registro en pos de la reducción del tráfico. El
acercamiento más sofisticado es permitir que la RTU reporte por excepción sin
la encuesta previa por parte de la unidad maestra. Esto significa que el sistema
de comunicaciones no se está utilizando para las repetidos escaneos con sin
novedad, siendo la respuesta más frecuente. Esto permite que un sistema típico
controle muchos más RTU con la mismo ancho de banda para las
comunicaciones. Como los asuntos asociados con parámetros altamente
volátiles todavía existen, una revisión del sistema en background sigue siendo
necesario, de otro modo una RTU podría salir de servicio y el sistema nunca se
daría por enterado.
17
Para utilizar esta técnica, el protocolo de comunicación debe tener la capacidad
de proporcionar las direcciones de destino del mensaje, y de la fuente del mismo.
Este sistema también implica que dos RTU pueden transmitir simultáneamente,
interfiriendo uno con otro. Un sistema SCADA normalmente repetirá la
transmisión si no recibe el estado del dispositivo dentro de cierto tiempo. Si
interfieren dos RTU transmitiendo simultáneamente, y, luego si ambos poseen el
mismo tiempo de reenvío, interferirán otra vez. Por esta razón, el acercamiento
típico es repetir el envío después de un período aleatoriamente seleccionado. El
uso de timeouts al azar puede no ser suficiente cuando por ejemplo ha habido
un apagón extenso. Incluso con recomprobaciones al azar, puede haber tanto
tráfico que la RTU todavía no podrá conseguir realizar la transmisión. Por esta
razón una mejora que es deseable es que después de 5 intentos, el período de
recomprobación se fije por ejemplo 1 minuto [5].
Un sistema SCADA debe ser muy confiable. Los sistemas de comunicación para
los sistemas SCADA se han desarrollado para manejar comunicaciones
deficientes de una manera predecible. Esto es especialmente importante donde
está implicado el control (podría ser desastroso si las fallas de comunicaciones
causaran que el sistema SCADA haga funcionar inadvertidamente el sector
incorrecto de la planta). Los sistemas SCADA hacen uso típicamente de las
técnicas tradicionales de la paridad, de la comprobacion de sumas polinómicas,
códigos de Hamming y demás. Sin embargo no confían simplemente en estas
técnicas. La operatoria normal para un sistema SCADA es esperar siempre que
cada transmisión sea reconocida. El sistema de escaneo que emplea tiene
seguridad incorporada, en la que cada estación externa está controlada y debe
periódicamente responder. Si no responde, entonces un número predeterminado
de recomprobaciones será efectuado.
18
Las fallas eventualmente repetidas harán que la RTU en cuestión sea marcado
como "fuera de servicio" (en un sistema de escaneo una falla de comunicación
bloquea la red por un período de tiempo relativamente largo, y una vez que se
haya detectado una falla, no hay motivo para volver a revisar). La exactitud de la
transmisión de un SCADA se ha mirado tradicionalmente como tan importante
que la aplicación SCADA toma directamente la responsabilidad sobre ella. Esto
se produce en contraste con protocolos de comunicación más generales donde
la responsabilidad de transmitir datos confiablemente se deja a los mismos
protocolos. A medida que se utilicen protocolos de comunicación más
sofisticados, y los proveedores de SCADA comiencen a tomar confianza con
ellos, entonces la responsabilidad de manejar errores será transferida al
protocolo [5].
19
medio de estos progresos está llegando a ser factible, por lo menos a este nivel,
considerar la interoperabilidad del equipamiento de diversos fabricantes [5].
Los sistemas SCADA basados en transmisión radial son probablemente los más
comunes. Éstos evolucionaron con el tiempo, y lo más básico es el uso de FSK
(“frequency shift keying” -codificación por conmutación de frecuencia) sobre
canales de radio analógicos. Esto significa que aquellos 0 y 1 son representados
por dos diversas frecuencias (1800 y 2100 hertzios son comunes). Estas
frecuencias se pueden sintetizar y enviar sobre una radio de audio normal.
Velocidades de hasta 1200 baudios son posibles. Una consideración especial
necesita ser dada al retardo de RTS (“request to send” - petición de enviar) que
normalmente se presenta. Esto se produce porque una radio se tomará algún
tiempo después de ser encendida (“on”) para que la señal alcance niveles
aceptables, y por lo tanto el sistema SCADA debe poder configurar estos
retardos. La mayoría de las otras consideraciones con respecto a radio y SCADA
se relacionan con el diseño básico de la red de radio [5].
Hay muchos de éstos, pero la mayoría son muy costosos. Hay situaciones donde
no hay alternativas. No obstante, existe un servicio basado en satélites que es
económico: los sistemas VSAT: “Very Small Aperture”. Terminal. Con VSAT,
usted alquila un segmento del espacio (64k o más), y los datos se envían de un
sitio remoto a un “hub” vía satélite. Hay dos tipos de “hub”. El primero es un
sistema proporcionado típicamente por un proveedor de servicios de VSAT. La
ventaja es un costo fijo para los datos aunque su implementación puede costar
muy cara. La otra consideración para éstos es la necesidad de un “backlink” del
20
“hub” al centro de SCADA. Esto puede ser de un costo considerable. El otro tipo
de sistema utiliza un “hub” pequeño (los clásicos de LAN estructuradas) que se
puede instalar con la unidad maestra. Este es más barato, pero la administración
del “hub” es responsabilidad exclusiva del propietario de SCADA. La interfaz a
cualquier tipo de sistema de VSAT implica el uso de protocolos utilizados por el
sistema de VSAT - quizás TCP/IP.
Modbus
Éstos son comúnmente usados, pero una gran cantidad de sistemas SCADA
implican el uso de la radio para sustituir landlines ante una falla. Las termitas
(postes de madera) y el relámpago son problemas comunes para los landlines
[5].
21
manejadas por una segunda computadora, etc. Una función asignada
típicamente a una computadora separada es la interfaz a la red de
comunicaciones. Ésta manejará toda la interconexión especializada a los canales
de comunicaciones, y en muchos casos realizará la conversión del protocolo de
modo que el sistema principal pueda contar con datos entrantes en un formato
estándar [5].
2.1.3.3.6 Radio.
Una red de radio típica consiste en una conversación a través del repetidor
situado en algún punto elevado, y un número de RTU que comparten la red.
Todos las RTU "hablan" sobre una frecuencia (F1) y escuchan en una segunda
frecuencia (F2). El repetidor escucha en F1, y retransmite esto en F2, de modo
que una RTU que transmite un mensaje en F1, lo tiene retransmitido en F2, tal
que el resto de las RTU pueda oírlo. Los mensajes de la unidad maestra viajan
sobre un enlace de comunicación dedicado hacia el repetidor y son difundidos
desde el repetidor en F2 a todos las RTU. Si el protocolo de comunicaciones
usado entre la unidad maestra y el repetidor es diferente al usado en la red de
radio, entonces debe haber un "Gateway" en el sitio del repetidor. Este hecho
permitiría utilizar los protocolos apropiados para cada uno de los medios. Se ha
utilizado con éxito DNP3 sobre la red de radio y después encapsulado el DNP3
en el TCP/IP para permitir que una red de fines generales lleve los datos a la
22
unidad maestra. El número de RTU que puede compartir un repetidor depende
de un número de factores. En primer lugar el tipo de equipo de radio puede
afectar esto, teniendo en cuenta el retardo en alcanzar una señal estable. La
aplicación también es un factor importante, ya que de ella depende el tiempo de
respuesta requerido. Las características del protocolo (la interrogación, informe
por excepción, las transmisiones iniciadas por la RTU) también pueden ser
significativas. La velocidad tiene obviamente un impacto también [5].
23
2.3.4.1 Características.
Los gráficos incluye elementos tales como diagramas X-Y, la capacidad de re-
escalar la tendencia mientras es mostrada, la capacidad de visualizar
coordenadas para seleccionar una característica en la tendencia y visualizar los
valores asociados a ella, histogramas, múltiples valores independientes en una
tendencia, y gráficos de información de estado. El sistema de tendencias trabaja
normalmente creando un archivo para cada tendencia con "casilleros" para los
valores de datos que se renovarán en una frecuencia especificada (máximo ratio
de “trending”). A medida que se adquieren los datos de campo, se ubican en los
archivos de tendencia, quedando disponibles para su posterior análisis. Hay
normalmente un límite superior a la cantidad de datos que puedan ser guardados
(ejemplo un año de datos) [5].
El uso de archivos de tendencia con casilleros para los datos, renovados en los
intervalos especificados, puede causar dificultades cuando se usa la
característica de Reporte por Excepción. Los problemas pueden ser aún mayores
cuando se incluyen en el sistema "dial-up" RTU por las posibles desconexiones.
El sistema SCADA debe tener la capacidad de llenar los archivos de tendencia
en estas circunstancias. Un set SCADA no está preparado para hacer esto
automáticamente, y se debe tener sumo cuidado al configurar y especificar las
características de graficar las tendencias para lograrlo. Algunos sistemas no
permiten que todas las variables sean afectadas a la tendencia de datos. Cuando
se desee ver una tendencia para un valor actualmente no configurado para un
gráfico de tendencia, debe entonces ser afectado a la tendencia de datos, y luego
habrá que esperar hasta que se hayan salvado suficientes datos para que el
gráfico sea consistente y aporte los datos de tendencia. Esto no es útil si estamos
procurando encontrar fallas [5].
24
2.1.3.5 Procesamiento de alarmas.
2.1.3.5.1 Características.
25
bajo mantenimiento. Algunos sistemas sofisticados pueden resolver la
inundación de alarmas identificando secuencias de causas y efectos [5].
2.1.3.5.2 Chequeos.
Cuando los sistemas SCADA no escanean regularmente todos los sitios, sino
que por el contrario confían en la transmisión iniciada por la RTU, si se detectara
una condición de error o un cambio significativo en un valor, existe la posibilidad
de que la RTU o las comunicaciones puedan fallar, y el evento pase
desapercibido. Para solucionar esto, se dispara un "revisión completa del
sistema" en “background”, en el cual cada RTU es escaneada con una frecuencia
determinada por el tiempo que se considere prudente en que una alarma no sea
detectada [5].
2.1.3.6 Comunicaciones.
26
2.1.4 Terminales Remotas (Remote Terminal Units).
2.1.4.1 Fundamentos.
28
2.1.4.2 Funcionalidad del hardware de un RTU.
29
parámetros, habilitando o deshabilitando entradas-salidas específicas
que invalidan o puede representar un ambiente de programación
completo para el usuario.
• Diagnóstico.
30
con memoria mínima hasta sofisticados RTU más grandes capaces de recolectar
datos en el orden del milisegundo [5].
2.1.4.7 Estándares.
Como fuera indicado, las RTU son dispositivos especiales. Ha habido una
carencia de estándares, especialmente en el área de comunicaciones, y las RTU
provenientes de un fabricante no se pueden mezclar generalmente con una RTU
31
de otro. Una industria ha crecido desarrollando conversores y emuladores de
protocolos. Algunos estándares han comenzado recientemente a emerger para
las RTU, como DNPs e IEC870 para comunicaciones IEC1131-3 para programar
las RTU [5].
32
2.2 Introducción a Linux.
33
El software libre es aquel que se puede utilizar y distribuir libremente. También
puede ser modificado y vuelto a distribuir (para estas últimas dos opciones,
requiere código abierto).
Y para que el programa sea considerado software libre, deben garantizarse esas
cuatro libertades. Si la licencia de uso y distribución de un programa no garantiza
una de esas cuatro libertades, entonces estamos frente a un programa que no es
libre.
34
2.2.2 Libre no significa gratis.
Muchas veces, las personas confunden la palabra libre con gratis. Y entonces
piensan cosas erróneas como que Linux es gratis. El software libre, no
necesariamente es gratis. Y para entender esto, vamos a ver un ejemplo. Yo
tengo una conexión de banda ancha, y descargué en mi computadora la última
versión de Ubuntu Linux. Entonces, cuando termino de descargarlo, viene un
amigo a mi casa y me pide que le haga una copia de esta versión de Linux. En
primer lugar, hay que aclarar que hacer una copia de un programa de software
libre es totalmente legal ya que, recordemos, la segunda libertad del software
libre tiene que ver con la libre distribución de un programa. De hecho, en la
Licencia Pública General (que es la licencia oficial del software libre) se anima de
manera entusiasta a programadores y usuarios a que distribuyan sus programas
de software libre. De todos modos, continuando con el ejemplo, yo tengo varias
opciones garantizadas por la libertad de distribuir el programa. Una de ellas es
decirle “sí, te lo copio ya mismo” y tomar cuatro CDs de mí escritorio, y grabárselo
de manera totalmente gratuita. Otra opción es decirle “sí, pero me tienes que
pagar por los CDs”, lo cual es totalmente válido y legal también. Y otra opción, es
decirle “sí, te lo copio, pero me tienes que pagar por los CDs y también por el
servicio de haber tenido la computadora toda la semana encendida para bajar
esa distribución”. Esta última opción, es totalmente válida y legal: todos tenemos
derecho a pedir una remuneración por el trabajo que realizamos.
Ahora bien, como se trata de software libre, mi amigo tiene varias opciones. Una
de ellas es pagarme para obtener la última versión de Ubuntu Linux. Pero,
también puede decirme: “Lo que me pides me parece muy caro, se lo voy a pedir
a mi primo que me lo dará gratis.”
2.2.3 Historia.
36
Se inició un grupo de noticias llamado alt.os.linux y el 19 de enero de 1992 se
publicó en ese grupo el primer post. El 31 de marzo, alt.os.linux se convirtió en
comp.os.linux. XFree86, una implementación del X WindowSystem, fue portada
a Linux, la versión del núcleo 0.95 fue la primera en ser capaz de ejecutarla. Este
gran salto de versiones (de 0.1x a 0.9x) fue por la sensación de que una versión
1.0 acabada no parecía estar lejos. Sin embargo, estas previsiones resultaron
ser un poco optimistas: desde 1993 a principios de 1994, se desarrollaron 15
versiones diferentes de 0.99 (llegando a la versión 0.99r15).
37
20 de octubre de 2010: se lanzó Linux 2.6.36 con 13.499.457 líneas de
código.6
Los aportes al sistema operativo comenzaron a ser cada día más numerosas. Un
programador desarrollaba una aplicación basada en GNU/Linux y entonces lo
enviaba a los servidores de la Fundación Software Libre para que otros usuarios
pudieran tener libre acceso a él. Así las aplicaciones se empezaron a contar por
decenas, y luego por centenas. Por eso, el sistema operativo GNU/Linux
completo que en un inicio cabía en sólo algunos disquetes, con el tiempo se fue
convirtiendo en una pila de megabytes. Recordemos que seguimos en la primera
mitad de la década de los noventa, y los usuarios particulares comenzaban a
aparecer en Internet. Las conexiones por aquel entonces eran en su mayoría
basadas en dispositivos MODEM, de bajísima velocidad. Acceder a descargar el
sistema operativo GNU/Linux completo era un lujo que sólo se podían dar
aquellos que tenían acceso a un servidor universitario o gubernamental.
38
Para solucionar este problema, quienes tenían acceso a bajar el sistema
operativo completo decidieron brindar un servicio a quienes no podían bajarlo por
limitaciones de conexión. El servicio era muy simple: grabar los paquetes del
sistema operativo en disquetes (que eran 20 ó 30) y enviarlos por correo a cambio
de una suma de dinero por el medio físico utilizado y por el tiempo perdido en la
grabación. Así nació el concepto de distribución de Linux [6].
A mediados de los noventa las distribuciones de Linux se podían contar con los
dedos de la mano. Se cree que las primeras distribuciones de Linux fueron SuSE
y Slackware, aunque nadie está muy seguro de ello. Hoy, las distribuciones de
Linux son miles.
39
usar y configurar. Veamos cuáles son las distribuciones ideales para empezar
con Linux [6].
Mandriva Linux es una distribución que tiene dos características importantes: fácil
instalación y fácil uso. La primera de ellas es gracias a que el sistema de
instalación tiene un desarrollo de muchos años. Es posible instalar Mandriva en
un equipo con tan sólo hacer algunos clic, incluso teniendo ya otro sistema
operativo instalado (como Microsoft Windows). Cada nueva versión incluye
innumerable cantidad de nuevos controladores de hardware, por lo que podemos
asegurar que funciona perfectamente con la gran mayoría de las placas y
periféricos de las computadoras actuales como scanners, webcams, impresoras,
placas de video 3D, etc.
Ubuntu es una distribución que durante los últimos años ganó popularidad y
prestigio. La popularidad la ganó gracias a una campaña de distribución gratuita
de CDs en todo el mundo.
40
Cualquiera que quiera tener esta distribución, solo tiene que acceder al sitio oficial
del proyecto (www.ubuntulinux.org) y pedir que le envíen un CD. Lo recibirán de
manera totalmente gratuita en la puerta de su casa.
Ubuntu se caracteriza por ser una distribución simple en todo sentido. En lugar
de incluir miles de aplicaciones como otras distribuciones, se limita a incluir las
mejores. Entonces, cuando el usuario ingresa al menú Aplicaciones encuentra un
navegador, un cliente de correo, un procesador de textos, etc., y no tantas
alternativas como quizás en Mandriva o SuSE. El entorno de usuario también es
muy simple, ya que presenta un escritorio limpio, conciso, y con los iconos justos.
Nada de más, ni de menos.
Otra de las características de Debian es que se lanza una nueva versión cada
uno o dos años. Esto se debe al gran nivel de testeo y control que recae sobre el
sistema, por parte de los miles de colaboradores. De esta manera, se tiene un
sistema de gran confiabilidad, aunque pagando el precio de tener el software un
poco desactualizado. De todas maneras, aquellos que quieran instalar lo último
de lo último, pueden hacerlo: sólo tienen que acceder a los directorios Inestable
e Inseguro del servidor de aplicaciones de Debian.
42
Razones porque Debian se considera una de las mejores distribuciones: ocupa
poco lugar, tiene muy bajos requerimientos del sistema, incluye todos los
servidores de red conocidos en el mundo del software libre, y tiene una gran base
de usuarios, entonces, cuando se necesita ayuda, se puede recurrir a una
enorme cantidad de gente [6].
2.2.6.1 Arquitecturas.
43
monolíticos tradicionales, los controladores de dispositivos y las extensiones al
núcleo se pueden cargar y descargar fácilmente como módulos, mientras el
sistema continúa funcionando sin interrupciones. También, a diferencia de los
núcleos monolíticos tradicionales, los controladores pueden ser prevolcados
(detenidos momentáneamente por actividades más importantes) bajo ciertas
condiciones. Esta habilidad fue agregada para gestionar correctamente
interrupciones de hardware, y para mejorar el soporte de multiprocesamiento
simétrico.
En Linux existe un sistema de archivos que carga y contiene todos los directorios,
redes, programas, particiones, dispositivos, etc. que el sistema sabe reconocer,
o por lo menos, identificar. Este sistema de ficheros y directorios, tiene como base
al carácter (/); ese mismo carácter sirve también para demarcar los directorios,
como por ejemplo: "/home/usuario/imagen.jpg". El directorio especificado por una
ruta consistente sólo por este carácter contiene toda la jerarquía de los directorios
que constituyen todo el sistema. A este directorio suele llamárselo directorio raíz.
En Linux, a los discos no se les asigna una letra como en Windows (por ejemplo.
"C:"), sino que se les asigna un directorio de la jerarquía del directorio raíz (/),
como por ejemplo: "/media/floppy". Es práctica común en el sistema de ficheros
de Linux, utilizar varias sub-jerarquías de directorios, según las diferentes
funciones y estilos de utilización de los archivos. Estos directorios pueden
clasificarse en:
44
Estáticos: Contiene archivos que no cambian sin la intervención del
administrador (root), sin embargo, pueden ser leídos por cualquier otro
usuario. (/bin, /sbin, /opt, /boot, /usr/bin...)
En Linux, un panic es un error casi siempre insalvable del sistema detectado por
el núcleo en oposición a los errores similares detectados en el código del espacio
de usuario. Es posible para el código del núcleo indicar estas condiciones
mediante una llamada a la función de pánico situada en el archivo
headersys/system.h. Sin embargo, la mayoría de las alertas son el resultado de
excepciones en el código del núcleo que el procesador no puede manejar, como
referencias a direcciones de memorias inválidas.
45
de la RAM o errores en las funciones aritméticas en el procesador, o por un error
en el software. En muchas ocasiones es posible reiniciar o apagar
adecuadamente el núcleo mediante una combinación de teclas como
ALT+SysRq+REISUB [7].
2.2.6.5 Portabilidad.
Aun cuando Linus Torvalds no ideó originalmente Linux como un núcleo portable,
ha evolucionado en esa dirección. Linux es ahora de hecho, uno de los núcleos
más ampliamente portados, y funciona en sistemas muy diversos que van desde
iPAQ (una handheld) hasta un zSeries (un mainframe masivo). Está planeado
46
que Linux sea el sistema operativo principal de las nuevas supercomputadoras
de IBM, Blue Gene cuando su desarrollo se complete.
Las arquitecturas principales soportadas por Linux son DEC Alpha, ARM, AVR32,
Blackfin, ETRAX CRIS, FR-V, H8, IA64, M32R, m68k, MicroBlaze, MIPS,
MN10300, PA-RISC, PowerPC, System/390, SuperH, SPARC, x86, x86 64 y
Xtensa12 [7]
Linux 1.0 admitía sólo el formato binario a.out. La siguiente serie estable (Linux
1.2) agregó la utilización del formato ELF, el cual simplifica la creación de
bibliotecas compartidas (usadas de forma extensa por los actuales ambientes de
escritorio como GNOME y KDE). ELF es el formato usado de forma
predeterminada por el GCC desde alrededor de la versión 2.6.0. El formato a.out
actualmente no es usado, convirtiendo a ELF en el formato binario utilizado por
Linux en la actualidad.
47
Linux tiene la capacidad de permitir al usuario añadir el manejo de otros formatos
binarios. También binfmt_misc permite correr el programa asociado a un archivo
de datos [6].
48
lo hacen diferente. Es el primero que combina en una misma solución las
siguientes cualidades:
En noviembre del 2007 se lanza una primera versión del Android SDK. Al año
siguiente aparece el primer móvil con Andorid (T-Mobile G1). En octubre Google
libera el código fuente de Android principalmente bajo licencia de código abierto
Apache (licencia GPL v2 para el núcleo). Este mismo mes se abre AndroidMarket,
para la descarga de aplicaciones. En abril del 2009 Google lanza la versión 1.5
del SDK que incorpora nuevas características como el teclado en pantalla. A
50
finales del 2009 se lanza la versión 2.0, durante el 2010 las versiones 2.1, 2.2 y
2.3, y al termino del 2012 la versión 4.2.1 [8].
El Núcleo de Android está formado por el sistema operativo Linux versión 2.6.
Esta capa proporciona servicios como la seguridad, el manejo de la memoria, el
multiproceso, la pila de protocolos y el soporte de drivers para dispositivos.
51
Esta capa del modelo actúa como capa de abstracción entre el hardware y el
resto de la pila. Por lo tanto, es la única que es dependiente del hardware [8].
52
SurfaceManeger: manejar el acceso al subsistema de representación
gráfica en 2D y 3D.
53
ofrecer todo lo disponible para su estándar del entorno de ejecución Java (JRE),
pero es compatible con una fracción muy significativa de la misma [8].
2.3.3.5 Aplicaciones.
54
Capítulo III. Diseño del Sistema SCADA para equipos móviles
Android con Software Libre.
3.1 Introducción.
El servidor (MTU), a su tiempo, manda los datos a una base con la finalidad
de almacenar la información. Esta base de datos está integrada dentro del
disco duro del propio servidor. También es posible que el servidor mande la
información a otro PC, PDA, Tablet, Smartphone, Internet y a celulares, es
decir, transmita la información a otros sistemas operativos, en los cuales los
clientes, accionistas, jefes, supervisores, etc. pueden acceder a la
información.
55
3.2 Arquitectura del Hardware.
56
3.3 Sensores.
57
Si la clasificación empleada es la última de la lista que precede se distinguen dos
grupos principales:
Son aquellos que entregan una señal de valor concreto en función de la red a
que estén conectados.
Los más comunes son los que adoptan dos valores, Abierto-Cerrado, On-Off,
Activado-Desactivado, Uno-Cero.
Los sensores discretos suelen ser más baratos y de gran fiabilidad, gracias a la
sencillez de su funcionamiento. Normalmente, la salida de esta clase de sensores
es un contacto libre de potencial que se cierra y se abre en función del sensor.
58
Algunas de la variantes son: Sensor de Humo, Sensor de Agua, Sensor de Gas,
Sensor por ruptura de Cristal, Sensor de Infrarrojo y una de las variantes de este
tipo el Sensor de SwitchManégtico y Sensor de Movimiento, los cuales se ocupan
en el proyecto [9].
Existen dos tipos en una de ellos los contactos permanecen abiertos cuando no
está próximo al campo magnético, si se aproxima un imán las láminas se unen
cerrando los contactos.
El segundo tipo es todo lo contrario, dentro del campo magnético los contactos
están normalmente abiertos y al separarlos del imán se unen, Figura 3 – 3 [9].
59
Los sensores de movimientos, son dispositivos capaces de emitir y recibir
señales, que le permiten detectar movimiento en la zona de vigilancia.
Para poder ser instalado un sensor en el exterior debe cumplir las condiciones
de estanqueidad establecidas por la normativa, así como contar con la potencia
de emisión necesaria, dado que la zona de vigilancia es mayor.
Va equipado con uno dos sensores infrarrojos, que transmiten su señal de salida
a la unidad central. Las variaciones de temperatura uniformes de la zona a vigilar
no son consideradas.
60
La unidad central responde ejecutando automáticamente la secuencia de
actuación, previamente programada [9].
61
La unidad central pasa a situación de alarma, y ejecuta automáticamente la
secuencia de actuación previamente programada. Existen en el mercado,
equipos que incluso llegan a detectar intrusos que se mueven gateando, o
arrastrándose [9].
62
3.4.1 Actuador.
Electrónicos
Hidráulicos
Neumáticos
Eléctricos
63
3.4.1.2 Actuadores hidráulicos.
Los actuadores hidráulicos, que son los de mayor antigüedad, pueden ser
clasificados de acuerdo con la forma de operación, funcionan en base a fluidos a
presión. Existen tres grandes grupos [11].
cilindro hidráulico
motor hidráulico
Lleva la carga en la base del cilindro. Los costos de fabricación por lo general son
bajos ya que no hay partes que resbalen dentro del cilindro [11].
La barra esta solo en uno de los extremos del pistón, el cual se contrae mediante
resortes o por la misma gravedad. La carga puede colocarse solo en un extremo
del cilindro [11].
64
3.4.1.2.4 Cilindro de Efecto doble.
Existe una gran cantidad de modelos y es fácil utilizarlos con motores eléctricos
estandarizados según la aplicación. En la mayoría de los casos es necesario
utilizar reductores, debido a que los motores son de operación continua.
65
3.4.2 Tipos de Preactuadores.
3.4.2.1 Electroválvulas.
3.4.2.4.1 Relé.
66
Dado que el relé es capaz de controlar un circuito de salida de mayor potencia
que el de entrada, puede considerarse, en un amplio sentido, como un
amplificador eléctrico. Como tal se emplearon en telegrafía, haciendo la función
de repetidores que generaban una nueva señal con corriente procedente de pilas
locales a partir de la señal débil recibida por la línea. Se les llamaba "re-
levadores" De ahí "relé".
67
3.4.2.4.1.3 Tipos de relés.
Relés electromecánicos
Relés de tipo armadura: pese a ser los más antiguos siguen siendo los más
utilizados en multitud de aplicaciones. Un electroimán provoca la basculación de
una armadura al ser excitado, cerrando o abriendo los contactos dependiendo de
si es NA (normalmente abierto) o NC (normalmente cerrado).
Relés de núcleo móvil: a diferencia del anterior modelo estos están formados por
un émbolo en lugar de una armadura. Debido a su mayor fuerza de atracción, se
utiliza un solenoide para cerrar sus contactos. Es muy utilizado cuando hay que
controlar altas corrientes.
Relé tipo reed o de lengüeta: están constituidos por una ampolla de vidrio, con
contactos en su interior, montados sobre delgadas láminas de metal. Estos
contactos conmutan por la excitación de una bobina, que se encuentra alrededor
de la mencionada ampolla.
68
Relé de estado sólido
Relé de láminas
69
3.4.2.4.1.4 Ventajas del uso de relés.
70
Descripción:
Microcontrolador ATmega328.
6 entradas análogas.
Como el Arduino Uno posee 14 pines digitales de I/O, solo se requiere 7 pines
de I/O. Se ocupa 2 pines para el Sensor de Movimiento, 2 para el Switch
Magnético, 3 para el dispositivo On/Off.
71
El Arduino se comunica con el Servidor por medio del protocolo USB. Y por este
medio, obtiene la alimentación que suministra el puerto USB (5VCC).
El Sensor Switch Magnético es alimentado por el propio Arduino, con una tensión
de 5Vcc. Este switch actúa como un interruptor On/Off.
72
El GM862 Shield se conecta a la tarjeta Arduino sin necesidad de cables y deja
el layout de los pines intacto permitiendo conectar un segundo shield en la parte
superior.
El Shield viene con un conector Molex 52991-0508 (macho) para la conexión con
el modem GM862
Solo necesitas una tarjeta SIM. La cual se puede obtener del teléfono celular. La
tarjeta SIM se inserta en el módulo y listo. Ya es posible hacer llamadas, transferir
datos, enviar mensajes de texto SMS.
El módulo GM862 es controlado por comandos AT. Esto significa que todo lo que
se necesita hacer es enviar caracteres como `ATD 022328107' para hacer una
llamada. Una vez que el módulo se conecta con otro módulo o modem, se
establece una conexión serial y los datos pueden transferirse simplemente
enviando y recibiendo strings en forma serial.
Key features:
73
Data, Voice, SMS, and Fax
100% Software and pin compatible with the previous GM862 modules
Generales
CPU - Soporte para procesadores con Socket AM3 hasta 95W: Procesadores AMD
Phenom™ II X6 / X4 / X3 / X2 (excepto de 920/940) / Athlon II X4 / X3 / X2 / Sempron
74
- Soporta Six-Core CPU
- Soporta función UCC (Unlock CPU Core – Desbloqueo núcleo CPU)
- Soporta tecnología Cool 'n' Quiet de AMD
- FSB 1000 MHz (2.0 GT/s)
- Soporta tecnología Untied Overclocking
- Soporta tecnología Hyper-Transport
*Para obtener más información, por favor consulte la "Lista de soporte de CPU".
*Debido a la limitación del sistema operativo, el tamaño de la memoria actual puede ser
menos que 4GB para la reserva del uso del sistema bajo operativo Windows® 32-bit. Para
Windows® 64-bit con CPU de 64-bit no hay tal limitación.
75
Expansión / Conectividad
- 4 x conectores SATA2 de 3,0 Gb/s, Soporta RAID (RAID 0, RAID 1, RAID 0+1,
RAID 5 y JBOD), NCQ de "Hot Plug"
- 1 x conector ATA100 IDE (Soporta 2 x dispositivos IDE)
- 1 x cabezal Puerto impresora
- 1 x cabezal de puertos COM
Conectores
- conector ventilador Procesador / caja
- conector alimentación 24 pin ATX
- conector alimentación 4 pin 12V
- Conector panel frontal audio
- 2 x cabezales USB 2.0 (soporta 4 puertos USB 2.0)
Panel Entrada/Salida
- 1 x Puerto ratón PS/2
- 1 x Puerto teclado PS/2
Panel trasero
- 1 x puerto VGA
Entrada/salida
- 4 x Puertos USB 2.0 listos-para-usar
- 1 x Puerto con LED LAN RJ-45 (LEDs de Activación/conexión y velocidad)
- Enchufe HD Audio: entrada de línea / Altavoz Delantero / Micrófono
- ASRock OC Tuner
- Ahorrador de energía inteligente
- Instant Boot
- ASRock Instant Flash
- ASRock OC DNA
Características
- ASRock APP Charger
especiales
- ASRock XFast USB
- Booster Híbrido:
- Control de Frecuencia del Procesador
- ASRock U-COP
- Boot Failure Guard (B.F.G.)
76
- Drivers, Utilidades, Software Antivirus (Versión de prueba),
CD de Soporte Suite de Software ASRock (CyberLink DVD Suite - OEM y Prueba; Creative Sound
Blaster X-Fi MB - Prueba)
77
En este apartado se define el esquema que tiene el software para el
funcionamiento del proyecto.
Señal de Selector
Adquirir datos de
Sensor de
Movimiento
Si
Escribe Mensaje en
puerto Serial “2222”
78
Señal de Selector
Adquirir datos de
Sensor de
Magnético
Si
Escribe Mensaje en
puerto Serial “5555”
79
Señal de
Preactuador
Preactuador
Preactuador Activo Si Señal Activa No
Desactivado
La función Selector tiene como objetivo recibir la activación de los sensores como
también la desactivación, por parte de las órdenes que recibe del Servidor, las
variantes para activar o desactivar los sensores como también la salida
conectado al relé. El código es el siguiente: 0, para desactivar el dispositivo
conectado al relé; 1, para activar el dispositivo conectado al relé; 2, para activar
el sensor de movimiento; 3, para desactivar el sensor de movimiento; 4, para
activar el switch magnético; 5, para desactivar el switch magnético. Esta función
está permanentemente revisando la entrada del puerto serie, para realizar su
cometido. Como aparece en la Figura 4 – 11.
80
Entrada Serie
Mensaje de Servidor
Señal Preactuador
0
Desactivado
Señal Preactuador
1
Activado
Señal Sensor
2 Movimiento
Activado
Señal Sensor
3 Movimiento
Desactivado
Señal Sensor
4 Magnético
Activado
Señal Sensor
5 Magnético
Desactivado
81
Selector, para funcionar como interruptor electrónico, mostrando avisos visuales
a usuario, si está abierto o cerrado el interruptor.
82
Recibe opciones del
puerto Serial
83
La primera consiste en crear el servidor, con el lenguaje Node.js, en donde se
definen la dirección IP que tiene el servidor y el puerto de escucha, con sus
configuraciones.
Y la tercera etapa es abrir una comunicación TCP/IP por medio de socket, para
la comunicación por internet o una red WiFi, entre la MTU y los terminales HMI.
Esta atapa maneja eventos por vía socket, y al depender de que evento reciba
por parte de la HMI es la respuesta que envía por el puerto serial de datos (entre
la MTU y RTU Arduino de los sensores y preactuador).
Las sub-etapas están a la espera de que ocurra un mensaje por parte de la RTU.
Al depender del mensaje se emite un nuevo evento hacia el socket o se escribe
un código al puerto serial, para activar o desactivar los sensores o el preactuador
o enviar un SMS a los celulares.
Es el HMI del usuario en S.O. Android, aquí se presentan los botones asociados
a funciones internas programadas en la lógica de la aplicación.
84
Configuración de los
Crear Servidor Configuración del Puertos Seriales USB
Node.js Servidor Node.js para sensores y
GRPS
Crear el Socket de
Datos
Evento
Mandar al puerto
EncenderAlarma
Serie carácter “2”
Mov
Evento
Mandar al puerto
ApagarAlarma
Serie carácter “3”
Mov
Evento
Mandar al puerto
EncenderAlarma
Serie carácter “4”
Mag
Evento
Mandar al puerto
ApagarAlarma
Serie carácter “5”
Mag
Emite un evento
Escuchar Puerto Socket “SensorMov”
Emite “2222”
Serie Escribe en Serial
GPRS “0”
Emite un evento
Socket “SensorMag”
Emite “5555”
Escribe en Serial
GPRS “1”
85
Aplicación Android
Lógica de la Apariencia de la
Aplicación Interfaz
Alarma de
Movimiento
Alarma de Switch
Magnético
Base de Datos
SMS
86
La interfaz de Conexión consiste en un cuadro de texto en donde se introduce la
dirección IP del Servidor. Presenta dos botones que Conectan o Desconectan la
aplicación por socket al Servidor (MTU).
87
Capítulo IV. Implementación del Sistema SCADA para
equipos móviles con Android.
4.1 Introducción.
Se comienza con las comunicaciones seriales entre las RTU (módulos Arduinos)
y la MTU (Servidor sobre Linux Ubuntu). Se definen las bibliotecas que se
necesitan para el enlace serial entre la RTU y MTU.
88
4.2 Programación de la RTU.
Con Arduino IDE se escriben los programas necesarios para las RTU y también
se posibilita cargar el software en la memoria flash de la RTU.
La comunicación entre la RTU con la MTU, es a través del puerto serial USB.
89
La librería Serial contiene las funciones: begin, print, println, read, avalaible, que
son las funciones que se utilizan en este proyecto.
Para habilitar el puerto, o sea dejarlo listo para la comunicación entre la RTU y la
MTU, se utiliza la función begin de la librería Serial, un ejemplo de cómo se usa
es: begin(Velocidad_del_puerto); (en donde la velocidad el puerto es: 300, 600,
1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 ó 115200 baudios).
En cambio, para la lectura del puerto serial, se utiliza la función read que es
llamada de la librería después del punto, del siguiente modo: Serial.read(); Sin
embargo, para saber si existen caracteres por leer en el puerto serie, se utiliza la
función available. Del siguiente modo Serial.available();
90
Figura 4 - 1. Serial Arduino
91
Para estos objetivos se crean funciones que cumplen el requisito de controlar
cada sensor por separado y del control del preactuador (relé).
La función Selector tiene como fin activar o desactivar los sensores por medio
de códigos emitidos por parte de la MTU, códigos establecidos en el Capítulo
3.7.2.1 que son enviados a la RTU por puerto serial USB. Recibe como
parámetros, de la MTU, en forma de caracteres las siguientes opciones 0, 1, 2,
3, 4 y 5.
Dependiendo del carácter que reciba la función Selector se activa o desactiva las
funciones del respectivo sensor o el control de la función de preactuador.
Para detectar el carácter proveniente de la MTU por vía serial USB, se utiliza la
función read de la librería Serial, de Arduino, y la almacena en una nueva
variable EntradaAlarma.
Antes de almacenar el carácter transmitido por la MTU a través del puerto serial
USB, se necesita la función available de la librerial Serial de Arduino. Con esto
se consigue saber si hay algún carácter transmitido por el puerto serial y
92
rescatarlo desde el buffer de Arduino. Y así lograr la lectura del puerto USB por
medio de la función read de la librería Serial.
La función available está adentro de un condicional, if, si hay datos por leer, entra
al condicional y con la función read almacena los datos del Buffer en la variable
EntradaAlarma.
93
Los detalles de la función se pueden ver en el Apéndice A.
94
Luz, toma un valor High
96
Un primer condicional if, que agrupa a las demás funciones, esta condición se
activa si la variable entrega por medio de la función Selector, ActivarSensorMov
es true.
97
Los detalles del circuito se muestran en la Figura 4 – 2.
98
I/O de Arduino, pone en la variable entera SalidaSensorMag asociado al pin 7el
valor 1 TTL y escribe en el puerto serial USB una cadena de caracteres, 5555,
con la función print de la biblioteca Serial, y la variable entera cont2 aumenta en
uno.
99
La velocidad de comunicación que tiene el puerto serial, lo da la función begin de
la biblioteca Serial, la velocidad se establece en 9600 bps.
100
4.2.3.2 Implementación del programa de la RTU con el
modem GPRS.
Consiste en una función para el envío de SMS que se crea a partir de la librería
GM862 del módulo GPRS Telit esta función es EnvioSMS. Y una función para
activar el envío de mensajes SMS, Selector.
101
Figura 4 – 3. Función Selector en el módulo GPRS.
De forma similar, si se recibe el carácter 1 por el puerto serial del módulo GPRS
se envía un mensaje SMS al celular previamente registrado, con la función
sendSMS de la librería GM862. Se envía el siguiente mensaje “Sensor Switch
Magnético, Activo”. Como muestra la Figura 4 – 4.
102
Figura 4 – 4. Función EnvioSMS en el módulo GPRS.
La función setup tiene como fin activar el módulo GPRS y registrarlo en la red
celular GPRS.
Se inicia con estableciendo la velocidad del puerto serial a 9600 baudios con la
función Serial.begin(9600). Se continúa con el encendido del modem GPRS con
la función switchOn de la librería GM862. Se inicializa los comandos AT
necesarios para dejar el modem dispuesto a la comunicación mediante la función
init de la librería GM862. Luego se registra la tarjeta SIM en la red celular de la
compañía a elección.
103
La función setup se muestra en la Figura 4 – 5.
Las funciones que agrupa la función loop son Selector y EnvioSMS. El contenido
de la función loop repite en forma cíclica las funciones que contiene. Como
muestra la Figura 4 – 6.
104
4.3 Programación de la MTU.
Se crean las funciones necesarias para la obtención de los objetivos del Capítulo
3. Al detallar el funcionamiento que tiene en la lógica del proyecto SCADA.
Con todo esto se puede empezar a crear el programa en la MTU para el servidor
con Node.js.
106
En la Figura 4 – 7 se presenta la comunicación del puerto serial entre la MTU y
la RTU de los sensores y preactuador.
107
4.3.3 Comunicación Serial entre la MTU (Servidor) y el RTU
(Módulo GPRS).
Para lograr la comunicación de la MTU con la RTU (Arduino con módulo GPRS)
es realizado por medio de la extensión de Node.js a través de la librería
SerialPort2.
En la línea 56 se crea la variable gprs que hereda las funciones que contiene la
variable SerialPort. Luego, en la línea 57 se abre el puerto serial, por medio de la
función open que es heredada de la librería SerialPort, en este caso como se
trabaja en Linux Ubuntu la dirección del puerto serial es /dev/ttyACM1. Sigue con
establecer la velocidad de transmisión, 9600 baudios; los bits de datos, 8; la
paridad ninguna; el bit de parada, 1 y el control de flujo, false.
108
4.3.4 Comunicación por Socket entre la MTU y la RTU con la
interfaz HMI.
Para utilizar socket.io, se comienza al crear una variable que herede de la librería
socket.io, por medio de la función require que es proporcionada por Node.js y en
la dirección IP que proporciona Node.js en la MTU. Como en la siguiente línea.
En donde server es la dirección IP con su respectivo puerto que crea el servidor
Node.js en la MTU.
var io=require('socket.io').listen(server);
Luego para establecer la conexión entre la RTU y MTU por medio de TCP/IP. Se
utiliza las funciones sockets.on heredadas de la librería socket.io a través de la
variable io. Con los argumentos “connection” y la creación de una función
implícita con el argumento “socket”, que se utiliza para el restos de los eventos
que se programan. Como aparece en la siguiente línea:
io.sockets.on('connection', function(socket){
});
109
de Node.js. Gracias a las librerías mencionadas anteriormente. Se establece las
comunicaciones con las RTU, vía puerto serial USB y por TCP/IP.
110
Figura 4 – 10. Configuración del Servidor MTU (Servidor web).
Este es una parte del programa principal de la MTU, aquí se especifica las
comunicaciones que tienen con las RTU y visualizadas en el HMI. El
funcionamiento es por eventos, o sea, nombres claves que son transmitidos por
TCP/IP al realizar la conexión por socket. Los detalles a continuación se
presentan, Figura 4 – 11.
111
Figura 4 – 11. Programa de eventos por socket.
112
4.3.5.2.1 Evento que controla el preactuador.
Este evento controla el relé conectado a la RTU (Arduino), para abrir o cerrar el
interruptor del relé.
Con la función on, de la librería socket.io, que recoge el evento transmitido por
socket. Al llegar el evento EncenderLed la función socket.on se activa y ejecuta
los siguientes comandos. Llama a la función write de la librería SerialPort2, que
escribe el carácter 1 en el puerto serial de la RTU que controla los sensores y el
preactuador (relé). Imprime un mensaje en la consola de Node.js con el mensaje
“Se enciende Led” y por último vacía la variable que almacena el contenido del
buffer de entrada del puerto serial a la MTU, readData.
113
Con la función on, de la librería socket.io, que recoge el evento transmitido por
socket. Al llegar el evento EncenderAlarmaMov la función socket.on se activa y
ejecuta los siguientes comandos. Llama a la función write de la librería
SerialPort2, que escribe el carácter 2 en el puerto serial de la RTU que controla
los sensores y el preactuador (relé). Imprime un mensaje en la consola de Node.js
con el mensaje “Se envió encender alarma de movimiento” y por último vacía la
variable que almacena el contenido del buffer de entrada del puerto serial a la
MTU, readData.
Con la función on, de la librería socket.io, que recoge el evento transmitido por
socket. Al llegar el evento EncenderAlarmaMag la función socket.on se activa y
ejecuta los siguientes comandos. Llama a la función write de la librería
SerialPort2, que escribe el carácter 4 en el puerto serial de la RTU que controla
los sensores y el preactuador (relé). Imprime un mensaje en la consola de Node.js
con el mensaje “Se envió encender alarma magnética” y por último vacía la
114
variable que almacena el contenido del buffer de entrada del puerto serial a la
MTU, readData.
Este programa tiene como objetivo estar a la espera de señales que provienen
de la RTU (Arduino). Al depender de los valores que presenta se ejecuta una
acción predeterminada, se presenta en la Figura 4 – 12.
115
Figura 4 – 12. Parte del programa de la MTU, de la recepción de señales del
RTU de los sensores y preactuador (relé).
En la línea 144, la MTU está a la espera de los mensajes que recibe dela RTU
de los sensores (Arduino) por puerto serial USB, la función se inicia con la función
on de la librería de SerialPort2, que llama al argumento “data”, con esto el puerto
serial está a la espera de recibir los datos que se guardan en el buffer del puerto
serial en la MTU. Después de esto, los datos son almacenados en una variable
local, readData, previamente son convertidos a una cadena String.
116
Al depender de que cadena contenga la variable readData, es comparada en los
condicionales, y si la cadena contiene, a lo menos un carácter del código; 2222
para sensor de movimiento o 5555 para sensor switch magnético. Ejecuta las
funciones que contienen.
117
datos creada y la variable cont1 aumenta en uno, reset toma el estado de true,
que sirve para almacenar la variable AlarmaSensorMovDB en la base de datos y
se vacía la variable readData, para poder recibir nuevos datos del buffer
transmitidos por el puerto serial USB a la MTU.
Hecho este proceso se puede ocupar la librería en el código fuente del servidor
Node.js en la MTU (Linux).
Adentro del código fuente del servidor (MTU con S.O. Linux) se introduce las
siguientes líneas:
118
la base de datos. Y en la función insertarFila se inserta una fila nueva en la base
de datos, como la presenta la Figura 4 – 13.
119
Figura 4 – 13. Funciones de la Base de Datos.
De manera similar, cuando se recibe el string “aaaa” del puerto serial USB, la
variable LedDB toma el valor false, se registra la fecha y hora del evento en la
variable LedDBTime, se emite un evento al socket; ApagaLedDB. La variable
reset toma el valor true y se vacía la variable readData. Como muestra la Figura
4 – 14.
121
El evento del sensor de movimiento sucede cuando se recibe la cadena de
caracteres “dddd” para desactivar el sensor de movimiento o al recibir el string
“cccc” para activar el sensor de movimiento, a través del puerto serial USB.
De manera similar, cuando se recibe el string “dddd” del puerto serial USB, la
variable SensorMovDB toma el valor false, se registra la fecha y hora del evento
en la variable SensorMovDBTime, se emite un evento al socket
ApagaSensorMovDB. La variable reset toma el valor true y se vacía la variable
readData. Como muestra la Figura 4 – 15.
Figura 4 – 15. Eventos del sensor de movimiento emitido por la RTU a la MTU.
122
El evento del sensor switch magnético sucede cuando se recibe la cadena de
caracteres “ffff” para desactivar el sensor switch magnético o al recibir el string
“eeee” para activar el sensor switch magnético, a través del puerto serial USB.
De manera similar, cuando se recibe el string “ffff” del puerto serial USB, la
variable SensorMagDB toma el valor false, se registra la fecha y hora del evento
en la variable SensorMagDBTime, se emite un evento al socket;
ApagaSensorMagDB, la variable reset toma el valor true y se vacía la variable
readData. Como muestra la Figura 4 – 16.
Figura 4 – 16. Eventos del sensor switch magnético emitido por la RTU a la MTU.
123
Finalmente se procede a insertar una nueva fila en la tabla Monitor de la Base de
Datos creada. Solo cuando la variable reset es true. Se llama a la función
insertarFila, luego se lee el contenido de la tabla mediante la función db.all de la
librería sqlite3 de Node.js solamente en el último registro y se envía los datos por
medio de un evento socket; DatoBD, en formato JSON a la RTU con interfaz HMI
(Android). Como muestra la Figura 4 – 17.
Figura 4 – 17. Creación de nueva fila en tabla Monitor y envío de los datos a RTU
con interfaz HMI.
124
4.3.6 Implementación de la interfaz HMI en la MTU.
En este apartado se crea una página web para la interfaz HMI. Con lo que se
consigue el acceso de cualquier dispositivo que cuente con un navegador web
para supervisar el sistema SCADA.
La creación de la página web, se realiza por medio del intérprete Jade, una forma
más corta de escribir código HTML. Esta página web se carga al ingresar a la
dirección IP de la MTU, Servidor Node.js. En la primera parte se establece el
formato del documento web y los script que necesita. Como se muestra en la
Figura 4 – 18.
125
Luego se presenta el script en donde se maneja las propiedades de la página
web por medio del lenguaje jquery, que maneja los eventos de los botones de la
página web y las alertas provenientes de la MTU.
Se compone de las siguientes partes, la sección para las alertas de los sensores
provenientes de la MTU. Los eventos de los botones, al ser presionados, con la
respectiva ejecución del programa.
Su función es emitir una alerta al recibir el evento SensorMov a través del socket,
cuyo aviso lo implementa el comando alert de la librería JavaScript, con el
mensaje de “Alarma de movimiento Activada”.
126
4.3.6.1.2 Alerta del Switch Magnético.
Son los eventos que se activan cuando se presionan los botones de la interfaz
HMI. Su función es seleccionar la opción que disponga el usuario en la interfaz
HMI. Para este cometido se tienen tres tipos de funciones, Activar o Desactivar
Relé; Activar o Desactivar Sensor de Movimiento; Activar o Desactivar Sensor
Switch Magnético. El programa aparece en la Figura 4 – 20.
127
Figura 4 – 20. Eventos al presionar botones en la HMI.
128
función input de la librería HTML al ser, id= “enciendeMovimiento” y id=
“apagaMovimiento”, estos botones con el comando click de la librería jquery,
cuando se presiona realiza la acciones siguientes: Entre las líneas 39 y 49 de la
Figura 4 – 20. Si el botón Encender se presiona o Apagar, el socket de la librería
socket.io, emite un evento llamado EncenderAlarmaMov o ApagarAlarmaMov,
este evento es capturado por el servidor MTU y envía su correspondiente código
al puerto serial USB del RTU de los sensores y preacuador, que luego se procesa
por el RTU para activar o desactivar el sensor de movimiento.
129
“apagaMagnetico”, estos botones con el comando click, de la librería jquery,
cuando se presiona realiza la acciones siguientes: Entre las líneas 51 y 61 de la
Figura 4 – 20, Si el botón Encender se presiona o Apagar, el socket emite un
evento llamado EncenderAlarmaMag o ApagarAlarmaMag, este evento es
capturado por el servidor MTU y envía su correspondiente código al puerto serial,
que luego se procesa por el RTU para activar o desactivar el switch magnético.
130
4.4.1 Implementación de la Interfaz HMI en Android.
131
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
En donde las dos primeras líneas son obligatorias y la última línea hace referencia
al archivo principal que es la lógica de la aplicación.
Las demás líneas hacen referencia a los botones, texto y entrada de texto. Con
sus respectivas identificaciones (android:id="@+id/Tipo_Objeto), que se necesita
al realizar el enlace a la parte lógica de la aplicación.
Consta de las siguientes partes: El enlace entre la MTU con S.O. Linux Ubuntu y
la RTU con interfaz HMI con S.O. Android, el manejo del preactuador (relé), el
132
control del sensor de movimiento, el control del Switch Magnético, el acceso a la
base de datos y el control de los mensajes SMS.
Figura 4 – 23. Variables para la conexión entre la MTU y la RTU con interfaz
HMI.
133
Adentro de la función onCreate se enlaza los recursos de la interfaz de usuario,
mediante la función findViewById, para los botones Conectar, Desconectar y la
entrada de texto ip. Como muestra la Figura 4 – 24.
Figura 4 – 24. Variables que enlazan la parte lógica con la interfaz HMI y los
intentos.
134
Figura 4 – 25. Función onClick a través del botón Conectar.
135
Figura 4 – 26. Sub-funciones de la función Connect de la librería SocketIO.
136
4.4.2.1.1 Función onConnect.
137
4.4.2.1.2 Función onDisconnect.
El primer condicional, if, por medio del comando equalsIgnoreCase hace una
comparación con el evento SensorMov proveniente del argumento event de la
función On. Si es igual, llama a un Intento, el cual abre una ventana emergente
mostrando un mensaje de que el Sensor de movimiento se activó, en la interfaz
HMI de Android. Para este fin, se crea SensorMovimieno.java ubicado en el
paquete com.tomas.monitor. SensorMovimieno.java contine el programa fuente
del mensaje de alerta.
139
Figura 4 – 30. Programa SensorMovimiento.java.
140
SensorMagnetico.java se compone de la librería AlertDialog para mostrar el
mensaje de aviso en una ventana emergente. Se presenta en la Figura 4 – 31.
También la función on recoge los eventos que accionan las luces indicadoras de
la interfaz HMI del preactuador y los sensores.
141
Para tal efecto se establecen imágenes de luces rojas, verdes y grises. Que
sirven como indicadoras de los estados de los sensores y preactuador.
142
De manera semejante los eventos EnciendeSensorMovBD y
ApagaSensorMovBD, cambia la variable imagen VerdeSensorMov de verde a
gris y viceversa. Mediante la función setImageResource como muestra la Figura
4 – 33.
Figura 4 – 33. Evento del sensor movimiento que cambia el estado de la imagen.
143
Figura 4 – 34. Evento del sensor switch magnético que cambia el estado de la
imagen.
144
JSON, le sigue un condicional, que está a la espera de que el usuario presione
el botón. La acción a realizar es emitir el evento EncenderLed al socket creado y
mostrar un mensaje en la interfaz HMI de usuario “Enciende Luz”, si hay falla se
presenta el mensaje “Fallo Encender Luz, conéctese al servidor”. Como se
presenta en la Figura 4 – 35.
Figura 4 – 35. Programa para botón Encender, para la RTU asociado al relé.
145
Figura 4 – 36. Programa para botón Apagar, para la RTU asociado al relé.
146
JSON, le sigue un condicional, que está a la espera de que el usuario presione
el botón. La acción a realizar es emitir el evento EncenderAlarmaMov al socket
creado y mostrar un mensaje en la interfaz de usuario “La alarma de Movimiento
se Activó”, si hay una falla, se presenta el mensaje “Fallo activar Alarma de
Movimiento, conéctese al Servidor”. Como se presenta en la Figura 4 – 37.
Figura 4 – 37. Programa para botón Activar, para la RTU asociado al sensor de
Movimiento.
147
La segunda DesactivarMov.setOnClickListener realiza un procedimiento
semejante al primero, cambia al emitir el evento ApagarAlarmaMov al socket
conectado, cuando es presionado el botón Desactivar, como también da un
mensaje emergente en la interfaz de la aplicación “La alarma de Movimiento se
ha Desactivado”, si hay problemas la condición despliega un mensaje “Fallo
Desactivar Alarma de Movimiento, conéctese al Servidor”. Como se presenta en
la Figura 4 – 38.
Figura 4 – 38. Programa para botón Desactivar, para la RTU asociado al sensor
de Movimiento.
148
4.4.2.4 Sensor Switch Magnético.
149
Figura 4 – 39. Programa para botón Activar, para la RTU asociado al Sensor
Switch Magnético.
150
Figura 4 – 40. Programa para botón Desactivar, para la RTU asociado al Sensor
Switch Magnético.
activity_conectado.xml,
activity_desaconectado.xml,
151
activity_sensormagnetico.xml,
activity_sensormovimiento.xml,
Estos archivos deben estar vacios ya que son para la interfaz HMI en Android
que se ejecutan cuando sucede un intento y como por cada intento solo se
muestra un mensaje emergente, no es necesario configurar la pantalla de la
interfaz HMI.
152
También se coloca las siguientes cadenas de código en el archivo
AndroidManifest.xml
<activityandroid:name=".Conectado"></activity>
<activityandroid:name=".Desconectado"></activity>
<activityandroid:name=".SensorMovimiento"></activity>
<activityandroid:name=".SensorMagnetico"></activity>
<uses-permissionandroid:name="android.permission.INTERNET"/>
Los primeros 4 hacen referencia a los avisos emergentes, para cada Intento. El
último da permisos al programa, RTU de interfaz HMI con S.O. Android para
funcionar a través de la red local o Internet.
Para este cometido se diseña un botón que enlaza a otra actividad; esta
despliega la información de la fecha y hora en que ocurre los eventos de activar
o desactivar los sensores y preactuador, provenientes de la copia de la base de
datos de la MTU.
Comienza con la variable de BaseDatos que vincula la base de datos con el inicio
de una nueva actividad:
BaseDatos=(Button)findViewById(R.id.ftp);
153
contenido del evento DatosDB a un objeto JSON. Con un substring se rescata el
formato de un JSONObject. Luego se adquiere el contenido de cada variable de
la base de datos transmitida, de los sensores y preactuador, y se almacena en la
variable que caracteriza el contenido. Como muestra la Figura 4 – 42.
package com.tomas.monitor;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
154
//Nombre de la base de datos
public static final String NOMBREBD = "BDmonitor.sqlite";
//Versión de la base de datos
public static final int VERSION = 1;
//Nombre de la tabla (puede haber tantas como necesitemos)
public static final String NOMBRE_TABLA = "Base_Datos_Monitor";
//Campos de la base de datos
public static final String ID = "id";
public static final String RELE = "Rele";
//Constructor
public CreacionBDSQLite(Context context) {
//Aquí le pasamos el contexto, el nombre de la base de datos, el
cursor que no lo necesitamos y la version de la base de datos.
super(context, NOMBREBD, null, VERSION);
}
155
+ SENSORMOVTIME + " text, "
Con estas líneas de código fuente se crea y está a la espera, la variable bd, para
escribir en la base de datos.
156
El botón asociado a la base de datos, al hacer click en el botón Entrar se ejecuta
un proceso de iniciar una nueva actividad en una ventana nueva; lleva los datos
del último registro de la base de datos a la nueva ventana.
El proceso es el siguiente:
for(contenido.moveToFirst();contenido.isAfterLast();contenido.moveToNe
xt()){
ReleToIntent = contenido.getString(0);
ReleTimeToIntent = contenido.getString(1);
157
SensorMovToIntent = contenido.getString(2);
SensorMovTimeToIntent = contenido.getString(3);
SensorMagToIntent = contenido.getString(4);
SensorMagTimeToIntent = contenido.getString(5);
AlarmaSensorMovToIntent = contenido.getString(6);
AlarmaSensorMovTimeToIntent = contenido.getString(7);
AlarmaSensorMagToIntent = contenido.getString(8);
AlarmaSensorMagTimeToIntent = contenido.getString(9);}
BDToIntent.putExtra("Rele", ReleToIntent);
BDToIntent.putExtra("ReleTime", ReleTimeToIntent);
BDToIntent.putExtra("SensorMov", SensorMovToIntent);
BDToIntent.putExtra("SensorMovTime", SensorMovTimeToIntent);
BDToIntent.putExtra("SensorMag", SensorMagToIntent);
BDToIntent.putExtra("SensorMagTime", SensorMagTimeToIntent);
BDToIntent.putExtra("AlarmaSensorMov", AlarmaSensorMovToIntent);
BDToIntent.putExtra("AlarmaSensorMovTime", AlarmaSensorMovTimeToIntent);
BDToIntent.putExtra("AlarmaSensorMag", AlarmaSensorMagToIntent);
BDToIntent.putExtra("AlarmaSensorMagTime", AlarmaSensorMagTimeToIntent);
startActivity(BDToIntent);
Se crea una nueva interfaz visual para mostrar el traspaso de información de una
actividad a otra. La interfaz es la que se muestra en la Figura 4 – 43.
158
Figura 4 – 43. Interfaz visual de la Base de Datos
{
Rele = extras.getString("Rele");
ReleTime = extras.getString("ReleTime");
159
SensorMov = extras.getString("SensorMov");
SensorMovTime = extras.getString("SensorMovTime");
SensorMag = extras.getString("SensorMag");
SensorMagTime = extras.getString("SensorMagTime");
AlarmaSensorMov = extras.getString("AlarmaSensorMov");
AlarmaSensorMovTime = extras.getString("AlarmaSensorMovTime");
AlarmaSensorMag = extras.getString("AlarmaSensorMag");
AlarmaSensorMagTime = extras.getString("AlarmaSensorMagTime");
if(Rele.equalsIgnoreCase("1")){
}
if(Rele.equalsIgnoreCase("0")){
if(SensorMov.equalsIgnoreCase("1")){
}
if(SensorMov.equalsIgnoreCase("0")){
if(SensorMag.equalsIgnoreCase("1")){
}
if(SensorMag.equalsIgnoreCase("0")){
if(AlarmaSensorMov.equalsIgnoreCase("1")){
160
AlarmaSensorMovText.setText("Activa "+
AlarmaSensorMovTime);
}
if(AlarmaSensorMov.equalsIgnoreCase("0")){
AlarmaSensorMovText.setText("Desactiva "+
AlarmaSensorMovTime);
}
if(AlarmaSensorMag.equalsIgnoreCase("1")){
AlarmaSensorMagText.setText("Activa "+
AlarmaSensorMagTime);
}
if(AlarmaSensorMag.equalsIgnoreCase("0")){
AlarmaSensorMagText.setText("Desactiva "+
AlarmaSensorMagTime);
}
Aceptar.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0){
El botón SMS tiene como fin activar o desactivar el modem GPRS, módulo de la
RTU GPRS Arduino.
Se define un botón especial que muestra cuando está activo. ToggleBoton es la
nueva variable para el botón SMS:
161
ToggleBoton = (ToggleButton) findViewById(R.id.toggleButton1);
ToggleBoton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
//estado activo
if(ToggleBoton.isChecked()){
Log.v(TAG,"SMS Activo");
cliente.emit("SMSActivo", SMSActivo);
}
//estado desactivo
else{
Log.v(TAG, "SMS Desactivo");
cliente.emit("SMSDesactivo", SMSDesactivo);
}
}
});
162
Capítulo V. Pruebas y Operación del Sistema SCADA para
equipos móviles Android con software Libre.
5.1 Introducción.
163
Las luces verdes representan a los sensores, y significan que están activados
estos. Y la luz roja señala que el preactuador está apagado. Figura 5 – 1.
Se supervisa las señales de alarma de los sensores, que son enviadas al puerto
serial. Por medio de la consola de Arduino IDE, Figura 5 – 2.
164
Figura 5 – 3. Mensaje del Sensor de Movimiento.
165
Figura 5 – 5. Mensaje del Sensor Switch Magnético.
Para este efecto se realiza los mismos procedimientos para activar los sensores.
166
En el puerto serial se escribe los códigos preestablecidos de los sensores, que
se visualizan en la consola de Arduino IDE. Por lo tanto, está funcionando
perfectamente.
5.2.4 Preactuador.
Para realizar la prueba del preactuador, se conecta a una ampolleta de 220 VCA.
En uno de los extremos del cofre del RTU, se conecta la ampolleta.
Para lograr el objetivo se realizó la conexión de las RTU’s por puerto serial USB
a la MTU (Servidor). Primero se conecta la RTU de los sensores y preactuador y
se abre una consola terminal en la MTU y se ingresa la línea de comandos para
activar el puerto serial USB referido a la RTU de los sensores y preactuador, se
ingresa:
167
sudo chmod a+rw /dev/ttyACM0 en donde sudo es el comando para
modificar los parámetros del servido en forma de superusuario chmod
a+rw le da al puerto serial la habilitación de poder escribir y leer en el, y
/dev/ttyACM0 es la ruta que tiene el puerto USB, como muestra la Figura
5 – 7.
Luego se inicia el servidor Node.js en la MTU con S.O Linux Ubuntu, del siguiente
modo.
168
Figura 5 – 9. Interfaz HMI de la MTU.
Del mismo modo se realiza con el sensor de switch magnético, para activar
el sensor se separan los módulos switch magnético. Los resultados que
se presentan en la interfaz HMI es un despliegue de una ventana
emergente con el siguiente texto “Alarma magnética activada” como
muestra la Figura 5 – 10.
169
Se presiona el botón Desactivar del sensor de movimiento y se mueve un
objeto en el campo de visión del sensor se comprueba que no se presenta
la ventana emergente. Y cuando se presiona Activar el sensor de
movimiento el sensor vuelve a funcionar.
La RTU con interfaz HMI con S.O. Android (Tablet) se conecta a la MTU a través
de WiFi a la red local. Por lo tanto el dispositivo es portable con movilidad.
Las pruebas que consiste son la conexión que se realiza a través de socket entre
la Tablet con S.O. Android y la MTU. Se verifica el correcto funcionamiento de los
sensores y preactuador (relé).
170
5.4.1 Comunicación entre la RTU con interfaz HMI (Android) y la
MTU (Servidor Linux Ubuntu).
171
Figura 5 – 13. Mensaje de desconexión de la interfaz HMI Android de la MTU.
172
La siguiente prueba es en el Sensor de movimiento. Si no se presiona ningún
botón del área de Alarma de Movimiento. La MTU tiene prefijado que el sensor
de movimiento este activo. Al desplazar un objeto adelante del sensor de
movimiento, en la interfaz HMI se despliega un mensaje como se muestra en la
Figura 5 – 15.
173
ningún mensaje emergente en la interfaz HMI Android como muestra la Figura 5
–17. Para reanudar su acción se tiene que presionar el botón “Activar, como
muestra la Figura 5 – 17.
174
Se comienza con la conexión de los componentes de Hardware:
Luego se procede con la Tablet con S.O. Android conectándose a la red local
WiFi. Al acceder a ella, se ejecuta la aplicación “Monitor” en Android. Adentro de
la aplicación se continua con la conexión vía socket a la MTU, como muestra la
Figura 5 – 11.
175
Si se presionan los botones Desactivar de los sensores en la interfaz HMI y se
realiza la prueba de activar los sensores en la RTU. Los mensajes emergentes
no se presentan, solamente cuando se presionan los botones Activar; enforma
visual se presenta la luz de color verde cuando están activos los sensores y
cambia al color gris cuando están desactivados, como aparece en la Figura 5 –
17.
176
Capítulo V. Conclusiones.
En tanto para el S.O. Android, el lenguaje que se ocupa es Java, pero contando
con sus propias librerías. El programa de desarrollo que se ocupa, Eclipse, hace
más ameno el desarrollo de la aplicación. Por medio de la consola se logra
177
supervisar el rumbo que sigue el programa, detectando los errores que surgen
en la programación.
178
se puede extrapolar para realizar proyectos más robustos. Manteniéndose el
concepto de SCADA, permitiendo la portabilidad, movilidad del monitoreo y
control por vigilancia en forma remota.
179
Referencias Bibliográficas
[1] Corrales Paucar, Luis, “Interfaces de comunicación industrial”, Escuela
Politécnica Nacional, http://bibdigital.epn.edu.ec/.
[3] Manuel Báez, Álvaro Borrego, Jorge Cordero,Luis Cruz, Miguel González,
Francisco Hernández, David Palomero, José Rodríguez de Llera, Daniel
Sanz, Mariam Saucedo, Pilar Torralbo, Álvaro Zapata, “Introducción a
Android”, www.tecnologiaUCM.es.
[4] http://es.wikipedia.org/wiki/SCADA.
[7] http://es.wikipedia.org/wiki/N%C3%BAcleo_Linux
[9] http://www.ulsa.edu.ni/publicaciones/-III-Anio/Plan-Sabatino-I-
Trimestre/Mando-Electromecanico/05_-_Sensores.pdf
[10] http://es.wikipedia.org/wiki/Preactuador
[11] http://es.wikipedia.org/wiki/Actuador
[12] http://es.wikipedia.org/wiki/Arquitectura_de_software
180