Está en la página 1de 127

DISEÑO E IMPLEMENTACIÓN DE UNA ESTACIÓN

REMOTA PARA EL DESARROLLO DE PRACTICAS DE


LABORATORIO DE CONTROL

Pablo Emilio Narváez Ortiz


Joel Mateo Moreno Quintero

Universidad Distrital Francisco José de Caldas


Facultad de Ingenierı́a
Proyecto Curricular de Ingenierı́a Electrónica
Bogotá D.C.
2016
DISEÑO E IMPLEMENTACIÓN DE UNA ESTACIÓN
REMOTA PARA EL DESARROLLO DE PRACTICAS DE
LABORATORIO DE CONTROL

Pablo Emilio Narváez Ortiz Código: 20092005022


Joel Mateo Moreno Quintero Código: 20101005088

Trabajo de grado para optar al tı́tulo de:


Ingeniero Electrónico en la modalidad de investigación

Directora:
Diana Marcela Ovalle Martı́nez. PhD.

Lı́nea de Investigación:
Señales y Control
Grupo de Investigación:
IDEAS

Universidad Distrital Francisco José de Caldas


Facultad de Ingenierı́a
Proyecto Curricular de Ingenierı́a Electrónica
Bogotá D.C.
2016
Everyone loves progress, but nobody likes
change .
Agradecimientos

Primero y antes que todo, agradecer a Dios que nos dio las fuerzas necesarias para afrontar
este gran reto, y darle culminación a cinco años de estudio en donde se presentaron dificul-
tades, pero también logros con alegrı́as.

A nuestros familiares que supieron entender y apoyar tantos esfuerzos, dándonos valor en
cada paso que dábamos en esta etapa de formación profesional.

A nuestros compañeros y amigos, quienes fueron soporte y compañı́a durante largas horas
de trabajo, y con los cuales compartimos tantas cosas y momentos especiales.

A nuestra Directora la Doctora Diana Marcela Ovalle, que nos brindo esta oportunidad de
trabajar a su lado, y que mas que nuestra directora se convirtió en una amiga de la cual
aprendimos muchas cosas durante estos últimos dos años.

Por ultimo a la Universidad Distrital, lugar que nos formó, no solo como profesionales si no
como personas, y en donde conocimos docentes y compañeros excepcionales.

A todos gracias.
Resumen

El proyecto de investigación estaba enfocado en desarrollar una herramienta para la comuni-


dad académica que permitiera realizar practicas de laboratorio de control de manera remota,
con el fin de mejorar el método de aprendizaje en esta área y facilitar el acceso a la pobla-
ción académica, tanto docentes como estudiantes a la experimentación practica en el área
de automatización y control.

Esta herramienta se desarrollo principalmente en el diseño y construcción de la estación


remota, la cual permitió que un usuario con acceso a Internet pudiera configurar pruebas,
y visualizar y extraer los resultados obtenidos en tiempo real gracias a la integración de
prototipos de sistemas dinámicos dirigidos por un sistema embebido que se comunica a su
vez con un servidor local que le permite la conexión a la red de Internet y de esta manera
por medio de una pagina web la interacción con el usuario.

Este trabajo permite al usuario final, la configuración de parámetros especı́ficos de mane-


ra exacta y rápida, la posibilidad de minimizar los errores cometidos al momento de la
experimentación tradicional ,y la capacidad de extraer información fundamental para su
aprendizaje en control, sin la necesidad de que tenga que perder tiempo en labores de cons-
trucción y adecuación del prototipo que no son propias del área.

Otra de las ventajas ofrecidas por el desarrollo de esta estación remota, es que se elimina
la limitante dada por los elementos de medición, los cuales el estudiante no siempre tiene a
su disposición, o simplemente no son suficientes debido a sus limitantes técnicas las cuales
no le permiten mediciones en grandes intervalos de tiempo o no admiten la extracción de la
información para su posterior análisis.

El desarrollo de este trabajo ademas de ofrecer una herramienta para la experimentación a


distancia, abre un camino para nuevos métodos de enseñanza, con la posibilidad de aprendi-
zaje sin limites de distancia y tiempo. Abriendo la posibilidad de generar nuevos desarrollos
en el area tanto del control como la experimentación a distancia.
Contenido

Resumen IX

Lista de Figuras XIII

Lista de Tablas XVII

Introducción 1

Objetivos 3

Justificación 4

1. Funcionamiento de los sistemas dinámicos, identificación y caracterización


de las Plantas 5
1.1. Descripción Técnica de la Planta Térmica . . . . . . . . . . . . . . . . . . . 5
1.2. Descripción Planta de Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Identificación y caracterización de las Plantas . . . . . . . . . . . . . . . . . 9
1.3.1. Caracterización e identificación de la planta de temperatura . . . . . 10
1.3.2. Caracterización de la planta de velocidad . . . . . . . . . . . . . . . . 12

2. Adquisición de datos y Acondicionamiento de señal 15


2.1. Adquisición y Envió de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1. Selección del sistema embebido . . . . . . . . . . . . . . . . . . . . . 16
2.1.2. Entorno de Desarrollo y Consideraciones de Implementación . . . . . 18
2.1.3. Desarrollo de los Programas para Sistema Térmico y de Velocidad . . 19
2.1.4. Respuesta al escalón . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.5. Respuesta en frecuencia . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.6. Controlador On Off . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.7. Controlador Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2. Acondicionamiento de señal . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2.1. Diseño de acondicionamiento para entrada y salida de la planta de
velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
xii CONTENIDO

2.2.2. Diseño de acondicionamiento para entrada y salida de la planta de


temperatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.2.3. Circuito y PCB del bloque de acondicionamiento de entrada y salida
de las plantas de velocidad y temperatura. . . . . . . . . . . . . . . . 41

3. Arquitectura de Comunicación 44
3.1. Comunicación Planta – Acondicionamiento de Señal – Microcontrolador . . . 45
3.2. Comunicación Microcontrolador-Computador Servidor Local . . . . . . . . . 45
3.2.1. Protocolo de Comunicación Serial Ası́ncrono - Microcontrolador y Ser-
vidor Local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3. Protocolos de Comunicación de Internet, Websockets y PubNub . . . . . . . 47
3.3.1. PubNub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4. Comunicación Computador Local – Internet – Servidor web . . . . . . . . . 50
3.5. Comunicación Computador cliente – Servidor Aplicación web - Base de datos
mySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4. Interface Gráfica de Usuario 52


4.1. Elección del tipo de interface gráfica de usuario . . . . . . . . . . . . . . . . 52
4.2. Desarrollo de la pagina web . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3. Funcionalidades principales de la página web . . . . . . . . . . . . . . . . . . 57
4.3.1. Recepción de información de las plantas de velocidad y temperatura . 57
4.3.2. Envı́o de información hacia las plantas de velocidad y temperatura . 58
4.3.3. Gestión de acceso a las plantas de velocidad y temperatura . . . . . . 62

5. Resultados 66
5.1. Resultados Planta de Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.1.1. Resultados Prueba Respuesta al Escalón . . . . . . . . . . . . . . . . 66
5.1.2. Resultados Prueba Respuesta en Frecuencia . . . . . . . . . . . . . . 70
5.1.3. Resultados Prueba Controlador ON-OFF . . . . . . . . . . . . . . . . 71
5.1.4. Resultados Prueba Controlador Digital . . . . . . . . . . . . . . . . . 72
5.2. Resultados Planta de Temperatura . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.1. Resultados Prueba Respuesta al Escalón . . . . . . . . . . . . . . . . 74
5.2.2. Resultados Prueba Controlador ON-OFF . . . . . . . . . . . . . . . . 76
5.2.3. Resultados Prueba Controlador Digital . . . . . . . . . . . . . . . . . 77
5.3. Análisis de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.3.1. Análisis de Resultados Planta de Velocidad . . . . . . . . . . . . . . . 79
5.3.2. Análisis de Resultados Planta de Temperatura . . . . . . . . . . . . . 80

6. Conclusiones, Recomendaciones y Trabajos Futuros 82

Conclusiones, Recomendaciones y Trabajos Futuros 82


Lista de Figuras

1-1. Plantas de Velocidad y Temperatura. . . . . . . . . . . . . . . . . . . . . . . 6


1-2. Etapa de potencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1-3. Etapa de acondicionamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1-4. Etapa de protección de la salida en caso de corto circuito. . . . . . . . . . . . 7
1-5. Circuito de potencia para motor. . . . . . . . . . . . . . . . . . . . . . . . . 8
1-6. Linealización de datos obtenidos a respuesta de escalón de 5.8 V. . . . . . . . 11
1-7. Linealización de datos obtenidos a respuesta de escalón de 7 V. . . . . . . . . 11
1-8. Linealización de datos obtenidos a respuesta de escalón de 9 V. . . . . . . . . 13
1-9. Linealización de datos obtenidos a respuesta de escalón de -10 V. . . . . . . 14

2-1. Estructura de Conexión y envio de Datos . . . . . . . . . . . . . . . . . . . . 15


2-2. Parametros de Configuración Prueba Respuesta al Escalon . . . . . . . . . . 21
2-3. Parametros de Configuración Prueba Respuesta en Frecuencia . . . . . . . . 23
2-4. Parámetros de Configuración Prueba Controlador ON-OFF . . . . . . . . . . 25
2-5. Diagrama Flujo Controlador ON-OFF planta de temperatura . . . . . . . . . 26
2-6. Diagrama Flujo Controlador ON-OFF planta de velocidad . . . . . . . . . . 27
2-7. Relación, Salida módulo DAC vs Entrada planta de velocidad. . . . . . . . . 30
2-8. Bloque de acondicionamiento entrada planta de velocidad. . . . . . . . . . . 31
2-9. Amplificador multientradas o Sumador-Restador [12]. . . . . . . . . . . . . . 31
2-10.Circuito acondicionador con amplificador operacional. . . . . . . . . . . . . . 32
2-11.Circuito de acondicionamiento de entrada planta de velocidad. . . . . . . . . 33
2-12.Diagrama de bloques de acondicionamiento de salida planta de velocidad. . . 33
2-13.Relación Voltaje de salida planta de velocidad vs voltaje de salida acondicio-
namiento 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2-14.Circuito 1 de acondicionamiento de salida planta de velocidad. . . . . . . . . 35
2-15.Filtro Pasa Bajo Activo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2-16.Divisor Resistivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2-17.Circuito Final de Acondicionamiento de Salida Para Planta de Velocidad. . 36
2-18.Relación Salida Módulo DAC vs Entrada Planta de Temperatura. . . . . . . 37
2-19.Amplificador No Inversor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
xiv LISTA DE FIGURAS

2-20.Circuito amplificador No Inversor, Acondicionamiento Entrada Planta Tem-


peratura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2-21.Circuito bloque de acondicionamiento de entrada a la planta de temperatura. 39
2-22.Bloque de acondicionamiento de salida de la planta de Temperatua. . . . . . 39
2-23.Filtro pasa bajo activo, bloque de acondicionamiento planta de Ttemperatura. 40
2-24.Circuito final de acondicionamiento de salida planta de Temperatura. . . . . 40
2-25.Circuito total del bloque de acondicionamiento de entrada y salida de las
plantas de Velocidad Y Temperatura. . . . . . . . . . . . . . . . . . . . . . . 41
2-26.Circuito PCB del bloque de acondicionamiento de entrada y salida de las
plantas de Velocidad Y Temperatura. . . . . . . . . . . . . . . . . . . . . . . 42
2-27.Circuito PCB en 3D del bloque de acondicionamiento de entrada y salida de
las plantas de Velocidad Y Temperatura. . . . . . . . . . . . . . . . . . . . . 43

3-1. Arquitectura General de Conexión. . . . . . . . . . . . . . . . . . . . . . . . 45


3-2. Diagrama Conexión entre Microcontroldor y Servidor Local. . . . . . . . . . 46
3-3. Petición Polling Tradicional contra Websockets [17]. . . . . . . . . . . . . . . 48
3-4. Diagrama Publish Suscribe de PubNub [18]. . . . . . . . . . . . . . . . . . . 49
3-5. Estructura de comunicación a través de Internet. . . . . . . . . . . . . . . . 50
3-6. Estructura de comunicación a la Base de Datos. . . . . . . . . . . . . . . . . 51

4-1. Documento HTML5 mı́nimo, estructura. . . . . . . . . . . . . . . . . . . . . 55


4-2. Pagina Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4-3. Recepción de información. Gráfica y Tabla. . . . . . . . . . . . . . . . . . . . 58
4-4. Menús Planta de Temperatura y Velocidad . . . . . . . . . . . . . . . . . . . 59
4-5. Prueba de Respuesta al Escalón para la Planta de Temperatura . . . . . . . 59
4-6. Prueba de Respuesta en Frecuencia para la Planta de Temperatura . . . . . 60
4-7. Prueba de Control ON-OFF para la Planta de Temperatura . . . . . . . . . 60
4-8. Prueba de Control Digital para la Planta de Temperatura . . . . . . . . . . . 61
4-9. Registro e Inicio de Sesión de la Pagina Web . . . . . . . . . . . . . . . . . . 63

5-1. Linealización de datos obtenidos a respuesta de escalón de 9 V estación remota. 67


5-2. Linealización de datos obtenidos a respuesta de escalón de -10 V estación
remota. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5-3. Comparación respuesta al escalón de 9 V estacion remota vs planta presencial. 69
5-4. Comparación respuesta al escalón de 10 V estacion remota vs planta presencial. 69
5-5. Comparación respuesta al escalón de -10 V estación remota vs planta presencial. 69
5-6. Diagrama de Bode de magnitud para la planta de velocidad de forma presen-
cial y remota. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5-7. Respuesta de la planta de velocidad a el control ON-OFF con referencia de 5 V. 72
5-8. Respuestas de planta de velocidad a escalón de 5 V de forma remota y presencial. 73
5-9. Respuestas de planta de velocidad a escalón de 7 V de forma remota y presencial. 73
LISTA DE FIGURAS xv

5-10.Linealización de datos obtenidos a respuesta de escalón de 6 V estación remota. 74


5-11.Linealización de datos obtenidos a respuesta de escalón de 7 V estación remota. 75
5-12.Linealización de datos obtenidos a respuesta de escalón de 10 V estación remota. 75
5-13.Comparación respuesta al escalón de 7 V estación remota vs planta presencial. 76
5-14.Respuesta de la planta de temperatura presencial con controlador ON-OFF a
escalón de 5 V y 7 V. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5-15.Respuesta de la planta de temperatura remota con controlador ON-OFF a
escalón de 7.5 V. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5-16.Respuestas de planta de temperatura a escalón de 6 V de forma remota y
presencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5-17.Respuestas de planta de temperatura a escalón de 7 V de forma remota y
presencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Lista de Tablas

1-1. Resultados obtenidos en laboratorio. . . . . . . . . . . . . . . . . . . . . . . 11


1-2. Resultados obtenidos en laboratorio. . . . . . . . . . . . . . . . . . . . . . . 13

2-1. Pruebas Según sistema dinámico. . . . . . . . . . . . . . . . . . . . . . . . . 20


2-2. Rango de voltajes Configurables respuesta al escalón según Planta. . . . . . 21
2-3. Rango de Valores Configurables para Prueba de Respuesta en frecuencia . . 23
2-4. Rango de Valores Configurables para Prueba de Controlador On-Off . . . . . 25
2-5. Rango de valores Configurables en el controlador Digital. . . . . . . . . . . . 28
2-6. Niveles de voltaje limite en entradas y salidas de las plantas. . . . . . . . . . 29

4-1. Lenguajes de programación. . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5-1. Resultados obtenidos en la Estación Remota. . . . . . . . . . . . . . . . . . . 67


5-2. Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta
presencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5-3. Resultados planta de velocidad en respuesta en frecuencia obtenidos de forma
presencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5-4. Resultados planta de velocidad en respuesta en frecuencia obtenidos de forma
remota. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5-5. Resultados de histérisis control ON-OFF planta de velocidad. . . . . . . . . 71
5-6. Resultados de tiempo de levantamiento control ON-OFF planta de velocidad. 72
5-7. Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta
presencial controlador digital. . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5-8. Resultados obtenidos en la Estación Remota. . . . . . . . . . . . . . . . . . . 74
5-9. Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta
presencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5-10.Resultados de histérisis control ON-OFF planta de temperatura. . . . . . . . 76
5-11.Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta
presencial controlador digital. . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Introducción

El motivo por el cual se emprendió éste proyecto de investigación surge de la necesidad de


aportar una solución frente a la problemática que enfrentan muchos estudiantes durante el
transcurso de su carrera de ingenierı́a electrónica, donde afrontaron en repetidas ocasiones
inconvenientes en sus prácticas de laboratorio, un claro ejemplo de esta problemática se en-
cuentra en la realización de las practicas de laboratorio en el área de control, en donde los
estudiantes invierten gran cantidad de tiempo en la preparación y ejecución de la practica,
y también en la búsqueda del espacio fı́sico para realizar sus experimentos, incluso llegando
a recurrir a espacios adicionales nocturnos en laboratorios; en donde la mayorı́a del tiempo
invertido no era utilizado precisamente en el desarrollo propio de la practica de control, si
no, en la construcción y prueba de funcionamiento de los sistemas dinámicos a utilizar. En
consecuencia lo anteriormente dicho, se presenta la interrogante del por qué actualmente no
son aprovechadas las ventajas ofrecidas en el mundo en cuanto a tecnologı́a, especı́ficamente
en el área de las comunicaciones y a la iniciativa llamada IoT (internet of things), en donde
se propone la conexión de objetos cotidianos a la red de internet [2] [3].

Otra de las causas que motivaron a realizar éste trabajo, fue darle continuidad al proyecto [1],
en donde se desarrollaron y se implementaron los prototipos de plantas básicas de control, las
cuales fueron: la planta de temperatura, y la planta de velocidad. ya que con la culminación
de ese proyecto, se presentó una gran oportunidad para convertir estos prototipos en parte
fundamental de la implementación de la estación remota propuesta en éste trabajo.

La metodologı́a que se propone para dar solución al problema, se basa en dar cumplir con
cada uno de los objetivos especı́ficos, los cuales se efectúan en cada una de las partes que
conforman el desarrollo del proyecto, que se encuentran a continuación:

Este proyecto esta dividido en cinco grandes partes, las cuales son la identificación de los sis-
temas, la etapa de adquisición y procesamiento de datos con su respectivo acondicionamiento
de señal, la arquitectura general de conexión de las etapas para su integración con internet,
el desarrollo de la interface gráfica para la manipulación de la planta de forma remota, y por
ultimo la obtención y muestra de resultados hechos en la estación remota para su posterior
análisis.
2 INTRODUCCIÓN

En la primera parte del proyecto, la cual corresponde a la Identificación de los sistemas,


donde se conocen los elementos que constituyen la parte mas importante del proyecto co-
mo lo son los sistemas dinámicos de velocidad y temperatura. En esta sección de explora
brevemente como es su funcionamiento y como fueron construidas para posteriormente ser
identificadas, modeladas y caracterizadas matemáticamente.

En la siguiente parte del proyecto se tiene como elemento principal el microcontrolador el


cual esta encargado de la lógica de las pruebas y de la comunicación de las plantas con el
exterior. En esta sección se muestran detalladamente los flujos de los algoritmos que consti-
tuyen la lógica de cada una de las pruebas como respuesta al escalón, respuesta en frecuencia,
controlador on-off y controlador digital; y el tratamiento de las señales provenientes de las
plantas y enviadas hacia ellas. A esta sección también la compone el la descripción detallada
de la construcción del bloque de acondicionamiento de señales analógicas, necesario para la
integración y comunicación bidireccional entre cualquiera de las plantas y el microcontrola-
dor.

Posteriormente se encuentra la sección en donde se muestra la arquitectura o estructura de


comunicación entre las distintas etapas fı́sicas del proyecto. En esta sección se muestra como
es el flujo de la información comenzando desde las plantas, pasando por el microcontrolador
y servidor local, para su posterior integración con la Internet y los recursos disponibles en ella
como bases de datos y servidores web. Se muestran también, los protocolos de comunicación
y los elementos que fueron utilizados para lograr una integración exitosa entre la planta y el
usuario final.

Seguidamente se muestra la construcción de la pagina web usada como interface gráfica de


usuario, la estructura visual del laboratorio remoto, para la interacción y configuración de
pruebas por parte de el usuario, ası́ como la visualización de los datos obtenidos en cada una
de las pruebas. También se muestran los distintos elementos requeridos para la construcción
de la pagina, como lenguajes de programación web tales como html5, php, java script etc, y
bases de datos para el alojamiento de la información de autenticación y registro de usuarios
de la estación remota. Por otro lado se indica en esta sección el dominio o nombre con la
cual se aloja la pagina en un host de Internet.

Por ultimo se presentan los resultados obtenidos para las pruebas realizadas con las plantas
de forma presencial y con la estación remota. Estos resultados se analizan y se comparan
entre si, para ambas plantas y para cada una de las pruebas que puedan realizarse en la
estación remota, con el fin de validar su correcto funcionamiento.
Objetivos

Objetivo General
Diseñar e implementar una estación de accesibilidad remota, para la enseñanza de conceptos
de control, con el fin de reducir los tiempos empleados en la experimentación, facilitar el
acceso y disposición de estas plantas a la comunidad académica.

Objetivos Especı́ficos
Verificar y garantizar el funcionamiento de las plantas a utilizar, para realizar la iden-
tificación de los sistemas dinámicos con los cuales se va a trabajar.

Diseñar e implementar un módulo de adquisición de datos para el tratamiento de las


señales de entrada y salidas de las plantas con su respectivo bloque de acondiciona-
miento.

Adoptar e implementar una estructura de comunicación que permita la interacción


entre usuario (estudiante-profesor) y la estación remota, a través de internet.

Diseñar y desarrollar la interfaz gráfica usuario que le permita interactuar con la es-
tación remota de manera que se pueda recibir y enviar datos, y también gestionar el
acceso a las plantas.

Garantizar el correcto funcionamiento de la estación remota.

Obtener, comparar y analizar los resultados adquiridos de las diferentes pruebas que
se puedan realizar en la estación remota y en las plantas de manera presencial.

Aportar conocimiento cientı́fico derivado de este proyecto, a través de un informe final


de investigación.
Planteamiento del Problema y Justificación

En la actualidad el enfoque de la educación está convergiendo a nuevas tendencias para la


enseñanza a distancia, esta tendencia crece de la mano con el constante avance tecnológico
en sistemas de comunicación cada vez más avanzados, que permiten recortar distancias ya
sea entre personas o sistemas, estas ventajas ofrecidas no están siendo totalmente explota-
das, desperdiciando ası́ las grandes mejorı́as que se ofrecen en las áreas de la educación y la
experimentación a distancia.

Por otro lado, la comunidad académica relacionada con el área de control, tienen que realizar
grandes esfuerzos para la construcción de prototipos que les permitan realizar experimentos
en esta área, desperdiciando gran parte de su tiempo en la implementación y no en la obser-
vación de comportamientos propios del sistema. A estos problemas mostrados anteriormente
se suma el hecho de que al realizar este tipo de prácticas de manera tradicional, es necesario
apartar un lugar de laboratorio, trasladarse a ese lugar, preparar el equipo para realizar las
pruebas, conectar el prototipo de forma correcta, extraer los datos y analizarlos posterior-
mente. Parte de este tiempo podrı́a ser utilizado en labores académicas y no en transportes
o montajes de circuitos.

Es por estas razones presentadas anteriormente que surge la necesidad de preguntarse: ¿exis-
te actualmente un sistema de acceso remoto para plantas básicas utilizadas en la enseñanza
de conceptos de control en ingenierı́a para realizar experimentos? Si Existe ¿es de fácil acceso
para la comunidad académica o personas afines al área?, ¿reducirı́a el tiempo empleado en
la realización de prácticas de control utilizando este tipo de sistema remoto?, ¿tendrı́a este
sistema, un impacto positivo en la metodologı́a de la enseñanza?.

Dadas estas condiciones, se hace imperativo diseñar e implementar un sistema de acceso


remoto para plantas básicas utilizadas en la enseñanza de conceptos de control en ingenierı́a
que permita a los estudiantes y docentes realizar experimentos en tiempo real a estas plan-
tas, solo con el requisito de tener una conexión de internet lo suficientemente rápida y un
computador.
Capı́tulo 1
Funcionamiento de los sistemas dinámicos,
identificación y caracterización de las Plantas

Las plantas utilizadas para el desarrollo de este trabajo fueron desarrolladas anteriormente
en el proyecto de investigación DISEÑO E IMPLEMENTACION DE PLANTAS BASICAS
PARA LA ENSEÑANZA DE CONCEPTOS DE CONTROL EN INGENIERIA [1] el cual
fue financiado por el Centro de Investigaciones de la Universidad Distrital (CIDC), en el
mismo grupo de investigación de este proyecto: Investigación, Desarrollo y Aplicaciones en
Señales (IDEAS), e implementado por las mismas personas que desarrollan este trabajo. En
total se construyeron dos sistemas térmicos y dos sistemas de velocidad, de los cuales solo
se utilizó un prototipo de cada uno de los sistemas. Para la realización del presente proyecto
se seleccionó un prototipo de cada una de las plantas, para la planta de temperatura se
seleccionó el prototipo N◦ 2 y para la planta de velocidad el prototipo N◦ 1.

Las plantas cuentan con sus respectivas estructuras fı́sicas, circuitos impresos, fuentes de
alimentación, conexiones exteriores, y elementos de visualización e interacción para su uso
práctico, las plantas a utilizar se muestran en la Figura 1-1.

1.1. Descripción Técnica de la Planta Térmica


La planta térmica es un sistema dinámico que se modela como un sitema aproximado de pri-
mer orden que está constituido por una capacitancia térmica, una resistencia térmica y una
fuente de calor. La planta térmica consiste en un horno que se calienta o enfrı́a en función
de un voltaje que se encuentra en un rango de 0 V a 12 V en las dos entradas. La primera
entrada permite calentar el sistema por medio de un bombillo halógeno de 35 W, La segunda
entrada permite enfriar el sistema con un ventilador, la variable de salida del sistema es la
temperatura al interior del horno con una sensibilidad de 0.1 V/◦ C.

La planta tiene una fuente de alimentación sencilla de 12 V a 4,2 amperios que suministra
la energı́a suficiente para alimentar el circuito de la planta y el bombillo.
1 Funcionamiento de los sistemas dinámicos, identificación y
6 caracterización de las Plantas

(a) Planta de Velocidad. (b) Planta de Temperatura.

Figura 1-1: Plantas de Velocidad y Temperatura.

Como la potencia suministrada al bombillo debe ser lineal con respecto a la entrada, se
empleó un circuito seguidor de potencia como se muestra en la Figura 1-2, el cual utiliza
un amplificador operacional y un transistor de potencia junto con un transistor común que
cumplieran la función de driver de corriente en configuración Darlington.

Para la entrada del ventilador se utiliza un arreglo de resistencias que atenúa la señal de
voltaje de entrada, este voltaje debe estar en el rango admitido por el ADC del microcontro-
lador de la planta, el cual es un MSP430G2553 [4], este voltaje es transformado en una señal
pwm proporcional a la señal de entrada, con el cual se controla la velocidad del ventilador.

Figura 1-2: Etapa de potencia.


1.1 Descripción Técnica de la Planta Térmica 7

Para la señal de salida de la planta de temperatura, se utiliza un sensor de temperatura de


referencia LM35 [5], este sensor tiene una sensibilidad de 10 mV/◦ C. Ya que se desea tener
una señal con una sensibilidad de 100 mV/◦ C, se utiliza un amplificador no inversor de una
ganancia de 10 V/V, después a un filtrado de la señal proveniente sensor de temperatura
como se muestra en la Figura 1-3.

Figura 1-3: Etapa de acondicionamiento.

Luego se encuentra un circuito de protección para la señal de salida el cual consiste en un


seguidor de potencia en configuración push pull que entrega el voltaje de salida a través de
un relevo que protege el circuito en caso de un corto en la salida, incrementando la corriente
y activando el relevo, y de esta manera aislando la señal de salida del exterior, éste circuito
se muestra en la Figura 1-4. Para retornar el sistema a su estado inicial se debe desenclavar
el relevo.

Figura 1-4: Etapa de protección de la salida en caso de corto circuito.


1 Funcionamiento de los sistemas dinámicos, identificación y
8 caracterización de las Plantas

1.2. Descripción Planta de Velocidad


La planta de velocidad es un sistema dinámico electromecánico que está constituido por un
motor [6] del cual se pueden extraer dos variables de salida: la velocidad o la posición. La
planta de velocidad cuenta con una entrada única, la cual recibe una señal de voltaje como
referencia para el motor.

Este motor funciona en un rango entre -10 V a 10 V con cambio en sentido de giro dependien-
do de la polaridad de la señal de entrada, con la posibilidad de cambio de variable de salida
ya sea posición o velocidad. La salida se encuentra en un rango de voltajes entre -10 V a 10 V.

La planta cuenta con dos fuentes que permiten una polarización dual del circuito interno,
estas son necesarias para permitir voltajes de entrada y salida tanto positivos como negati-
vos, las dos fuentes son de 12 V a 3 A y se conectan en serie para la polarización del circuito.
Además, el circuito cuenta con reguladores de 5 V y 3 V para la polarización del encoder
del motor y de los microcontroladores.

El circuito de la Figura 1-5 alimenta el motor utilizando un seguidor de potencia basado en


un amplificador operacional que se conecta a un arreglo de transistores configurados en push
pull con polarización dual, que le permite a la entrada recibir voltajes positivos y negativos.

Figura 1-5: Circuito de potencia para motor.

En la etapa de salida se pueden tener 2 señales distintas, ya sea velocidad o posición. Para
la lectura de la posición o velocidad del motor se utiliza un encoder, la señal enviada por el
encoder tiene una resolución de 1024 datos en un giro, si se toman ambos canales y flancos
de subida y bajada de dicha señal. Posteriormente La señal del encoder es procesada lógi-
camente por un microcontrolador, y transformada en una señal analógica por medio de un
1.3 Identificación y caracterización de las Plantas 9

conversor DAC serial de resolución de 10 bits.

Si la salida es la velocidad, el microcontrolador determina el ancho del pulso proporcionado


por el encoder, esta velocidad será inversamente proporcional al ancho del pulso.

Si la salida del sistema es posición, el microcontrolador contara cada uno de los pasos del
encoder para definir la posición del motor, debido a que el encoder no tiene un punto de
referencia para definir la posición inicial, el sistema cuenta con un sensor, el cual cada vez
que pasa por un punto determinado (0 grados) reinicia la posición y obtiene un punto de
referencia para su medición.

Debido a que el DAC entrega valores de voltaje entre 0 v y 5 v, se utiliza una etapa de
acondicionamiento de señal que transforma dicho rango de voltajes a uno entre -10 v y 10
v. Posterior al acondicionamiento mencionado anteriormente, se encuentra un circuito de
protección el cual esta conformado por un seguidor de potencia en configuración push pull
que entrega el voltaje de salida a través de un circuito serie conformado por un contacto
normalmente cerrado de un relevo y la bobina de baja impedancia del mismo relevo. En caso
de un corto circuito en la salida, la corriente se incrementa y el relevo se activa, aislando la
señal de salida del exterior. Para retornar el sistema a su estado inicial se debe desenclavar
el relevo.

1.3. Identificación y caracterización de las Plantas


Para la caracterización de estas plantas, se deben tene en claro los conceptos descritos en [7],
sobre la definición, modelamiento y análisis de un sistema dinámico, las ecuaciones matemáti-
cas implicadas para cada sistema (Temperatura y Velocidad o motor DC), la transformada
de Laplace, análisis de sistemas lineales y funciones de transferencia.

Con los conceptos anteriores claros y definidos podemos proceder a realizar la caracterización
para hallar un modelo matemático que represente a estos sistemas dinámicos.

Algunos de los requerimientos en cuanto a infraestructura y equipos para realizar la carac-


terización se listan de la siguiente forma:

Disponibilidad de un laboratorio dotado con los equipos necesarios para realizar las
pruebas correspondientes.
Equipos de laboratorio en buen estado, dado que esto ayuda a la reducir el margen de
error en los resultados y de esta manera lograr un modelo mucho más aproximado a lo
ideal.
1 Funcionamiento de los sistemas dinámicos, identificación y
10 caracterización de las Plantas

Realizar el número necesario de pruebas que sean pertinentes para lograr ası́ conseguir
un mejor modelo.

1.3.1. Caracterización e identificación de la planta de temperatura


Dado que la caracterización de la planta de temperatura, busca modelar matemáticamente
el sistema dinámico, se procede entonces a construir la función matemática que modele el
comportamiento de dicho sistema. Para hallar la función de transferencia que describe el
comportamiento de la planta de temperatura se planteó el siguiente procedimiento:

Debido a que la planta de temperatura tiene una respuesta o comportamiento equivalente a


un sistema de primer orden, su función de salida en el tiempo a una entrada escalón es
t
y(t) = a · k(1 − e− τ ) + T A. (1-1)
Donde a es la amplitud del escalón de entrada, k es la ganancia de la planta de tempera-
tura, τ es la constante de tiempo de la planta de temperatura y T A es el equivalente a la
temperatura ambiente.

Luego de obtener la función en el tiempo de la planta de temperatura, se construye la función


de transferencia, la cual es la transformada de Laplace de la función en el tiempo y es:
k
G(s) = . (1-2)
τ ·s+1
Para hallar los parámetros que conforman la función de transferencia, los cuales son, τ
constante de tiempo de la planta y k la ganancia de planta; se deben realizar las pruebas
correspondientes en el laboratorio a la planta de temperatura. Estas pruebas constan de
aplicar una señal de tipo escalón en la entrada de la planta, para luego observar y analizar
la respuesta generada en el tiempo en la salida de la planta. A los datos obtenidos en
dichas pruebas se les realiza posteriormente una linealización logarı́tmica, con el propósito
de encontrar los valores de k y τ . Para éste proceso se realizan lo siguientes pasos:
Para hallar k se utiliza:
y(∞) − T A
k= . (1-3)
a
Donde y(∞) es el valor que proporciona el sistema cuando ya se encuentra estable.

Se despeja − τt de (1-2) y se obtiene la siguiente expresión:


 
t y(t) − T A
− = LN 1 − . (1-4)
τ a·k
De esta manera con los datos obtenidos en laboratorio como T A, y(t) y k se transforma
las respuesta en el tiempo en un recta con pendiente − τ1 , que corresponde al polo del
sistema de primer orden.
1.3 Identificación y caracterización de las Plantas 11

Los resultados finales de las pruebas son los mostrados en la Tabla 1-1. La Figura 1-6 y
Figura 1-7 muestran los datos linealizados para la caracterización de una señal con respuesta
al escalón de 5.8 V y 7 V respectivamente.

(a) Respuesta al escalón. (b) Linealización.

Figura 1-6: Linealización de datos obtenidos a respuesta de escalón de 5.8 V.

(a) Respuesta al escalón. (b) Linealización.

Figura 1-7: Linealización de datos obtenidos a respuesta de escalón de 7 V.

Tabla 1-1: Resultados obtenidos


1
en laboratorio.
Nivel de la señal escalón [V] τ
k
5.8 0.0031 0.68103448
7 0.0041 0.68181818
Promedio 0.0036 0.68142633

Al promediar los resultados finales, se tiene que la función de transferencia de la planta de


temperatura es:
0,68142633 0,002453
G(s) = 277,77s+1
, y su equivalente es G(s) = s+0,0036
.
1 Funcionamiento de los sistemas dinámicos, identificación y
12 caracterización de las Plantas

1.3.2. Caracterización de la planta de velocidad


Para hallar la función de transferencia del sistema dinámico que describe la planta de velo-
cidad se plantea el mismo procedimiento hecho en la caracterización de la planta de tempe-
ratura, solo con algunas variaciones en las ecuaciones.

Debido a que la planta de velocidad tiene una respuesta o comportamiento aproximado a un


sistema de primer orden, su función de salida en el tiempo a una entrada escalón es como la
descrita en:
t
y(t) = a · k(1 − e− τ ), (1-5)

En donde a es la amplitud del escalón de entrada, k es la ganancia de la planta de tempe-


ratura y τ es la constante de tiempo de la planta de temperatura.

Luego de obtener la función en el tiempo de la planta de velocidad, se construye la función


de transferencia, la cual es la transformada de Laplace de la función en el tiempo, dicha
función se muestra en:
k
G(s) = , (1-6)
τ ·s+1
Teniendo en claro que es la función de transferencia de un sistema de primer orden. Esta
aproximación se hace debido a que el segundo polo del sistema de velocidad (lo que indica
que el sistema de velocidad es de segundo orden) no afecta considerablemente en la respues-
ta, por consiguiente se omite y se aproxima a un sistema de primer orden.

Para hallar los parámetros que conforman la función de transferencia, los cuales son, τ
constante de tiempo de la planta y k la ganancia de planta; se deben realizar las pruebas
correspondientes en el laboratorio a la planta de velocidad. Estas pruebas constan de apli-
car una señal de tipo escalón en la entrada de la planta, para luego observar y analizar la
respuesta en el tiempo generada en la salida de la planta.

A los datos obtenidos en dichas pruebas se les realiza una linealización logarı́tmica, con
el propósito de encontrar los valores de k y τ . Para éste propósito se realiza el siguiente
procedimiento:

Para hallar k se utiliza:

y(∞)
k= . (1-7)
a

Donde y(∞) es el valor que proporciona el sistema cuando ya se encuentra estable.


1.3 Identificación y caracterización de las Plantas 13

Se despeja − τt de (1-5) y se obtiene:

 
t y(t)
− = LN 1− . (1-8)
τ a·k

De esta manera con los datos obtenidos en laboratorio como y(t) y k se transforma
las respuesta en el tiempo en un recta con pendiente − τ1 , que corresponde al polo del
sistema de primer orden.

Los resultados finales de las pruebas son los mostrados en la Tabla 1-2. La Figura 1-8 y
Figura 1-9 muestran los datos linealizados para la caracterización de una señal con respuesta
al escalón de 9 V y -10 V respectivamente.

Tabla 1-2: Resultados obtenidos


t
 t en laboratorio.
Nivel de la señal escalón [V] τ τ
k
-5 25.028 0.532
-7 28.64 0.6185
-8 30.34 0.658
-9 30.253 0.655
-10 30.089 0.667
5 23.965 0.517
7 24.984 0.5885
8 32.677 0.6368
9 33.016 0.6506
10 33.071 0.6715
PROMEDIO 29.2249 0.61949

Al promediar los resultados finales, se tiene que la función de transferencia de la planta de


velocidad es:

0,61949 18,1047
G(s) = 0,034217s+1
, y su equivalente es G(s) = s+29,2249
.

(a) Respuesta al escalón. (b) Linealización.

Figura 1-8: Linealización de datos obtenidos a respuesta de escalón de 9 V.


1 Funcionamiento de los sistemas dinámicos, identificación y
14 caracterización de las Plantas

(a) Respuesta al escalón. (b) Linealización.

Figura 1-9: Linealización de datos obtenidos a respuesta de escalón de -10 V.


Capı́tulo 2
Adquisición de datos y Acondicionamiento de
señal

2.1. Adquisición y Envió de datos


Luego de realizar la identificación de los sistemas de velocidad y posición, conocer sus ran-
gos de funcionamiento. Se requiere que un sistema embebido o microcontrolador reciba las
señales provenientes de las plantas y envié señales de vuelta para su control, a continuación
se muestra la estructura propuesta y desarrollada.

Como se observa en la Figura 2-1 la estructura de adquisición y envió de datos esta dividida
en 3 partes, el acondicionamiento de la señal de entrada, el acondicionamiento de la señal
de salida, y el sistema embebido.

Figura 2-1: Estructura de Conexión y envio de Datos


16 2 Adquisición de datos y Acondicionamiento de señal

2.1.1. Selección del sistema embebido


Para el proceso de selección del sistema embebido fue necesario tener en cuenta múltiples
factores como rendimiento costo, prestaciones del sistema y versatilidad para programar.
Desde el principio se requirió utilizar un sistema económico, con la posibilidad de conectarlo
a internet a través de un protocolo Ethernet y que tuviera la posibilidad de manejar señales
analógicas con módulos de conversión digital analógica y analógica digital. A continuación se
muestran dos sistemas embebidos que fueron evaluados y probados en el proceso de selección.

Intel Galileo Gen 1


Inicialmente se pensó en utilizar plataformas con facilidad de préstamo en la universidad,
las primeras pruebas se realizaron con la placa Intel Galileo Gen 1 [8].
La placa cuenta con las siguientes caracterı́sticas:

Es un Microcontrolador basado en un procesador Intel Quark SoC X1000 32 bits


16 KB L1 cache
512 KB de SRAM
256 MB DRAM
11 KB de memoria que pueden ser programado por medio de una librerı́a.
Conector 10/100 Ethernet.
Software y hardware pin compatible con arduino (14 pines digitales y 5 pines de entrada
analógica)
Voltaje de alimentación puede ser de 5 V o 3.3V
Comunicación Serial Ası́ncrona UART
Bus I2C con pines SDA, SDL, y su respectivo pin de referencia.
Comunicación SPI configurada con 4 Mhz por defecto, programable hasta 25 Mhz
Conexión con tarjeta miniSD incorporada
Conector miniPCIe que puede ser utilizado para agregar una extensión wifi o USB.

Limitaciones:
La placa Intel galileo no se utilizó para la implementación debido a las razones que presen-
taremos a continuación:

La tarjeta de desarrollo no tiene un pin de conexión digital analógico que permita


enviar señales del microcontrolador a la planta, para implementar esta funcionalidad
harı́a falta utilizar un DAC externo serial o paralelo.
2.1 Adquisición y Envió de datos 17

La tarjeta de desarrollo está más orientada a ser un pequeño computador con manejo
de sistema operativo Linux, que un microcontrolador para su implementación en más
bajo nivel. La simulación de un entorno de desarrollo arduino no ofrece las mismas
prestaciones reales de un arduino, ya que no permite utilizar algunas de sus librerı́as,
y no es posible su programación a más bajo nivel con registros que controlen los
periféricos. Para ello es necesario utilizar comandos en consola como los utilizados en
sistemas operativos Linux.

Al realizar la programación del dispositivo, el programa compilado se almacenaba en la


memoria RAM del sistema embebido, lo cual impide que el programa quede guardado
para ser ejecutado después de un reinicio, para guardar el programa era necesario
insertar una tarjeta microSD en el slot de la Intel galileo y realizar un proceso extenso
para programarlo.

Como el programa que se querı́a ejecutar en la Intel galileo se corre bajo un sistema
operativo Linux liviano, el tiempo de espera para que el programa se ejecutará de-
moraba aproximadamente 40 segundos, mientras el sistema operativo se iniciaba, esto
causaba un impacto negativo en la ejecución del programa.

La principal causa para no utilizar esta tarjeta de desarrollo, mostrada en [9], es su


velocidad de muestreo en señales analógicas y su velocidad de respuesta en puertos
digitales, ya que el procesador principal de la Intel galileo utiliza un dispositivo I2C
Cypress CY8C9540A para actualizar o recibir las señales del exterior, debido a que
es un dispositivo serial que administra señales paralelas, tiene un tiempo de mayor
respuesta. La frecuencia por defecto configurada para este dispositivo es de 100Khz.
Pero cada requerimiento de actualización de los GIPO tarda aproximadamente 2ms,
esto en el caso de una señal digital, para una señal analógica el tiempo de muestreo es
aun mayor. Para el proyecto esto resulta ser una limitación importante, ya que para
la planta de velocidad, la tasa de muestreo tiene valores muy cercanos o justos a los
especificados anteriormente, lo cual no permite muestrear eficientemente los valores
de dicha planta, debido a los tiempos máximos de muestreo, aun sin contar con los
tiempos de ejecución del programa principal.

Freescale FDRMK64F
Posteriormente se utilizó en el microcontrolador de Freescale el FDRMK64F [10], microcon-
trolador con el cual se realizó la implementación definitiva, uno de las principales razones
por las cuales se utilizo es por su integración con señales analógicas, ya que cuenta con un
pin DAC y un puerto con pines que pueden configurarse como conversores ADC.

Otra de las ventajas ofrecidas por las cuales fue seleccionado este sistema embebido es el
modulo Ethernet que permite que el microcontrolador pueda conectarse a una red local o a
18 2 Adquisición de datos y Acondicionamiento de señal

internet. Éste finalmente no se utilizó por razones que se explican en el Capitulo 3.

En comparación con la Intel galileo implementada inicialmente, el microcontrolador FDRMK64F


ofrece mejores prestaciones en cuanto a velocidad de muestreo de señales analógicas ya que
no necesita de un dispositivo serial para actualizar sus puertos y la velocidad de su reloj
interno es de 120 MHz. El microcontrolador freescale también ofrece mayores ventajas en la
posibilidad de programar a un nivel más bajo, y por ende tener mayor control sobre el flujo
de programa que se desea implementar.

Las principales caracterı́sticas de la placa FDRM-K64-F se muestran a continuación:

Microcontrolador MK64F 120 Mhz , 1 MB de memoria flash, 256 KB de memoria RAM


Interfaz USB con Doble funcionalidad y conector micro-B USB.
Modulo Ethernet
Slot para tarjeta SDHC
Magnetómetro y Acelerómetro embebidos
Módulo ADC resolución de 16 bits configurables de alta velocidad (500ns)
Una salida DAC de 12 bits
4 Timers
5 módulos UART: Un módulo UART que soporta el protocolo RS232 con control de
flujo RS485, y ISO7816, y cuatro módulos UART que soportan RS232 con control de
flujo y RS485.
Un Módulo I2C
Un Módulo I2S

2.1.2. Entorno de Desarrollo y Consideraciones de Implementa-


ción
Entorno de Desarrollo
El IDE (integrated development environment) utilizado para el desarrollo del programa del
microcontrolador FDRMK64F fue la plataforma mbed, esta plataforma permite el desarrollo
en lı́nea y de manera compartida con otros usuarios. mbed es una plataforma desarrollada
por ARM para soportar compatibilidad de múltiples microcontroladores con procesadores
desarrollados por la misma empresa. El lenguaje de programación utilizado en esta platafor-
ma es c, y el acceso a los módulos y pines se realiza con comandos preestablecidos.
2.1 Adquisición y Envió de datos 19

La ventaja del IDE es su facilidad para programar pines, módulos de interrupciones o subru-
tinas de tiempo especı́ficas, de manera que no existe la necesidad de acceder directamente
a los registros de configuración del microcontrolador, Al igual que los comandos utilizados
por un ARDUINO. Otra de las ventajas de este IDE es el soporte que ofrece en lı́nea, y
la gran cantidad librerı́as y foros de ayuda dentro de una comunidad soportada por ARM.
mbed hace un especial énfasis en integraciones a través de internet o comúnmente llamado
IoT (Internet of things).

Consideraciones de implementación

En relación a la planta de velocidad, el tiempo de respuesta es significativamente más rápido


que el la planta de temperatura (casi una muestra por milisegundo), por lo cual no es posible
enviar datos de esta planta a través de internet en tiempo real sin que ocurra una retardo
significativo, ya que el tiempo que tarda el envió de un solo dato a través de internet está
aproximadamente en cientos de milisegundos, el microcontrolador o sistema embebido debe
tomar y agrupar todos los datos de una prueba y posteriormente enviarlos ya sea de forma
serial con el módulo UART o enviándolos por el modulo Ethernet.

En relación a la planta de temperatura debido a la lentitud en su respuesta temporal la


estructura en la forma de envió de datos es distinta ya que para esta planta el tiempo de
muestreo es en segundos, lo que permite que se puedan muestrear y enviar datos, sin nece-
sidad de agruparlos y enviarlos posteriormente como en el caso de la planta de velocidad.

La comunicación del microcontrolador para su conexión con internet finalmente no se realizó


con el modulo Ethernet por razones que se explicaran en el siguiente capı́tulo, en lugar de
ello se utilizó la comunicación serial con el módulo UART y un computador como puente
para la comunicación con Internet.

2.1.3. Desarrollo de los Programas para Sistema Térmico y de


Velocidad
El programa desarrollado para cualquiera de las dos plantas tiene como foco principal ad-
quirir y enviar datos desde y hacia la propia planta con un punto intermedio de conexión,
el cual es un computador que recibirá y enviara señales al microcontrolador por medio del
protocolo serial UART, el computador es el puente para la posterior conexión a internet.

En la Tabla: 2-1 se muestra las posibles pruebas a las cuales puede acceder el usuario
dependiendo de la planta. Los códigos de todos los programas implementados en el micro-
controlador se encuentran en la sección 6.
20 2 Adquisición de datos y Acondicionamiento de señal

Tabla 2-1: Pruebas Según sistema dinámico.


Planta Térmica Planta de Velocidad
Respuesta al escalón Aplica Aplica
Respuesta en Frecuencia Aplica Aplica
Controlador ON OFF Aplica Aplica
Controlador Digital Aplica Aplica
Enfriamiento de la planta Aplica No Aplica

Inicialización del programa principal


Independientemente de la planta, en el programa principal se establecen los parámetros de
inicialización como configuración de puertos de salida y periféricos utilizados, las principales
configuraciones iniciales se muestran a continuación.

Configuración de Modulo UART para comunicación a través de un computador con


velocidad estándar de 9600 Baudios.
Configuración de Salida DAC para enviar señales a la planta a través del acondiciona-
miento de señal por medio de la salida DAC0 OUT.
Configuración de Entrada de señales analógicas enviadas desde la planta en la entrada
A0.
Configuración de Interrupciones según tiempo de muestreo de la señal para cada una
de las pruebas del menú por medio de la función. Ticker.
Inicialización de Tabla que contiene una señal sinusoidal para la construcción de la
señal.
Inicialización de múltiples variables utilizadas en el programa.

Programa principal
El bloque de programa principal se ejecuta luego de la configuración inicial del microcontro-
lador. Éste programa se ejecuta en un bucle a la espera de la elección de una de las pruebas
ya preestablecidas. Para la selección de alguna de las pruebas el programa recibe un char
enviado a través del puerto serial, y según la letra correspondiente al char se realizará la
respectiva prueba.

2.1.4. Respuesta al escalón


Luego de escoger la respuesta al escalón como prueba a realizar, el programa espera una cade-
na de strings que indican los parámetros de inicialización, en esta prueba el único parámetro
que se necesita es la amplitud del escalón como se muestra en la Figura 2-2, donde se recibe
un string con las siguientes caracterı́sticas %f\0”donde %f es un float que contiene la ampli-
tud del escalón dentro de los rangos mostrados en la Tabla 2-2. Luego de recibir la amplitud
2.1 Adquisición y Envió de datos 21

del escalón de forma serial, dicho dato se coloca en la salida digital del microcontrolador de
forma permanente, ya que éste es un escalón y su valor de salida no varı́a.

Figura 2-2: Parametros de Configuración Prueba Respuesta al Escalon

Tabla 2-2: Rango de voltajes Configurables respuesta al escalón según Planta.


Rango de Voltajes Configurables Prueba Respuesta al Escalón
Planta de Velocidad -10.0 V a 10.0 V
Planta Térmica 0.0 V a 10.0 V

Subrutina de Interrupción Respuesta al Escalón planta de Temperatura

Posteriormente se configura la subrutina por interrupción cada 5 segundos para el muestreo


y envió de la señal, este tiempo se eligió como base de muestreo según la velocidad de res-
puesta de la planta, mostrada en la anterior sección.

Dentro de la interrupción se realizan las siguientes tareas:

Se Muestrea la señal de entrada.

Se toma el valor de tiempo actual con referencia en el inicio de la señal escalón.

Se establece un Identificador de muestra único e irrepetible para esa muestra.

Por último se envı́a un string concatenado con los siguientes valores separados por
comas: Tiempo de la muestra, Referencia del Escalón, señal con la respuesta al escalón
de la planta, identificador.
22 2 Adquisición de datos y Acondicionamiento de señal

Subrutina de Interrupción Respuesta al Escalón planta de Velocidad


A diferencia de la subrutina de interrupción de la planta de temperatura y dado que la planta
de velocidad tiene una respuesta temporal mucho más rápida, el tiempo de muestreo para
esta planta es de 1 ms.

Dentro de la interrupción se realizan las siguientes tareas:


Se Muestrea la señal de entrada.
Se toma el valor de tiempo actual con referencia en el inicio de la señal escalón.
Se establece un Identificador de muestra único e irrepetible para esa muestra.
Se guardan los valores de tiempo de la muestra, voltaje de entrada y voltaje de salida,
en cada uno de los 300 espacios de los vectores correspondientes a tiempo de la muestra,
voltaje de entrada y voltaje de salida.
Luego de recibir todos los datos de la prueba se coloca la salida del DAC en 0V y se
envı́an todas las muestras almacenadas en los vectores, para esto se utiliza un ciclo
“for” que direcciona cada posición desde el primero hasta el último valor y envı́a por
el puerto serial en un intervalo de 0.1 ms para que los datos puedan ser procesados
por el servidor local para luego ser enviados por internet en un string concatenado que
contiene los siguientes valores separados por comas: Tiempo de la muestra, Referencia
del Escalón, señal con la respuesta al escalón de la planta, identificador.

2.1.5. Respuesta en frecuencia


Al igual que en la prueba de la respuesta al escalón, el programa espera un string que le
indique los parámetros de inicialización, en esta prueba se necesitan 3 parámetros como se
muestra en la Figura 2-3, los cuales son: la amplitud pico a pico de la señal de referencia,
el offset de esta señal y la frecuencia. El string que se recibe para la configuración de la
prueba se muestra de la siguiente manera (” %f, %f, %f\0”) donde el primer %f es un float
que contiene la amplitud pico a pico de la señal seno, el siguiente %f es un float que contiene
el offset, y el ultimo %f contiene la frecuencia de la señal seno.
Luego de recibir la amplitud pico a pico, el offset y la frecuencia, se establece el tiempo nece-
sario para ejecutar las interrupciones, en este caso la interrupción depende de la frecuencia
a la cual se desee hacer la prueba y del número de muestras almacenadas en la tabla que
contiene la señal seno. Ya que dicha señal esta almacenada en un vector con 128 muestras.
El tiempo de muestreo para la subrutina de interrupción es
1
T = . (2-1)
f recuencia · 128
Cumpliendo con éste tiempo de muestreo para la ejecución de la subrutina, se garantiza
que la frecuencia enviada sea la correcta, ya que en la subrutina de interrupción se envı́an
2.1 Adquisición y Envió de datos 23

Figura 2-3: Parametros de Configuración Prueba Respuesta en Frecuencia

las muestras de la señal seno en el intervalo correcto para que cumplan con la frecuencia
requerida.

Los posibles intervalos para la configuración de la prueba de frecuencia se muestran en la


Tabla 2-3.

Tabla 2-3: Rango de Valores Configurables para Prueba de Respuesta en frecuencia


Rango de Voltaje Pico a Pico Rango niveles de offset Rango de frecuencias
Planta de Velocidad 0.0 V a 20.0 V -8 V a 8V 0.2Hz a 40Hz
Planta Térmica 0.0 V a 10.0 V 2Va5V 0.0002Hz a 0.009 Hz

Subrutina de Interrupción Respuesta en frecuencia planta de Temperatura


Dentro de la subrutina de interrupción de la planta térmica, lo primero que hace el programa
es direccionar la posición correspondiente de cada una de las 128 muestras de la señal seno
empezando por la primera posición de esa señal, y enviando posteriormente dicha muestra al
pin DAC, cuando los 128 datos de la tabla ya han sido direccionados, la subrutina vuelve a
direccionar desde la primera posición de la tabla de la señal seno, debido a su periodicidad,
luego se hace el muestreo correspondiente a la señal proveniente de la planta, al igual que
en el caso anterior se toma el tiempo en que inicio la prueba y se genera un identificador de
muestras. Todos estos datos se agrupan y concatenan para ser enviados a través del módulo
serial, en un string separados por comas de la siguiente manera: (” %f, %f, %f, %d”); donde
el primer %f es un float que contiene el tiempo de la muestra desde el inicio de la prueba, el
siguiente %f es un float que contiene la señal enviada por el microcontrolador, en este caso
la señal seno enviada desde una tabla, el tercer %f contiene la señal muestreada de la salida
de la planta, es decir la respuesta de la planta, y por último se concatena el %d que es el
24 2 Adquisición de datos y Acondicionamiento de señal

número identificador, que tiene como objetivo determinar que numero de muestra pertenece
cada dato enviado.

Subrutina de Interrupción Respuesta en frecuencia planta de velocidad

En la subrutina de interrupción temporizada de la planta de velocidad también se realiza


un direccionamiento para extraer los valores de la tabla que contiene la señal seno, en cada
entrada a la subrutina se toma un valor de la tabla y se envı́a por el pin configurado con el
DAC, y a su vez se toma el valor correspondiente de la entrada configurada con el ADC, estos
valores junto con el tiempo de la muestra son almacenados en 3 vectores de 300 posiciones
de longitud.

Cuando la subrutina ingresa por última vez y ya ha llenado las 300 posiciones de los 3 vecto-
res, el programa a través de un ciclo “for” envı́a un string cada 100 ms que es la concatenación
de los valores de cada uno de los vectores, y lo hace de la siguiente manera y separado por
comas (” %f, %f, %f, %d”); donde el primer %f es un float que contiene el tiempo de la mues-
tra desde el inicio la prueba, el siguiente %f es un float que contiene la señal enviada por el
microcontrolador, en este caso la señal seno enviada desde una tabla, el tercer %f contiene la
señal muestreada de la salida de la planta, es decir la respuesta de la planta, y por último se
concatena el %d, el cual es el número identificador que tiene como objetivo determinar que
número de muestra pertenece cada dato enviado.

2.1.6. Controlador On Off

La subrutina del controlador on-off se ejecuta luego de recibir un char ‘c’ en el menú principal,
al ejecutarse se reciben 2 parámetros que se encuentran dentro del string para la configuración
del controlador on-off, el primero de esos parámetros es la señal de referencia del controlador,
el segundo parámetro es la histéresis. La histéresis es la ventana de voltaje en la cual oscila
la salida de la planta, con valor medio en la referencia como se muestra en la Figura 2-4.
2.1 Adquisición y Envió de datos 25

Figura 2-4: Parámetros de Configuración Prueba Controlador ON-OFF

El tiempo de muestreo para la planta de Temperatura para hacer el control on-off en esta
prueba es de 2 s, y el tiempo de muestreo para la planta de velocidad es de 0.3 ms, los rangos
de parámetros configurables para este controlador se muestran en la Tabla 2-4.

Tabla 2-4: Rango de Valores Configurables para Prueba de Controlador On-Off


Rango de Voltaje de Referencia Rango de voltaje de Histéresis
Planta de Velocidad -10.0 V a 10.0 V 0.1 V a 4 V
Planta Térmica 0.0 V a 10.0 V 0.1 V a 4 V

Subrutina de Interrupción del controlador ON-OFF de la planta de temperatura.

En el programa de la subrutina temporizada se ejecuta cada 2 segundos con la lógica del


controlador on-off como se puede ver en la Figura 2-5, este algoritmo se ejecuta cada vez
que la subrutina de interrupción es llamada y emula el comportamiento de un controlador
on-off realizado con un disparador shmit trigger.
26 2 Adquisición de datos y Acondicionamiento de señal

Figura 2-5: Diagrama Flujo Controlador ON-OFF planta de temperatura

Para la planta de temperatura al igual que en los anteriores casos, los datos de entrada y
salida de la planta son tomados y enviados cada vez que el programa entra en la subrutina de
interrupción, estos datos son concatenados junto con la variable de tiempo y el identificador
de la muestra.

Subrutina de Interrupción del controlador ON-OFF de la planta de velocidad.

Esta subrutina se ejecuta cada 0.3 ms, la lógica de ejecución se muestra en la Figura 2-6, a
diferencia de la planta de temperatura la lógica del programa se extiende ya que los valores
de referencia pueden ser tanto positivos como negativos.
2.1 Adquisición y Envió de datos 27

Figura 2-6: Diagrama Flujo Controlador ON-OFF planta de velocidad

Para la planta de velocidad al igual que en las pruebas anteriores, se acumulan los datos en
vectores de voltaje de entrada, voltaje de salida, tiempo, y el identificador, para luego ser
direccionados y enviados de manera concatenada en un string mediante un ciclo “for”.

2.1.7. Controlador Digital


La subrutina del controlador Digital se ejecuta al recibir por el puerto serial un char ‘d’ en
el menú principal, los parámetros que recibe este controlador son 10 en total, los cuales son:
referencia, tiempo de muestreo, los cuatro coeficientes del numerador del controlador y los
cuatro coeficientes del denominador del controlador mostrado en (2-2).

Los rangos de valores permitidos para la configuración del controlador se muestran en la


Tabla 2-5. El tiempo de muestreo configurado por el usuario no será el mismo tiempo de
28 2 Adquisición de datos y Acondicionamiento de señal

muestreo utilizado para la subrutina de interrupción, debido a que se requieren tomar más
muestras para la visualización de la señal, el tiempo de muestreo base para la planta de
velocidad es de 1 ms y el tiempo de muestreo base para la planta de temperatura es de 5 s,
los tiempos de muestreo configurables por el usuario deben ser múltiplos enteros del tiempo
de muestreo base.

b0 Z 0 + b1 Z −1 + b2 Z −2 + b3 Z −3
C(z) = . (2-2)
a0 Z 0 + a1 Z −1 + a2 Z −2 + a3 Z −3

Tabla 2-5: Rango de valores Configurables en el controlador Digital.


Rango de Voltaje de Referencia Rango de tiempos de muestreo Rango de valores para coeficientes
Planta de Velocidad -10.0 V a 10.0 V 0.001s a 0.01s No determinado
Planta Térmica 0.0 V a 10.0 V 30s a 100s No determinado

Subrutina de Interrupción Controlador Digital Planta de Temperatura

Para el controlador digital de la planta de temperatura la subrutina de interrupción se eje-


cuta cada 5 s, dentro de esta subrutina se realizan las siguientes tareas:

Leer el puerto adc del microcontrolador de la señal proveniente de la planta y decre-


mentar el contador asociado a submuestreo.
Obtener el tiempo y el identificador de la muestra actual.
Enviar a través del puerto serial un string concatenado con la información de tiempo
de la muestra, referencia, entrada ADC e identificador.
Verificar si la entrada a la subrutina corresponde al tiempo de muestreo seleccionado
por el usuario para que se ejecute la acción de control. Si es ası́ se ejecuta la acción de
control mediante la implementación de una ecuación de diferencias.

Subrutina de Interrupción Controlador Digital Planta de Velocidad

En el caso del controlador digital para la planta de velocidad, la subrutina de interrupción


se activa cada un milisegundo (1 ms), y tiene un flujo de programa similar al ya mostrado
en la subrutina de la planta de temperatura.

Primero se lee la señal proveniente de la planta por puerto adc del microcontrolador
y luego almacena su valor en un vector de 300 posiciones y decrementa el contador
asociado al submuestreo.
2.2 Acondicionamiento de señal 29

Si no se han completado los vectores que guardan las variables de tiempo e identifi-
cador, se obtiene las variables de tiempo e identificador en la muestra actual, y son
almacenados en sus correspondientes vectores, al igual que la señal de referencia.
Si el contador asociado al submuestreo coincide con el múltiplo de tiempo de muestreo
base, se ejecuta la acción de control digital correspondiente con la implementación de
la ecuación de diferencias.
Si el programa ha entrado a la subrutina 300 veces y por lo tanto se han llenado todos
los vectores, el programa procede a enviar todos los datos de cada una de las mues-
tras almacenadas en los vectores mediante un ciclo “for”, en este ciclo se direccionan
cada una de las muestras, se concatenan y se envı́an cada 100 ms. las variables son:
Identificador, tiempo de muestreo, señal de entrada y señal de salida.

2.2. Acondicionamiento de señal


Debido a que el sistema embebido seleccionado no puede ser directamente conectado a la
señal de salida de las plantas de velocidad y de temperatura, a causa de que estás señales
tienen un nivel de tensión superior al permitido en los módulos ADC de dicho sistema embe-
bido, el cual es de 3.3 V; también, el sistema embebido tiene como funcionalidad generar las
señales de entrada de las plantas por medio del módulo DAC, pero éste tiene una limitación,
ya que la máxima tensión proporcionada por el DAC es de 3.3 V.

Para dar solución a este inconveniente se construye una etapa de acondicionamiento de


señales de entrada y salida de las plantas de velocidad y temperatura. Lo primero que hay
que conocer y tener muy presente son los niveles de tensión lı́mite en la entrada y salida de
estas plantas. En la Tabla 2-6 se muestra estos niveles de tensión.

Tabla 2-6: Niveles de voltaje limite en entradas y salidas de las plantas.


Planta Entrada [V] Salida [V] Módulo ADC Embebido [V] Módulo DAC Embebido [V]
Temperatura 0-12 0-12 0-3.3 0-3.3
Velocidad (-12)-(-12) (-10)-(-10) 0-3.3 0-3.3

Un punto a tener en consideración, es que dentro de esta etapa de acondicionamiento se


adiciona unos filtros activos para reducir el ruido en las señales de salida de las plantas. Por
otro lado, se debe aclarar que en la planta de temperatura, se dispone de dos entradas de
voltaje, una es la entrada que alimenta al bombillo y la otra entrada es la que alimenta al
ventilador, esta entrada esta fija a un solo nivel de tensión, el cual es de 12 V en estado
activo. También, es importante aclarar que para el acondicionamiento se utilizan amplifi-
cadores operacionales, por lo tanto, es necesario tener en cuenta cuales son los voltajes de
polarización de estos elementos activos.
30 2 Adquisición de datos y Acondicionamiento de señal

Dado que se adquirieron unas fuentes de 12 V y 3 A, las cuales fueron conectadas en serie
de tal forma que proporcionaran una alimentación de tensión de ±13 V. Se debe aclarar que
los OP-AMP que se utilizan en esta etapa son los de referencia lM358 [11].

Ya teniendo en cuenta todas estas aclaraciones, se procede al diseño de la etapa de acon-


dicionamiento, la cual está conformada por un circuito que reduce las señales de salida y
amplifica las señales de entrada de las plantas.

2.2.1. Diseño de acondicionamiento para entrada y salida de la


planta de velocidad
Como se establece en la Tabla 2-6, la entrada de la planta de velocidad acepta una señal de
voltaje del rango de -12 V a 12 V, y la señal de voltaje que proporciona el módulo DAC del
sistema embebido seleccionado es de 0 V a 3.3 V.

En la Figura 2-7 se muestra la relación salida módulo DAC vs entrada planta de velocidad.

Figura 2-7: Relación, Salida módulo DAC vs Entrada planta de velocidad.

Lo que nos muestra la Figura 2-7 se interpreta ası́: para una tensión de salida de módulo
DAC del sistema embebido de 0 V, en la entrada de la planta de velocidad se presenta un
voltaje de -12 V, ası́ mismo, para una tensión de salida del módulo DAC de 3.3 V, en la
entrada de la planta de velocidad se presenta un voltaje de 12 V.

En la Figura 2-8 se representa el bloque de acondicionamiento, donde Vi , es el voltaje ge-


nerado en la salida del módulo DAC, y Vo , es el voltaje en la entrada de la planta de velocidad.
2.2 Acondicionamiento de señal 31

Figura 2-8: Bloque de acondicionamiento entrada planta de velocidad.

La ecuación de la recta pendiente generada en la Figura 2-7 es y = 7,2727x − 12, lo que


indica es que Vo = 7,2727Vi − 12, para hacer relación con la Figura 2-8.

Para resolver la ecuación de la recta pendiente genera por la relación de voltajes del bloque
de acondicionamiento, se utilizan los conceptos y procedimientos proporcionados en [12] [13].

El circuito necesario para resolver la ecuación generada por la recta pendiente, es el amplifi-
cador multientrada universal o mejor conocido como sumador - restador que se muestra en
la Figura 2-9.

El sumador - restador es la configuración universal del amplificador operacional. Al reunir


el sumador y el restador en un sólo circuito, donde se obtienen un sistema multientradas
más versátil, pues permite combinar señales con posibilidad de escoger no sólo el valor sino
también el signo de sus respectivos pesos [12].

Figura 2-9: Amplificador multientradas o Sumador-Restador [12].

En la Figura 2-9 se ilustra el diagrama de un sumador - restador con n entradas inversoras


y m entradas no inversoras.
Aplicando conceptos de [12] para resolver Vo = 7,2727Vi − 12, se realiza lo siguiente:
32 2 Adquisición de datos y Acondicionamiento de señal

Como se trata de un amplificador operacional con una entrada inversora y una entrada no
inversora, donde la entrada inversora no es dependiente de ninguna variable, por cual se in-
terpreta con un nivel de voltaje fijo en esta entrada. La condición que hay que cumplir según
[12] es A+ = A− + 1, donde A+ , es la suma de todos los pesos en la entrada no inversora
del amplificador operacional, y A− , es la suma de todos los pesos en la entrada inversora del
amplificador operacional. En la Figura 2-10 se muestra como debe ser el circuito acondicio-
nador con amplificador operacional.

Figura 2-10: Circuito acondicionador con amplificador operacional.

Para calcular los valores de las resistencias del circuito se realiza el siguiente procedimiento:

Para cumplir con A+ = A− + 1, se asignan sus correspondientes valores, donde A+ = 7,2727,


lo que significa que A− = 6,2727, la solución es
Rf Rf
A+ = R1
→ 7,2727 = R1
→ Rf = 7,2727R1 .

Las posibles resistencias comerciales que cumplen con Rf = 7,2727R1 , son: Rf = 12KΩ, y
R1 = 3,3KΩ||3,3KΩ = 1,65KΩ.

Debido a que en la entrada inversora se necesita una tensión fija de 12 V, estos se obtendrán
utilizando la fuente de alimentación positiva VCC del amplificador operacional, es decir:

12V
12V = A · 13V → A = 13V
→ A = 0,923,

Donde A es la relación de ganancia en la entrada inversora para que la tensión sea de 12 V.


Más adelante se hace el balanceo de pesos con A− .
Rf Rf
A= R2
→ 0,923 = R2
→ Rf = 0,923R2 .

Las posibles resistencias comerciales que cumplen con Rf = 0,923R2 , es R2 = 13KΩ =


1KΩ + 12KΩ.
Ahora para cumplir con A+ = A− + 1, se debe agregar un peso negativo de valor 5.3497, ya
que es lo que hace falta para que A− = 6,2727.
2.2 Acondicionamiento de señal 33

Las posibles resistencias comerciales que cumplen con Rf = 5,3497R3 , es R3 = 2,2KΩ.

El circuito final se muestra en la Figura 2-11, el cual cumple con el balanceo de pesos y la
ecuación Vo = 7,2727Vi − 12.

Figura 2-11: Circuito de acondicionamiento de entrada planta de velocidad.

A continuación sigue el diseño del circuito de acondicionamiento de la señal de salida de la


planta de velocidad. En esta parte, se tiene en cuenta que se va adicionar un filtro activo,
por esta razón el bloque de acondicionamiento es el que se presenta en la Figura 2-12.

Figura 2-12: Diagrama de bloques de acondicionamiento de salida planta de velocidad.

Lo primero que se realiza según la Figura 2-12, es el acondicionamiento de niveles negativos


de voltaje, es decir, dado que el módulo ADC del sistema embebido seleccionado no permite
niveles de voltaje negativos, estos se deben modificar de tal forma que no existan. Teniendo
en cuenta que el rango dinámico de salida de voltaje de la planta de velocidad es de -10 V
a 10 V como lo indica la Tabla 2-6, en la Figura 2-13 se muestra la relación Vi , (voltaje de
salida planta de velocidad) vs V0−A1 , (voltaje de salida sin niveles negativos o salida acondi-
cionamiento 1).

Lo que nos muestra la Figura 2-13 se interpreta ası́: para una tensión de salida de la planta
de velocidad de -10 V, en la salida de acondicionamiento 1 se presenta un voltaje de 0 V,
ası́ mismo, para una tensión de salida de la planta de velocidad de 10 V, en la salida de
acondicionamiento 1 se presenta un voltaje de 10 V.

La ecuación de la recta pendiente generada en la Figura 2-13 es y = 0,5x + 5, lo que quiere


decir es que Vo = 0,5V0−A1 + 5. Para resolver esta ecuación se utiliza los mismo conceptos
34 2 Adquisición de datos y Acondicionamiento de señal

Figura 2-13: Relación Voltaje de salida planta de velocidad vs voltaje de salida acondicio-
namiento 1.

adquiridos de [12] en la parte de acondicionamiento de entrada de la planta de velocidad.

Para cumplir con A+ = A− + 1, se asignan sus correspondientes valores, donde A+ = 5,5, lo


que significa que A− = 4,5, la solución es la siguiente:

Las posibles resistencias comerciales que cumplen con RF = 0,5R1 , son RF = 10KΩ, y
R1 = 20KΩ.

Debido a que en una de las entradas no inversoras se necesita de una tensión fija de 10
V, estos se obtendrán utilizando la fuente de alimentación positiva VCC , del amplificador
operacional, es decir:
5v
5v = A · 13v → A = 13v
→ A = 0,3846.

La posible resistencia comercial que cumple con RF = 0,3846R2 , es R2 = 20KΩ. En es-


te punto se debe aclarar que la resistencia R2 , no es la que se calculó, dado que el valor
real serian 26KΩ, dado que para lograr el balanceo de pesos, R3 , tiene que ser de un valor
grande (alrededor de los M Ω), se mira el balanceo de pesos a partir de las impedancias que
tienen cada entrada, por lo que ahora lo que se tiene que cumplir es R+ = R− . Sabiendo
que R+ = R1 ||R2 , esto nos da un valor de 10KΩ, entonces, para el cálculo de R3 , el parale-
lo de esta resistencia con RF , tiene que dar aproximadamente 10KΩ. El valor de R3 = 10M Ω.

El circuito final se muestra en la Figura 2-14, el cual cumple con el balanceo de pesos y la
ecuación Vo = 0,5V0−A1 + 5.
2.2 Acondicionamiento de señal 35

Figura 2-14: Circuito 1 de acondicionamiento de salida planta de velocidad.

Siguiendo con el bloque de acondicionamiento de la Figura 2-12, lo que se debe diseñar a


continuación es el filtro activo. Para efectos prácticos se utiliza el software FilterPro para
diseñar el filtro pasa bajo activo.

Los criterios para el diseño del filtro pasa bajo activo fueron los siguientes:

Filtro de segundo orden.


Frecuencia-banda de paso 40Hz (esta frecuencia es debido a que se encuentra lejos del
tao del sistema).
Ganancia de 1dB.
Respuesta de tipo Chebyshev.
Topologı́a Sallen-Key.

Finalmente el diseño arrojado por el software se muestra en la Figura 2-15.

Figura 2-15: Filtro Pasa Bajo Activo.

Por último, se diseña el tercer sub-bloque de la Figura 2-12, el cual debe cumplir con un
rango de voltaje en la salida de 0 V a 3.3 V. Lo primero que hay que analizar son los voltajes
VOH , y VOL , de los amplificadores operacionales. En las pruebas realizadas en laboratorio,
los 10v de entrada del primer sub-bloque de acondicionamiento, genera en la salida 11.5 V,
y los -10 V de entrada generan 1.5 V en la salida. El filtro activo no altera de ninguna forma
36 2 Adquisición de datos y Acondicionamiento de señal

con esta relación encontrada debido a que se diseñó con una ganancia de 0dB, por lo que en
la salida del filtro se encuentra exactamente el rango de voltaje de 1.5 V a 11.5 V, entonces
la tarea de este último sub-bloque es reducir este rango de voltaje a uno que se encuentre
entre 0 V a 3.3 V.

Lo primero que se observa es que el VOL , del amplificador operacional está en 1.5 V, entonces
lo que se propone para que este lı́mite inferior sea aproximadamente de 0 V, es colocar en
serie el número suficiente de diodos de silicio (los cuales teóricamente tienen un voltaje de
polarización directa de 0.7 V) para reducir el nivel de voltaje de 1.5 V a un valor cercano a
0 V. El número de diodos seleccionados es 3. La referencia del diodo es 1N4001.

Debido al arreglo de diodos incluidos, el rango de voltaje se encuentra ahora entre 0 V a 10


V. A continuación se diseña un divisor de voltaje de tipo resistivo, el cual reduzca el anterior
rango de voltaje a uno entre 0 V a 3.3 V.

En la Figura 2-16 se muestra el divisor resistivo. El cálculo de las resistencias R1 , y R2 , se


hace de la siguiente manera:
Vin ·R2 Vout R2 3,3v R2
Vout = R2 +R1
→ Vin
= R2 +R1
→ 10v
= 0,33 = R2 +R1
.
0,67
0,33R2 + 0,33R1 = R2 → R1 = R → R1
0,33 2
= 2,03R2 .

Figura 2-16: Divisor Resistivo.


Los posibles valores comerciales para las resistencias son: R1 = 27KΩ y R2 = 13,3KΩ =
10KΩ + 3,3KΩ.

El circuito final que representa el bloque de acondicionamiento de salida de la planta de


velocidad se muestre en la 2-17.

Figura 2-17: Circuito Final de Acondicionamiento de Salida Para Planta de Velocidad.


2.2 Acondicionamiento de señal 37

2.2.2. Diseño de acondicionamiento para entrada y salida de la


planta de temperatura
Como se establece en la Tabla 2-6, la entrada de la planta de temperatura acepta una señal
de voltaje con un rango entre 0 V a 12 V, y la señal de voltaje que proporciona el módulo
DAC del sistema embebido seleccionado es de 0 V a 3.3 V.

En la Figura 2-18 se muestra la relación salida módulo DAC vs entrada planta de tempera-
tura.

Figura 2-18: Relación Salida Módulo DAC vs Entrada Planta de Temperatura.

Lo que muestra la Figura 2-18 se interpreta ası́: para una tensión de salida de módulo DAC
del sistema embebido de 0 V, en la entrada de la planta de temperatura se presenta un vol-
taje de 0 V, ası́ mismo, para una tensión de salida del módulo DAC de 3.3 V, en la entrada
de la planta de velocidad se presenta un voltaje de 12 V.

El bloque de acondicionamiento es similar al de la subsección anterior, solo que en este caso


Vi es el voltaje generado en la salida del módulo DAC, y Vo es el voltaje que alimenta la
entrada de la planta de velocidad. La ecuación de la recta pendiente generada en la Figura
2-18 es y = 3, 6364x, lo que indica es que Vo = 3, 6364Vi .

Aplicando conceptos de [12] para resolver Vo = 3, 6364Vi , se utiliza un amplificador opera-


cional en modo no inversor, en la Figura 2-19 se muestra este tipo de amplificador.

La ganancia del amplificador no inversor es:


V0 RF RF RF
A= Vi
=1+ R1
→ 3,6354 = 1 + R1
→ R1
= 2,6364 → RF = 2,6364R1 .
38 2 Adquisición de datos y Acondicionamiento de señal

Figura 2-19: Amplificador No Inversor.

Las posibles resistencias comerciales que se aproximan para cumplir con RF = 2,6364R1 ,
son R1 = 6,8KΩ, y RF = 18KΩ.

Para balancear el circuito R+ = R− , donde R− = R1 ||RF ≈ 5kΩ, entonces para balancear


el circuito se necesita que R+ = 5KΩ + 3KΩ.

El circuito final se muestra en la Figura 2-20, el cual cumple con el balanceo de pesos y la
ecuación Vo = 3, 6364Vi .

Figura 2-20: Circuito amplificador No Inversor, Acondicionamiento Entrada Planta Tem-


peratura.

En este punto hay que aclarar que desde el sistema embebido salen dos señales, una salida
analógica, la cual proporciona el módulo DAC que se dirige al amplificador no inversor, en
donde su salida tiene como función alimentar al bombillo de la planta de temperatura. Por
otro lado, se encuentra una salida digital, la cual activa un transistor configurado en modo
de corte y saturación que al ser alimentado por VCC , su salida es aproximadamente de 12 V
(1 V se pierde en el colector-emisor del transistor).

El modo de funcionamiento de este bloque de acondicionamiento es el siguiente: existe un


relé, el cual es controlado por la salida de voltaje de un transistor bipolar TIP122 que entra
en estado de corte o saturación dependiendo del voltaje que llegue a su base que precisamen-
te proviene de un pin digital del sistema embebido. Este relé en estado inactivo (directo) se
encuentra conectado a la entrada que alimenta al bombillo de la planta, pero si el relé está
en estado activo conmuta hacia la otra entrada, la cual alimenta al ventilador.
2.2 Acondicionamiento de señal 39

Por medio de la programación hecha en el sistema embebido, la activación para la alimen-


tación del bombillo se hace de modo normal con el módulo DAC, pero si se requiere activar
el ventilador, lo que sucede es que al módulo DAC envı́a una tensión de 3.3 V, lo que indica
que en la salida del amplificador no inversor se presenta un voltaje de 12 V. Por otro lado,
el pin digital envı́a también 3.3 V a la base del transistor, por consiguiente activa el relé y
conmuta hacia la entrada que alimenta al ventilador con 12 V.

En la Figura 2-21 se muestra el bloque de acondicionamiento de entrada a la planta de


temperatura.

Figura 2-21: Circuito bloque de acondicionamiento de entrada a la planta de temperatura.

A continuación sigue el diseño del circuito de acondicionamiento de señal de salida de la


planta de Temperatura. En esta parte, se tiene en cuenta que se va adicionar un filtro activo,
por esta razón el bloque de acondicionamiento es el que se presenta en la Figura 2-22.

Figura 2-22: Bloque de acondicionamiento de salida de la planta de Temperatua.

Lo primero que se realiza según la Figura 2-22, es el filtro activo pasa bajo. Para efectos
prácticos se utiliza el software FilterPro para diseñar el filtro pasa bajo activo. Los criterios
para el diseño del filtro pasa bajo activo fueron los siguientes:

Filtro de segundo orden.


Frecuencia-banda de paso 0.1Hz (esta frecuencia es debido a que se encuentra lejos del
tao del sistema).
Ganancia de 1dB.
40 2 Adquisición de datos y Acondicionamiento de señal

Respuesta de tipo Chebyshev.


Topologı́a Sallen-Key.

Finalmente el diseño arrojado por el software se muestra en la Figura 2-23.

Figura 2-23: Filtro pasa bajo activo, bloque de acondicionamiento planta de Ttemperatura.

Por último, se diseña el segundo sub-bloque de la Figura 2-22, el cual debe tener un rango
de voltaje en la salida de 0 V a 3.3 V. Lo primero que se analiza son los voltajes VOH , y VOL ,
del amplificador operacional utilizado en el filtro activo. Lo que hay que tener en cuenta, es
que en simulación los 12 V de entrada al primer sub-bloque de acondicionamiento, genera en
su salida los 11.5 V, por lo que el rango de voltaje es de 0 V a 11.5 V, entonces la tarea de es-
te último sub-bloque es reducir este rango de voltaje a uno que se encuentre entre 0 V a 3.3 V.

En la Figura 2-16 se muestra el divisor resistivo. El cálculo de las resistencias R1 y R2 se


hace de la siguiente manera:
Vin ·R2 Vout R2 3,3v R2
Vout = R2 +R1
→ Vin
= R2 +R1
→ 11,5v
= 0,287 = R2 +R1

0,713
0,287R2 + 0,287R1 = R2 → R1 = R
0,287 2
→ R1 = 2,48R2

Los posibles valores comerciales para las resistencias son: R1 = 82KΩ y R2 = 33KΩ.

El circuito final que representa el bloque de acondicionamiento de la Figura 2-22, es el que


se muestra en la Figura 2-24.

Figura 2-24: Circuito final de acondicionamiento de salida planta de Temperatura.


2.2 Acondicionamiento de señal 41

2.2.3. Circuito y PCB del bloque de acondicionamiento de entrada


y salida de las plantas de velocidad y temperatura.
El circuito es implementado en la herramienta ISIS del software PROTEUS en su versión
de prueba, en donde se colocan correctamente todos los componentes que son utilizados en
el circuito de acondicionamiento de las entradas y salidas de las plantas, en la Figura 2-
25 se observa el circuito implementado, y claramente se ve que aparte de los circuitos de
acondicionamiento se colocan las borneras y conectores GP que hacen parte de la placa PCB.

Figura 2-25: Circuito total del bloque de acondicionamiento de entrada y salida de las
plantas de Velocidad Y Temperatura.

En la Figura 2-26 se muestra la PCB (placa de circuito impreso), que se diseñó con cada uno
de los componentes que se usaron en los circuitos de acondicionamiento, el diseño se realizó
de tal manera que se ocupara el menor espacio posible y ası́ quedara con las dimensiones
apropiadas para su implementación fı́sica. En la Figura 2-27 se muestra el circuito en formato
3D.
42 2 Adquisición de datos y Acondicionamiento de señal

Figura 2-26: Circuito PCB del bloque de acondicionamiento de entrada y salida de las
plantas de Velocidad Y Temperatura.
2.2 Acondicionamiento de señal 43

Figura 2-27: Circuito PCB en 3D del bloque de acondicionamiento de entrada y salida de


las plantas de Velocidad Y Temperatura.
Capı́tulo 3
Arquitectura de Comunicación

La Arquitectura o estructura de comunicación es la forma en la cual se integran o interco-


nectan las distintas etapas del proyecto, con el fin de trasmitir datos desde las plantas hacia
el usuario final a través de Internet y viceversa.

En principio el proyecto se enfocó en realizar un desarrollo con una arquitectura en la cual


se implementaran el menor número de elementos, utilizando solamente las plantas, un mi-
crocontrolador, la etapa de acondicionamiento de señal y la conexión de un servidor web a
través de internet.

La idea de esta estructura mas compacta fue descartada ya que se encontró una limitación
de conexión dentro de la Universidad Distrital , lugar donde se desarrolla el proyecto de
investigación y se implementa el laboratorio Remoto.

El problema encontrado consiste en que la conexión a internet dentro de la universidad se


realiza a través de un servidor proxy, éste hecho impide que el microcontrolador se conecte
directamente a internet. Luego de múltiples intentos fallidos para tratar de configurar el
puerto y la dirección proxy en el microcontrolador, solo fue posible establecer una conexión
del sistema embebido dentro de la red local de la universidad, lo cual resulta insuficiente
para el objetivo del proyecto.

En consecuencia al imprevisto encontrado anteriormente, se decidió incluir un nuevo elemen-


to dentro de la arquitectura de comunicación de la estación remota, que pudiera manejar de
mejor manera la conexión a internet a través de la red proxy de la universidad, éste elemento
consiste en un computador que actúa como puente o gateway entre el microcontrolador y la
conexión a internet. Con este nuevo elemento se pueden configurar los parametros para la
conexión en la red proxy que no se pudieron realizar con el microcontrolador.

En la Figura 3-1 se muestra la arquitectura general de conexión de la estación remota, con


cada uno de sus elementos, los cuales son: La planta de velocidad o temperatura, el acon-
dicionamiento de la señal, el microcontrolador, el computador que funciona como servidor
3.1 Comunicación Planta – Acondicionamiento de Señal – Microcontrolador
45

local, el servidor web alojado en internet y el computador del usuario final desde donde se
configuran las pruebas.

Figura 3-1: Arquitectura General de Conexión.

3.1. Comunicación Planta – Acondicionamiento de Señal


– Microcontrolador
La parte inicial de la arquitectura comprende dos elementos que son la base del laboratorio,
la Planta de velocidad o de temperatura, y el microcontrolador. Tanto la planta como el
microcontrolador manejan señales analógicas de entrada y salida pero en rangos distintos, lo
que podrı́a generar daño en uno de los componentes si se conectaran directamente, por esta
razón se realiza un acople entre estos dos elementos con una etapa de acondicionamiento de
la señal.

Por un lado la planta de temperatura envı́a y recibe señales de voltaje en rangos entre –10
V y 10 V. La planta de velocidad envı́a señales de voltaje entre 0v y 10v. Por otro lado el
microcontrolador tiene rangos de voltaje de entada y salida entre 0v a 3.3v para el módulo
ADC y DAC. Como los rangos de las señales de salida y entrada a las plantas son distintos a
los de el microcontrolador, estas señales deben ser acondicionadas a través de amplificadores
operacionales configurados para cumplir con los respectivos rangos de funcionamiento. La
conexión entre estos elementos se muestra en la Figura 2-1, se explica con mas profundidad
en el Capitulo 2 Adquisición de datos y Acondicionamiento de Señal.

3.2. Comunicación Microcontrolador-Computador Ser-


vidor Local
La siguiente etapa en su estructura de conexión se muestra en la Figura 3-2. Esta estructura
la conforma el microcontrolador junto con el computador que actúa como servidor local o
puente para realizar la conexión a Internet.
46 3 Arquitectura de Comunicación

El servidor local es el elemento que envı́a los datos de programación de pruebas al micro-
controlador, que son configurados por el usuario desde el computador cliente, estos datos
pueden contener información de la prueba a realizar, o los parámetros de la prueba escogida,
la cuales pueden ser: amplitudes, frecuencias, tasas de muestreo, ventanas de histeresis o
coeficientes de un controlador.

El microcontrolador es el único elemento de toda la arquitectura que contiene la lógica de


funcionamiento de cada una de las pruebas que se pueden realizar en la estación remota.
También, cumple con la función de enviarle al servidor local los datos de entrada y salida
de la planta, ası́ como los vectores de tiempo e identificadores de muestras tomadas por el
microcontrolador por medio de su conversor analógico digital. Estas son las señales que le
permiten al usuario de la estación remota visualizar la respuesta de la planta.

Figura 3-2: Diagrama Conexión entre Microcontroldor y Servidor Local.

3.2.1. Protocolo de Comunicación Serial Ası́ncrono - Microcon-


trolador y Servidor Local
Para la conexión entre el microcontrolador y el servidor local, el protocolo de comunicación
utilizado es el UART o serial ası́ncrono. Para la conexión entre los 2 dispositivos se utilizo
un canal full dúplex con un puerto de transmisión y recepción de datos con interface RS232
[14] integrada, que permite la conexión con un puerto serial del computador local a través
de un cable micro USB.

La velocidad de envió y recepción de datos se estableció en 9600 baudios por segundo, en


donde el microcontrolador envı́a al computador local por medio del puerto serial una variable
string que concatena los valores de voltaje de entrada, salida y el tiempo de la muestra. En
la recepción de datos, el computador local le envı́a al microcontrolador por medio de una
variable string, la opción de la prueba que el usuario desea ejecutar o los parámetros de
configuración de la prueba. En el Capitulo 2 se muestra a profundidad la forma en la cual el
3.3 Protocolos de Comunicación de Internet, Websockets y PubNub 47

microcontrolador envı́a y recibe los datos del servidor local, dependiendo de la planta o las
pruebas a realizar.

El computador local ejecuta un programa en lenguaje python mostrado en 6, el cual configura


los puertos serial para la comunicación con el microcontrolador, éste programa también tiene
la configuración para el envió de datos a Internet como se explicará en la siguiente sección.

3.3. Protocolos de Comunicación de Internet, Websoc-


kets y PubNub
Desde el principio del proyecto uno de las ideas principales fue la de lograr una trasmisión
de datos en tiempo real, con el menor retraso posible en la transmisión de las señales entre
el usuario y las plantas, con el objetivo de lograr que la estación remota realmente mostrará
las respuestas de la planta de forma inmediata, sin un lapso de tiempo entre su visualización
y ocurrencia.

Otro de las ideas, fue establecer una conexión que proporcionará el menor cambio posible en
la respuesta de la planta debido a su conexión remota, Es decir que el tiempo de envió de
datos no afectara de manera alguna a la constante de tiempo de los sistemas. Por esta razón
el trabajo se orientó a entender de qué manera se enviaban los datos a través de internet y
cuál era su tiempo aproximado de duración.

Como se indica en [15] [16] la capa de transporte del modelo TCP/IP, el envı́o de paquetes
de información en internet, utiliza principalmente 2 tipos de protocolos, el protocolo TCP
que es orientado a la conexión y el UDP que es no orientado a la conexión. En el protocolo
TCP debido a que es orientado a la conexión, se garantiza que el paquete de datos llega a
su destino, esto significa que antes del envió de los datos se establece una conexión entre
transmisor y receptor de información, de manera que si hay perdida en el envió de paquetes,
existirá una confirmación de fallo y se procederá a el reenvió de la datos perdidos.

El protocolo UDP permite el envı́o de datagramas a través de la red sin que exista una co-
nexión previamente establecida, ya que el propio paquete o datagrama contiene información
suficiente para su direccionamiento. En el protocolo UDP no hay confirmación, ni control de
flujo, por lo cual, los paquetes pueden llegar antes o después de otros, tampoco se conoce si
han llegado correctamente, debido a que no hay confirmación de entrega o recepción.

En comparación los protocolos TCP y UDP ofrecen ventajas y ciertas desventajas. En el


protocolo TCP se garantiza el envió de datos sin errores y con confirmación a cambio de
mayor lentitud, por otro lado, en el protocolo UDP a pesar de ser un protocolo más rápido,
48 3 Arquitectura de Comunicación

no se garantiza una recepción de datos confiable.

Recientemente ha surgido la necesidad de realizar conexiones a través de Internet con un


flujo de datos rápido, sin mucha carga, pero de manera confiable. Como respuesta a esta
necesidad surgió una tecnologı́a llamada websockets, desarrollada en HTML5 y utilizada en
sitios como Facebook o Twitter que permite enviar o recibir datos de peso ligero a través de
internet en tiempo real, sin tener la necesidad de actualizar el explorador con una petición
de conexión.

Los websockets proporcionan un canal de comunicación bidireccional y full-dúplex sobre un


único socket TCP, de manera que la comunicación es confiable y rápida por su bajo flujo
de datos. En la Figura 3-3 se muestra la comparación de una conexión realizada con una
petición polling tradicional y otra realizada con websockets.

Figura 3-3: Petición Polling Tradicional contra Websockets [17].

En la Figura 3-3 se muestra como en una petición polling el usuario debe hacer una solicitud
cada vez que necesita actualizar los datos en su navegador y estos no son actualizados en
tiempo real de acuerdo a su llegada al servidor web principal, en comparación, los Websoc-
kets solo realizan una petición inicial para establecer una conexión con el servidor principal,
3.3 Protocolos de Comunicación de Internet, Websockets y PubNub 49

al establecer esta conexión, el canal queda abierto y el envió de datos no requiere una pe-
tición, de esta manera la actualización de los datos en el navegador se realizan en tiempo real.

Para el funcionamiento de Los Websockets, los exploradores deben soportar HTML5 y la


aplicación web debe ser diseñada en este lenguaje de etiquetas.

3.3.1. PubNub

PubNub es un servidor de flujo de datos en tiempo real, basado en tecnologı́a websockets,


en donde se establece una conexión y se tiene un canal abierto para las comunicaciones, este
servidor web tiene soporte en múltiples plataformas como python, JavaScript, .NET, Java,
Ruby, PHP, html, c++, c#, iOS, Android y hasta en algunos microcontroladores orientados
a IoT (Internet of Things) o Internet de las cosas.

El funcionamiento de PubNub se basa en un modelo llamado Publish/Subscribe o publi-


cación/suscripción como se muestra en la Figura 3-4. En principio, se crea un canal de
comunicaciones, con un determinado nombre, ese canal tiene una llave de suscripción y de
publicación, de manera que cualquiera que tenga la llave de publicación, podrá enviar infor-
mación que será recibida por todos los nodos que tengan la llave de suscripción a ese canal,
esto permite múltiples estructuras de conexión como: punto a punto, punto-multipunto, o
simplemente una red en donde múltiples puntos publiquen y múltiples puntos estén suscritos
a dicho canal.

Figura 3-4: Diagrama Publish Suscribe de PubNub [18].


50 3 Arquitectura de Comunicación

3.4. Comunicación Computador Local – Internet – Ser-


vidor web
Para la comunicación entre el computador local y el computador del usuario final se estableció
una conexión como la mostrada en la figura 3-5.

Figura 3-5: Estructura de comunicación a través de Internet.

El computador base se conecta a internet a través del programa en python alojado en el


computador servidor local, tiene la llave de suscripción a un canal, y la llave de publicación
a otro canal distinto, por medio de estos canales de PubNub el computador servidor local
puede enviar y recibir strings en forma de mensajes, en principio el computador toma los
datos que le llegan del microcontrolador y los envı́a a través de un canal X en forma de
publicación al servidor web que tiene la llave de suscripción del Canal X. El servidor web es
el lugar en donde donde se encuentra alojada la interface grafica de usuario (pagina web),
donde el usuario podrá visualizar las pruebas. Esta página alojada en el servidor web puede
ser accedida desde cualquier computador con conexión a internet y un explorador con so-
porte de HTML5.

En el sentido contrario del flujo de datos, el usuario al ingresar los parámetros de configu-
ración de las pruebas de la planta en la página web, envı́a estos parámetros a través de la
llave de publicación de un canal Z. El programa en Python del computador local recibe esta
información con la llave de suscripción del canal z, para luego enviarla de manera serial al
microcontrolador.

3.5. Comunicación Computador cliente – Servidor Apli-


cación web - Base de datos mySQL
Existe una comunicación adicional que no hace parte del funcionamiento propio de la es-
tación remota, pero si permite el registro e inicio de las sesiones programadas, ésta es la
estructura de comunicación con la base de datos, como se muestra en la Figura 3-6.
3.5 Comunicación Computador cliente – Servidor Aplicación web - Base de
datos mySQL 51

Figura 3-6: Estructura de comunicación a la Base de Datos.

Este proceso de comunicación se basa en dos ventanas disponibles en la pagina de inicio, una
de registro y otra de ingreso. Esta pagina principal se encuentra contenida en el servidor de
la aplicación web, en donde también se encuentran dos plantillas php, una para realizar la
consulta de usuarios registrados, y la otra para realizar ingresos de datos de nuevos usua-
rios. Estas plantillas contienen sentencias SQL que permitan hacer conexión la base de datos
mySQL, la cual es una herramienta proporcionada por el servidor web.

La información del registro es llenada en el formulario y verificada a través de la aplicación


web, por medio una consulta en la base de datos mySQL. Si el registro es válido los datos
son almacenados en la base de datos, de lo contrario se pedirá que se realice de nuevo el
registro.

Para el ingreso a una sesión de la planta de velocidad o temperatura, el usuario ingresa los
datos de autenticación en el formulario, si la consulta resulta valida para la prueba especifi-
cada, se permitirá el ingreso a la estación remota, de lo contrario se rechazara la petición.
Capı́tulo 4
Interface Gráfica de Usuario

4.1. Elección del tipo de interface gráfica de usuario


La interface gráfica de usuario que se desarrolla en este proyecto se basa fundamentalmente
en proporcionar al usuario herramientas tales como, menús y objetos gráficos que permitan
realizar diferentes acciones y visualizar la información que se esté recibiendo. Dado que el
proyecto está orientado hacia una aplicación donde se utiliza la red de internet y algunas
herramientas de la web, entonces se decide diseñar y realizar una página web como interface
gráfica. El enfoque que se dio para realizar la página web es debido a que existe una gran
variedad de proyecto y trabajos de investigación que aportan un extenso conocimiento hacia
el desarrollo de páginas web, en donde se relacionan como un recurso o herramienta nece-
saria para la finalización de proyectos orientados hacia la conexión y/o comunicación remota.

Cabe aclarar que existe una variedad de software y plataformas de desarrollo web, tales como
.NET de Microsoft donde se utilizarı́a C# como lenguaje de programación para realizar la
aplicación web, también se encuentra NETBEANS de código abierto, en donde se utilizarı́a
como lenguaje de programación JAVA.

En la Tabla 4-1 se muestran algunas ventajas y desventajas que proporcionan algunos de


estas herramientas de programación dicho por [22].
4.1 Elección del tipo de interface gráfica de usuario 53

Tabla 4-1: Lenguajes de programación [22].

Lenguajes de
Programación Ventajas Desventajas
Para la Web
Sencillo que permite describir hiper-
Lenguaje estático.
texto.
La interpretación de cada navegador
Texto presentado de forma estructura-
puede ser diferente (aunque en los últi-
da y agradable.
mos años se ha estado mejorando).
No necesita de grandes conocimien-
Guarda muchas etiquetas que pueden
to cuando se cuenta con un editor de
HTML páginas web.
convertirse en basura y dificultan la co-
rrección.
Archivos pequeños.
El diseño es más lento.
Despliegue rápido.
Las Etiquetas son muy limitas (aunque
Lenguaje de fácil aprendizaje. hoy en dı́a con la versión HTML5 ya
ha dejado de ser una desventaja).
Lo admiten todos los exploradores.

Lenguaje de scripting seguro y fiable.

Los script tienen capacidades limita- Código visible por cualquier usurario.
JavaScript das, por razones de seguridad. El código debe descargarse completa-
El código JavaScript se ejecuta en el mente.
cliente.

Muy fácil de aprender.

Se caracteriza por ser un lenguaje muy


rápido.

Soporta en cierta medida la orienta-


ción a objetos. Clases y herencia.
Se necesita instalar un servidor web.
Es un lenguaje multiplataforma: Li-
Todo el trabajo lo realiza el servidor y
nux, Windows, entre otros.
no delega el cliente. Por tanto puede
Capacidad de conexión con la mayorı́a ser más ineficiente a medida que las
de los manejadores de base de da- solicitudes aumenten de número.
tos: MySQL, PostgreSQL, Oracle, MS
La Legibilidad del código puede verse
SQL, entre otras.
afectada al mezclar sentencias HTML
PHP Capacidad de expandir su potencial Y PHP.
utilizando módulos.
La programación orientada a objetos
Posee documentación en su página ofi- es aún muy diferente para aplicaciones
cial la cual incluye descripción y ejem- grandes.
plos de cada una de sus funciones.
Dificulta la modularización.
Es libre, por lo que se presenta como
Dificulta la organización por capas de
una alternativa de fácil acceso para to-
la aplicación.
dos.

Incluye gran cantidad de funciones.

No requiere definición de tipos de va-


riables ni manejo detallado del bajo ni-
vel.

Continuación siguiente página...


54 4 Interface Gráfica de Usuario

Tabla 4-1: (cont.)


Lenguajes de
Programación Ventajas Desventajas
Para la Web
Usa Visual Basic Script, siendo fácil Código desorganizado.
para los usuarios. Se necesita escribir mucho código para
ASP Comunicación óptima con SQL Server. realizar funciones sencillas.

Soporta el lenguaje JScript (Javascript Tecnologı́a propietaria.


de Microsoft). Hospedaje se sitios costosos.

Completamente orientado a objetos.

Controles de usuario y personalizados.

División entre la capa de la aplicación


o diseño y el código.

Facilita el mantenimiento de grandes


ASP.NET aplicaciones.
Mayor consumo de recursos.

Incremento de velocidad de respuesta


del servidor.

Mayor velocidad.

Mayor seguridad.

Ejecución rápida del servlets.

Crear páginas del lado del servidor.

Multiplataforma.

Código bien estructurado.


JSP Complejidad de aprendizaje.
Integridad con los módulos de JAVA.

La parte dinámica está escrita en JA-


VA.

Permita la utilización se servelets.

Libre y fuente abierta.

Lenguaje de propósito general.

Gran cantidad de funciones y librerı́as.

Sencillo y rápido de programar. Lentitud por ser un lenguaje interpre-


PHP tado.
Multiplataforma.

Licencia de código abierto.

Orientado a objetos.

Portable.
4.2 Desarrollo de la pagina web 55

4.2. Desarrollo de la pagina web


Para la construcción y desarrollo de una página web, los requerimientos principales son:
como primer punto se debe adquirir o disponer de un servidor web en donde se alojen las
plantillas web a desarrollar y todos los elementos que se vayan a utilizar en ésta (imagenes,
videos, etc.). Lo segundo es disponer de un nombre o dirección web, la cual no es más que
una serie de letras o números que identifican a la página web dentro de la internet, también
es conocido como dominio web, esta es la forma fácil en que los usuarios pueden encontrar
la página en la web.

Para este proyecto se adquirió un servicio gratuito de servidor web y dominio web en el sitio
000webhost.com, en donde se ofrecen los servicios anteriormente mencionados, y también
servicios de phpmyadmin junto con MySQL, los cuales son importantes para el registro de
datos de nuevos usuarios, e inicio de sesión de usuarios ya registrados en la base de datos.
El nombre de dominio que se le dio a la página web fue estacionremota.net76.net. Se debe
comentar que el dominio o identificador .net76.net es debido a que es un servicio gratuito y
era uno de los pocos dominios que estaban disponibles en éste sitio web.

Para el desarrollo de la página web se hizo necesario utilizar el lenguaje de marcas de hiper-
texto en su quinta revisión llamado HTML5, aunque en el mundo del diseño y desarrollo web
también es conocido como el lenguaje de etiquetas. La estructura mı́nima que debe llevar un
documento HTML5 se muestra en Figura 4-1. En la construcción del código para realizar la
plantilla web principal o de inicio.

Figura 4-1: Documento HTML5 mı́nimo, estructura.

Las plantillas web para la planta de temperatura y velocidad, fueron realizadas con códigos
elaborados en HTML5, CSS y JavaScritp [23], además se encontró una librerı́a de widgest
de código abierto llamada WEBIX, la cual fue de gran ayuda en cuanto a la estructura que
debı́a tomar la apariencia visual de estas plantillas, ya que dispone de muchas etiquetas
predefinidas, la ventaja principal es que su código es fácil de entender y existen una gran
variedad de herramientas y ejemplos disponibles en [24].
56 4 Interface Gráfica de Usuario

En las plantillas diseñas para la conexión con la base de datos, se usó el lenguaje de código
abierto PHP, ya que este permite realizar conexiones a diferentes tipos de servidores de bases
de datos SQL, para nuestro caso MySQL [25] [26]. Además es un código de fácil entendimien-
to y no requiere de un conocimiento extenso en éste tipo de código para realizar conexiones
a bases de datos.

Lo anterior significa, que dentro del archivo .PHP se encuentran una diversidad de lenguajes
como JavaScript, HTML y CSS, que se relacionan entre sı́ para dar forma interna y externa
a la página web.

Básicamente la página web está compuesta por cinco plantillas web, las cuales cumplen
con las funciones principales de la página. Estas plantillas se encuentran en la sección de
ANEXOS y a continuación de hace una breve descripción de cada una de ellas:

Plantilla o página principal:


En la página principal, se encuentran las ventanas de Inicio de Sesión y Registro de
Sesión de Laboratorio, en donde se hizo necesario utilizar el lenguaje CSS para diseñar
hojas de estilos, y para documentos estructurados se utilizó HTML5, los cuales ayuda-
ron a dar forma a la presentación de las ventanas anteriormente nombradas. Además
junto con el lenguaje de programación interpretado JavaScritp se le proporcionó a la
página de inicio caracterı́sticas dinámicas. Los tres tipos de lenguajes fueron utiliza-
dos dentro de la plantilla de inicio que se llamó Index.php, esta plantilla se dejó con
esta extensión debido a que se hace una vinculación con las plantillas registro.php y
sesión.php las cuales hacen conexión con el gestor de base de datos MySQL. En la
Figura 4-2 se muestra como se dispone la página de inicio.

Figura 4-2: Pagina Principal

Plantilla o página de envı́o y recepción de información de la planta de velocidad:


Ésta plantilla (Velocidad.php) tiene como función ofrecer al usuario el uso de la planta
4.3 Funcionalidades principales de la página web 57

de velocidad, donde puede efectuar cuatro diferentes pruebas dentro del tiempo de
sesión que le corresponda. Se encuentra la prueba de Respuesta al Escalón, Respuesta
en Frecuencia, Control ON-OFF y Control Digital. La descripción de cada uno de las
partes de esta plantilla como menús y gráficos para cada prueba se encuentra disponible
en la siguiente sección. Debido a la velocidad de respuesta en el tiempo de la planta de
velocidad los datos que se reciben en la plantilla no son en tiempo real, lo que sucede
es que los datos son almacenados en una tabla en el microcontrolador y éste luego de
haber obtenido cierta cantidad de datos los envia por la web.

Plantilla o página de envı́o y recepción de información de la planta de temperatura:


Ésta plantilla (Temperatura.php) tiene gran similitud con la plantilla para la planta de
velocidad, la única diferencia es que dispone de un menú con un botón para activación
del ventilador. Además dispone de un botón llamado Detener Prueba, ya que los datos
son enviados en tiempo real, y no hay ninguna función que detenga la prueba, para
ello de dispone de éste botón.

Plantilla o página de registro de usuario nuevo:


Ésta se encarga de hacer la conexión con la base de datos y registrar nuevos usuario,
funciona junto con la página principal.

Plantilla o página de inicio de sesión de usuario registrado:


Ésta se encarga de hacer la conexión con la base de datos y consultar si existe el usuario
y a su vez redireccionar a la página de la planta de velocidad o temperatura luego de
la validación de la información en la consulta en la base de datos, funciona junto con
la página principal.

4.3. Funcionalidades principales de la página web


Debido a que la página web es la interface gráfica que utilizará el usuario y que estará
disponible para su uso en cualquier horario (claro está que se define un horario especifico de
uso por cada usuario),se hace indispensable definir las funciones principales que ésta página
debe tener. Estas funciones son en general tres, que se explican a continuación.

4.3.1. Recepción de información de las plantas de velocidad y tem-


peratura
Esta función se basa principalmente en obtener y representar la información que es enviada
desde las plantas de velocidad y temperatura hacia la página web por medio de la red de
internet.
58 4 Interface Gráfica de Usuario

La información se gráfica en base a la respuesta generada por las plantas de velocidad y


temperatura dependiendo, depende de la prueba que se esté realizando y la planta que se
esté utilizando, ya que para cada planta se dispone de una plantilla web diferente. La gráfica
representa la señal de entrada y de salida que se genera como resultado de la prueba. De
color rojo se representa la señal de entrada, que en la mayorı́a de los casos es una señal
escalón. De color azul se representa la señal de salida o respuesta de la planta. La gráfica
representa una señal de tensión en voltios [v] que trascurre en el tiempo, con unidades en
segundos [s]. En la Figura 4-3 se muestra como está definida la gráfica.

Figura 4-3: Recepción de información. Gráfica y Tabla.

Para la obtención de la información de forma tabular, se incluye una tabla que muestra en
cuatro columnas el número de datos recibidos, el tiempo de la muestra en segundos, el voltaje
de la señal de entrada, y el voltaje de la señal de salida. Ésta tabla puede ser exportada como
archivo Excel (.xlsx), por medio de un botón disponible en la página, gracias a esto el usuario
podrá disponer de la información para luego realizar un análisis más detallado de la prueba
que esté realizando. En la Figura 4-3 se muestra como se dispone la tabla.

4.3.2. Envı́o de información hacia las plantas de velocidad y tem-


peratura
En primera instancia el usuario debe ingresar los datos correspondientes a la prueba que
desee realizar en los menús y campos disponibles en la plantilla de cada planta. Posterior-
4.3 Funcionalidades principales de la página web 59

mente la información se envı́a pulsando el botón ”Enviar”, que junto a una función asociada
en la plantilla, realiza la conexión con el servidor PUBNUB. En la Figura 4-4 se muestra a
grandes rasgos los menús disponibles.

Figura 4-4: Menús Planta de Temperatura y Velocidad

En el menú disponible para la planta de temperatura se encuentra: como primera opción, la


prueba de Respuesta al Escalón, que dispone de un selector de tensión o slider que se despla-
za horizontalmente para escoger el voltaje de referencia con que se requiera hacer la prueba,
esta opción permite seleccionar un voltaje de 0 V a 10 V con pasos de 0.1 V. También se
encuentra un botón llamado ”Enviar”, el cual por medio de la configuración interna de la
página envı́a la información configurada hacia la planta de temperatura. En la Figura 4-5
se observa el menú de Respuesta al Escalón.

Figura 4-5: Prueba de Respuesta al Escalón para la Planta de Temperatura

La siguiente opción es la prueba de Respuesta en Frecuencia, que dispone de un selector de


tensión pico a pico o slider que se desplaza horizontalmente para escoger el voltaje que se le
quiera dar a la señal seno, la tensión varı́a de 0 V a 10 V con pasos de 0.1 V, seguidamente
60 4 Interface Gráfica de Usuario

está el selector de tensión offset que dispone de una variación de 2 V a 5 V con pasos de 0.1
V. Por ultimo está el selector de Frecuencia, con una variación de 0.2 mHz a 90 mHz con
pasos de 0.1 mHz, esta es la frecuencia con la que saldrá la señal seno. Al igual que en la
prueba anterior, se dispone de un botón de ”Enviar”. En la Figura 4-6 se observa el menú
de Respuesta en Frecuencia.

Figura 4-6: Prueba de Respuesta en Frecuencia para la Planta de Temperatura

Seguido, se encuentra la opción de prueba de Control ON-OFF, que dispone de un selector


o slider que varia de 0 V a 10 V el voltaje de referencia con saltos de 0.1 V. También se
encuentra un selector de nivel de tensión de ventana de Histéresis con variación de 0.1 V a
4 V con saltos de 0.1 V. Como en la anteriores opciones de pruebas se dispone de un botón
de ”Enviar”. En la Figura 4-7 se observa el menú de prueba de Control ON-OFF.

Figura 4-7: Prueba de Control ON-OFF para la Planta de Temperatura

A continuación se encuentra la opción de prueba de Control Digital, que dispone como en


las anteriores pruebas de un selector de tensión de referencia con variación de 0 V a 10 V
con saltos de 0.1 V. También se dispone de un selector de tiempo de muestro para el control
digital, que varı́a entre 30 s y 100 s con pasos de 1 s. También se encuentran las cajas de texto
4.3 Funcionalidades principales de la página web 61

para ingresar los coeficientes del controlador, estas cajas solo permiten caracteres numéricos,
si se ingresa otro carácter la caja tomara un color rojo indicando que no es permitido el uso
de ese carácter. Se dispone también de un botón de ”Enviar”.En la Figura 4-8 se observa
el menú de prueba de Control Digital.

Figura 4-8: Prueba de Control Digital para la Planta de Temperatura

Por ultimo se encuentra la Activación de Ventilador, que dispone de un botón para activar
el ventilador cuando se haya terminado alguna de las pruebas y se requiera realizar una nueva.

En la plantilla web de la planta de temperatura (llamada Temperatura.php) se dispone de un


botón de Detener Prueba que dar por terminado la prueba que se está realizando, cortando
la recepción de datos y enviando un mensaje a la estación para la culminación de la prueba.
También cuenta con un botón de Borrar Datos, el cual se usa para limpiar los datos de la
gráfica y la tabla, con el fin de realizar una nueva prueba. Por ultimo un botón de Cerrar
Sesión que se usa para salir de la pagina de ejecución de pruebas de la estación remota, y
redirigiéndose hacia la página de registro e inicio de sesión.

En el menú de la planta de velocidad se encuentra disponible las mismas cuatro pruebas


descritas anteriormente en el menú de la planta de temperatura. Pero en éste menú la
diferencia se encuentra en los rangos de desplazamiento que se disponen en los slider. Estos
rangos se especifican a continuación:
62 4 Interface Gráfica de Usuario

Respuesta al Escalón: voltaje de referencia entre un rango de -10 V a 10 V con pasos


de 0.1 V.

Respuesta en Frecuencia: voltaje pico a pico entre un rango de 0 V a 20 V con pasos


de 0.1 V. Voltaje offset entre un rango de -8 V a 8 V con pasos de 0.1 V. La frecuencia
en Hz que esta un rango de 0.1 Hz a 40 Hz con pasos de 0.1 Hz.

Control ON-OFF: voltaje de referencia entre un rango de -10 V a 10 V con pasos de


0.1 V. Voltaje de Histéresis entre un rango de 0.1 V a 4 V con pasos de 0.1 V.

Control Digital: voltaje de referencia entre un rango de -10 V a 10 V con pasos de 0.1
V. Tiempo de muestreo entre un rango de 1 ms a 10 ms con pasos de 1 ms.

Al igual que la plantilla web de la planta de temperatura se dispone en la plantilla web de la


planta de velocidad (llamada Velocidad.php) de un botón de Borrar Datos, que se usa para
limpiar los datos que se muestran en la gráfica y en la tabla, con el fin de realizar una nueva
prueba. También un botón de Cerrar Sesión que se usa para salir de la pagina de ejecución
de pruebas de la planta de velocidad, y redirigiéndose hacia la página de registro e inicio de
sesión.

4.3.3. Gestión de acceso a las plantas de velocidad y temperatura


Para la gestión de acceso a las plantas, se realizó una plantilla web con dos ventanas, una
para la gestión de registro de nuevos usuarios, y la segunda para la gestión de inicio de
sesión de los usuarios ya registrados. Esta plantilla esta predeterminada para ser la pa-
gina de inicio, lo que indica es que cuando en el buscador de direcciones web contenga
http://estacionremota.net76.net/ (más a delante se explica cómo se realizó el proceso de
registro de nombre de la página o dirección web), lo primero que se abrirá será la plantilla
web de inicio de sesión y/o registro de usuarios. En la Figura 4-9 se muestra como está
disponible en la página las ventanas de inicio de sesión y registro. A continuación se detalla
cada una de estas ventanas.

En la ventana de Inicio de Sesión se encuentra disponible:

Cuadro de texto para ingreso de Código: en este campo solo es posible ingresar carac-
teres de tipo numérico, si ingresa un carácter diferente al dar clic en el botón Inicio,
saldrá un mensaje alertando el error.

Cuadro de texto para ingreso de Clave: en este campo es posible ingresar cualquier tipo
de carácter, como recomendación se le aconseja al usuario que al momento de hacer el
registro sea cauteloso con la clave y la guarde de manera segura.
4.3 Funcionalidades principales de la página web 63

Figura 4-9: Registro e Inicio de Sesión de la Pagina Web

Menú desplegable para selección de Planta: este menú dispone de las opciones de planta
de Temperatura y Velocidad.

Botón de Inicio: este botón cumple con la función de direccionar hacia la plantilla web
de temperatura o velocidad dependiendo de los datos ingresados en los cuadros de
texto y el menú desplegable. Si existe un error mostrará un mensaje dependiendo del
motivo, también se mostrará mensaje si el usuario está ingresando en un horario que
no le corresponde o si aún no está registrado.

Botón de Registrarse: este botón cumple con la función de cambiar de ventana para que
los usuarios nuevos puedan realizar su correspondiente registro de sesión de laboratorio.
Se encuentra en la parte inferior de la ventana de inicio de sesión.

En la ventana de Registro de Sesión de Laboratorio está disponible:

Cuadro de texto para ingreso de Código: en este campo solo es posible ingresar carac-
teres de tipo numérico, si ingresa un carácter diferente al dar clic en el botón Inicio,
saldrá un mensaje alertando del error.

Cuadro de texto para ingreso de Clave: en este campo es posible ingresar cualquier tipo
de carácter, como recomendación se le aconseja al usuario que al momento de hacer
el registro sea cauteloso con la clave y la guarde de manera segura. La restricción se
encuentra en que la clave debe tener un número mı́nimo de cinco caracteres y como
máximo diez.
64 4 Interface Gráfica de Usuario

Cuadro de texto para Confirmar Clave: tiene las mismas caracteristicas del anterior
cuadro de texto, se usa para realizar la segura confirmación de la clave a guardar.
Menú Calendario para seleccionar Fechas: éste menú tiene la opción de mostrar la fecha
actual y poder seleccionar la fecha en que se quiera realizar el registro de la sesión de
laboratorio. Es un menú sencillo y muy fácil de usar.
Menú Selector Numérico para seleccionar Hora: éste menú tiene la opción de seleccionar
la hora la cual el usuario desea registrar su sesión de laboratorio, en la selección de la
hora solo se pueden escoger horas pares (2, 4, 6, etc.), lo que significa que solo están
disponibles tanto para la planta de temperatura como para la de velocidad sesiones
de dos horas, pero se debe aclarar que un mismo usuario puede disponer de hasta un
número máximo de tres sesiones, por lo que si el usuario realiza un registro de tres
sesiones seguidas dispondrá de seis horas en total sesión. Si el usuario intenta realizar
un número mayor de tres sesiones, al dar clic en el botón de Registrarse, la ventana
mostrará un mensaje indicando que no está permitido.
Menú desplegable para selección de Planta: este menú dispone de las opciones de planta
de Temperatura y Velocidad.
Botón de Registrarse: este botón cumple con la función realizar el correspondiente
registro de la información ingresada por el nuevo usuario. En el caso que existe un
error en alguno de los campos de registro, se presentarán mensajes de alerta indicando
el error. Si no se encuentra ningún error se mostrará un mensaje indicando que el
registro se realizó con éxito y se direccionará la página hacia la ventana de inicio de
sesión.
Botón de Inicio Sesión: este botón cumple con la función de cambiar de ventana para
que los usuarios ya registrados puedan realizar su correspondiente inicio de sesión de
laboratorio. Se encuentra en la parte inferior de la ventana de inicio de sesión.

Ya habiendo realizado una descripción de los elementos que componen la plantilla de Re-
gistro e Inicio de Sesión, se debe aclarar que se hizo uso de un sistema de gestión de bases
de datos llamado MySQL, esto con el propósito de guardar la información de los usuarios
registrados y realizar la gestión apropiada en el acceso a las plantas.

También se comenta que para la ventana de Registro de Sesión de Laboratorio en el momento


de hacer clic en el botón de Registrarse, éste activa una vı́nculo con un archivo llamado regis-
tro.php cuya función es el de establecer la conexión con el gestor de bases de datos MySQL.
Similarmente la ventana de Inicio de Sesión en el momento de hacer clic en el botón Inicio
activa un vı́nculo con un archivo llamado sesión.php que cumple la misma funcionalidad del
anterior.
4.3 Funcionalidades principales de la página web 65

Para que se efectuara correctamente las funciones de recepción y envı́o de información en la


página web, se dispuso de un servidor web llamado PUBNUB el cual establece la comunica-
ción entre la página web y las plantas de velocidad y temperatura, gracias a los protocolos
que éste servidor maneja. El acceso a internet y la arquitectura hecha para este proyecto se
encuentra disponible en el Capı́tulo 3 Arquitectura de Comunicación.
Capı́tulo 5
Resultados

Luego de la implementación e integración de las distintas etapas, se procedió a la ejecución


de pruebas para verificar el correcto funcionamiento de la estación remota y de cada uno
de sus componentes. Para hacer el testeo del laboratorio remoto, se realizan las pruebas
de forma similar a como se obtenı́an de manera presencial, llegando ası́ a un parámetro de
comparación, que permita corroborar los objetivos alcanzados en el proyecto.
Las pruebas fueron: la respuesta al escalón, en donde se analizan los resultados y se calculan
parámetros fundamentales como la constante de tiempo y ganancia del sistema; respuesta en
frecuencia en donde se obtienen parámetros como ganancias y fases para distintas frecuencias
de entrada esto con el fin de calcular la constante de tiempo y ganancia del sistema, esta
prueba solo se realizó unicamente para la planta de velocidad; controlador ON-OFF en
donde se verifican los parámetros de configuración del controlador como señal de referencia
e histéresis; por ultimo el controlador digital en donde se verifican parámetros como la
constante de tiempo y sobrepaso (overshoot) del sistema.
Todas las pruebas mencionadas anteriormente se comparan y se analizan los resultados para
establecer un grado de similitud entre la estación remota y el laboratorio presencial.

5.1. Resultados Planta de Velocidad


Para la planta de velocidad se realizaron cuatro pruebas tanto de forma remota como de
forma directa.

5.1.1. Resultados Prueba Respuesta al Escalón

Esta sección se divide en tres partes, una donde se muestran los resultados de la respuesta al
escalón de la planta de velocidad de forma presencial, la siguiente se muestran los resultados
de la estación remota y por ultimo se comparan los resultados obtenidos de estas dos formas.
5.1 Resultados Planta de Velocidad 67

Resultados Presenciales
Debido a que las pruebas realizadas para caracterizar el sistema de forma directa se hicieron
en base a la respuesta al escalón, los resultados de dicha prueba se encuentran en la 1.3.2
Caracterización de la planta de velocidad del Capitulo 1 Funcionamiento de los sistemas
dinámicos e identificación de las Plantas.

Resultados de Forma Remota


Para obtener los parámetros de constante de tiempo y ganancia del sistema, se realizó el
mismo procedimiento hecho en la caracterización de la planta de velocidad, mostrados en el
Capitulo 1.

Los resultados obtenidos son los que se muestran en la Tabla 5-1, y en las Figuras 5-1 y
5-2.

Tabla 5-1: Resultados obtenidos en


t
la
t
 Estación Remota.
Nivel de la señal escalón [V] τ τ
k
-5 23.407 0.561
-7 26.381 0.630
-8 27.194 0.652
-9 28.428 0.671
-10 29.378 0.682
5 25.685 0.528
7 29.211 0.603
8 29.786 0.628
9 31.198 0.647
10 32.334 0.658
PROMEDIO 28,3 0.626

(a) Respuesta al escalón. (b) Linealización.

Figura 5-1: Linealización de datos obtenidos a respuesta de escalón de 9 V estación remota.

Al promediar los resultados finales, se tiene que la función de transferencia de la planta de


velocidad es:
0,626 17,7158
G(s) = 0,035335s+1
y su equivalente es G(s) = s+28,3
68 5 Resultados

(a) Respuesta al escalón. (b) Linealización.

Figura 5-2: Linealización de datos obtenidos a respuesta de escalón de -10 V estación


remota.

Comparación

En la Tabla 5-2 y Figuras 5-3, 5-4, 5-5 se muestran los resultados obtenidos en la prueba
de respuesta a escalón de la planta de velocidad tanto en la estación remota como en la
planta directa, se comparan los parámetros de constante de tiempo y ganancia del sistema
y se coloca un porcentaje de error entre los resultados.

Tabla 5-2: Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta


presencial.
1
Nivel de la señal escalón [V] Estación Remota Planta Directa Error − τ
[ %] Error − k[ %]
1
1 1
1
τ τ
k τ τ
k
-5 23.407 0.561 25.028 0.532 6.47 5.45
-7 26.381 0.630 28.64 0.6185 7.88 1.85
-8 27.194 0.652 30.34 0.658 11.56 0.91
-9 28.428 0.671 30.253 0.655 6.03 2.44
-10 29.378 0.682 30.089 0.667 2.36 2.24
5 25.685 0.528 23.965 0.517 7.17 2.12
7 29.211 0.603 24.984 0.5885 16.91 2.46
8 29.786 0.628 32.677 0.6368 8.84 1.38
9 31.198 0.647 33.016 0.6506 5.5 0.55
10 32.334 0.658 33.071 0.6715 2.22 2.01
PROMEDIO 28,3 0.626 29.2249 0.61949 3.16 1.05

.
5.1 Resultados Planta de Velocidad 69

Figura 5-3: Comparación respuesta al escalón de 9 V estacion remota vs planta presencial.

Figura 5-4: Comparación respuesta al escalón de 10 V estacion remota vs planta presencial.

Figura 5-5: Comparación respuesta al escalón de -10 V estación remota vs planta presencial.
70 5 Resultados

5.1.2. Resultados Prueba Respuesta en Frecuencia

Para esta prueba se realizó un barrido de frecuencias donde se pudó construir un diagrama
de bode aproximado, tanto para la planta presencial como para la remota. En las Tablas
5-3 y 5-4 se muestran los datos de magnitud y fase obtenidos en los resultados dados por
la respuesta en frecuencia de la planta de forma remota y presencia. En la Figura 5-6 se
muestra el diagrama de bode de las respuestas en frecuencia generadas por la planta de
velocidad de forma presencial y remota.

Figura 5-6: Diagrama de Bode de magnitud para la planta de velocidad de forma presencial
y remota.

Tabla 5-3: Resultados planta de velocidad en respuesta en frecuencia obtenidos de forma


presencial.
ω[rad] Frecuencia [Hz] Magnitud [dB] Fase [◦ ]
1.2566 0.2 -2.7835 -2.88
3.1415 0.5 -3.1784 -10.8
5.6548 0.9 -3.3828 -16.2
8.7964 1.4 -3.8066 -16.228
13.823 2.2 -4.2521 -25.34
21.9911 3.5 -5.2182 -37.8
32.044 5.1 -6.3054 -47.736
50.2654 8 -8.2436 -64.512
75.3982 12 -10.7423 -70.232
125.6637 20 -15.0199 -86.4
5.1 Resultados Planta de Velocidad 71

Tabla 5-4: Resultados planta de velocidad en respuesta en frecuencia obtenidos de forma


remota. ◦
ω[rad] Frecuencia [Hz] Magnitud [dB] Fase [ ]
1.8849 0.3 -2.7788 -9.82
3.7699 0.6 -3.0344 -13.6
5.6548 0.9 -3.1248 -22.35
9.4247 1.5 -3.6009 -28.13
14.4513 2.3 -4.1183 -36.51
21.9911 3.5 -5.0083 -47.88
32.6725 5.2 -6.143 -61.77
50.2654 8 -8.0548 -75.74
76.0265 12.1 -10.615 -87.12
126.292 20.1 -14.789 -123.73

5.1.3. Resultados Prueba Controlador ON-OFF

Para la prueba de controlador ON-OFF al igual que en las anteriores se obtuvieron resulta-
dos de manera presencial y remota, para posteriormente realizar también su correspondiente
comparación. Los parámetros de medición de la prueba son la señal de referencia e histéresis.

En la Tabla 5-5 se muestra los resultados obtenidos en la prueba de control ON-OFF para la
planta de velocidad tanto de manera presencial y remota. Se obtuvo el valor de la histérisis
obtenida para ambas maneras, y se calculó el error con base en la referencia establecida en
los controladores diseñados la cual es de 400 mV de histérisis.

Tabla 5-5: Resultados de histérisis control ON-OFF planta de velocidad.


Nivel de la señal escalón [V] Histéresis Presencial [mV] Error-[ %] Histéresis Remota [mV] Error-[ %]
5 390 2.5 450 12.5
7 360 10 480 20

En la Figura 5-7 se muestran las señales respuesta y referencia que se obtuvieron en las
pruebas de forma presencial y remota en la planta de velocidad con el controlador ON-OFF,
en la Tabla 5-6 se muestran los datos de tiempo de levantamiento obtenido para ambos casos
y con voltajes de referencia de 5 V y 7 V.
72 5 Resultados

(a) Respuesta control ON-OFF remota. (b) Respuesta control ON-OFF presencial.

Figura 5-7: Respuesta de la planta de velocidad a el control ON-OFF con referencia de 5


V.

Tabla 5-6: Resultados de tiempo de levantamiento control ON-OFF planta de velocidad.


Nivel de la señal escalón [V] Tiempo de Levantamiento presencial [s] Tiempo de Levantamiento Remoto [s] Error - [ %]
5 0.0248 0.0256 3.22
7 0.0652 0.0612 6.13

5.1.4. Resultados Prueba Controlador Digital


Como ultima prueba de comparación para la planta de velocidad de forma presencial y
remota, se realizó el diseño de un controlador PI (Proporcional-Integral) digital el cual
pudiera ser implementado de forma presencial y remota. Los criterios de diseño para el
controlador digital son los siguiente:

Overshoot (OV ) menor al 5 %.


Error de estado estacionario igual a 0.
Tiempo de establecimiento (ts ) del 80 % = 0,1153s.

Para el diseño del controlador digital bajo los anteriores criterios anunciados se hizo necesa-
rio seguir el procedimiento de diseño encontrado en el Capitulo 8 Digital Controller Design
del libro [21].

El controlador PI digital obtenido tras el proceso de diseño es:

2,11618 − 1,5093z −1
C(z) = (5-1)
1 − z −1
Se implementó el controlador PI digital para voltajes de referencia de 5 V y 7 V.
5.1 Resultados Planta de Velocidad 73

En la Tabla 5-7 se muestran los valores obtenidos en la prueba de control digital en la


planta de velocidad remota y presencial, donde se muestran los parámetros de criterio del
controlador como el overshoot y tiempo de establecimiento.

Tabla 5-7: Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta


presencial controlador digital.
Referencia [V] Estación Remota Planta Presencial Error − ts [ %]
OV [ %] ts [s] OV [ %] ts [s] Remoto Presencial
5 4.94 0.112 7.2 0.1092 2.8 5.2
7 10.28 0.123 12.71 0.1545 10.83 33

En las Figuras 5-8 y 5-9 se muestran las respuestas a entrada escalón de 5 v y 7 V de la


planta de velocidad con controlador PI digital, tanto para la planta presencial y remota.

Figura 5-8: Respuestas de planta de velocidad a escalón de 5 V de forma remota y presencial.

Figura 5-9: Respuestas de planta de velocidad a escalón de 7 V de forma remota y presencial.


74 5 Resultados

5.2. Resultados Planta de Temperatura


5.2.1. Resultados Prueba Respuesta al Escalón
Resultados Presenciales
Debido a que las pruebas realizadas para caracterizar el sistema de forma directa se hicieron
en base a la respuesta al escalón, los resultados de dicha prueba se encuentran en la 1.3.1
Caracterización de la planta de temperatura del Capitulo 1 Funcionamiento de los sistemas
dinámicos e identificación de las Plantas.

Resultados de Forma Remota


Para obtener los parámetros de constante de tiempo y ganancia del sistema, se realizó el
mismo procedimiento hecho en la caracterización de la planta de velocidad, mostrados en el
Capitulo 1.

Los resultados obtenidos son los que se muestran en la Tabla 5-8 y en las Figuras 5-10,
5-11, 5-12.

Tabla 5-8: Resultados obtenidos en


t
 la
t
 Estación Remota.
Nivel de la señal escalón [V] τ τ
k
5.8 0.0022 0.7776
7 0.0033 0.7581
10 0.0039 0.7749
PROMEDIO 0.0031 0.7702

Al promediar los resultados finales, se tiene que la función de transferencia de la planta de


temperatura es:
0,7702 0,00241
G(s) = 319,14s+1
, y su equivalente es G(s) = s+0,0031
.

(a) Respuesta al escalón. (b) Linealización.

Figura 5-10: Linealización de datos obtenidos a respuesta de escalón de 6 V estación remota.


5.2 Resultados Planta de Temperatura 75

(a) Respuesta al escalón. (b) Linealización.

Figura 5-11: Linealización de datos obtenidos a respuesta de escalón de 7 V estación remota.

(a) Respuesta al escalón. (b) Linealización.

Figura 5-12: Linealización de datos obtenidos a respuesta de escalón de 10 V estación


remota.

Comparación

En la Tabla 5-9 y Figura 5-13 se muestran los resultados obtenidos en la prueba de respuesta
a escalón de la planta de temperatura tanto en la estación remota como en la planta directa,
se comparan los parámetros de constante de tiempo y ganancia del sistema y se coloca un
porcentaje de error entre los resultados.

Tabla 5-9: Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta


presencial.
1
Nivel de la señal escalón [V] Estación Remota Planta Presencial Error − τ
[ %] Error − k[ %]
t
1 1
1
τ τ
k τ τ
k
5.8 0.0022 0.7776 0.0031 0.68103448 29.03 14.17
7 0.0033 0.7581 0.0041 0.68181818 19.51 11.18
PROMEDIO 0.0031 0.7702 0.0036 0.68142633 13.88 13.02
76 5 Resultados

Figura 5-13: Comparación respuesta al escalón de 7 V estación remota vs planta presencial.

5.2.2. Resultados Prueba Controlador ON-OFF

Para la prueba de controlador ON-OFF al igual que en las anteriores se obtuvieron resulta-
dos de manera presencial y remota, para posteriormente realizar también su correspondiente
comparación. Los parámetros de medición de la prueba son la señal de referencia e histéresis.

En la Tabla 5-10 se muestran los datos de histéresis obtenidos de la planta de temperatura


de forma presencial y remota, donde se calcula el error respecto a la histéresis configurada y
obtenida. En la Figura 5-14 se muestra la repuesta obtenida de la planta de temperatura de
forma presencial con el controlador ON-OFF a voltajes de 5 V y 7 V de referencia, con una
configuración de histéresis de 200 mV. En la Figura 5-15 se muestra la repuesta obtenida
de la planta de temperatura de forma presencial con el controlador ON-OFF a voltaje 7.5 V
de referencia, con una configuración de histéresis de 500 mV.

Tabla 5-10: Resultados de histérisis control ON-OFF planta de temperatura.


Nivel de la señal escalón [v] Histérisis Configurada [mV] Histéresis Obtenida [mV] Error-[ %]
5 (presencial) 200 200 0
7 (presencial) 200 160 20
7.5 (remoto) 500 540 8

.
5.2 Resultados Planta de Temperatura 77

Figura 5-14: Respuesta de la planta de temperatura presencial con controlador ON-OFF a


escalón de 5 V y 7 V.

Figura 5-15: Respuesta de la planta de temperatura remota con controlador ON-OFF a


escalón de 7.5 V.

5.2.3. Resultados Prueba Controlador Digital


Como ultima prueba de comparación para la planta de temperatura de forma presencial
y remota, se realizó el diseño de un controlador PI (Proporcional-Integral) digital el cual
pudiera ser implementado de forma presencial y remota. Los criterios de diseño para el
controlador digital son los siguiente:

Overshoot (OV ) menor al 5 %.


Error de estado estacionario igual a 0.
78 5 Resultados

Tiempo de establecimiento (ts ) del 80 % = 888,88s.

Para el diseño del controlador digital bajo los anteriores criterios anunciados se hizo necesa-
rio seguir el procedimiento de diseño encontrado en el Capitulo 8 Digital Controller Design
del libro [21].

El controlador PI digital obtenido tras el proceso de diseño es:

2,3032 − 1,8408z −1
C(z) = (5-2)
1 − z −1

Se implementó el controlador PI digital para voltajes de referencia de 6 V y 7 V.

En la Tabla 5-11 se muestran los valores obtenidos en la prueba de control digital en la


planta de temperatura remota y presencial, donde se muestran los parámetros de criterio del
controlador como el overshoot y tiempo de establecimiento.

En las Figuras 5-16 y 5-17 se muestran las respuestas a entrada escalón de 6 v y 7 V de la


planta de temperatura con controlador PI digital, tanto para la planta presencial y remota.

Tabla 5-11: Resultados obtenidos en la Estación Remota VS Resultados obtenidos planta


presencial controlador digital.
Referencia [V] Estación Remota Planta Presencial Error − ts [ %]
OV [ %] ts [s] OV [ %] ts [s] Remoto Presencial
6 1.73 830 2.7 805 6.6 9.4
7 1.6 711 0.5 721 20 18.8

Figura 5-16: Respuestas de planta de temperatura a escalón de 6 V de forma remota y


presencial.
5.3 Análisis de Resultados 79

Figura 5-17: Respuestas de planta de temperatura a escalón de 7 V de forma remota y


presencial.

5.3. Análisis de Resultados


En esta sección se analizan los resultados obtenidos de las plantas de temperatura y velocidad
por cada una de estas.

5.3.1. Análisis de Resultados Planta de Velocidad


Para la prueba de respuesta al escalón en la planta de velocidad se obtuvieron resultados
similares tanto para la prueba realizada de forma remota y de forma presencial.

Para el parámetro de τ1 se obtuvó un promedio de 28,3 para las pruebas de respuesta al


escalón entre -10 V a 10 V de forma remota, y de 29,2249 para las pruebas de forma pre-
sencial, obteniendo ası́ un margen de error aceptable de 3,16 % en cuanto a la similitud en
el parámetro de constante de tiempo para las dos formas de prueba.

Para la parámetro de k o ganancia del sistema, se obtuvó un promedio de 0,626 para las
pruebas de respuesta al escalón entre -10 V a 10 V de forma remota, en cuanto a la forma
presencial se obtuvó un promedio de 0,61949, lo que nos muestra un error de 1,05 % en
cuanto a la similitud de éste parámetro para las dos formas de prueba.

Luego de observar los margenes de error obtenidos en los parámetros de constante de tiempo
y ganancia del sistema, se establece que al realizar las pruebas de forma remota (en la esta-
ción remota) no se tendrán diferencias considerables respecto a las pruebas que se puedan
80 5 Resultados

realizar en las plantas de forma presencial.

Para la prueba de respuesta en frecuencia, al igual que la prueba de respuesta al escalón,


los resultados fueron similares, tanto para los valores de magnitud que se evidencia en la
Figura 5-6 y de fase. La diferencia evidenciada en el diagrama de magnitud puede deberse
a alteraciones de la ganancia del sistema debido a la etapa de acondicionamiento de señal.

Para la prueba de controlador ON-OFF se estableció como parámetros de comparación la


histéresis y el tiempo de levantamiento. Se observó que en la prueba realizada de forma re-
mota la histéresis fué mayor en todos los casos a la configurada previamente, generando ası́
un error considerable entre el 12,5 % y el 20 %; a diferencia el resultado de histéresis obtenido
de forma presencial fué más cercano al valor configurado generando un error entre el 2,5 % y
el 10 %. Para los resultados de tiempo de levantamiento no se encontró gran diferencia entre
las pruebas realizadas de forma presencial y remota, debido a que no establecieron errores
mayores al 10 %. Luego de encontrar diferencias considerables entre la configuración de la
ventana de histéresis y los resultados en las pruebas hechas de forma remota, se puede inferir
que dichas diferencias pueden ser ocasionadas por la lenta respuesta del microcontrolador
frente a velocidad de respuesta del motor, ya que éste responde luego de los intervalos de
muestreo y de la ejecución del programa, a diferencia de un controlador ON-OFF construido
de forma analógica que posee una respuesta casi inmediata.

Para la prueba del controlador digital, en donde se establecieron previamente unos criterios
de diseño para un controlador PI que fijaban parámetros como el tiempo de establecimiento,
error de estado estacionario y sobrepaso máximo. En cuanto a los resultados obtenidos en
tiempo de establecimiento, fueron muy cercanos al criterio establecido de ts = 0,1153s tanto
la estación remota como para la planta presencial, en donde se obtuvieron tiempos entre
los 0,112s y 0,123s para el caso remoto, y entre 0,1092s y 0,1545s para el caso presencial.
Por otro lado, el criterio de diseño de sobrepaso máximo no se cumplió debido a que los
resultados obtenidos tanto en la estación remota como la planta presencial estuvieron ale-
jados al valor establecido, pero cercanos entre sı́; esto puede deberse al efecto producto del
cero introducido por el controlador PI digital. En cuanto al parámetro de error de estado
estacionario no fué necesario establecer una comparación debido a que el controlador PI ga-
rantiza para todos los casos un error igual a cero, y esto se evidencia en la Figuras 5-8 y 5-9.

5.3.2. Análisis de Resultados Planta de Temperatura


En la prueba de respuesta al escalón para la planta de temperatura, se encontraron diferen-
cias en el parámetro de ganancia del sistema en los resultados obtenidos de forma remota y
presencial, en cuanto al tiempo de establecimiento no se encontraron diferencias significati-
5.3 Análisis de Resultados 81

vas, ya que el resultado promedio entre la estación remota y la planta presencial estuvieron
entre 0,0031 y 0,0036. Por otro lado, para las pruebas realizadas de forma remota se obtu-
vieron ganancias entre 0,7776 y 0,7581, y para las de forma presencial entre 0,68103448 y
0,68181818, esta diferencia entre las ganancias puede ser ocasionado a que las pruebas rea-
lizadas de forma remota cubrieron un mayor tiempo de prueba que las realizadas de forma
presencial, ya que el dispositivo de medición para esta prueba presencial no alcanzó a tomar
valores en donde el sistema se establecı́a, como si lo puedo hacer la estación remota.

En la prueba de controlador ON-OFF no se realizó una comparación bajo los mismos valores
de configuración de parámetros como voltaje de referencia y ventana de histéresis. En las
pruebas realizadas de forma presencial se configuró una ventana de histéresis de 200 mV
con señales de referencia de 5 V y 7 V, en donde la histéresis obtenida en la practica fué
de 200 mV y 160 mV respectivamente. En la prueba realizada de forma remota se configuró
una ventana de histéresis de 500 mV con señal de referencia de 7.5 V, donde la histéresis
obtenida fué de 540 mV resultando ası́ un margen de error del 8 %. Debido a que no se
realizaron pruebas del controlador bajo una misma referencia en el caso presencial y remota
no se puede establecer una comparación del parámetro de tiempo de levantamiento.

Para la prueba del controlador digital, para la cual se establecieron previamente unos cri-
terios de diseño para un controlador PI digital que fijaban parámetros como el tiempo de
establecimiento, error de estado estacionario y sobrepaso máximo. En cuanto a los resultados
obtenidos en tiempo de establecimiento, fueron aceptables con respecto al criterio estableci-
do de ts = 888,88s tanto la estación remota como para la planta presencial, ya que fueron
tiempos inferiores a éste. Los tiempos de establecimiento para voltajes de referencia de 6 v
y 7 V fueron 830s y 711s para el caso remoto, y de 805s y 721s para el caso presencial. Por
otro lado, el criterio de diseño de sobrepaso máximo se cumplió debido a que los resultados
obtenidos tanto en la estación remota como la planta presencial estuvieron por debajo del
valor establecido en el criterio de diseño, para la estación remota con voltajes de referencia
de 6 V y 7 V los sobrepasos máximos fueron de 1,73 % y 1,6 % respectivamente, y para el
caso de la planta presencial fueron de 2,7 % y 0,5 %. En cuanto al parámetro de error de
estado estacionario no fué necesario establecer una comparación debido a que el controlador
PI garantiza para todos los casos un error igual a cero, y esto se evidencia en la Figuras 5-16
y 5-17.
Capı́tulo 6
Conclusiones, Recomendaciones y Trabajos
Futuros

Se construyó un prototipo de estación remota para la experimentación a distancia con plan-


tas de velocidad y temperatura, cuyas caracterı́sticas faciliten el acceso de la comunidad
académica a realizar practicas del laboratorio de control, aprovechando las ventajas que
ofrece la red de internet y las comunicaciones. Los resultados finales y el proceso de diseño
y construcción de la estación remota se muestran con el objetivo de plantear una opción
diferente para la ejecución de practicas comúnmente usadas en la enseñanza de control como
lo son, la respuesta a escalón, la respuesta en frecuencia, control ON-OFF y control digital.

De los resultados mostrados y analizados en el Capitulo 5 se dedujó que la estación remota,


tiene como ventaja la disposición de una interface gráfica, que permite sesiones de laborato-
rio de dos a seis horas de recepción de datos ininterrumpidamente, lo cual resulta beneficioso
para la realización de pruebas en la planta de temperatura. Otra de las ventajas de la es-
tación remota frente a una sesión de laboratorio tradicional, se encuentra en que el usuario
solo tiene que preocuparse por la configuración y obtención de datos de cada practica, y no
en la construcción de prototipos de plantas y manejo de sistemas embebidos en el caso del
control digital.

Con la implementación de la estación remota, se reduce la probabilidad de daño o fallo en


la planta, o error en los resultados obtenidos, esto debido a que el usuario no tiene acceso
de forma directa a las plantas y no puede de alguna forma alterar las caracterı́sticas de estas.

Aunque el proyecto de la estación remota es cien por ciento funcional, éste puede ser mejo-
rado en su arquitectura eliminando el computador que tiene como función crear un puente
entre el microcontrolador y la red de internet, de manera en que el microcontrolador se co-
necte de forma directa a internet, esto es posible si el proyecto es implementado en lugares
donde el acceso a red de internet sea forma directa y no a través de servidores proxy.

La estación remota desarrollada abre la posibilidad de realizar trabajos futuros en donde se


CONCLUSIONES, RECOMENDACIONES Y TRABAJOS FUTUROS 83

amplié el numero y tipos de sistemas dinámicos que se puedan manejar de forma remota,
tales como sistemas de péndulo invertido, lumı́nicos, hidráulicos, etc.
Anexos

Listing 6.1: Codigo en C Microcontrolador Planta de Temperatura


#include ”mbed . h”

T i c k e r tiempo ;
Ticker muestreo ;
Ticker onoff ;
Ticker c d i g i t a l ;
S e r i a l pc (USBTX, USBRX ) ;
AnalogIn adc ( A0 ) ;
AnalogOut dac (DAC0 OUT ) ;
D i g i t a l O u t v e n t i l a d o r ( PTB20 ) ;
const f l o a t j = 1 2 8 ;

f l o a t s e n o [ ( i n t ) j ]=
{0.5 ,0.525 ,0.549 ,0.574 ,0.598 ,0.622 ,0.646 ,0.67 ,0.693 ,0.715 ,0.737 ,0.759 ,0.78 ,
0.8 ,0.819 ,0.838 ,0.856 ,0.873 ,0.889 ,0.904 ,0.918 ,0.931 ,0.943 ,0.954 ,0.964 ,
0.972 ,0.98 ,0.986 ,0.991 ,0.995 ,0.998 ,1 ,1 ,0.999 ,0.997 ,0.994 ,0.989 ,0.983 ,0.976 ,
0.968 ,0.959 ,0.949 ,0.937 ,0.925 ,0.911 ,0.896 ,0.881 ,0.864 ,0.847 ,0.829 ,0.81 ,
0.79 ,0.769 ,0.748 ,0.726 ,0.704 ,0.681 ,0.658 ,0.634 ,0.61 ,0.586 ,0.562 ,0.537 ,
0.512 ,0.488 ,0.463 ,0.438 ,0.414 ,0.39 ,0.366 ,0.342 ,0.319 ,0.296 ,0.274 ,0.252 ,
0.231 ,0.21 ,0.19 ,0.171 ,0.153 ,0.136 ,0.119 ,0.104 ,0.089 ,0.075 ,0.063 ,0.051 ,
0.041 ,0.032 ,0.024 ,0.017 ,0.011 ,0.006 ,0.003 ,0.001 ,0 ,0 ,0.002 ,0.005 ,0.009 ,
0.014 ,0.02 ,0.028 ,0.036 ,0.046 ,0.057 ,0.069 ,0.082 ,0.096 ,0.111 ,0.127 ,0.144 ,
0.162 ,0.181 ,0.2 ,0.22 ,0.241 ,0.263 ,0.285 ,0.307 ,0.33 ,0.354 ,0.378 ,0.402 ,0.426 ,
0.451 ,0.475 ,0.5};

float D[ 4 ] = { 0 . 0 ,0.0 ,0.0 ,0.0};


float N[ 4 ] = { 0 . 0 ,0.0 ,0.0 ,0.0};
float E[4]={0.0 ,0.0 ,0.0 ,0.0};
float C[ 4 ] = { 0 . 0 ,0.0 ,0.0 ,0.0};
float tiempoT ;

f l o a t e n t r a d a , s a l i d a s e n o , d a t o d a c , f r e c u e n c i a , tempor ,
amplitudpp , o f f s e t , h i s t e r e s i s , r e f e r e n c i a , V e s c a l o n ;
i n t v a r o n o f f , c o n t a d o r , Tmuestreo , c o n t a d o r d e s c e , i d e n t i f i c a d o r ;
i n t i =0;
char v a r i n i c i a l ;

void enviarDAC ( f l o a t salidaDAC ) {


d a t o d a c =(salidaDAC / 1 2 . 3 2 f ) ;
i f ( d a t o d a c >1){ dac =1;}
e l s e { i f ( d a t o d a c <=0){dac =0;}
e l s e { dac=d a t o d a c ; } } }

void r e c i b i r A D C ( ) { e n t r a d a = ( adc . r e a d ( ) ∗ 1 2 . 1 7 2 f ) ; }

void m u e s t r e o e s c a l o n ( ) {
tiempoT=tiempoT +5;
i d e n t i f i c a d o r=i d e n t i f i c a d o r +1;
recibirADC ( ) ;
pc . p r i n t f ( ” %f , %f , %f , %d” , tiempoT , Vescalon , entrada , i d e n t i f i c a d o r ) ; }

void temseno ( ) { i=i +1;


i f ( i ==128){
i =0;
}
tiempoT=tiempoT+tempor ;
i d e n t i f i c a d o r=i d e n t i f i c a d o r +1;
s a l i d a s e n o = ( s e n o [ i ] ∗ a m p l i t u d p p ) −( a m p l i t u d p p / 2 ) ;
s a l i d a s e n o=s a l i d a s e n o+ o f f s e t ;
enviarDAC ( s a l i d a s e n o ) ;
recibirADC ( ) ;
pc . p r i n t f ( ” %f , %f , %f , %d” , tiempoT , s a l i d a s e n o , e n t r a d a , i d e n t i f i c a d o r ) ; }
ANEXOS 85

void c o n o n o f f ( ) {
recibirADC ( ) ;
i f ( r e f e r e n c i a >0){
i f ( v a r o n o f f ==1){
i f ( e n t r a d a <( r e f e r e n c i a +( h i s t e r e s i s / 2 ) ) ) {
v a r o n o f f =1;
enviarDAC ( 1 2 ) ; }
else {
v a r o n o f f =0;
enviarDAC ( 0 ) ;
}}
e l s e { i f ( e n t r a d a >( r e f e r e n c i a −( h i s t e r e s i s / 2 ) ) ) {
v a r o n o f f =0;
enviarDAC ( 0 ) ;
}
e l s e { v a r o n o f f =1;
enviarDAC ( 1 2 ) ;
}}}
else {
enviarDAC ( 0 ) ;
}
tiempoT=tiempoT +2.0 f ;
i d e n t i f i c a d o r=i d e n t i f i c a d o r +1;
pc . p r i n t f ( ” %f , %f , %f , %d” , tiempoT , r e f e r e n c i a , e n t r a d a , i d e n t i f i c a d o r ) ;
}
void c o n d i g i t a l ( ) {
c o n t a d o r d e s c e=c o n t a d o r d e s c e −1;
recibirADC ( ) ;
i f ( c o n t a d o r d e s c e ==0){
c o n t a d o r d e s c e=Tmuestreo ; }
i f ( c o n t a d o r d e s c e==Tmuestreo ) {
E[ 0 ] = r e f e r e n c i a −e n t r a d a ;
C [ 0 ] = ( ( ( E [ 0 ] ∗ N[ 0 ] ) + ( E [ 1 ] ∗ N[ 1 ] ) + ( E [ 2 ] ∗ N[ 2 ] ) +
(E [ 3 ] ∗ N[ 3 ] ) − (C [ 1 ] ∗ D[ 1 ] ) − (C [ 2 ] ∗ D[ 2 ] ) − (C [ 3 ] ∗ D [ 3 ] ) ) / D [ 0 ] ) ;
enviarDAC (C [ 0 ] ) ;
E[ 3 ] =E [ 2 ] ;
E[ 2 ] =E [ 1 ] ;
E[ 1 ] =E [ 0 ] ;
C[ 3 ] =C [ 2 ] ;
C[ 2 ] =C [ 1 ] ;
C[ 1 ] =C [ 0 ] ;
}
tiempoT=tiempoT +5.0 f ;
i d e n t i f i c a d o r=i d e n t i f i c a d o r +1;
pc . p r i n t f ( ” %f , %f , %f , %d” , tiempoT , r e f e r e n c i a , e n t r a d a , i d e n t i f i c a d o r ) ; }

void r e s p u e s t a e s c a l o n ( ) {
pc . s c a n f ( ” %f \0 ” , &V e s c a l o n ) ;
enviarDAC ( V e s c a l o n ) ;
m u e s t r e o . a t t a c h (& m u e s t r e o e s c a l o n , 5.0 f );}

void r e s p u e s t a f r e c u e n c i a ( ) {
pc . s c a n f ( ” %f , %f , % f \0 ” , &amplitudpp ,& o f f s e t ,& f r e c u e n c i a ) ;
tempor =1/( f r e c u e n c i a ∗ 1 2 8 . 0 f ) ;
t i e m p o . a t t a c h (& temseno , tempor ) ; }

void c o n t r o l a d o r o n o f f ( ) {
pc . s c a n f ( ” %f , % f \0 ” , &r e f e r e n c i a ,& h i s t e r e s i s ) ;
o n o f f . a t t a c h (& c o n o n o f f , 2 . 0 f ) ; }

void c o n t r o l d i g i t a l (){
E[ 3 ] = 0 ;
E[ 2 ] = 0 ;
E[ 1 ] = 0 ;
C[ 3 ] = 0 ;
C[ 2 ] = 0 ;
C[ 1 ] = 0 ;
pc . s c a n f ( ” %f , %d, %f , %f , %f , %f , %f , %f , %f , % f \0 ” ,& r e f e r e n c i a ,& Tmuestreo ,
&N[ 0 ] , &N[ 1 ] , &N[ 2 ] , &N[ 3 ] , &D[ 0 ] , &D[ 1 ] , &D[ 2 ] , &D [ 3 ] ) ;
Tmuestreo=Tmuestreo / 5 ;
c o n t a d o r d e s c e=Tmuestreo +1;
c d i g i t a l . a t t a c h (& c o n d i g i t a l , 5 . 0 0 0 f ) ; }

void v e n t i l a r ( ) {
v e n t i l a d o r =1;
V e s c a l o n =0;
r e f e r e n c i a =0;
enviarDAC ( 1 1 ) ; }

void r e i n i c i a r t o d o ( ) {
enviarDAC ( 0 ) ;
86 ANEXOS

tiempoT =0;
v a r o n o f f =1;
s a l i d a s e n o =0.0 f ;
i d e n t i f i c a d o r =0;
v e n t i l a d o r =0;
muestreo . detach ( ) ;
c d i g i t a l . detach ( ) ;
o n o f f . detach ( ) ;
tiempo . detach ( ) ; }

i n t main ( ) {
reiniciartodo ();
while ( 1 ) {
switch ( pc . g e t c ( ) ) {
case ( ’ a ’ ) :
reiniciartodo ();
respuestaescalon ();
break ;
case ( ’ b ’ ) :
reiniciartodo ();
respuestafrecuencia ();
break ;
case ( ’ c ’ ) :
reiniciartodo ();
controladoronoff ();
break ;
case ( ’ d ’ ) :
reiniciartodo ();
controldigital ();
break ;
case ( ’ e ’ ) :
ventilar ();
break ;
case ( ’ f ’ ) :
reiniciartodo ();
break ;
}}}

Listing 6.2: Codigo en C Microcontrolador Planta de Velocidad


#include ”mbed . h”
T i c k e r tiempo ;
Ticker muestreo ;
Ticker onoff ;
Ticker c d i g i t a l ;
S e r i a l pc (USBTX, USBRX ) ;
AnalogIn adc ( A0 ) ;
AnalogOut dac (DAC0 OUT ) ;
const f l o a t j = 1 2 8 ;
f l o a t s e n o [ ( i n t ) j ]=
{0.5 ,0.525 ,0.549 ,0.574 ,0.598 ,0.622 ,0.646 ,0.67 ,0.693 ,0.715 ,0.737 ,0.759 ,0.78 ,
0.8 ,0.819 ,0.838 ,0.856 ,0.873 ,0.889 ,0.904 ,0.918 ,0.931 ,0.943 ,0.954 ,0.964 ,
0.972 ,0.98 ,0.986 ,0.991 ,0.995 ,0.998 ,1 ,1 ,0.999 ,0.997 ,0.994 ,0.989 ,0.983 ,0.976 ,
0.968 ,0.959 ,0.949 ,0.937 ,0.925 ,0.911 ,0.896 ,0.881 ,0.864 ,0.847 ,0.829 ,0.81 ,
0.79 ,0.769 ,0.748 ,0.726 ,0.704 ,0.681 ,0.658 ,0.634 ,0.61 ,0.586 ,0.562 ,0.537 ,
0.512 ,0.488 ,0.463 ,0.438 ,0.414 ,0.39 ,0.366 ,0.342 ,0.319 ,0.296 ,0.274 ,0.252 ,
0.231 ,0.21 ,0.19 ,0.171 ,0.153 ,0.136 ,0.119 ,0.104 ,0.089 ,0.075 ,0.063 ,0.051 ,
0.041 ,0.032 ,0.024 ,0.017 ,0.011 ,0.006 ,0.003 ,0.001 ,0 ,0 ,0.002 ,0.005 ,0.009 ,
0.014 ,0.02 ,0.028 ,0.036 ,0.046 ,0.057 ,0.069 ,0.082 ,0.096 ,0.111 ,0.127 ,0.144 ,
0.162 ,0.181 ,0.2 ,0.22 ,0.241 ,0.263 ,0.285 ,0.307 ,0.33 ,0.354 ,0.378 ,0.402 ,0.426 ,
0.451 ,0.475 ,0.5};

f l o a t Vi [ 3 0 0 ] ;
f l o a t Vo [ 3 0 0 ] ;
f l o a t tiempoV [ 3 0 0 ] ;
f l o a t tiempoSeno [ 3 0 0 ] ;
f l o a t D[ 4 ] = { 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 } ;
f l o a t N[ 4 ] = { 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 } ;
float E[4]={0.0 ,0.0 ,0.0 ,0.0};
float C[ 4 ] = { 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 } ;
f l o a t e n t r a d a , s a l i d a s e n o , d a t o d a c , f r e c u e n c i a , tempor , amplitudpp , offset ,
h i s t e r e s i s , r e f e r e n c i a , V e s c a l o n , Tmuestreo ;
int varonoff , contadordesce , contador , contadorpeque , numeroentero ;
i n t i =0;
i n t k =0;

void enviarDAC ( f l o a t salidaDAC ) {


d a t o d a c =(salidaDAC / 2 4 . 0 3 0 1 f ) + 0 . 4 8 9 7 f ;
i f ( d a t o d a c >1){ dac =1;}
e l s e { i f ( d a t o d a c <=0){dac =0;}
e l s e { dac=d a t o d a c ; } } }
ANEXOS 87

void r e c i b i r A D C ( ) { e n t r a d a =( adc . r e a d ( ) ∗ 2 1 . 8 1 5 2 5 f ) −11.0 f ; }

void m u e s t r e o e s c a l o n ( ) {
recibirADC ( ) ;
i f ( c o n t a d o r <300){
tiempoV [ c o n t a d o r ]= c o n t a d o r ∗ 0 . 0 0 1 2 f ;
Vi [ c o n t a d o r ]= V e s c a l o n ;
Vo [ c o n t a d o r ]= e n t r a d a ;
c o n t a d o r=c o n t a d o r +1;}
else { muestreo . detach ( ) ;
c o n t a d o r =0;
enviarDAC ( 0 ) ;
f o r ( i =0; i <300; i ++){
pc . p r i n t f ( ” %f , %f , %f , %d\n” , tiempoV [ i ] , Vi [ i ] , Vo [ i ] , i ) ;
wait ( 0 . 1 ) ; }
}}

void temseno ( ) {
k=k +1;
i f ( k==128){k =0;}
s a l i d a s e n o =(( s e n o [ k ] ∗ a m p l i t u d p p ) −( a m p l i t u d p p /2))+ o f f s e t ;
enviarDAC ( s a l i d a s e n o ) ;
recibirADC ( ) ;
i f ( c o n t a d o r <300)
{ t i e m p o S e n o [ c o n t a d o r ]= c o n t a d o r ∗ tempor ;
Vi [ c o n t a d o r ]= s a l i d a s e n o ;
Vo [ c o n t a d o r ]= e n t r a d a ;
c o n t a d o r=c o n t a d o r +1;}
else {
tiempo . detach ( ) ;
c o n t a d o r =0;
enviarDAC ( 0 ) ;
f o r ( i =0; i <300; i ++){
pc . p r i n t f ( ” %f , %f , %f , %d\n” , t i e m p o S e n o [ i ] , Vi [ i ] , Vo [ i ] , i ) ;
wait ( 0 . 1 ) ; } } }

void c o n o n o f f ( ) {
recibirADC ( ) ;
i f ( r e f e r e n c i a >0){
i f ( v a r o n o f f ==1){
i f ( e n t r a d a <( r e f e r e n c i a +( h i s t e r e s i s / 2 ) ) ) {
v a r o n o f f =1;
enviarDAC ( 1 2 ) ; }
e l s e { v a r o n o f f =0;
enviarDAC ( 0 ) ; } }
e l s e { i f ( e n t r a d a >( r e f e r e n c i a −( h i s t e r e s i s / 3 ) ) ) {
v a r o n o f f =0;
enviarDAC ( 0 ) ; }
e l s e { v a r o n o f f =1;
enviarDAC ( 1 2 ) ; } } }
e l s e { i f ( v a r o n o f f ==1){
i f ( e n t r a d a >( r e f e r e n c i a −( h i s t e r e s i s / 2 ) ) ) {
v a r o n o f f =1;
enviarDAC ( − 1 2 ) ; }
e l s e { v a r o n o f f =0;
enviarDAC ( 0 ) ; } }
e l s e { i f ( e n t r a d a <( r e f e r e n c i a +( h i s t e r e s i s / 3 ) ) ) {
v a r o n o f f =0;
enviarDAC ( 0 ) ; }
e l s e { v a r o n o f f =1;
enviarDAC ( − 1 2 ) ; } } }
c o n t a d o r p e q u e=c o n t a d o r p e q u e +1;
i f ( c o n t a d o r p e q u e ==4){
c o n t a d o r p e q u e =0;
i f ( c o n t a d o r <300){
tiempoV [ c o n t a d o r ]= c o n t a d o r ∗ 0 . 0 0 1 2 f ;
Vi [ c o n t a d o r ]= r e f e r e n c i a ;
Vo [ c o n t a d o r ]= e n t r a d a ;
c o n t a d o r=c o n t a d o r +1;}
else {
o n o f f . detach ( ) ;
c o n t a d o r =0;
enviarDAC ( 0 ) ;
f o r ( i =0; i <300; i ++){
pc . p r i n t f ( ” %f , %f , %f , %d\n” , tiempoV [ i ] , Vi [ i ] , Vo [ i ] , i );
wait ( 0 . 1 ) ; } } } }

void c o n d i g i t a l ( ) {
c o n t a d o r d e s c e=c o n t a d o r d e s c e −1;
recibirADC ( ) ;
88 ANEXOS

i f ( c o n t a d o r d e s c e ==0){
c o n t a d o r d e s c e=n u m e r o e n t e r o ; }
i f ( c o n t a d o r <300){
tiempoV [ c o n t a d o r ]= c o n t a d o r ∗ 0 . 0 0 1 f ;
Vi [ c o n t a d o r ]= r e f e r e n c i a ;
Vo [ c o n t a d o r ]= e n t r a d a ;
c o n t a d o r=c o n t a d o r +1;
i f ( c o n t a d o r d e s c e==n u m e r o e n t e r o ) {
E[ 0 ] = r e f e r e n c i a −e n t r a d a ;
C [ 0 ] = ( ( ( E [ 0 ] ∗ N[ 0 ] ) + ( E [ 1 ] ∗ N[ 1 ] ) + ( E [ 2 ] ∗ N[ 2 ] ) + ( E [ 3 ] ∗ N[ 3 ] ) −
(C [ 1 ] ∗ D[ 1 ] ) − (C [ 2 ] ∗ D[ 2 ] ) − (C [ 3 ] ∗ D [ 3 ] ) ) / D [ 0 ] ) ;
enviarDAC (C [ 0 ] ) ;
E[ 3 ] =E [ 2 ] ;
E[ 2 ] =E [ 1 ] ;
E[ 1 ] =E [ 0 ] ;
C[ 3 ] =C [ 2 ] ;
C[ 2 ] =C [ 1 ] ;
C[ 1 ] =C [ 0 ] ;
}}
else {
c d i g i t a l . detach ( ) ;
c o n t a d o r =0;
enviarDAC ( 0 ) ;
E[ 3 ] = 0 ;
E[ 2 ] = 0 ;
E[ 1 ] = 0 ;
C[ 3 ] = 0 ;
C[ 2 ] = 0 ;
C[ 1 ] = 0 ;
f o r ( i =0; i <300; i ++){
pc . p r i n t f ( ” %f , %f , %f , %d\n” , tiempoV [ i ] , Vi [ i ] , Vo [ i ] , i ) ; w a i t ( 0 . 1 ) ; }
}}

void r e s p u e s t a e s c a l o n ( ) {
pc . s c a n f ( ” %f \0 ” , &V e s c a l o n ) ;
enviarDAC ( V e s c a l o n ) ;
m u e s t r e o . a t t a c h (& m u e s t r e o e s c a l o n , 0.0012 f );}

void r e s p u e s t a f r e c u e n c i a ( ) {
pc . s c a n f ( ” %f , %f , % f \0 ” , &amplitudpp ,& o f f s e t ,& f r e c u e n c i a ) ;
tempor =1/( f r e c u e n c i a ∗ 1 2 8 . 0 f ) ;
t i e m p o . a t t a c h (& temseno , tempor ) ; }

void c o n t r o l a d o r o n o f f ( ) {
pc . s c a n f ( ” %f , % f \0 ” , &r e f e r e n c i a ,& h i s t e r e s i s ) ;
o n o f f . a t t a c h (& c o n o n o f f , 0 . 0 0 0 3 f ) ;
}

void c o n t r o l d i g i t a l (){
pc . s c a n f ( ” %f , %f , %f , %f , %f , %f , %f , %f , %f , % f \0 ” ,& r e f e r e n c i a ,
&Tmuestreo ,&N[ 0 ] , &N[ 1 ] , &N[ 2 ] , &N[ 3 ] , &D[ 0 ] , &D[ 1 ] , &D[ 2 ] , &D [ 3 ] ) ;
n u m e r o e n t e r o=Tmuestreo / 0 . 0 0 1 f ;
c o n t a d o r d e s c e=n u m e r o e n t e r o +1;
c d i g i t a l . a t t a c h (& c o n d i g i t a l , 0 . 0 0 1 f ) ;
}

void r e i n i c i a r t o d o ( ) {
muestreo . detach ( ) ;
tiempo . detach ( ) ;
c d i g i t a l . detach ( ) ;
o n o f f . detach ( ) ;
enviarDAC ( 0 ) ;
c o n t a d o r =0;
c o n t a d o r p e q u e =0;
s a l i d a s e n o =0.0 f ;
v a r o n o f f =1;
k =0;
}

i n t main ( ) {
reiniciartodo ();
while ( 1 ) {
switch ( pc . g e t c ( ) ) {
case ( ’ a ’ ) :
reiniciartodo ();
respuestaescalon ();
break ;
case ( ’ b ’ ) :
reiniciartodo ();
respuestafrecuencia ();
break ;
case ( ’ c ’ ) :
ANEXOS 89

reiniciartodo ();
controladoronoff ();
break ;
case ( ’ d ’ ) :
reiniciartodo ();
controldigital ();
break ;
}}}

Listing 6.3: Codigo python Servidor local Planta de Velocidad


import s e r i a l
import t i m e
import s y s
from pubnub import Pubnub

s e r = s e r i a l . S e r i a l ( ’ com3 ’ , 9 6 0 0 , t i m e o u t =1)

p u b l i s h k e y 2 = l e n ( s y s . a r g v ) > 1 and s y s . a r g v [ 1 ] or ’ pub−c−e f d 9 b 4 0 2 −e 6 b f −44d3−a0aa −1 b 5 b f f 3 3 8 1 3 0 ’


s u b s c r i b e k e y 2 = l e n ( s y s . a r g v ) > 2 and s y s . a r g v [ 2 ] or ’ sub−c−c 5 7 a c 8 d e −617 f −11e5−a48b −0619 f 8 9 4 5 a 4 f ’

s u b s c r i b e k e y 1 = l e n ( s y s . a r g v ) > 2 and s y s . a r g v [ 2 ] or ’ sub−c−a434bc7a −617 f −11e5 −85c0 −0619 f 8 9 4 5 a 4 f ’


p u b l i s h k e y 1 = l e n ( s y s . a r g v ) > 1 and s y s . a r g v [ 1 ] or ’ pub−c−f b 9 a 4 9 9 8 −5b3c −4f e 1 −b988−d e 5 8 9 8 8 d 6 8 3 9 ’

pubnub = Pubnub ( p u b l i s h k e y=p u b l i s h k e y 1 , s u b s c r i b e k e y=s u b s c r i b e k e y 1 )


channel = ’ velocidad1 ’
pubnub2 = Pubnub ( p u b l i s h k e y=p u b l i s h k e y 2 , s u b s c r i b e k e y=s u b s c r i b e k e y 2 )
c h a n n e l 2= ’ v e l o c i d a d 2 ’

def c a l l b a c k ( e n t r a n t e , c h a n n e l ) :
print ( e n t r a n t e )
e n t r a d a=s t r ( e n t r a n t e )
i f ( e n t r a d a==” a ” ) or ( e n t r a d a==”b” ) or ( e n t r a d a==” c ” ) or ( e n t r a d a==”d” ) or ( e n t r a d a==” e ” ) :
s e r . w r i t e l i n e s ( entrada )
else :
s e r . w r i t e l i n e s ( e n t r a d a+” \0 ” )

def error ( entrante ) :


p r i n t ( ”ERROR : ” + s t r ( m e s s a g e ) )

def c o n n e c t ( e n t r a n t e ) :
p r i n t ( ”CONNECTED” )

def r e c o n n e c t ( e n t r a n t e ) :
p r i n t ( ”RECONNECTED” )

def d i s c o n n e c t ( e n t r a n t e ) :
p r i n t ( ”DISCONNECTED” )

pubnub . s u b s c r i b e ( c h a n n e l s=c h a n n e l , c a l l b a c k=c a l l b a c k , e r r o r=c a l l b a c k ,


c o n n e c t=c o n n e c t , r e c o n n e c t=r e c o n n e c t , d i s c o n n e c t=d i s c o n n e c t )

while 1 :
m e s s a g e =s e r . r e a d l i n e ( )
i f m e s s a g e != ’ ’ :
# p r i n t ( message )
p r i n t pubnub2 . p u b l i s h ( c h a n n e l 2 , message )

Listing 6.4: Codigo python Servidor local Planta de Temperatura


import s e r i a l
import t i m e
import s y s
from pubnub import Pubnub
s e r = s e r i a l . S e r i a l ( ’ com3 ’ , 9 6 0 0 , t i m e o u t =1)

p u b l i s h k e y 2 = l e n ( s y s . a r g v ) > 1 and s y s . a r g v [ 1 ] or ’ pub−c−1dcb959e−c245 −4f a 4 −89ba−d 6 6 6 f f d b 2 5 5 b ’


s u b s c r i b e k e y 2 = l e n ( s y s . a r g v ) > 2 and s y s . a r g v [ 2 ] or ’ sub−c −78 a 4 f d 7 4 −60 b f −11e5 −8923−02 e e 2 d d a b 7 f e ’

s u b s c r i b e k e y 1 = l e n ( s y s . a r g v ) > 2 and s y s . a r g v [ 2 ] or ’ sub−c −551 f b 4 6 2 −5763−11 e5 −854b−02 e e 2 d d a b 7 f e ’


p u b l i s h k e y 1 = l e n ( s y s . a r g v ) > 1 and s y s . a r g v [ 1 ] or ’ pub−c−3a 9 0 b 5 8 f −ec7b −41ee −8838−1788 b98daa33 ’

pubnub = Pubnub ( p u b l i s h k e y=p u b l i s h k e y 1 , s u b s c r i b e k e y=s u b s c r i b e k e y 1 )


channel = ’ temperatura1 ’
pubnub2 = Pubnub ( p u b l i s h k e y=p u b l i s h k e y 2 , s u b s c r i b e k e y=s u b s c r i b e k e y 2 )
c h a n n e l 2= ’ t e m p e r a t u r a 2 ’

def c a l l b a c k ( e n t r a n t e , c h a n n e l ) :
print ( e n t r a n t e )
90 ANEXOS

e n t r a d a=s t r ( e n t r a n t e )
i f ( e n t r a d a==” a ” ) or ( e n t r a d a==”b” ) or ( e n t r a d a==” c ” ) or ( e n t r a d a==”d” ) or
( e n t r a d a==” e ” ) or ( e n t r a d a==” f ” ) :
s e r . w r i t e l i n e s ( entrada )
else :
s e r . w r i t e l i n e s ( e n t r a d a+” \0 ” )

def error ( entrante ) :


p r i n t ( ”ERROR : ” + s t r ( m e s s a g e ) )

def c o n n e c t ( e n t r a n t e ) :
p r i n t ( ”CONNECTED” )

def r e c o n n e c t ( e n t r a n t e ) :
p r i n t ( ”RECONNECTED” )

def d i s c o n n e c t ( e n t r a n t e ) :
p r i n t ( ”DISCONNECTED” )

pubnub . s u b s c r i b e ( c h a n n e l s=c h a n n e l , c a l l b a c k=c a l l b a c k , e r r o r=c a l l b a c k ,


c o n n e c t=c o n n e c t , r e c o n n e c t=r e c o n n e c t , d i s c o n n e c t=d i s c o n n e c t )

while 1 :
m e s s a g e =s e r . r e a d l i n e ( )
i f m e s s a g e != ’ ’ :
# p r i n t ( message )
p r i n t pubnub2 . p u b l i s h ( c h a n n e l 2 , message )

Listing 6.5: Código pagina principal Ïndex.php”


<!DOCTYPE html>
<head>
<meta c h a r s e t=”UTF−8” />
<!−− <meta h t t p−e q u i v=”X−UA−C o m p a t i b l e ” c o n t e n t=” IE=edge , chrome=1”>
−−>
< t i t l e >E s t a c i o a c u t e ; n Remota</ t i t l e >
<meta name=” v i e w p o r t ” c o n t e n t=” w i d t h=d e v i c e −width , i n i t i a l −s c a l e =1.0 ”>
<meta name=” d e s c r i p t i o n ” c o n t e n t=” L o g i n and R e g i s t r a t i o n Form w i t h HTML5
and CSS3” />
<meta name=” k ey w o rd s ” c o n t e n t=” html5 , c s s 3 , form , s w i t c h , a n i m a t i o n ,
: t a r g e t , pseudo−c l a s s ” />
<meta name=” a u t h o r ” c o n t e n t=” Codrops ” />
<l i n k r e l =” s h o r t c u t i c o n ” h r e f=” . . / f a v i c o n . i c o ”>
<l i n k r e l =” s h o r t c u t i c o n ” h r e f=” imgs / s e s i o n . png ” t y p e=” image / png ”>
<l i n k r e l =” s t y l e s h e e t ” t y p e=” t e x t / c s s ” h r e f=” c s s /demo . c s s ” />
<l i n k r e l =” s t y l e s h e e t ” t y p e=” t e x t / c s s ” h r e f=” c s s / s t y l e . c s s ” />
<l i n k r e l =” s t y l e s h e e t ” t y p e=” t e x t / c s s ” h r e f=” c s s / animate−custom . c s s ” />
<l i n k r e l =” s t y l e s h e e t ” t y p e=” t e x t / c s s ” h r e f=” c s s /demo . c s s ” />
<SCRIPT LANGUAGE=” j a v a s c r i p t ” TYPE=” t e x t / j a v a s c r i p t ”
SRC=” r e g i s t r o . php ”></SCRIPT>
</head>
<body>
<d i v c l a s s=” c o n t a i n e r ”>
<!−− Codrops t o p b a r −−>
<d i v c l a s s=” c o d r o p s −t o p ”>
<span c l a s s=” r i g h t ”>
</span>
<d i v c l a s s=” c l r ”></d i v>
</d i v ><!−−/ Codrops t o p b a r −−>
<header>
<h1>INICIO DE SESION Y REGISTRO <span> ESTACION
REMOTA</span></h1>
</header>
<s e c t i o n >
<d i v i d=” c o n t a i n e r d e m o ” >
<a c l a s s=” h i d d e n a n c h o r ” i d=” t o r e g i s t e r ”></a>
<a c l a s s=” h i d d e n a n c h o r ” i d=” t o l o g i n ”></a>
<d i v i d=” wrapper ”>
<d i v i d=” l o g i n ” c l a s s=” a n i m a t e form ”>
<form method=” p o s t ” a c t i o n=” s e s i o n . php ” >
<h1>INICIO DE SESION</h1>
<p>
< l a b e l f o r=” username ” c l a s s=”uname” > Codigo </ l a b e l >
<i n p u t i d=” username ” name=” username ” r e q u i r e d t y p e=” t e x t ”
p l a c e h o l d e r=” 2 0 0 9 2 0 0 5 0 2 2 ”/>
</p>
<p>
< l a b e l f o r=” p a s s w o r d ” c l a s s=” youpasswd ”> C l a v e </ l a b e l >
<i n p u t i d=” p a s s w o r d ” name=” p a s s w o r d ” r e q u i r e d t y p e=” p a s s w o r d ”
p l a c e h o l d e r=” e g . X8df ! 9 0EO” />
</p>
ANEXOS 91

<p>
< l a b e l >P l a n t a </ l a b e l >
<br>
< s e l e c t name=” s e s i o n P l a n t a ” s t y l e=” w i d t h : 4 4 0 px ”>
<o p t i o n v a l u e=” Temperatura ”>Temperatura </o p t i o n >
<o p t i o n v a l u e=” V e l o c i d a d ”>V e l o c i d a d </o p t i o n >
</ s e l e c t >
</p>
<p c l a s s=” l o g i n b u t t o n ”>
<i n p u t t y p e=” s u b m i t ” v a l u e=” I n i c i o ” />
</p>
<p c l a s s=” c h a n g e l i n k ”>
R e g i s t r a tu a d i c i o n a l !
<a h r e f=”#t o r e g i s t e r ” c l a s s=” t o r e g i s t e r ”>R e s g i s t r a r s e </a>
</p>
</form>
</d i v>

<d i v i d=” r e g i s t e r ” c l a s s=” a n i m a t e form ”>


<form method=” p o s t ” a c t i o n=” r e g i s t r o . php ” name=” r e s g i s t r o P ”>
<h1>REGISTRO DE SESION LABORATORIO </h1>
<p>
< l a b e l f o r=” e m a i l s i g n u p ” c l a s s=” y o u m a i l ” >Codigo </ l a b e l >
<i n p u t i d=” e m a i l s i g n u p ” name=” u s u a r i o C o d i g o ” r e q u i r e d t y p e=” t e x t ”
p l a c e h o l d e r=” 2 0 0 9 2 0 0 5 0 2 2 ”/>
</p>
<p>
< l a b e l f o r=” p a s s w o r d s i g n u p ” c l a s s=” youpasswd ” >C l a v e </ l a b e l >
<i n p u t i d=” p a s s w o r d s i g n u p ” name=” u s u a r i o C o n t r a s e n a ” r e q u i r e d
t y p e=” p a s s w o r d ” p l a c e h o l d e r=” e g . X8df ! 9 0EO” m i n l e n g t h=5 max len gth=10/>
</p>
<p>
< l a b e l f o r=” p a s s w o r d s i g n u p c o n f i r m ” c l a s s=” youpasswd ” >C o n f i r m a r C l a v e
</ l a b e l >
<i n p u t i d=” p a s s w o r d s i g n u p c o n f i r m ” name=” u s u a r i o C o n f C o n t r a s e n a ” r e q u i r e d
t y p e=” p a s s w o r d ” p l a c e h o l d e r=” e g . X8df ! 9 0EO” m i n l e n g t h=5 max len gth=10/>
</p>
<p>
< l a b e l f o r=” e m a i l s i g n u p ” c l a s s=” y o u m a i l ” > Fecha </ l a b e l >
<i n p u t i d=” e m a i l s i g n u p ” name=” u s u a r i o F e c h a ” r e q u i r e d t y p e=” d a t e ”
p l a c e h o l d e r=” 2 0 1 5 / 0 9 / 3 0 ” / onkeydown=” r e t u r n f a l s e ; ”>
</p>
<p>
< l a b e l f o r=” e m a i l s i g n u p ” c l a s s=” y o u m a i l ” > Hora </ l a b e l >
<i n p u t i d=” h o r a v e l ” name=” u s u a r i o H o r a ” r e q u i r e d t y p e=” t i m e ”
p l a c e h o l d e r=” 0 4 : 0 0 am” onkeydown=” r e t u r n f a l s e ; ” s t e p=” 7200 ”/>
</p>
<p>
< l a b e l >P l a n t a </ l a b e l >
<br>
< s e l e c t name=” u s u a r i o P l a n t a ” s t y l e=” w i d t h : 4 4 0 px ”
o n c l i c k=” a c t i v a ( t h i s . v a l u e ) ”>
<o p t i o n v a l u e=” Temperatura ”>Temperatura </o p t i o n >
<o p t i o n v a l u e=” V e l o c i d a d ”>V e l o c i d a d </o p t i o n >
</ s e l e c t >

</p>
<p c l a s s=” s i g n i n b u t t o n ”>
<i n p u t t y p e=” s u b m i t ” name=” s u b m i t ” v a l u e=” R e g i s t r a r s e ”/>
</p>
<p c l a s s=” c h a n g e l i n k ”>
D e s e a s i n g r e s a r a l L a b o r a t o r i o Remoto ?
<a h r e f=”#t o l o g i n ” c l a s s=” t o r e g i s t e r ”> I n i c i o S e s i o n </a>
</p>
</form>
</d i v>
</d i v>
</d i v>
</ s e c t i o n >
</d i v>
</body>
</html>

Listing 6.6: Codigo para registro de usuarios nuevos en base de datos registro.php”
<?php
// c o n e x i o n con l a b a s e d e d a t o s y e l s e r v i d o r
$ l i n k = m y s q l c o n n e c t ( ” mysql2 . 0 0 0 webhost . com” ,
” a1831340 pablo ” , ” pablo2015 ” )
o r d i e ( ”<h2> No s e e n c u e n t r a e l s e r v i d o r </h2>” ) ;
$db = m y s q l s e l e c t d b ( ” a 1 8 3 1 3 4 0 r e m o t a ” , $ l i n k ) o r die ( ”<h2> E r r o r de
92 ANEXOS

c o n e x i o n </h2>” ) ;

// o b t e n e r l o s v a l o r e s d e l f o r m u l a r i o
$ c o d i g o = $ POST [ ’ u s u a r i o C o d i g o ’ ] ;
$ c o n t r a s e n a = $ POST [ ’ u s u a r i o C o n t r a s e n a ’ ] ;
$ c o n C o n t r a s e n a = $ POST [ ’ u s u a r i o C o n f C o n t r a s e n a ’ ] ;
$ f e c h a = $ POST [ ’ u s u a r i o F e c h a ’ ] ;
$ h o r a = $ POST [ ’ u s u a r i o H o r a ’ ] ;
$ p l a n t a = $ POST [ ’ u s u a r i o P l a n t a ’ ] ;
$ c o n t a d o r 3 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE ( Codigo =
’ $codigo ’) ” , $link )
o r d i e ( ”<h2> E r r o r de r e c e p c i e d a t o s </h2>” ) ;
$ n o f i l a s 3 = mysql num rows ( $ c o n t a d o r 3 ) ;

// s e c o n f i r m a q u e numero d e r e g i s t r o s p o r c o d i g o no s e a mayor a 3
i f ( $ n o f i l a s 3 >=3){
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”>
a l e r t ( ” Excede e l no de r e g i s t r o s
p e r m i t i d o s ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ; }
else {

// s e confirma contrasena

i f ( $ c o n t r a s e n a != $ c o n C o n t r a s e n a ) {
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” Las c o n t r a s e n o
c o i n c i d e n ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ;
}

else {
// i n g r e s a r l a i n f o r m a c i o n a l a t a b l a
$ c o n t a d o r = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE ( Fecha =
’ $ f e c h a ’ AND Hora = ’ $ h o r a ’ AND P l a n t a = ’ $ p l a n t a ’ ) ” , $ l i n k )
o r d i e ( ”<h2> E r r o r de r e c e p c i e d a t o s </h2>” ) ;
$ n o f i l a s = mysql num rows ( $ c o n t a d o r ) ;

i f ( $ c o d i g o != ” ” && $ n o f i l a s ==0){
m y s q l q u e r y ( ”INSERT INTO R e g i s t r o VALUES
( ’ ’ , ’ $codigo ’ , ’ $contrasena ’ , ’ $ f e c h a ’ , ’ $hora ’ , ’ $planta ’ ) ” , $ l i n k )
o r d i e ( ”<h2> E r r o r de e n v i o de d a t o s </h2>” ) ;
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” R e g i s t r o R e a l i z a d o c o n t o ” ) ;
window . l o c a t i o n =”h t t p : / / e s t a c i o n r e m o t a . n e t 7 6 . n e t /”; </ s c r i p t > ’ ;
}
e l s e { e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” La h o r a que s o l i c i t a no e s t a
disponible ”);
window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ; }}}
mysql close ( $link );
?> <?php
// c o n e x i o n con l a b a s e d e d a t o s y e l s e r v i d o r
$ l i n k = m y s q l c o n n e c t ( ” mysql2 . 0 0 0 webhost . com” ,
” a 1 8 3 1 3 4 0 p a b l o ” , ” p a b l o 2 0 1 5 ” ) o r d i e ( ”<h2> No s e e n c u e n t r a e l s e r v i d o r
</h2>” ) ;
$db = m y s q l s e l e c t d b ( ” a 1 8 3 1 3 4 0 r e m o t a ” , $ l i n k ) o r d i e ( ”<h2> E r r o r de
c o n e x i o n </h2>” ) ;

// o b t e n e r l o s v a l o r e s d e l f o r m u l a r i o
$ c o d i g o = $ POST [ ’ u s u a r i o C o d i g o ’ ] ;
$ c o n t r a s e n a = $ POST [ ’ u s u a r i o C o n t r a s e n a ’ ] ;
$ c o n C o n t r a s e n a = $ POST [ ’ u s u a r i o C o n f C o n t r a s e n a ’ ] ;
$ f e c h a = $ POST [ ’ u s u a r i o F e c h a ’ ] ;
$ h o r a = $ POST [ ’ u s u a r i o H o r a ’ ] ;
$ p l a n t a = $ POST [ ’ u s u a r i o P l a n t a ’ ] ;

$ c o n t a d o r 3 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE ( Codigo =


’ $codigo ’) ” , $link )
o r d i e ( ”<h2> E r r o r de r e c e p c i e d a t o s </h2>” ) ;
$ n o f i l a s 3 = mysql num rows ( $ c o n t a d o r 3 ) ;

// s e c o n f i r m a q u e numero d e r e g i s t r o s p o r c o d i g o no s e a mayor a 3
i f ( $ n o f i l a s 3 >=3){
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”>
a l e r t ( ” Excede e l no de r e g i s t r o s
p e r m i t i d o s ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ;
}
else {

// s e c o n f i r m a c o n t r a s e a
i f ( $ c o n t r a s e n a != $ c o n C o n t r a s e n a ) {
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” Las c o n t r a s e n o
c o i n c i d e n ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ;
}
ANEXOS 93

else {
// i n g r e s a r l a i n f o r m a c i o n a l a t a b l a
$ c o n t a d o r = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE
( Fecha = ’ $ f e c h a ’ AND Hora = ’ $ h o r a ’ AND P l a n t a = ’ $ p l a n t a ’ ) ” , $ l i n k ) o r die
( ”<h2> E r r o r de r e c e p c i e d a t o s </h2>” ) ;
$ n o f i l a s = mysql num rows ( $ c o n t a d o r ) ;
i f ( $ c o d i g o != ” ” && $ n o f i l a s ==0){

m y s q l q u e r y ( ”INSERT INTO R e g i s t r o VALUES


( ’ ’ , ’ $codigo ’ , ’ $contrasena ’ , ’ $ f e c h a ’ , ’ $hora ’ , ’ $planta ’ ) ” , $ l i n k ) or d i e ( ”<h2>
E r r o r de e n v i o de d a t o s </h2>” ) ;
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” R e g i s t r o R e a l i z a d o con t o ” ) ;
window . l o c a t i o n =”h t t p : / / e s t a c i o n r e m o t a . n e t 7 6 . n e t /”; </ s c r i p t > ’ ;
}

e l s e { e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”>
a l e r t ( ” La h o r a que s o l i c i t a no e s t a d i s p o n i b l e ” ) ;
window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ; }}}
mysql close ( $link );
?>

Listing 6.7: Codigo para inicio de sesión de usuarios registrados en base de datos ”sesion.php”
<?php
$ l i n k = m y s q l c o n n e c t ( ” mysql2 . 0 0 0 webhost . com” ,
” a 1 8 3 1 3 4 0 p a b l o ” , ” p a b l o 2 0 1 5 ” ) o r d i e ( ”<h2> No s e e n c u e n t r a e l s e r v i d o r
</h2>” ) ;
$db = m y s q l s e l e c t d b ( ” a 1 8 3 1 3 4 0 r e m o t a ” , $ l i n k ) o r d i e ( ”<h2> E r r o r de
c o n e x i o n </h2>” ) ;

// o b t e n e r l o s v a l o r e s d e l f o r m u l a r i o
$ c o d i g o = $ POST [ ’ username ’ ] ;
$ c o n t r a s e n a = $ POST [ ’ p a s s w o r d ’ ] ;
$ p l a n t a = $ POST [ ’ s e s i o n P l a n t a ’ ] ;
$ f e c h a = d a t e ( ’Y−m−d H : i : s ’ ) ;
$ n u e v a f e c h a = s t r t o t i m e ( ’−1 hour ’ , s t r t o t i m e ( $fecha ) ) ;
$ h o r a A c t u a l F= d a t e ( ’H : i ’ , $ n u e v a f e c h a ) ;
$ f e c h a a c t u a l= d a t e ( ’Y−m−d ’ , $ n u e v a f e c h a ) ;

// c o n s u l t a s d e t a b l a
$ c o n t a d o r = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE ( Codigo =
’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a = ’ $ p l a n t a ’ ) ” , $ l i n k ) o r
d i e ( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s = mysql num rows ( $ c o n t a d o r ) ;

// c o n s u l t a Hora
$ s q l h o r a = ”SELECT Hora FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $planta ’) ” ;
$ c o n s u l t a H o r a = m y s q l q u e r y ( $ s q l h o r a , $ l i n k ) o r d i e ( ”<h2> E r r o r de
r e c e p c i o n de d a t o s </h2>” ) ;

$ h o r a 1 1= l i s t ( $ h o r a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a H o r a ) ;
$ h o r a 2 2= l i s t ( $ h o r a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a H o r a ) ;
$ h o r a 3 3= l i s t ( $ h o r a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a H o r a ) ;

// c o n s u l t a F e c h a
$ s q l f e c h a = ”SELECT Fecha FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $planta ’) ” ;
$ c o n s u l t a F e c h a = m y s q l q u e r y ( $ s q l f e c h a , $ l i n k ) o r d i e ( ”<h2> E r r o r de
r e c e p c i o n de d a t o s </h2>” ) ;

$ f e c h a 1 1= l i s t ( $ f e c h a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a F e c h a ) ;
$ f e c h a 2 2= l i s t ( $ f e c h a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a F e c h a ) ;
$ f e c h a 3 3= l i s t ( $ f e c h a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a F e c h a ) ;

// c o n s u l t a P l a n t a
$ s q l p l a n t a = ”SELECT p l a n t a FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $planta ’) ” ;
$ c o n s u l t a P l a n t a = m y s q l q u e r y ( $ s q l p l a n t a , $ l i n k ) o r d i e ( ”<h2> E r r o r de
r e c e p c i o n de d a t o s </h2>” ) ;

$ p l a n t a 1 1= l i s t ( $ p l a n t a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a P l a n t a ) ;
$ p l a n t a 2 2= l i s t ( $ p l a n t a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a P l a n t a ) ;
$ p l a n t a 3 3= l i s t ( $ p l a n t a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a P l a n t a ) ;

if ( $ n u m e r o f i l a s != 0 ) {
94 ANEXOS

switch ( $ n u m e r o f i l a s ) {
case 1 :
$ r=s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ;
$ c o n s u l t a H o r a F F=d a t e ( ’H : i ’ , $ r ) ;
$ e n d t i m e = s t r t o t i m e ( ”+119 m i n u t e s ” , s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ) ;
$ h o r a 1 2 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e ) ;

i f ( ( $ c o n s u l t a H o r a F F<=$ h o r a A c t u a l F ) && ( $ h o r a A c t u a l F<$ h o r a 1 2 0 m i n ) &&


( $ f e c h a a c t u a l == $ f e c h a 1 1 [ 0 ] ) ) {

i f ( $ p l a n t a 1 1 [ 0 ] ==” Temperatura ” ) {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 1 1 [ 0 ] ’ ” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=1 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }
else {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 1 1 [ 0 ] ’ ” , $ l i n k ) o r
d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : V e l o c i d a d . php ’ ) ; }}
else {
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” No s e e n c u e n t r a en l a h o r a de
s e s i o n r e g i s t r a d a ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ; }

break ;
case 2 :
$ r=s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ;
$ c o n s u l t a H o r a F F=d a t e ( ’H : i ’ , $ r ) ;
$ e n d t i m e = s t r t o t i m e ( ”+120 m i n u t e s ” , s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ) ;
$ h o r a 1 2 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e ) ;
$endtimeF = s t r t o t i m e ( ”+119 m i n u t e s ” , s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ) ;
$ h o r a 1 1 9 m i n=d a t e ( ’H : i ’ , $endtimeF ) ;

i f ( ( $ c o n s u l t a H o r a F F<=$ h o r a A c t u a l F ) && ( $ h o r a A c t u a l F<$ h o r a 1 1 9 m i n ) &&


( $ f e c h a a c t u a l == $ f e c h a 1 1 [ 0 ] ) ) {

i f ( $ p l a n t a 1 1 [ 0 ] ==” Temperatura ” ) {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 1 1 [ 0 ] ’ ” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
$ c o n t a d o r 1 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $ p l a n t a ’ AND Fecha =’ $ f e c h a 1 1 [ 0 ] ’ AND Hora = ’ $ h o r a 1 2 0 m i n ’ ) ” , $ l i n k )
o r d i e ( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 1 = mysql num rows ( $ c o n t a d o r 1 ) ;
i f ( $ n u m e r o f i l a s 1 == 0 ) {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=1 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }

else {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=2 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }}

else {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 1 1 [ 0 ] ’ ” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : V e l o c i d a d . php ’ ) ; }}
else {
$ r=s t r t o t i m e ( $ h o r a 2 2 [ 0 ] ) ;
$ c o n s u l t a H o r a F F=d a t e ( ’H : i ’ , $ r ) ;
$ e n d t i m e = s t r t o t i m e ( ”+120 m i n u t e s ” , s t r t o t i m e ( $ h o r a 2 2 [ 0 ] ) ) ;
$ h o r a 1 2 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e ) ;
$endtimeF = s t r t o t i m e ( ”+119 m i n u t e s ” , s t r t o t i m e ( $ h o r a 2 2 [ 0 ] ) ) ;
$ h o r a 1 1 9 m i n=d a t e ( ’H : i ’ , $endtimeF ) ;

i f ( ( $ c o n s u l t a H o r a F F<=$ h o r a A c t u a l F ) && ( $ h o r a A c t u a l F<$ h o r a 1 1 9 m i n ) &&


( $ f e c h a a c t u a l == $ f e c h a 2 2 [ 0 ] ) ) {

i f ( $ p l a n t a 2 2 [ 0 ] ==” Temperatura ” ) {

m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 2 2 [ 0 ] ’ ” , $ l i n k )


o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;

$ c o n t a d o r 1 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE

( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =


’ $planta ’
AND Fecha =’ $ f e c h a 2 2 [ 0 ] ’ AND Hora = ’ $ h o r a 1 2 0 m i n ’ ) ” , $ l i n k )
o r d i e ( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 1 = mysql num rows ( $ c o n t a d o r 1 ) ;
ANEXOS 95

i f ( $ n u m e r o f i l a s 1 == 0 ) {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=1 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }
else {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=2 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }}
else {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 2 2 [ 0 ] ’ ” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : V e l o c i d a d . php ’ ) ;
}}
else {
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” No s e e n c u e n t r a en l a h o r a de
s e s i o n r e g i s t r a d a ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ;
}}
break ;
case 3 :
$ r=s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ;
$ c o n s u l t a H o r a F F=d a t e ( ’H : i ’ , $ r ) ;
$ e n d t i m e = s t r t o t i m e ( ”+120 m i n u t e s ” , s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ) ;
$ h o r a 1 2 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e ) ;
$endtimeF = s t r t o t i m e ( ”+119 m i n u t e s ” , s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ) ;
$ h o r a 1 1 9 m i n=d a t e ( ’H : i ’ , $endtimeF ) ;
$ e n d t i m e 2 = s t r t o t i m e ( ”+240 m i n u t e s ” , s t r t o t i m e ( $ h o r a 1 1 [ 0 ] ) ) ;
$ h o r a 2 4 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e 2 ) ;

i f ( ( $ c o n s u l t a H o r a F F<=$ h o r a A c t u a l F ) && ( $ h o r a A c t u a l F<$ h o r a 1 1 9 m i n ) &&


( $ f e c h a a c t u a l == $ f e c h a 1 1 [ 0 ] ) ) {

i f ( $ p l a n t a 1 1 [ 0 ] ==” Temperatura ” ) {

m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 1 1 [ 0 ] ’ ” , $ l i n k )


o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
$ c o n t a d o r 1 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $ p l a n t a ’ AND Fecha =’ $ f e c h a 1 1 [ 0 ] ’ AND Hora = ’ $ h o r a 1 2 0 m i n ’ ) ” , $ l i n k ) o r
d i e ( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 1 = mysql num rows ( $ c o n t a d o r 1 ) ;
i f ( $ n u m e r o f i l a s 1 == 0 ) {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=1 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ;
}
else {
$ c o n t a d o r 2 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $planta ’
AND Fecha =’ $ f e c h a 1 1 [ 0 ] ’ AND Hora = ’ $ h o r a 2 4 0 m i n ’ ) ” , $ l i n k ) o r d i e
( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 2 = mysql num rows ( $ c o n t a d o r 2 ) ;

i f ( $ n u m e r o f i l a s 2 == 0 ) {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=2 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }
else {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=3 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }}}
else {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 1 1 [ 0 ] ’ ” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : V e l o c i d a d . php ’ ) ; }}
else {
$ r=s t r t o t i m e ( $ h o r a 2 2 [ 0 ] ) ;
$ c o n s u l t a H o r a F F=d a t e ( ’H : i ’ , $ r ) ;
$ e n d t i m e = s t r t o t i m e ( ”+120 m i n u t e s ” , s t r t o t i m e ( $ h o r a 2 2 [ 0 ] ) ) ;
$ h o r a 1 2 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e ) ;
$endtimeF = s t r t o t i m e ( ”+119 m i n u t e s ” , s t r t o t i m e ( $ h o r a 2 2 [ 0 ] ) ) ;
$ h o r a 1 1 9 m i n=d a t e ( ’H : i ’ , $endtimeF ) ;
$ e n d t i m e 2 = s t r t o t i m e ( ”+240 m i n u t e s ” , s t r t o t i m e ( $ h o r a 2 2 [ 0 ] ) ) ;
$ h o r a 2 4 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e 2 ) ;

i f ( ( $ c o n s u l t a H o r a F F<=$ h o r a A c t u a l F ) && ( $ h o r a A c t u a l F<$ h o r a 1 1 9 m i n ) &&


( $ f e c h a a c t u a l == $ f e c h a 2 2 [ 0 ] ) ) {

i f ( $ p l a n t a 2 2 [ 0 ] ==” Temperatura ” ) {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 2 2 [ 0 ] ’ ” , $ l i n k )

or die ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;


96 ANEXOS

$ c o n t a d o r 1 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE


( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND
P l a n t a = ’ $ p l a n t a ’ AND Fecha =’ $ f e c h a 2 2 [ 0 ] ’ AND
Hora = ’ $ h o r a 1 2 0 m i n ’ ) ” , $ l i n k ) o r d i e
( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 1 = mysql num rows ( $ c o n t a d o r 1 ) ;

if ( $ n u m e r o f i l a s 1 == 0 ) {

m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=1 WHERE ID=1” , $ l i n k )


o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }
else {
$ c o n t a d o r 2 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $planta ’
AND Fecha =’ $ f e c h a 2 2 [ 0 ] ’ AND Hora = ’ $ h o r a 2 4 0 m i n ’ ) ” , $ l i n k )
o r d i e ( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 2 = mysql num rows ( $ c o n t a d o r 2 ) ;

if ( $ n u m e r o f i l a s 2 == 0 ) {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=2 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }
else {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=3 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }}}
else {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 2 2 [ 0 ] ’ ” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : V e l o c i d a d . php ’ ) ; }}
else {
$ r=s t r t o t i m e ( $ h o r a 3 3 [ 0 ] ) ;
$ c o n s u l t a H o r a F F=d a t e ( ’H : i ’ , $ r ) ;
$ e n d t i m e = s t r t o t i m e ( ”+120 m i n u t e s ” , s t r t o t i m e ( $ h o r a 3 3 [ 0 ] ) ) ;
$ h o r a 1 2 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e ) ;
$endtimeF = s t r t o t i m e ( ”+119 m i n u t e s ” , s t r t o t i m e ( $ h o r a 3 3 [ 0 ] ) ) ;
$ h o r a 1 1 9 m i n=d a t e ( ’H : i ’ , $endtimeF ) ;
$ e n d t i m e 2 = s t r t o t i m e ( ”+240 m i n u t e s ” , s t r t o t i m e ( $ h o r a 3 3 [ 0 ] ) ) ;
$ h o r a 2 4 0 m i n=d a t e ( ’H : i ’ , $ e n d t i m e 2 ) ;

i f ( ( $ c o n s u l t a H o r a F F<=$ h o r a A c t u a l F ) && ( $ h o r a A c t u a l F<$ h o r a 1 1 9 m i n ) &&


( $ f e c h a a c t u a l == $ f e c h a 3 3 [ 0 ] ) ) {

i f ( $ p l a n t a 3 3 [ 0 ] ==” Temperatura ” ) {

m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 3 3 [ 0 ] ’ ” , $ l i n k )


o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
$ c o n t a d o r 1 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $planta ’
AND Fecha =’ $ f e c h a 3 3 [ 0 ] ’ AND Hora = ’ $ h o r a 1 2 0 m i n ’ ) ” , $ l i n k )
o r d i e ( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 1 = mysql num rows ( $ c o n t a d o r 1 ) ;

if ( $ n u m e r o f i l a s 1 == 0 ) {

m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=1 WHERE ID=1” , $ l i n k )


o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }
else {
$ c o n t a d o r 2 = m y s q l q u e r y ( ”SELECT ∗ FROM R e g i s t r o WHERE
( Codigo = ’ $ c o d i g o ’ AND C o n t r a s e n a = ’ $ c o n t r a s e n a ’ AND P l a n t a =
’ $ p l a n t a ’ AND Fecha =’ $ f e c h a 3 3 [ 0 ] ’ AND Hora = ’ $ h o r a 2 4 0 m i n ’ ) ” , $ l i n k )
o r d i e ( ”<h2> E r r o r de r e c e p c i o n de d a t o s </h2>” ) ;
$ n u m e r o f i l a s 2 = mysql num rows ( $ c o n t a d o r 2 ) ;

i f ( $ n u m e r o f i l a s 2 == 0 ) {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=2 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }
else {
m y s q l q u e r y ( ”UPDATE S e s i o n SET NumeroSesion=3 WHERE ID=1” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : Temperatura . php ’ ) ; }}}
else {
m y s q l q u e r y ( ”DELETE FROM R e g i s t r o WHERE Fecha < ’ $ f e c h a 3 3 [ 0 ] ’ ” , $ l i n k )
o r d i e ( ”<h2> E r r o r en l a ELIMINACION de d a t o s </h2>” ) ;
h e a d e r ( ’ L o c a t i o n : V e l o c i d a d . php ’ ) ; }}
else {
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” No s e e n c u e n t r a en l a h o r a de
ANEXOS 97

s e s i o n r e g i s t r a d a ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ; } } }


break ; } }

else {
e c h o ’< s c r i p t l a n g u a g e =” j a v a s c r i p t ”> a l e r t ( ” No Hay r e g i s t r o de e s t a
i n f o r m a c i o n ” ) ; window . h i s t o r y . back ( ) ; < / s c r i p t > ’ ; }
mysql close ( $link );
?>

Listing 6.8: Codigo pagina Laboratorio Remoto Planta de Temperatura ”Temperatura.php”


<?php
$ l i n k = m y s q l c o n n e c t ( ” mysql2 . 0 0 0 webhost . com” ,
” a 1 8 3 1 3 4 0 p a b l o ” , ” p a b l o 2 0 1 5 ” ) o r d i e ( ”<h2> No s e e n c u e n t r a e l s e r v i d o r
</h2>” ) ;
$db = m y s q l s e l e c t d b ( ” a 1 8 3 1 3 4 0 r e m o t a ” , $ l i n k ) o r d i e ( ”<h2> E r r o r de
c o n e x i o n </h2>” ) ;

// c o n s u l t a Hora
$ s q l = ”SELECT NumeroSesion FROM S e s i o n WHERE ID=1” ;
$ c o n s u l t a = m y s q l q u e r y ( $ s q l , $ l i n k ) o r d i e ( ”<h2> E r r o r de r e c e p c i o n de
d a t o s </h2>” ) ;
$ c o n s u l t a 1 1= l i s t ( $ c o n s u l t a 1 ) = m y s q l f e t c h r o w ( $ c o n s u l t a ) ;
?>
<!DOCTYPE HTML>
<html>
<head>

<meta h t t p−e q u i v=” Content−Type ” c o n t e n t=” t e x t / html ; c h a r s e t=u t f −8”/>


< s c r i p t t y p e=” t e x t / j a v a s c r i p t ” s r c=” c a n v a s j s . min . j s ”></ s c r i p t >
< l i n k r e l =” s t y l e s h e e t ”
h r e f=” h t t p s : / / maxcdn . b o o t s t r a p c d n . com/ f o n t −awesome / 4 . 4 . 0 / c s s / f o n t −awe
some . min . c s s ”>
< l i n k r e l =” s t y l e s h e e t ” h r e f=” webix . c s s ” t y p e=” t e x t / c s s ”>
< l i n k r e l =” s h o r t c u t i c o n ” h r e f=” imgs / t e m p e r a t u r a . png ” t y p e=” image / png ”>
< s t y l e t y p e=” t e x t / c s s ”> body , td , t h { f o n t −s i z e : 9 px ;} </ s t y l e >
< s c r i p t s r c=” webix . j s ” t y p e=” t e x t / j a v a s c r i p t ”></ s c r i p t >

</head>
<body o n l o a d=” r e l o j i l l o ( ) ”>

<d i v s t y l e= ’ d i s p l a y : none ; ’>


<h2 s t y l e= ’ t e x t −a l i g n : c e n t e r ’> Try t o r e s i z e t h i s c e l l </h2>
<t e x t a r e a i d=” my box ”>
D e s c r i p c i o n : La p l a n t a de Temperatura e s t a c o n s t i t u i d a p o r un s i s t e m a
d i n a m i c o compuesto p o r un b o m b i l l o y un v e n t i l a d o r , donde a l s e r e x c i t a d o s
( b o m b i l l o o v e n t i l a d o r ) p o r un v o l t a j e en l a e n t r a d a , r e f l e j a en s u s a l i d a un
v o l t a j e e l c u a l e s p r o p o r c i o n a l a l a t e m p e r a t u r a medida d e n t r o de un
volumen c u a d r a d o . E s t a p l a n t a e s manejada remotamente , p o r l o c u a l , s e
pueden h a c e r d i s t i n t a s p r u e b a s como : r e s p u e s t a a l e s c a l o n , r e s p u e s t a en
f r e c u e n c i a , c o n t r o l de t i p o ON−OFF y C o n t r o l en t i e m p o d i s c r e t o ( D i g i t a l ) .
</ t e x t a r e a >
</d i v>
<s t y l e >
. myClass {
f o n t −s t y l e : i t a l i c ;
}

. header {
background−c o l o r : #ADADAD;
color : #f f f f f f ;}
. titulo{
background−c o l o r : #ADADAD;
c o l o r : #EEEEEE ;
f o n t −w e i g h t : b o l d ;
f o n t −s i z e : 260 %;
f o n t −s t y l e : o b l i q u e ;
f o n t −v a r i a n t : s m a l l −c a p s ;
display : block ;
float : l e f t ;
l e t t e r −s p a c i n g : 2 px ;
t e x t −shadow : 8 px 4 px 8 px #000000;
}
. cuerpo {
background−c o l o r : #ADADAD;
c o l o r : #EEEEEE ;
f o n t −s t y l e : o b l i q u e ;
f o n t −w e i g h t : b o l d ;
t e x t −a l i g n : j u s t i f y ;
position : relative ;
float : l e f t ;
98 ANEXOS

l e t t e r −s p a c i n g : 0 . 5 px ;
b o r d e r : 1 px s o l i d #FFFFFF ;
b o r d e r −bottom−r i g h t −r a d i u s : 3em ;
}
</ s t y l e >
<s t y l e >
. my style . webix hcell {
t e x t −a l i g n : c e n t e r ;
background :#009966;
c o l o r : white ;
f o n t −w e i g h t : b o l d ;

}
. m y s t y l e . webix column {
t e x t −a l i g n : c e n t e r ;
f o n t −s t y l e : i t a l i c ;
b a c k g r o u n d :#ddFFdd ;
}
. m y s t y l e . webix column > div {
b o r d e r −c o l o r :#ddd ;
}

</ s t y l e >

<s c r i p t t y p e=” t e x t / j a v a s c r i p t ” c h a r s e t=” u t f −8”>

l o g i n = [ { c o l s : [ { v i e w : ” t e x t ” , h e i g h t : 3 0 , t y p e : ’ p a s s w o r d ’ , v a l u e : ’ 123 p a s s ’ ,
l a b e l : ” Clave : ” , labelWidth : 8 0 } ,
{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , v a l u e : ” Login ” ,
t y p e : ” form ” , c l i c k : ” $$ ( ’ win3 ’ ) . c l o s e ( ) ; ” } ] } ] ;

escalonT =
[ { rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” R e f e r e n c i a ” , body : { i d : ” e s c a l T ” , v i e w : ” s l i d e r ” , va
l u e : 5 , s t e p : 0 . 1 , min : 0 , max : 1 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r s t r 1
= j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,
{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , v a l u e : ” Enviar ” ,
t y p e : ” form ” , c l i c k : enviarET } ] } ] ;

f r e c u e n c i a T =[{ rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” V o l t a j e p i c o a
p i c o ” , body : { i d : ”VppT” , v i e w : ” s l i d e r ” , v a l u e : 5 , s t e p : 0 . 1 , min : 0 , max : 1 0 ,
t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r s t r 1 = j . t o F i x e d ( 1 ) ; return s t r 1+”
v” ; } } } ,
{ v i e w : ” f i e l d s e t ” , l a b e l : ” O f f s e t ” , body : { i d : ” o f f T ” , v i e w : ” s l i d e r ” , l a b e l W i d t h : 1 0 0 , v
a l u e : 3 . 5 , s t e p : 0 . 1 , min : 2 , max : 5 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r
s t r 1 = j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,
{ view : ” f i e l d s e t ” , l a b e l : ” F r e c u e n c i a
( Hz ) ” , body : { i d : ” f r e c T ” , v i e w : ” s l i d e r ” , l a b e l W i d t h : 1 0 0 , v a l u e : 0 . 0 0 1 , s t e p : 0 . 0 0 0 1
, min : 0 . 0 0 0 2 , max : 0 . 0 0 9 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r s t r 1 =
j . toFixed ( 4 ) ; return s t r 1+” Hz” ; } } } ,

{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , value : ” Enviar ” ,


t y p e : ” form ” , c l i c k : enviarFT } ] } ] ;

controlonoffT
=[{ rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” R e f e r e n c i a ” , body : { i d : ” r e f T ” , v i e w : ” s l i d e r ” , v a l
ue : 5 , s t e p : 0 . 1 , min : 0 , max : 1 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r s t r 1
= j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” H i s t e r e s i s ” , body : { i d : ”hT” , v i e w : ” s l i d e r ” , l a b e l W i d t h : 1 0 0 ,
v a l u e : 2 , s t e p : 0 . 1 , min : 0 . 1 , max : 4 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r
s t r 1 = j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,

{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , value : ” Enviar ” ,


t y p e : ” form ” , c l i c k : enviarOT } ] } ] ;

controldigitalT
=[{ rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” R e f e r e n c i a ” , body : { i d : ” refDT ” , v i e w : ” s l i d e r ” ,
v a l u e : 5 , s t e p : 0 . 1 , min : 0 , max : 1 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ;
var s t r 1 = j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” Tiempo de
M u e s t r e o ” , body : { i d : ” tiempoDT ” , v i e w : ” s l i d e r ” , v a l u e : 6 5 , s t e p : 1 , min : 3 0 , max :
1 0 0 , t i t l e : webix . t e m p l a t e ( ”#v a l u e# v ” ) } } ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” C o n t r o l a d o r ” , body : { v i e w : ” c a r o u s e l ” , w i d t h : 2 5 0 ,
h e i g h t : 5 0 , c o l s : [ { c s s : ” image ” , t e m p l a t e : img ,
d a t a : { s r c : ” imgs / c o n t r o l a d o r . j p g ” } } ] ,
navigation :{ items : f a l s e , type : ” s i d e ” , buttons : f a l s e }}} ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” Numerador ” , body : { rows : [


{ c o l s : [ { v i e w : ” l a b e l ” , l a b e l : ”b<SUB>0</SUB>” , a l i g n : ” c e n t e r ” } ,
{ v i e w : ” l a b e l ” , l a b e l : ”b<SUB>1</SUB>” , a l i g n : ” c e n t e r ” } ,
ANEXOS 99

{ v i e w : ” l a b e l ” , l a b e l : ”b<SUB>2</SUB>” , align : ” center ”} ,


{ v i e w : ” l a b e l ” , l a b e l : ”b<SUB>3</SUB>” , align : ” center ” }]} ,
{cols : [
{ i d : ”b0T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b0T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”b1T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b1T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”b2T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b2T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”b3T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b3T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ] } ] } } ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” Denominador ” , body : { rows : [


{ c o l s : [ { v i e w : ” l a b e l ” , l a b e l : ” a<SUB>0</SUB>” , a l i g n : ” c e n t e r ” } ,
{ v i e w : ” l a b e l ” , l a b e l : ” a<SUB>1</SUB>” , align : ” center ”} ,
{ v i e w : ” l a b e l ” , l a b e l : ” a<SUB>2</SUB>” , align : ” center ”} ,
{ v i e w : ” l a b e l ” , l a b e l : ” a<SUB>3</SUB>” , align : ” center ” }]} ,
{cols : [
{ i d : ”a0T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a0T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,

{ i d : ”a1T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a1T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”a2T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a2T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”a3T” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a3T” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ] } ] } } ,

{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , value : ” Enviar ” ,


t y p e : ” form ” , c l i c k : enviarCDT } ] } ] ;

menu1= [ { i d : ” Temperatura ” , h e a d e r : ”<span c l a s s =’ w e b i x i c o n f a −l i g h t b u l b −o


f a −b o r d e r ’></span> P l a n t a de Temperatura ” , rows : [ { v i e w : ” l a b e l ” , l a b e l :
”<span c l a s s =’ w e b i x i c o n f a −c o g f a −s p i n ’></span> S e l e c c i o n e Prueba a
R e a l i z a r ” , inputWidth : 1 0 0 , a l i g n : ” c e n t e r ” } ,
{ view : ” a c c o r d i o n ” , multi : f a l s e ,

rows : [ { i d : ” primeroV ” , h e a d e r : ”<span c l a s s =’ w e b i x i c o n f a − s l i d e r s ’></span>


R e s p u e s t a a l E s c a l o n ” , body : { v i e w : ” form ” , e l e m e n t s : e s c a l o n T } } ,
{ i d : ” segundoV ” , c o l l a p s e d : ’ t r u e ’ , h e a d e r : ”<span c l a s s =’ w e b i x i c o n
f a − s l i d e r s ’></span> R e s p u e s t a en F r e c u e n c i a ” ,
body : { v i e w : ” form ” , e l e m e n t s : f r e c u e n c i a T } } ,
{ i d : ” t e r c e r o V ” , c o l l a p s e d : ’ t r u e ’ , h e a d e r : ”<span c l a s s =’ w e b i x i c o n
f a − s l i d e r s ’></span> C o n t r o l ON−OFF” , body : { v i e w : ” form ” , e l e m e n t s :
c o n t r o l o n o f f T }} ,
{ i d : ” c u a r t o V ” , c o l l a p s e d : ’ t r u e ’ , h e a d e r : ”<span c l a s s =’ w e b i x i c o n
f a − s l i d e r s ’></span> C o n t r o l D i g i t a l ” , body : { v i e w : ” form ” , e l e m e n t s :
c o n t r o l d i g i t a l T }} ,
{ i d : ” c u a r t o V ” , c o l l a p s e d : ’ t r u e ’ , h e a d e r : ”<span c l a s s =’ w e b i x i c o n f a −e m p i r e
f a −s p i n ’></span> A c t i v a c i o n de
V e n t i l a d o r ” , body : { v i e w : ” f i e l d s e t ” , l a b e l :
” A c t i v a r V e n t i l a d o r ” , body : { c o l s : [ { } , { v i e w : ” b u t t o n ” ,
l a b e l : ” A c t i v a r ” , t y p e : ” form ” , h e i g h t : 5 0 , w i d t h : 1 0 0 ,
align : ” center ” , c l i c k : ventilacion } ,{}]}}}]} ,

{ v i e w : ” f i e l d s e t ” , body : { c o l s : [ { v i e w : ” b u t t o n ” , l a b e l : ” D e t e n e r Prueba ” ,
type : ” danger ” , c l i c k : d e t e n e r } ,{ view : ” button ” , l a b e l : ” Borrar
Datos ” , c l i c k : r e f r e s c a r } ] }
}]}];

menu2=[{ i d : ”<span c l a s s =’ w e b i x i c o n f a −l i n e −c h a r t ’></span>G r a f i c a ” ,


rows : [ { v i e w : ” c h a r t ” , t y p e : ” l i n e ” ,
x A x i s : { t e m p l a t e : ”#Tiempo#” , t i t l e : ” Tiempo [ s ] ” , l i n e C o l o r : ”#66 c c f f ” } ,
y A x i s : { s t a r t : 0 , s t e p : 0 . 5 , end : 1 0 , t i t l e : ” V o l t a j e [V] ” ,
l i n e C o l o r : ”#66 c c f f ” , t e m p l a t e : f u n c t i o n ( v a l u e ) { return v a l u e %1?” ” : v a l u e } } ,
l e g e n d : { v a l u e s : [ { t e x t : ” Vi ” , c o l o r : ”#FF0000 ” } , { t e x t : ”Vo” , c o l o r : ”#0101DF” } ] , a
l i g n : ” r i g h t ” , v a l i g n : ” m i d d l e ” , l a y o u t : ” y ” , w i d t h : 4 0 , margin : 8 } ,
s e r i e s : [ { v a l u e : ”#Vi#” ,
i t e m : { b o r d e r C o l o r : ”#FF0000 ” , c o l o r :
”# f f f f f f ” , t y p e : ” o ” , r a d i u s : 0 , borderWidth : 1 } ,
l i n e : { c o l o r : ”#FF0000 ” , w i d t h : 3 , shadow : t r u e } ,
t o o l t i p : { t e m p l a t e : ”#Tiempo# , #Vi#” }
100 ANEXOS

},
{ v a l u e : ”#Vo#” ,
i t e m : { b o r d e r C o l o r : ”#0101DF” , c o l o r :
”# f f f f f f ” , t y p e : ” o ” , r a d i u s : 0 , borderWidth : 1 } ,
l i n e : { c o l o r : ”#0101DF” , w i d t h : 3 } ,
t o o l t i p : { t e m p l a t e : ”#Tiempo# , #Vo#” }
}
] , id : ” tabla2 ” ,
data : [ ]
}]
},

{ i d : ”<span c l a s s =’ w e b i x i c o n f a −t a b l e ’></span>Tabla ” ,
rows : [ { v i e w : ” d a t a t a b l e ” , columns : [
{ i d : ” rank ” , header : ”” , c s s : ” rank ” , width : 5 0 } ,
{ i d : ” Tiempo ” , h e a d e r : ” Tiempo ( s ) ” , w i d t h : 3 1 0 } ,
{ i d : ” Vi ” , header : ” Voltaje de Entrada ( v ) ” , w i d t h : 3 1 0 } ,
{ i d : ”Vo” , h e a d e r : ” V o l t a j e de S a l i d a ( v ) ” , w i d t h : 3 1 0 }
],
a u t o w i d t h : f a l s e , i d : ” t a b l a ” , s e l e c t : ” row ” , c s s : ” m y s t y l e ” ,
data : [ ] ,
},
{ c o l s : [ { view : ” segmented ” , o p t i o n s : [ ”” ] } ,
{ v i e w : ” b u t t o n ” , t y p e : ” i c o n B u t t o n ” , i c o n : ” c l o u d −download ” , l a b e l : ” E x p o r t a r
Excel ” , width : 1 5 0 , c l i c k : e x p o r t a r e x c e l } ,
{ view : ” segmented ” , o p t i o n s : [ ”” ] } ] } } ] ;

colum1 =[{ v i e w : ” s c r o l l v i e w ” , i d : ” v e r s e s ” , s c r o l l : ” y ” ,
body : { rows : [ { v i e w : ” t a b v i e w ” , a n i m a t e : t r u e , c e l l s : menu1 } ] } } ] ;

p i e p a g p r i n c i p a l =[
{ c s s : ” header ” } ,
{ c s s : ” header ” , view : ” c a r o u s e l ” , h e i g h t : 1 5 2 , width : 4 7 8 , i d : ” c a r o u s e l 1 ” ,
s c r o l l S p e e d : ” 500ms” ,
animate : { type : ” f l i p ” , subtype : ” v e r t i c a l ” } ,
navigation :{ items : f a l s e , type : ” s i d e ” , buttons : true } ,
c o l s : [ { t e m p l a t e : img , d a t a : { s r c : ” imgs / i m a g e 0 0 1 . j p g ” } } , { t e m p l a t e : img , d a t a : {
s r c : ” imgs / i m a g e 0 0 2 . j p g ” } } ] } ,
{ c s s : ” header ” } ] ;

p a g i n a p r i n c i p a l =[
{ c o l s : [ { c s s : ” h e a d e r ” , t e m p l a t e : img , d a t a : { s r c : ” imgs / i m a g e 0 0 3 . j p g ” } , w i d t h : 3 6
3} ,
{ rows : [ { v i e w : ” l a b e l ” , l a b e l : ” P l a n t a de Temperatura ” ,
align : ” center ” , css : ” t i t u l o ” , height :100} ,
{ height :212 ,
t e m p l a t e : ” html−>my box ” , c s s : ” c u e r p o ” , w i d t h : 9 0 5 } , { c s s : ” h e a d e r ” }
]} ,
{ c s s : ” header ”}
]} ,
{ cols : piepagprincipal }];

webix . u i ( { v i e w : ” window ” , i d : ” win3 ” , f u l l s c r e e n : t r u e ,


head : { v i e w : ” t o o l b a r ” , paddingY : 2 ,
c o l s : [ { type : ” header ” , b o r d e r l e s s : true , template : ” Estacion
Remota” , w i d t h : 1 2 3 0 } ,
{ v i e w : ” i c o n ” , i c o n : ” t i m e s − c i r c l e ” , a l i g n : ” r i g h t ” , c l i c k : ” $$ ( ’ win3 ’ ) . c l o s e ( ) ; ” } ] } ,
body : { rows : p a g i n a p r i n c i p a l } } ) . show ( ) ;

webix . u i ( { c s s : ” myClass ” , v i e w : ” s c r o l l v i e w ” , i d : ” v e r s e s ” , s c r o l l : ” x ” , body :


{ rows : [
{ c o l s : [ { view : ” t o o l b a r ” ,
paddingY : 2 , c o l s : [ { t y p e : ” h e a d e r ” , b o r d e r l e s s : t r u e , t e m p l a t e : ” E s t a c i o n
Remota” , w i d t h : 1 1 6 1 } ,
{ view : ” button ” , v a l u e : ” C er ra r S e s i o n ” , width : 1 0 5 ,
align : ” right ” , click : cerrarsesion }]}]} ,
{ c o l s : [ { w i d t h : 3 3 0 , rows : colum1 } ,
{ v i e w : ” t a b v i e w ” , a n i m a t e : t r u e , c e l l s : menu2 } ] } , ] } } ) ;

<!−− f u n c i o n e s p a r a e n v i a r d a t o s −−>
f u n c t i o n d e t e n e r ( ) { PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ , m e s s a g e :
” f ” });}
f u n c t i o n v e n t i l a c i o n ( ) { PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ , m e s s a g e :
”e” });}
ANEXOS 101

f u n c t i o n enviarET ( ) { PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ pablo ’ , message :


”a” } ) ;
PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ , m e s s a g e :
$$ ( ” e s c a l T ” ) . g e t V a l u e ( ) } ) ;
}

f u n c t i o n enviarFT ( ) {PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ , m e s s a g e :


”b” } ) ;
PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ , m e s s a g e : $$ ( ”VppT” ) . g e t V a l u e ( ) +
” , ”+ $$ ( ” o f f T ” ) . g e t V a l u e ()+ ” , ”+ $$ ( ” f r e c T ” ) . g e t V a l u e ( ) });
}

f u n c t i o n enviarOT ( ) {PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ , m e s s a g e :


”c” });
PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ , m e s s a g e : $$ ( ” r e f T ” ) . g e t V a l u e ( ) +
” , ”+ $$ ( ”hT” ) . g e t V a l u e ( ) } ) ;
}

f u n c t i o n enviarCDT ( ) {PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ pablo ’ , message :


”d” } ) ;
PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ p a b l o ’ ,

message : $$ ( ” refDT ” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ” tiempoDT ” ) . g e t V a l u e ( )

+ ” , ”+ $$ ( ”b0T” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”b1T” ) . g e t V a l u e ( ) + ” , ”+
$$ ( ”b2T” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”b3T” ) . g e t V a l u e ( )

+ ” , ”+ $$ ( ”a0T” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”a1T” ) . g e t V a l u e ( ) + ” , ”+
$$ ( ”a2T” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”a3T” ) . g e t V a l u e ( )
});
}

<!−− f u n c i o n e s de r e c i b i r d a t o s −−>
function cerrarsesion (){

refrescar ();
window . l o c a t i o n=” h t t p : / /www. e s t a c i o n r e m o t a . n e t 7 6 . n e t / ” ;

}
f u n c t i o n img ( o b j ) { return ’<img s r c =” ’+o b j . s r c+ ’ ” c l a s s =” c o n t e n t ”
o n d r a g s t a r t =” r e t u r n f a l s e ”/> ’ }
f u n c t i o n NumeroAceptable ( v a l u e ) { i f ( v a l u e >−1000){ i f ( v a l u e <1000){ return
v a l u e }}}
function r e f r e s c a r (){
$$ ( ” t a b l a ” ) . c l e a r A l l ( ) ;
$$ ( ” t a b l a 2 ” ) . c l e a r A l l ( ) ;
}
<!−− f u n c i o n e s de e x p o r t a r d a t o s −−>
function exportarexcel (){
$$ ( ” t a b l a ” ) . e x p o r t T o E x c e l ( ) }

var v a r i a b l e j s = ”<?php e c h o $ c o n s u l t a 1 1 [ 0 ] ; ?>” ;

function r e l o j i l l o (){
f e c h a = new Date ( )
h o r a = f e c h a . g e t H o u r s ()+ ” : ”+f e c h a . g e t M i n u t e s ()+ ” : ”+f e c h a . g e t S e c o n d s ( )
setTimeout ( ’ r e l o j i l l o ( ) ’ ,1000)

i f ( h o r a==” 0 : 0 : 0 ” | | h o r a==” 2 : 0 : 0 ” | | h o r a==” 4 : 0 : 0 ” | | h o r a==” 6 : 0 : 0 ” | |


h o r a==” 8 : 0 : 0 ” | | h o r a==” 1 0 : 0 : 0 ” | | h o r a==” 1 2 : 0 : 0 ” | | h o r a==” 1 4 : 0 : 0 ” | |
h o r a==” 1 6 : 0 : 0 ” | | h o r a==” 1 8 : 0 : 0 ” | | h o r a==” 2 0 : 0 : 0 ” | | h o r a==” 2 2 : 0 : 0 ” ) {

v a r i a b l e j s=v a r i a b l e j s −1;
i f ( v a r i a b l e j s ==0){
cerrarsesion ();}}

i f ( h o r a==” 1 : 5 0 : 0 ” | | h o r a==” 3 : 5 0 : 0 ” | | h o r a==” 5 : 5 0 : 0 ” | | h o r a==” 7 : 5 0 : 0 ”


| | h o r a==” 9 : 5 0 : 0 ” | | h o r a==” 1 1 : 5 0 : 0 ” | | h o r a==” 1 3 : 5 0 : 0 ” | |
h o r a==” 1 5 : 5 0 : 0 ” | | h o r a==” 1 7 : 5 0 : 0 ” | | h o r a==” 1 9 : 5 0 : 0 ” | |
h o r a==” 2 1 : 5 0 : 0 ” | | h o r a==” 2 3 : 5 0 : 0 ” ) {

i f ( v a r i a b l e j s ==1){
a l e r t ( ” F a l t a n 10 Minutos p a r a c e r r a r s e s i o n , Por f a v o r g u a r d a r archivo
Excel ” ) ;
}}}
</ s c r i p t >
< s c r i p t s r c=” h t t p s : / / cdn . pubnub . com/ pubnub−dev . j s ”></ s c r i p t >
< s c r i p t t y p e=” t e x t / j a v a s c r i p t ”>

v a r PUBNUB demo = PUBNUB. i n i t ( {


p u b l i s h k e y : ’ pub−c−3a 9 0 b 5 8 f −ec7b −41ee −8838−1788 b98daa33 ’ ,
102 ANEXOS

subscribe key : ’ sub−c −551 f b 4 6 2 −5763−11 e5 −854b−02 e e 2 d d a b 7 f e ’


});

v a r PUBNUB demo1 = PUBNUB. i n i t ( {


p u b l i s h k e y : ’ pub−c−1dcb959e−c245 −4f a 4 −89ba−d 6 6 6 f f d b 2 5 5 b ’ ,
s u b s c r i b e k e y : ’ sub−c −78 a 4 f d 7 4 −60 b f −11e5 −8923−02 e e 2 d d a b 7 f e ’
});

PUBNUB demo1 . s u b s c r i b e ( {
channel : ’ emilio ’ ,
m e s s a g e : f u n c t i o n (m) {

v a r d a t o s= m. s p l i t ( ” , ” ) ;
$$ ( ” t a b l a ” ) . add ( { r a n k : d a t o s [ 3 ] , Tiempo :
d a t o s [ 0 ] , Vi : d a t o s [ 1 ] , Vo : d a t o s [ 2 ] } )
$$ ( ” t a b l a 2 ” ) . add ( { r a n k : d a t o s [ 3 ] , Tiempo :
d a t o s [ 0 ] , Vi : d a t o s [ 1 ] , Vo : d a t o s [ 2 ] } ) } } ) ;
</ s c r i p t >
</body>
</html>

Listing 6.9: Codigo pagina Laboratorio Remoto Planta de Velocidad ”Velocidad.php”


<!DOCTYPE HTML>
<html>
<head>

<meta h t t p−e q u i v=” Content−Type ” c o n t e n t=” t e x t / html ; c h a r s e t=u t f −8”/>


< s c r i p t t y p e=” t e x t / j a v a s c r i p t ” s r c=” c a n v a s j s . min . j s ”></ s c r i p t >
< l i n k r e l =” s t y l e s h e e t ”

h r e f=” h t t p s : / / maxcdn . b o o t s t r a p c d n . com/ f o n t −awesome / 4 . 4 . 0 / c s s / f o n t −awe


some . min . c s s ”>
< l i n k r e l =” s t y l e s h e e t ” h r e f=” webix . c s s ” t y p e=” t e x t / c s s ”>
< l i n k r e l =” s h o r t c u t i c o n ” h r e f=” imgs / v e l o c i d a d . png ” t y p e=” image / png ”>
< s t y l e t y p e=” t e x t / c s s ”> body , td , t h { f o n t −s i z e : 9 px ;} </ s t y l e >
< s c r i p t s r c=” webix . j s ” t y p e=” t e x t / j a v a s c r i p t ”></ s c r i p t >

</head>
<body o n l o a d=” r e l o j i l l o ( ) ”>

<d i v s t y l e= ’ d i s p l a y : none ; ’>


<h2 s t y l e= ’ t e x t −a l i g n : c e n t e r ’> Try t o r e s i z e t h i s c e l l </h2>
<t e x t a r e a i d=” my box ”>
D e s c r i p c i o n : La p l a n t a de V e l o c i d a d e s t a c o n s t i t u i d a p o r un s i s t e m a
d i n a m i c o de un motor de c o r r i e n t e c o n t i n u a , que a l s e r e x c i t a d o p o r un
v o l t a j e en l a e n t r a d a , r e f l e j a en s u s a l i d a un v o l t a j e e l c u a l e s p r o p o r c i o n a l
a l a v e l o c i d a d d e l motor . E s t a p l a n t a e s manejada remotamente , p o r l o
c u a l , s e pueden h a c e r d i s t i n t a s p r u e b a s como : r e s p u e s t a a l e s c a l o n ,
r e s p u e s t a en f r e c u e n c i a , c o n t r o l de t i p o ON−OFF y C o n t r o l en t i e m p o
discreto ( Digital ).
</ t e x t a r e a >
</d i v>
<s t y l e >
. myClass {
f o n t −s t y l e : i t a l i c ;
}
. header {
background−c o l o r : #ADADAD;
color : #f f f f f f ;
}
. titulo{
background−c o l o r : #ADADAD;
c o l o r : #EEEEEE ;
f o n t −w e i g h t : b o l d ;
f o n t −s i z e : 260 %;
f o n t −s t y l e : o b l i q u e ;
f o n t −v a r i a n t : s m a l l −c a p s ;
display : block ;
float : l e f t ;
l e t t e r −s p a c i n g : 2 px ;
t e x t −shadow : 8 px 4 px 8 px #000000;
}
. cuerpo {
background−c o l o r : #ADADAD;
c o l o r : #EEEEEE ;
f o n t −s t y l e : o b l i q u e ;
f o n t −w e i g h t : b o l d ;
t e x t −a l i g n : j u s t i f y ;
position : relative ;
float : l e f t ;
ANEXOS 103

l e t t e r −s p a c i n g : 0 . 5 px ;
b o r d e r : 1 px s o l i d #FFFFFF ;
b o r d e r −bottom−r i g h t −r a d i u s : 3em ;
}
</ s t y l e >
<s t y l e >
. my style . webix hcell {
t e x t −a l i g n : c e n t e r ;
background :#009966;
c o l o r : white ;
f o n t −w e i g h t : b o l d ;
}
. m y s t y l e . webix column {
t e x t −a l i g n : c e n t e r ;
f o n t −s t y l e : i t a l i c ;
b a c k g r o u n d :#ddFFdd ;
}
. m y s t y l e . webix column > div {
b o r d e r −c o l o r :#ddd ;
}
</ s t y l e >
< s c r i p t t y p e=” t e x t / j a v a s c r i p t ” c h a r s e t=” u t f −8”>
l o g i n = [ { c o l s : [ { v i e w : ” t e x t ” , h e i g h t : 3 0 , t y p e : ’ p a s s w o r d ’ , v a l u e : ’ 123 p a s s ’ ,
l a b e l : ” Clave : ” , labelWidth : 8 0 } ,
{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , v a l u e : ” Login ” ,
t y p e : ” form ” , c l i c k : ” $$ ( ’ win3 ’ ) . c l o s e ( ) ; ” } ] } ] ;

escalonV =
[ { rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” R e f e r e n c i a ” , body : { i d : ” e s c a l V ” , v i e w : ” s l i d e r ” , va
l u e : 0 , s t e p : 0 . 1 , min : −10 , max : 1 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r
s t r 1 = j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,
{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , v a l u e : ” Enviar ” ,
t y p e : ” form ” , c l i c k : enviarEV } ] } ] ;

f r e c u e n c i a V =[{ rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” V o l t a j e p i c o a
p i c o ” , body : { i d : ”VppV” , v i e w : ” s l i d e r ” , l a b e l W i d t h : 1 0 0 , v a l u e : 1 0 , s t e p : 0 . 1 ,
min : 0 , max : 2 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r s t r 1 =
j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,
{ v i e w : ” f i e l d s e t ” , l a b e l : ” O f f s e t ” , body : { i d : ” o f f V ” , v i e w : ” s l i d e r ” , l a b e l W i d t h : 1 0 0 , v
a l u e : 0 , s t e p : 0 . 1 , min : − 8 . 0 , max : 8 . 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ;
var s t r 1 = j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,
{ view : ” f i e l d s e t ” , l a b e l : ” F r e c u e n c i a
( Hz ) ” , body : { i d : ” f r e c V ” , v i e w : ” s l i d e r ” , l a b e l W i d t h : 1 0 0 , v a l u e : 1 , s t e p : 0 . 1 ,
min : 0 . 1 , max : 4 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r s t r 1 =
j . toFixed ( 1 ) ; return s t r 1+” Hz” ; } } } ,
{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , v a l u e : ” Enviar ” ,
t y p e : ” form ” , c l i c k : enviarFV } ] } ] ;

controlonoffV
=[{ rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” R e f e r e n c i a ” , body : { i d : ” r e f V ” , v i e w : ” s l i d e r ” , l a b
e l W i d t h : 1 0 0 , v a l u e : 0 , s t e p : 0 . 1 , min : −10 , max : 1 0 , t i t l e : f u n c t i o n ( o b j ) { v a r
j=o b j . v a l u e ; v a r s t r 1 = j . t o F i x e d ( 1 ) ; return s t r 1+” v ” ; } } } ,
{ v i e w : ” f i e l d s e t ” , l a b e l : ” H i s t e r e s i s ” , body : { i d : ”hV” , v i e w : ” s l i d e r ” , l a b e l W i d t h : 1 0 0 ,
v a l u e : 2 , s t e p : 0 . 1 , min : 0 . 1 , max : 4 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r
s t r 1 = j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,
{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , v a l u e : ” Enviar ” ,
t y p e : ” form ” , c l i c k : enviarOV } ] } ] ;

controldigitalV
=[{ rows : [ { v i e w : ” f i e l d s e t ” , l a b e l : ” R e f e r e n c i a ” , body : { i d : ” refDV ” , v i e w : ” s l i d e r ” ,
v a l u e : 0 , s t e p : 0 . 1 , min : −10 , max : 1 0 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ;
var s t r 1 = j . toFixed ( 1 ) ; return s t r 1+” v ” ; } } } ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” Tiempo de
M u e s t r e o ” , body : { i d : ” tiempoDV ” , v i e w : ” s l i d e r ” , v a l u e : 0 . 0 0 5 , s t e p : 0 . 0 0 1 ,
min : 0 . 0 0 1 , max : 0 . 0 1 , t i t l e : f u n c t i o n ( o b j ) { v a r j=o b j . v a l u e ; v a r s t r 1 =
j . toFixed ( 3 ) ; return s t r 1+” s ” ; } } } ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” C o n t r o l a d o r ” , body : { v i e w : ” c a r o u s e l ” , w i d t h : 2 5 0 ,
h e i g h t : 5 0 , c o l s : [ { c s s : ” image ” , t e m p l a t e : img ,
d a t a : { s r c : ” imgs / c o n t r o l a d o r . j p g ” } } ] ,
navigation :{ items : f a l s e , type : ” s i d e ” , buttons : f a l s e }}} ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” Numerador ” , body : { rows : [


{ c o l s : [ { v i e w : ” l a b e l ” , l a b e l : ”b<SUB>0</SUB>” , a l i g n : ” c e n t e r ” } ,
{ v i e w : ” l a b e l ” , l a b e l : ”b<SUB>1</SUB>” , a l i g n : ” c e n t e r ” } ,
{ v i e w : ” l a b e l ” , l a b e l : ”b<SUB>2</SUB>” , a l i g n : ” c e n t e r ” } ,
{ v i e w : ” l a b e l ” , l a b e l : ”b<SUB>3</SUB>” , a l i g n : ” c e n t e r ” } ] } ,
{cols : [
{ i d : ”b0V” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b0V” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
104 ANEXOS

{ i d : ”b1V” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b1V” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”b2V” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b2V” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”b3V” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”b3V” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ] } ] } } ,

{ v i e w : ” f i e l d s e t ” , l a b e l : ” Denominador ” , body : { rows : [


{ c o l s : [ { v i e w : ” l a b e l ” , l a b e l : ” a<SUB>0</SUB>” , a l i g n : ” c e n t e r ” } ,
{ v i e w : ” l a b e l ” , l a b e l : ” a<SUB>1</SUB>” , align : ” center ”} ,
{ v i e w : ” l a b e l ” , l a b e l : ” a<SUB>2</SUB>” , align : ” center ”} ,
{ v i e w : ” l a b e l ” , l a b e l : ” a<SUB>3</SUB>” , align : ” center ” }]} ,
{cols : [
{ i d : ”a0V” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a0V” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”a1V” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a1V” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”a2V” , v i e w : ” t e x t ” ,
v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a2V” , on : { ’ onChange ’ : f u n c t i o n
( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ,
{ i d : ”a3V” , v i e w : ” t e x t ” ,

v a l u e : ’ 0 ’ , v a l i d a t e : webix . r u l e s . isNumber , name : ”a3V” , on : { ’ onChange ’ : f u n c t i o


n ( newv , o l d v ) { t h i s . v a l i d a t e ( ) ; } } } ] } ] } } ,

{ view : ” button ” , h e i g h t : 3 0 , width : 8 0 , a l i g n : ” c e n t e r ” , value : ” Enviar ” ,


t y p e : ” form ” , c l i c k : enviarCDV } ] } ] ;

menu1= [ { i d : ” V e l o c i d a d ” , h e a d e r : ”<span c l a s s =’ w e b i x i c o n f a −r e f r e s h
f a −s p i n ’></span> V e l o c i d a d ” , rows : [ { v i e w : ” l a b e l ” , l a b e l : ”<span
c l a s s =’ w e b i x i c o n f a −c o g f a −s p i n ’></span>
S e l e c c i o n e Prueba a R e a l i z a r ” , inputWidth : 1 0 0 , a l i g n : ” c e n t e r ” } ,
{ view : ” a c c o r d i o n ” , multi : f a l s e ,

rows : [ { i d : ” primeroT ” , h e a d e r : ”<span c l a s s =’ w e b i x i c o n f a − s l i d e r s ’></span>


R e s p u e s t a a l E s c a l o n ” , body : { v i e w : ” form ” , e l e m e n t s : e s c a l o n V } } ,
{ i d : ” segundoT ” , c o l l a p s e d : ’ t r u e ’ , h e a d e r : ”<span c l a s s =’ w e b i x i c o n
f a − s l i d e r s ’></span> R e s p u e s t a en F r e c u e n c i a ” ,
body : { v i e w : ” form ” , e l e m e n t s : f r e c u e n c i a V } } ,
{ i d : ” t e r c e r o T ” , c o l l a p s e d : ’ t r u e ’ , h e a d e r : ”<span c l a s s =’ w e b i x i c o n
f a − s l i d e r s ’></span> C o n t r o l ON−OFF” , body : { v i e w : ” form ” , e l e m e n t s :
controlonoffV } } ,
{ i d : ” c u a r t o T ” , c o l l a p s e d : ’ t r u e ’ , h e a d e r : ”<span c l a s s =’ w e b i x i c o n
f a − s l i d e r s ’></span> C o n t r o l D i g i t a l ” , body : { v i e w : ” form ” , e l e m e n t s :
controldigitalV }}]} ,
{ v i e w : ” f i e l d s e t ” , body : { v i e w : ” b u t t o n ” , l a b e l : ” B o r r a r Datos ” , c l i c k : r e f r e s c a r }}
]
}];

menu2=[{ i d : ”<span c l a s s =’ w e b i x i c o n f a −l i n e −c h a r t ’></span>G r a f i c a ” ,


rows : [ { v i e w : ” c h a r t ” , t y p e : ” l i n e ” ,
x A x i s : { t e m p l a t e : ”#Tiempo#” , t i t l e : ” Tiempo [ s ] ” , l i n e C o l o r : ”#66 c c f f ” } ,
y A x i s : { s t a r t : −10 , s t e p : 0 . 5 , end : 1 0 , t i t l e : ” V o l t a j e [V] ” ,
l i n e C o l o r : ”#66 c c f f ” , t e m p l a t e : f u n c t i o n ( v a l u e ) { return v a l u e %1?” ” : v a l u e } } ,
l e g e n d : { v a l u e s : [ { t e x t : ” Vi ” , c o l o r : ”#FF0000 ” } , { t e x t : ”Vo” , c o l o r : ”#0101DF” } ] , a
l i g n : ” r i g h t ” , v a l i g n : ” m i d d l e ” , l a y o u t : ” y ” , w i d t h : 4 0 , margin : 8 } ,
s e r i e s : [ { v a l u e : ”#Vi#” ,
i t e m : { b o r d e r C o l o r : ”#FF0000 ” , c o l o r :
”# f f f f f f ” , t y p e : ” o ” , r a d i u s : 0 , borderWidth : 1 } ,
l i n e : { c o l o r : ”#FF0000 ” , w i d t h : 3 , shadow : t r u e } ,
t o o l t i p : { t e m p l a t e : ”#Tiempo# , #Vi#” }
},
{ v a l u e : ”#Vo#” ,
i t e m : { b o r d e r C o l o r : ”#0101DF” , c o l o r :
”# f f f f f f ” , t y p e : ” o ” , r a d i u s : 0 , borderWidth : 1 } ,
l i n e : { c o l o r : ”#0101DF” , w i d t h : 3 } ,
t o o l t i p : { t e m p l a t e : ”#Tiempo# , #Vo#” }
}
] , id : ” tabla2 ” ,
data : [ ] } ] } ,

{ i d : ”<span c l a s s =’ w e b i x i c o n f a −t a b l e ’></span>Tabla ” ,
rows : [ { v i e w : ” d a t a t a b l e ” , columns : [
{ i d : ” rank ” , header : ”” , c s s : ” rank ” , width : 5 0 } ,
{ i d : ” Tiempo ” , h e a d e r : ” Tiempo ( s ) ” , w i d t h : 3 1 0 } ,
{ i d : ” Vi ” , header : ” Voltaje de Entrada ( v ) ” , w i d t h : 3 1 0 } ,
ANEXOS 105

{ i d : ”Vo” , h e a d e r : ” V o l t a j e de S a l i d a ( v ) ” , w i d t h : 3 1 0 }
],
a u t o w i d t h : f a l s e , i d : ” t a b l a ” , s e l e c t : ” row ” , c s s : ” m y s t y l e ” ,
data : [ ] ,
},
{ c o l s : [ { view : ” segmented ” , o p t i o n s : [ ”” ] } ,
{ v i e w : ” b u t t o n ” , t y p e : ” i c o n B u t t o n ” , i c o n : ” c l o u d −download ” , l a b e l : ” E x p o r t a r
Excel ” , width : 1 5 0 , c l i c k : e x p o r t a r e x c e l } ,
{ view : ” segmented ” , o p t i o n s : [ ”” ] }
]}
]}
];

colum1 =[ { v i e w : ” s c r o l l v i e w ” , i d : ” v e r s e s ” , s c r o l l : ” y ” ,
body : { rows : [ { v i e w : ” t a b v i e w ” , a n i m a t e : t r u e , c e l l s : menu1 } ] } } ] ;
p i e p a g p r i n c i p a l =[
{ c s s : ” header ” } ,
{ c s s : ” header ” , view : ” c a r o u s e l ” , h e i g h t : 1 5 2 , width : 4 7 8 , i d : ” c a r o u s e l 1 ” ,
s c r o l l S p e e d : ” 500ms” ,
animate : { type : ” f l i p ” , subtype : ” v e r t i c a l ” } ,
navigation :{ items : f a l s e , type : ” s i d e ” , buttons : true } ,
c o l s : [ { t e m p l a t e : img , d a t a : { s r c : ” imgs / i m a g e 0 0 1 . j p g ” } } , { t e m p l a t e : img , d a t a : {
s r c : ” imgs / i m a g e 0 0 2 . j p g ” } } ] } ,
{ c s s : ” header ” } ] ;

p a g i n a p r i n c i p a l =[
{ c o l s : [ { c s s : ” h e a d e r ” , t e m p l a t e : img , d a t a : { s r c : ” imgs / i m a g e 0 0 4 . j p g ” } , w i d t h : 3 6
3} ,
{ rows : [ { v i e w : ” l a b e l ” , l a b e l : ” P l a n t a de V e l o c i d a d ” ,
align : ” center ” , css : ” t i t u l o ” , height :100} ,
{ height :212 ,
t e m p l a t e : ” html−>my box ” , c s s : ” c u e r p o ” , w i d t h : 9 0 5 } , { c s s : ” h e a d e r ” }
]} ,
{ c s s : ” header ”}
]} ,
{ cols : piepagprincipal }];

webix . u i ( { v i e w : ” window ” , i d : ” win3 ” , f u l l s c r e e n : t r u e ,


head : { v i e w : ” t o o l b a r ” , paddingY : 2 ,
c o l s : [ { type : ” header ” , b o r d e r l e s s : true , template : ” Estacion
Remota” , w i d t h : 1 2 3 0 } ,
{ v i e w : ” i c o n ” , i c o n : ” t i m e s − c i r c l e ” , a l i g n : ” r i g h t ” , c l i c k : ” $$ ( ’ win3 ’ ) . c l o s e ( ) ; ” } ] } ,

body : { rows : p a g i n a p r i n c i p a l } } ) . show ( ) ;

webix . u i ( { c s s : ” myClass ” , v i e w : ” s c r o l l v i e w ” , i d : ” v e r s e s ” , s c r o l l : ” x ” , body :


{ rows : [

{ c o l s : [ { view : ” t o o l b a r ” ,
paddingY : 2 , c o l s : [ { t y p e : ” h e a d e r ” , b o r d e r l e s s : t r u e , t e m p l a t e : ” E s t a c i o n
Remota” , w i d t h : 1 1 6 1 } ,
{ view : ” button ” , v a l u e : ” C e r r a r S e s i o n ” , width : 1 0 5 ,
align : ” right ” , click : cerrarsesion }]}]} ,

{ c o l s : [ { w i d t h : 3 3 0 , rows : colum1 } ,
{ v i e w : ” t a b v i e w ” , a n i m a t e : t r u e , c e l l s : menu2 } ] } ,
]
}
});

<!−− f u n c i o n e s para enviar d a t o s −−>

f u n c t i o n enviarEV ( ) { PUBNUB demo . p u b l i s h ( { c h a n n e l :


’ v e l o c i d a d 1 ’ , message : ”a” } ) ;
PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ v e l o c i d a d 1 ’ , m e s s a g e :
$$ ( ” e s c a l V ” ) . g e t V a l u e ( ) } ) ;
}

f u n c t i o n enviarFV ( ) { PUBNUB demo . p u b l i s h ( { c h a n n e l :


’ v e l o c i d a d 1 ’ , m e s s a g e : ”b” } ) ;

PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ v e l o c i d a d 1 ’ , m e s s a g e :
$$ ( ”VppV” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ” o f f V ” ) . g e t V a l u e ()+ ” , ”+
$$ ( ” f r e c V ” ) . g e t V a l u e ( ) });
}

f u n c t i o n enviarOV ( ) { PUBNUB demo . p u b l i s h ( { c h a n n e l :


’ v e l o c i d a d 1 ’ , message : ” c ” } ) ;
PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ v e l o c i d a d 1 ’ , message :
106 ANEXOS

$$ ( ” r e f V ” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”hV” ) . g e t V a l u e ( ) });
}

f u n c t i o n enviarCDV ( ) { PUBNUB demo . p u b l i s h ( { c h a n n e l :


’ v e l o c i d a d 1 ’ , m e s s a g e : ”d” } ) ;
PUBNUB demo . p u b l i s h ( { c h a n n e l : ’ v e l o c i d a d 1 ’ ,

m e s s a g e : $$ ( ” refDV ” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ” tiempoDV ” ) . g e t V a l u e ( )
+ ” , ”+ $$ ( ”b0V” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”b1V” ) . g e t V a l u e ( ) + ” , ”+
$$ ( ”b2V” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”b3V” ) . g e t V a l u e ( )
+ ” , ”+ $$ ( ”a0V” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”a1V” ) . g e t V a l u e ( ) + ” , ”+
$$ ( ”a2V” ) . g e t V a l u e ( ) + ” , ”+ $$ ( ”a3V” ) . g e t V a l u e ( )
});
}

<!−− f u n c i o n e s de r e c i b i r d a t o s −−>
function cerrarsesion (){

refrescar ();
window . l o c a t i o n=” h t t p : / /www. e s t a c i o n r e m o t a . n e t 7 6 . n e t / ” ;

}
f u n c t i o n img ( o b j ) { return ’<img s r c =” ’+o b j . s r c+ ’ ” c l a s s =” c o n t e n t ”
o n d r a g s t a r t =” r e t u r n f a l s e ”/> ’ }
f u n c t i o n NumeroAceptable ( v a l u e ) { i f ( v a l u e >−1000){ i f ( v a l u e <1000){ return
v a l u e }}}
function r e f r e s c a r (){
$$ ( ” t a b l a ” ) . c l e a r A l l ( ) ;
$$ ( ” t a b l a 2 ” ) . c l e a r A l l ( ) ;
}
<!−− f u n c i o n e s de e x p o r t a r d a t o s −−>
function exportarexcel (){

$$ ( ” t a b l a ” ) . e x p o r t T o E x c e l ( )

function r e l o j i l l o (){
f e c h a = new Date ( )
h o r a = f e c h a . g e t H o u r s ()+ ” : ”+f e c h a . g e t M i n u t e s ()+ ” : ”+f e c h a . g e t S e c o n d s ( )
setTimeout ( ’ r e l o j i l l o ( ) ’ ,1000)
i f ( h o r a==” 0 : 0 : 0 ” | | h o r a==” 2 : 0 : 0 ” | | h o r a==” 4 : 0 : 0 ” | | h o r a==” 6 : 0 : 0 ” | |
h o r a==” 8 : 0 : 0 ” | | h o r a==” 1 0 : 0 : 0 ” | | h o r a==” 1 2 : 0 : 0 ” | | h o r a==” 1 4 : 0 : 0 ” | |
h o r a==” 1 6 : 0 : 0 ” | | h o r a==” 1 8 : 0 : 0 ” | | h o r a==” 2 0 : 0 : 0 ” | | h o r a==” 2 2 : 0 : 0 ” ) {
cerrarsesion ();}
i f ( h o r a==” 1 : 5 0 : 0 ” | | h o r a==” 3 : 5 0 : 0 ” | | h o r a==” 5 : 5 0 : 0 ” | | h o r a==” 7 : 5 0 : 0 ”
| | h o r a==” 9 : 5 0 : 0 ” | | h o r a==” 1 1 : 5 0 : 0 ” | | h o r a==” 1 3 : 5 0 : 0 ” | |
h o r a==” 1 5 : 5 0 : 0 ” | | h o r a==” 1 7 : 5 0 : 0 ” | | h o r a==” 1 9 : 5 0 : 0 ” | |
h o r a==” 2 1 : 5 0 : 0 ” | | h o r a==” 2 3 : 5 0 : 0 ” ) {

a l e r t ( ” F a l t a n 10 Minutos p a r a c e r r a r s e s i o n , Por f a v o r g u a r d a r archivo


Excel ” ) ; }
}
</ s c r i p t >
< s c r i p t s r c=” h t t p s : / / cdn . pubnub . com/ pubnub−dev . j s ”></ s c r i p t >
< s c r i p t t y p e=” t e x t / j a v a s c r i p t ”>

v a r PUBNUB demo = PUBNUB. i n i t ( {


p u b l i s h k e y : ’ pub−c−f b 9 a 4 9 9 8 −5b3c −4f e 1 −b988−d e 5 8 9 8 8 d 6 8 3 9 ’ ,
s u b s c r i b e k e y : ’ sub−c−a434bc7a −617 f −11e5 −85c0 −0619 f 8 9 4 5 a 4 f ’
});

v a r PUBNUB demo1 = PUBNUB. i n i t ( {


p u b l i s h k e y : ’ pub−c−e f d 9 b 4 0 2 −e 6 b f −44d3−a0aa −1 b 5 b f f 3 3 8 1 3 0 ’ ,
s u b s c r i b e k e y : ’ sub−c−c 5 7 a c 8 d e −617 f −11e5−a48b −0619 f 8 9 4 5 a 4 f ’
});

PUBNUB demo1 . s u b s c r i b e ( {
channel : ’ velocidad2 ’ ,
m e s s a g e : f u n c t i o n (m) {
v a r d a t o s= m. s p l i t ( ” , ” ) ;
$$ ( ” t a b l a ” ) . add ( { r a n k : d a t o s [ 3 ] , Tiempo :
d a t o s [ 0 ] , Vi : d a t o s [ 1 ] , Vo : d a t o s [ 2 ] } )
$$ ( ” t a b l a 2 ” ) . add ( { r a n k : d a t o s [ 3 ] , Tiempo :
d a t o s [ 0 ] , Vi : d a t o s [ 1 ] , Vo : d a t o s [ 2 ] } )
}});
</ s c r i p t >
</body>
</html>
Bibliografı́a

[1] Diana Marcela Ovalle Martı́nez, Joel Mateo Moreno, Luis Francisco Combita Proyecto de
Investigación: “Diseño e implementación de plantas básicas para la enseñanza de conceptos
de control en ingenierı́a”. Grupo de investigación IDEAS, Universidad Distrital Francisco
José de Caldas. Facultad de Ingenierı́a. Bogotá, abril 2013.

[2] Luigi Atzori, Antonio Iera y Giacomo Morabito, “The Internet of Things: A survey”.
Octubre, 2010.

[3] Jayavardhana Gubbi, Rajkumar Buyya, Slaven Marusic y Marimuthu Palaniswami, “In-
ternet of Things (IoT): A vision, architectural elements, and future directions”. Septiem-
bre, 2013.

[4] Texas Instruments, “Datasheet MIXED SIGNAL MICROCONTROLLER


MSP430G2553 ”. 2015 En lı́nea. Available: http:www.ti.comlitdssymlinkmsp430g2553.pdf.

[5] Texas Instruments, “Datasheet LM35 Precision Centigrade Temperature Sensors ”. 2015
En lı́nea. Available: http:www.ti.comlitdssymlinklm35.pdf.

[6] Pittman, “Brush Commutated DC Servo Motors. 6213 Series”. 2015.

[7] Charles Close, “Modeling and Analysis of Dynamic Systems”. Jhon Wiley y Sons INC.
1995.

[8] Intel, Datasheet Intel Galileo Gen1, En lı́nea. Available:


http://download.intel.com/support/galileo/sb/galileo datasheet 329681 003.pdf.

[9] Intel Communities, Sampling Rate of the Analog Inputs, En lı́nea. Available:
https://communities.intel.com/thread/48109start=0&tstart=0.

[10] Freescale, Datasheet Freescale FRDM K64F, En lı́nea. Available:


https://developer.mbed.org/media/uploads/GregC/frdm-k64f ug rev0.1.pdf.

[11] Texas Instrument, Datasheet LMx58-N Low-Power Dual-Operational Amplifiers, En


lı́nea. Available: http://www.ti.com/lit/ds/symlink/lm158-n.pdf.
108 BIBLIOGRAFÍA

[12] Vytautas Gabriunas,“Apuntes de Electrónica”.Universidad Distrital Francisco Jose de


Caldas, 1999.

[13] Ramón Pallás Areny,“Sensores y acondicionadores de señal ”. Editorial Marcombo,


2003.

[14] Fred Eady,“Networking and Internetworking with Microcontrollers”. ELSEIVER-


NEWNES , 2004.

[15] Andrew S. Tanenbaum,“Redes de computadoras,”. Editorial Pearson PLC, 5ta Edición,


2003.

[16] F. Halsall, “Computer Networking and the internet”. Editorial Pearson, 2005.

[17] Kaazing, KAAZING WEBSOCKET GATEWAY, En lı́nea. Available:


https://s3.amazonaws.com/download.kaazing.com/com/file/kaazing-detailed-technical-
overview.pdf.

[18] Pubnub, Pubnub Data Push, En lı́nea. Available:


http://pubnub.github.io/slides/workshop/full3.

[19] K. Ogata, “Ingenierı́a de Control Moderna”. Prentice Hall. 1998.

[20] B. Kuo, “Sistemas de Control Automático”. Prentice Hall. 1996.

[21] Charles L. Phillips y H. Troy Nagle, “Digital Control System Analysis and Design”.
Editorial Prentice Hall, 1995.

[22] Maestro de la web, Los diferentes lenguajes de programación para la web, En lı́nea. Avai-
lable: http://www.maestrosdelweb.com/los-diferentes-lenguajes-de-programacion-para-la-
web/

[23] J. D. Gauchat, “El gran libro de HTML5, CSS3 y JavaScript”. Editorial Marcombo,
2012.

[24] Webix, JavaScript ui widgets library, En Lı́nea. Available: http://webix.com/.

[25] Helma Spona, “Programación de bases de datos con MySQL y PHP ”. Editorial Mar-
combo, 2008.

[26] Ángel Cobo, Patricia Gómez, Daniel Pérez y Rocio Rocha, “MySQL y PHP: Tecnologı́as
para el desarrollo de aplicaciones web”. Editorial Marcombo, 2008.

[27] E. Vega, G. Muñoz, H. Roncancio, H.Velasco, J. Ballén y C. Rodrı́guez, “Laboratorio


Remoto en la Educación de la Ingenierı́a, Ingenierı́a, Facultad de Ingenierı́a Universidad
Distrital Francisco Jose de Caldas, vol. 7, no 1, 2002.
BIBLIOGRAFÍA 109

[28] C. A. Ibarra, S. Medina y Á. Bernal, “Implementación de un Laboratorio remoto, Revista


Iberoamericana de Tecnologı́a en Educación y Educación en Tecnologı́a, TE&ET, no 2,
pp. 62-70, 2007.

[29] C. Ariza y D. Amaya, “LABORATORIO REMOTO PARA LA ENSEÑANZA DE LA


PROGRAMACIÓN DE UN ROBOT INDUSTRIAL, Ing. USBMed, vol. 2, no 1, 2011.

[30] R. Costa-Castello, M. Valles, L. M. Jiménez, A. Valera y R. Puerto, “Integración de


dispositivos fı́sicos en un laboratorio remoto de control mediante diferentes plataformas:
LabView, Matlab y C/C++, Revista Iberoamericana de Automática e Informatica Indus-
trial RIAI, vol. 7, no 1, pp. 23-34, 2010.

[31] N. Alieane, “Experiencia de Uso de un Laboratorio Remoto de Control, Revista Iberoa-


mericana de Automática e Informatica Industrial RIAI, vol. 7, no 1, pp. 85-90, 2010.

[32] J. M. A. Márquez y T. J. M. Sanguino, “Diseño de Laboratorios Virtuales y/o Remotos.


Un caso Práctico, Revista Iberoamericana de Automática e Informatica Industrial RIAI,
vol. 7, no 1, pp. 64-72, 2010.

[33] F. L. Luro, L. Bertogna, L. Sánchez, J. Rodrı́guez y R. d. Castillo, “Infraestructura


para laboratorios de acceso remoto, Revista Iberoamericana de Tecnologı́a en Educación
y Educación en Tecnologı́a TE&ET, pp. 31-39, 2009.

[34] S. Sitnikov, A. Borisov, B. Kruk y N. Popov, “Remote Access Laboratory for Analog
and Digital Electronic Course, EUROCON - International Conference on Computer as a
Tool (EUROCON), Conference LISBON, pp. 1-4, 2011.

[35] R. Hashemian y T. R. Pearson, “A Low-Cost Server-Client Methodology for Remote


Laboratory Access for Hardware Design, Frontiers in Education Conference, FIE ’09. 39th
IEEE, pp. 1-5, 2009.

[36] A. Choudhary, S. Aishwarya, M. Faizan, A. Kumar, M. K. Pathak y V. Kumar, “Vir-


tual Lab: Remote Access and Speed Control of DC Motor using Ward-Leonard System,
Technology Enhanced Education (ICTEE), IEEE International Conference on , pp. 1-7,
2012.

[37] F. Scriptore, J. Guerra, D. Laperuta y R. Mikami, “Web system for managing a remote
access laboratory: a tool for a computer networks disciplines, Remote Engineering and
Virtual Instrumentation (REV), 11th International Conference on, pp. 35-40, 2014.

[38] V. Hrusha, R. Kochan, Y. kurylyak y O. Osolinskiy, “Development of Measurement


System with Remote Access Based on Internet, Intelligent Data Acquisition and Advanced
Computing Systems: Technology and Applications. IDAACS. 4th IEEE Workshop on, pp.
126-128, 2007.

También podría gustarte