24
UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL SAN NICOLAS INGENIERIA EN ELECTRONICA PROBLEMA DE INGENIERÍA TECNICAS DIGITALES III Visualización de señales de ca mpo por Internet Integrantes: Guttfleisch, Martín López, Rubén Madrid, Francisco Docentes: Profesor: Poblete Felipe Auxiliar: Gonzalez Mariano AÑO 2008

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL …F3n%20de%20se%F1... · y jerárquica a una interfaz de un dispositivo dentro de una red, en este caso el número identifica el

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL SAN NICOLAS

INGENIERIA EN ELECTRONICA

PROBLEMA DE INGENIERÍA

TECNICAS DIGITALES III

Visualización de señales de campo por Internet

Integrantes:

Guttfleisch, Martín López, Rubén Madrid, Francisco

Docentes:

Profesor: Poblete Felipe Auxiliar: Gonzalez Mariano

AÑO 2008

Técnicas Digitales III – Problema de ingeniería

2

INDICE

Objetivos del trabajo Materias integradas Pag: 03 Posibles aplicaciones Pag: 03 Profesores entrevistados Pag: 03 Bibliografia Pag: 03 Desarrollo Introduccion Pag: 04 Teoria de funcionamiento Pag: 04 Resultado de las pruebas Pag: 12 Analisis de velocidad de transmisión Pag: 12 Analisis de costos Pag: 13 Conclusiones Pag: 14 Anexos Definiciones Pag: 15 Listado de programas Programacion de microcontrolador Pag: 16 Archivo de ingreso a base de datos Pag: 18 Visualizacion de dato analógico online Pag: 18 Visualizacion de color según variable digital Pag: 19 Visualizacion de historial de variable digital Pag: 20 Programa para observar estado de base de datos Pag: 21 Pagina para obtener valores enviados por el AP Pag: 22 Cálculo de CRC-8 en servidor Pag: 22

Técnicas Digitales III – Problema de ingeniería

3

OBJETIVOS DEL TRABAJO

La finalidad de este proyecto es cumplimentar los requisitos necesarios para la aprobación de Técnicas Digitales III a través de la resolución de “problema de ingeniería”. El proyecto realizado consiste en la visualización de señales de campo mediante el uso de Internet. En el presente informe se detallará y analizará los procedimientos y problemas encontrados en su realización.

MATERIAS INTEGRADAS

Sistemas de comunicaciones 2

Instrumentación y Control de Procesos

Técnicas Digitales II

POSIBLES APLICACIONES

El presente proyecto puede ser aplicado para el envío de diversos datos tanto analógicos como digitales para su visualización remota. En aplicaciones como la industria, medicina o controles de consumos de servicios en hogares.

PROFESORES ENTREVISTADOS

• Juan Arce (PHP, MySql, Servidores Web)

• Georgina Rodríguez (IP Públicos)

BIBLIOGRAFÍA

• Sitios de Internet

http://www.gnu.org/software/wget/ - Pagina oficial WGET

http://es.wikipedia.org/wiki/Wikipedia:Portada - Enciclopedia de consulta

http://www.aprouter.com.br/ - Descarga Firmware

http://www.realtek.com.tw/ - Fabricante Chip RTL8186

http://www.micronet.com.tw/ - Fabricante Access Point

http://www.microchip.com - Fabricante Microcontrolador

http://wive-ng.sourceforge.net/ - Desarrollo de Firmware WIVE

http://www.aditus.nu/jpgraph/ - Desarrollo de librerías graficas de PHP

http://www.wampserver.com/en/presentation.php - Paquete Wamp Server

Técnicas Digitales III – Problema de ingeniería

4

DESARROLLO

INTRODUCCIÓN

La motivación para este proyecto surge de la posibilidad de tener acceso a valores de señales distantes. Por esta razón se entiende que si es posible “cargar” los datos deseados en Internet, luego será posible su consulta desde cualquier estación conectada a esta red.

Envío de datos Fig. 1

Teniendo una planta con información de variables analógicas ó digitales, se realiza una toma de datos a través de un microcontrolador y la comunicación del micro por puerto USART con el Access Point. Utilizando el dispositivo Access Point para el envió de información a una maquina encargada de su publicación Web será posible acceder a los datos deseados. Si bien este proyecto no establece el campo donde se obtendrán las señales, su elección podrá ser variada lo cual evaluaremos más adelante.

TEORÍA DE FUNCIONAMIENTO

Recorriendo el camino de los datos hacia atrás, desde una maquina conectada a Internet es posible comunicarse o acceder a los contenidos de la maquina servidor la cual cuente con IP PUBLICO.

“Una dirección IP pública es un número que identifica de manera lógica y jerárquica a una interfaz de un dispositivo dentro de una red, en este caso el número identifica el punto de enlace con Internet.”

Esta comunicación se realiza direccionando a la maquina servidor en la barra de direcciones del navegador. Desde aquí llamaremos a las “páginas” cargadas en el servidor. En el servidor, encontramos un conjunto de programas necesarios para el hosting de nuestras páginas así también como un programa administrador de bases de datos y el necesario para interpretar código PHP.

Adap. Señal USART TCP/IP TCP/IP

Planta Internet Access Point Servidor µC

Técnicas Digitales III – Problema de ingeniería

5

Los programas utilizados para estas funciones son: Servidor HTTP Apache: software (libre) servidor HTTP de código abierto para plataformas Unix (BSD, GNU/Linux, etc.), Windows, Macintosh y otras, que implementa el protocolo HTTP/1.1 y la noción de sitio virtual.

MySQL: Sistema de gestión de base de datos relacional, multihilo y multiusuario con más de seis millones de instalaciones MySQL AB —desde enero de 2008 una subsidiaria de Sun Microsystems— desarrolla MySQL como software libre en un esquema de licenciamiento dual.

Por un lado se ofrece bajo la GNU GPL para cualquier uso compatible con esta licencia, pero las empresas que quieran incorporarlo en productos privativos pueden comprar a la empresa una licencia específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C.

PHP: Lenguaje interpretado de propósito general ampliamente usado y que está diseñado especialmente para desarrollo Web y puede ser embebido dentro de código HTML. Generalmente se ejecuta en un servidor Web, tomando el código en PHP como su entrada y creando páginas Web como salida.

La mejor opción para el uso de estos programas es obtener un “paquete” que los vincule entre sí con sus correspondientes configuraciones ya establecidas. Para ello hicimos uso de WampServer. WampServer es un entorno de desarrollo en español para plataforma Windows el cual permite crear aplicaciones Web con Apache, PHP y MySQL. Es necesaria la configuración de este paquete para obtener permisos de admisión en el servidor, su modificación en el archivo http.conf es la siguiente:

<Directory />

Options FollowSymLinks

AllowOverride None

# Order deny,allow

Order Allow,Deny

Allow from all

</Directory>

Con el carácter # trasformamos la declaración en comentario y permitimos entonces la consulta de las paginas guardadas en nuestro servidos desde su exterior.

Técnicas Digitales III – Problema de ingeniería

6

Para nuestra aplicación creamos una base de datos llamada “Variables” con una tabla perteneciente a esta base llamada “Datos”. En las siguientes figuras podemos observar las pantallas de MySqlAdmin donde fueron creadas y se reflejan los campos de valores y sus configuraciones.

Atributos de base de datos Variables Fig. 2

En esta pantalla observamos los atributos de los campos generados en la tabla. Encontramos dos variables de tipo int. y una llamada t de tipo time. Esta ultima variable guardara en su contenido los valores de tiempo cuando se realizó la caga de datos.

Atributos de la tabla datos Fig. 3

Se desarrolló un programa index.php el cual es el encargado de modificar la base de datos con los nuevos valores enviados por el Access Point. El código completo de este programa se encuentra en Anexo 1 para su consulta, aquí veremos función principal:

$query = "insert into datos (var1, var2, t) VALUES ('$var1','$var2',now())"; En esta línea, observamos que se ingresan los datos obtenidos desde la barra de direcciones y se guardan respectivamente en los campos de nombre var1 y var2. El campo T el cual represente el tiempo en cual fue hecha la actualización de datos toma el valor devuelto por la función NOW(). Dicha función es especifica de MySql y da como resultado la hora, minutos y segundos de la maquina servidor.

Para llamar a nuestro programa index.php e informarles los nuevos valores de las variables direccionamos al host de destino de la siguiente forma:

http://localhost/tecnicas3/index.php?var1=2&var2=2

Este paso lo realizamos para ingreso manual de valores y será después el direccionamiento del Access Point para enviar la información proveniente del microcontrolador. En las siguientes tablas se detallan algunos valores ingresados en forma manual a la base de datos. Observamos dos pantallas, la primera correspondiente a la ventana de navegación de MySqlAdmin y la segunda es de la consola MySql desde donde también podemos acceder a los datos con la sentencia:

Técnicas Digitales III – Problema de ingeniería

7

mysql> SELECT * FROM datos;

Valores ingresados en tabla Figura 4

En fase de pruebas se realizó un programa php dedicado a imprimir en pantalla los valores de los campos. A esté programa se puede acceder a través de:

http://localhost/tecnicas3/showdata.php

Su archivo fuente se encuentra en el Anexo 1 con nombre showdata.php. La pantalla de resultado de éste código se puede observar en nuestro navegador Web detallando los valores de los campos.

Para realizar la visualización final de los datos se eligió una descripción en forma de curva para el dato de variable analógica y uno de estado ON/OFF para las digitales. Esto se logró con el uso de las librerías gratuitas JPGRAPH.

Pantalla showdata.php Figura 5

El uso de estas librerías de distribución gratuita para uso no comercial aporta el código necesario para crear archivos de extensión JPG que luego son llamados en las respectivas paginas para el “display” de la información solicitada.

Diseñamos para la presentación del trabajo un sitio Web alojado en nuestro servidor desde donde podremos consultar tanto variables “online” como históricos de éstas variables con criterio de búsqueda por fechas.

Técnicas Digitales III – Problema de ingeniería

8

Pagina principal del proyecto Figura 6

En los distintos menús de nuestra página ingresaremos tanto a un pequeño resumen de trabajo y sus objetivos como a información de contacto de los miembros del proyecto.

Para la visualización “online” de nuestra planta tenemos disponible la actualización de los valores en el menú datos online donde obtendremos los estados de la variable analógica y las digitales.

Pantalla de datos online Figura 7

Técnicas Digitales III – Problema de ingeniería

9

Para la visualización de datos históricos se presenta un menú para la elección del rango de tiempo a visualizar por cada variable.

Éste menú enviará una consulta a nuestro servidor para realizar los códigos PHP que luego serán impresos en pantalla como JPG con la información de la variable solicitada.

Pantalla de datos historicos Figura 7

Siguiendo los datos desde su destino a su obtención, comprendimos que desde una maquina con conexión a Internet es posible comunicarse con un servidor de nuestra base de datos actualizada. Esta actualización de datos la realizamos a partir de la información que nos comunica el dispositivo Access Point por protocolo TCP/IP. Nuestro Access Point elegido para esta aplicación es el MICRONET SP918GK.

Access Point Micronet SP918GK Figura 8

Para su utilización se realizó una actualización del Firmware del dispositivo. Necesitábamos que el programa residente de este equipo soportara lenguaje Linux y por lo tanto sea de uso libre en nuestra aplicación. La búsqueda de un Firmware de estas características no es complicada y se pueden obtener en paginas fabricantes de estos dispositivos, pero si bien utilizan plataforma UNIX es restringido el acceso al publico a través de la conexión USART ó modo consola. Lo fabricantes cuentan con un usuario y contraseña no proporcionados al publico, en nuestro intento por utilizarlos nos comunicamos con el soporte técnico de la firma fabricante y nos fue rechazada la información. Adjuntamos conversaciones por mail con este soporte técnico para brindar más información. Considerando estos detalles, realizamos una búsqueda de plataformas libre y con acceso no restringido, entre ellas se consideró un FW de los desarrolladores AP ROUTERS pero si bien trabaja con plataforma UNIX se debe tener licencia para uso público y se encontraba en idioma portugués. Por consiguiente, instalamos en nuestro dispositivo un FW gratuito y en constante desarrollo llamado Wive-NG.

Técnicas Digitales III – Problema de ingeniería

10

Pantalla principal de Firmware Wiwe

Figura 9 Esta plataforma, de posible origen ruso, se encuentra libre y en idioma ingles para el uso. El desarrollo de Wive-NG es para todo dispositivo basado en el chip RTL8186 pudiendo ser estos tanto Access Point como Routers u otros dispositivos inalámbricos. Contamos con un manual de usuario de este FW pero no fue de gran ayuda por su idioma Ruso, igualmente a través de él se conocieron los datos de usuario y contraseña para administrador y el IP por defecto que toma el AP.

Se hace uso de la sentencia WGET de Linux para la actualización de nuestros datos en servidor, al ejecutarla el Access point, realiza una “descarga” de la pagina WEB solicitada.

“GNU Wget es una herramienta de Software Libre que permite la descarga de contenidos desde servidores Web de una forma simple. Su nombre deriva de World Wide Web (w), y de «obtener» (en inglés get),

esto quiere decir: obtener desde WWW.”

A la vez que realiza esta descarga, se proporciona al programa index.php los nuevos valores a actualizar en la base de datos. Especificamente la “descarga” de esta pagina no tiene ningún uso y ni siquiera es recolectada o leída por ningún dispositivo. La ejecución de esta sentencia de descarga se realiza con el único objetivo de actualizar los datos haciendo uso de la página o función en PHP ya nombrada. Es posible realizar la conexión de los cables de datos desde el micro a la placa del AP a través del puerto disponible al desarmar la carcaza del AP. Es un puerto interno no disponible desde el exterior.

Placa de Acces Point Figura 10

Técnicas Digitales III – Problema de ingeniería

11

El microcontrolador elegido para el proyecto fue el PIC 16F873A. Este dispositivo cuenta con una serie de puertos configurables como entrada y salida, los cuales se disponen de la siguiente manera:

PIN AN1 adquisición de datos en forma analógica.

PIN PB0 – PB2 obtención de 3 valores digitales.

PIN PB7 salida para led de estado.

PIN RC6 salida de transmisor (Tx) puerto USART.

Circuito de simulación variable analogica-digital Figura 11

El objetivo de este microcontrolador es el de tomar los datos de un campo o planta en forma analógica y digital para su posterior comunicación vía puerto de comunicación USART o SCI. Nuestro programa “cargado” en el micro es encargado de tomar los valores de los puertos A y B y enviarlos a través de la siguiente sentencia hacia el Access Point:

wget ´http://192.168.0.1/localhost/tecnicas3/index.php?var1=

Inmediatamente luego de esa cadena de caracteres enviados al AP es ingresado en el puerto USART el valor de la variable analógica, luego es escrito:

&var2=

El valor que toma el Puerto B de nuestro micro. Esta sentencia es similar a la descripta en el inicio del informe donde se explica el ingreso manual de los datos a la base.

Para finalizar el envio de los datos, son ingresados los resultados de los algoritmos de CRC-8. Estos cálculos son utilizados para la verificación de los datos ingresados. A través de un polinomio estandar conocido por el emisor y el receptor de los datos se realiza el mismo calculo de división en modulo 2 de cada dato y se compara los resultados en el servidor. Si el resultado obtenido en el resto de la división coincide con el enviado por nuestro microcontrolador se verifica que el dato es genuino.

Se selecciono este método de verificación de datos ya que tiene la particularidad de detectar al 100% los cambios simples de bit como dobles, y hasta un 99,98% en cambios multilpes.

Técnicas Digitales III – Problema de ingeniería

12

En nuestra pagina Web esta disponible la lista de datos que no cumplieron esta verificación y se adjunta en anexo el procedimiento y cálculos que se realizan.

Una vez obtenidos los datos el microcontrolador envía la sentencia wget al AP con los nuevos valores, éste último actualiza los datos en la base al direccionar a nuestro PHP en el servidor. Por lo tanto, obtenemos un sistema de actualización automático de datos para su posible consulta desde cualquier maquina en Internet.

RESULTADOS DE LAS PRUEBAS

Para realizar las pruebas de nuestro prototipo implementamos el circuito de obtención de datos en un protoboard con el respectivo microcontrolador PIC para la obtención de variable de campo. Estas variables fueron simuladas con un potenciómetro, para la variable analógica, y un deepswitch para el cambio de estado de las variables digitales.

Realizamos una “limpieza” de los datos de la base y comenzamos a cargar los valores en nuestro servidor. Si bien no fue posible la instalación de nuestro servidor Apache en una maquina de IP público, simulamos esta condición al configurar dos redes independientes.

Una de Rango IP 192.168.0.XX es la encargada de comunicar las valores al servidor. En ella se encuentran 2 equipos conectados, el Access Point y la maquina servidor a través de una conexión cableada. La otra red, de rango IP 192.168.1.XX simula una conexión inalámbrica exterior y vincula las maquinas clientes que consultan la base de datos y la página Web del servidor.

Las pruebas fueron exitosas y verificamos el buen funcionamiento del servidor y la posibilidad de acceder a sus contenidos. Un punto importante a resaltar fue la necesidad de configurar nuestro servidor para aceptar conexiones externas. Esta configuración fue descripta al inicio de éste informe cuando se planteo la utilización del “paquete” WampServer.

Análisis de velocidad de transmisión

La velocidad de transmición es un punto muy importante cuando pensamos en la implementacion del sistema en un ámbito real. Según sea la tasa de actualizacion de los datos podremos utilizar la aplicación por ejemplo en sistemas de audio, registro de temperaturas o velocidades. Es necesario recalcar que no se pensó al proyecto para el reemplazo de sistemas de datos en tiempo real sino, para posibilitar el conocimiento de la plata en forma remota y tener disponibles los historales. Dicho esto, es necesario separar en 3 etapas para analizar la tasa de actualizacion de datos:

Obtención de datos y calculo de CRC

Transmisión por puerto USART

Actualizacion final en base de dato

Para el primer y segundo analisis se tomaron los tiempos necesarios para que el micro lleve a cabo las operaciones correspondientes. Configuramos la plataforma de desarrollo de PIC en medicion de tiempo entre interrupciones y llegamos a que son necesarios 160 us para obtener los datos y su calculo de verificación. Aproximadamente 7 ms para la escritura de los caracteres de control y los valores de las variables.

Técnicas Digitales III – Problema de ingeniería

13

Para el cálculo de velocidad de actualizacion de datos en la base, a traves de el uso de la página phpMyAdmin proporcionada en el paquete Wamp encontramos que lleva 890 us grabar los nuevos valores.

En sintesis, el valor que realmente influye en los tiempos es el de la transmisión por USART de 7 ms de duracion. Con estos tiempos podremos decir que la tasa de actualizacion es de 145 Hz para el cálculo y envio de 4 variables en la base. Esta frecuencia limita la aplicación del sistema en muchos ámbitos, no estamos en presencia de una buena tasa de actualizacion. Para la solución de este problema se propone la utilización de programación puramente Assemble en el PIC; la mayor parte del programa cargado en nuestro microcontrolador fue realizado en lenguaje C++. Este lenguaje facilita mucho la programación pero como desventaja importante agrega en la compilación codigo redundante e ineficiente. Suponemos que es posible reducir al menos en 3 veces la velocidad de trabajo del micro ampliando así las fronteras de implementacion del sistema.

Análisis de costos

Los costos asociados al proyecto se vinculan en su mayoría al hardware y al tiempo de estudio, análisis y desarrollo de los dispositivos y su comunicación. En nuestro caso fue utilizado en todo momento software libre tanto en el servidor como en el firmware del dispositivo.

El dispositivo Access Point posee un costo aproximado de U$S 70 y los componentes a utilizar en los circuitos U$S 20, no representando un monto muy considerable pero el trabajo de elección de software y el aprender su utilización demandó buena parte del costo total.

Si bien un Access Point es un dispositivo casi común en nuestros ámbitos tecnológicos, no es común realizar actualizaciones de firmware y el aprendizaje del lenguaje Linux soportado en el dispositivo. Tras varios frustrados intentos de actualización y consulta de foros relacionados al tema llegamos al objetivo ya mencionado. Representó también un esfuerzo de aprendizaje el manejo de librerías de dibujo específicas en lenguaje PHP y comandos MySql.

En caso de su comercialización o producción para proyectos de implementación en campo, es necesario agregar a estos costos los de hosting de información y servicios de Internet. Debe existir también una inversión en circuitos y estudios más elevados para garantizar la robustez del sistema.

Técnicas Digitales III – Problema de ingeniería

14

CONCLUSIONES

Consideramos muy positiva la experiencia de trabajo con nuevas tecnologías tanto en hardware como software. Los sistemas de base de datos y su consulta se encuentran en todos los ámbitos industriales, almacenando y proporcionando los valores de datos de campo. Si bien existen numerosas mejoras realizables a nuestro proyecto, deberán ser evaluadas a futuro para complementar nuestro trabajo. En este proyecto se utilizaron una variedad de lenguajes para integrar distintos tipos de soft dando Cuenta de:

C++ /Assemble Programación de microcontrolador

PHP/Mysql Programación de motor de base de datos y sus consultas

HTML Programación de pantallas de presentación

TFTP Protocolo de grabación de Firmware para AP

La utilización de un sistema de observación de variables en plantas remotas es posible a bajo costo y aplicable en numerosos procesos. A través de éste informe se analizó nuestro trabajo para diseñar, construir y aplicar el sistema en una planta de simulación. Se alcanzaron exitosamente los objetivos de implementación y se cumplieron los requisitos expuestos para desarrollar un “problema de ingeniería” de la materia Técnicas Digitales 3.

Técnicas Digitales III – Problema de ingeniería

15

ANEXOS:

Definiciones

GNU GPL: La Licencia Pública General de GNU o más conocida por su nombre en inglés GNU General Public License o simplemente su acrónimo del inglés GNU GPL, es una licencia creada por la Free Software Foundation a mediados de los 80, y está orientada principalmente a proteger la libre distribución, modificación y uso de software. Su propósito es declarar que el software cubierto por esta licencia es software libre y protegerlo de intentos de apropiación que restrinjan esas libertades a los usuarios. ANSI C: C es un lenguaje de programación creado en 1972 por Ken Thompson y Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B. Se trata de un lenguaje débilmente tipificado de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Relacional: En este modelo todos los datos son almacenados en relaciones, y como cada relación es un conjunto de datos, el orden en el que estos se almacenen no tiene mayor relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar por un usuario no experto. La información puede ser recuperada o almacenada por medio de «consultas» que ofrecen una amplia flexibilidad y poder para administrar la información. Multihilo: es una característica que permite a una aplicación realizar varias tareas concurrentemente. Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente. Multiusuario: Se le llama multiusuario a la característica de un sistema operativo o programa que permite proveer servicio y procesamiento a múltiples usuarios simultáneamente (tanto en paralelismo real como simulado).

Técnicas Digitales III – Problema de ingeniería

16

LISTADOS DE PROGRAMAS

Programación de microcontrolador (crc.c) unsigned int adc,j,i,crca,crcd,codcrc,puertob; char cad1[] = "wget 'http://192.168.0.49/tecnicas3/index.php?var1=", cad2[] = "&var2=", cad3[] = "&var3=", cad4[] = "&var4=", cad5[] = "'"; char num[7]; void main() { Usart_Init(38400); // Inicializa el puerto serie con velocidad de transmision de 38400 Buadios TRISB=0X07; // Configura el puerto B con los primeros 3 bits como entradas y los 5 restantes como salidas PORTB=0x80; // Enciende Led de estado delay_ms(10000); // Espera inicializacion de AP delay_ms(10000); // Espera inicializacion de AP delay_ms(10000); // Espera inicializacion de AP delay_ms(10000); // Espera inicializacion de AP PORTB=0x00; // Apaga Led de estado delay_ms(5000); // Detecta el AP inicializado ADCON1 = 0x80; // Configura Analog Input y V de referencia TRISA = 0xFF; // Configura el puerto A como entrada do { // En conjunto con While(1) realiza un ciclos infinitos codcrc=0x8380; // Definicion de Codigo CRC8 adc = Adc_Read(1); // Lectura de ADC a traves del canal 1 del puerto A adc=adc/20,46; // Escalado de variable de entrada de 0 a 5v // Calculo de CRC para variable analogica crca=adc*0x100; // Adapta variable de entrada para calculo de CRC for (i=0; i<8; i++) { if ((crca&0x8000)==0x8000) // Pregunta si el primer bit es igual a 1 { crca=crca^codcrc; // XOR entre el codigo y la variable adaptada } crca=crca<<1; // Movimiento hacia la izquierda y completa con 0 } crca=crca/0x100; // Adapta variable para envio de dato // Calculo de CRC para variable digital portb=0x08; // Pone en 1 el bit 3 para que los siguientes 3 valores sean interpretados por PHP puertob=portb; // Lee el estado del puerto B crcd=puertob*0x100; for (i=0; i<8; i++) { if ((crcd&0x8000)==0x8000) { crcd=crcd^codcrc; } crcd=crcd<<1;

Técnicas Digitales III – Problema de ingeniería

17

} crcd=crcd/0x100; // Envio de wget y valor de ADC for(i=0; i<strlen(cad1); i++) { Usart_Write(cad1[i]); // Envia por el puerto la cadena 1 } IntToStr(adc, num); // Convierte en string el ADC y lo pone en num for(i=0; i<strlen(num); i++) { if (num[i]!=32) // Saltea los espacios que introduce el string { Usart_Write(num[i]); // Envia por el puerto el ADC como string sin espacios } } // Envio de variable DIGITAL for(i=0; i<strlen(cad2); i++) { Usart_Write(cad2[i]); } IntToStr(puertob, num); for(i=0; i<strlen(num); i++) { if (num[i]!=32) { Usart_Write(num[i]); } } // Envio de CRC de variable analogica for(i=0; i<strlen(cad3); i++) { Usart_Write(cad3[i]); } IntToStr(crca, num); for(i=0; i<strlen(num); i++) { if (num[i]!=32) { Usart_Write(num[i]); } } // Envio de CRC de variable digital for(i=0; i<strlen(cad4); i++) { Usart_Write(cad4[i]); } IntToStr(crcd, num); for(i=0; i<strlen(num); i++) { if (num[i]!=32)

Técnicas Digitales III – Problema de ingeniería

18

{ Usart_Write(num[i]); } } // Envio de ENTER para ejecutar toda la cadena en el AP for(i=0; i<strlen(cad5); i++) { Usart_Write(cad5[i]); } Usart_Write(0x0d); // Representa fin de carrera Usart_Write(0x0a); // Representa vuelta de carro PORTB=0x80; // Enciende Led de estado Delay_ms(10000); // Espera 10 segundos PORTB=0x00; // Apaga Led de estado } while (1); } Archivo de ingreso a base de datos (db.inc) <?php // Ingreso a base de datos con Usuario y Contraseña define ("HOSTDB","localhost"); define ("USERDB","variables"); define ("PASSDB","password"); define ("DB","variables"); $dbcon = mysql_connect(HOSTDB, USERDB, PASSDB); ?> Visualizacion de dato analogico online (analogicoonline.php) <?php include ("jpgraph.php"); include ("jpgraph_line.php"); require ('db.inc.php'); Header( "Content-type: image/jpeg"); // definimos la cabecera del fichero a generar $image = ImageCreate (700, 400); // se define una variable que genera un grafico // de x = 400 y = 2000; esto es desde (0,0) hasta (700, 400) $array = ""; //Información proveniente de seleccion de fechas $d1=$_POST['d1']; $m1=$_POST['m1']; $y1=$_POST['y1']; $t1=$_POST['t1']; $d2=$_POST['d2'];

Técnicas Digitales III – Problema de ingeniería

19

$m2=$_POST['m2']; $y2=$_POST['y2']; $t2=$_POST['t2']; $date1="$y1-$m1-0$d1 $t1"; $date2="$y2-$m2-0$d2 $t2"; //Consulta en la base de datos $query="SELECT var1 FROM datos where t between '$date1' and '$date2'"; $results = mysql_db_query(DB, $query); $nrows = mysql_num_rows($results); if($nrows != 0) { for($j=0;$j<$nrows;$j++) { $row = mysql_fetch_array($results); $array[] = $row["var1"]; } // Creación del grafico $graph = new Graph(700,400,"auto"); $graph->SetScale("textlin"); $graph->img->SetAntiAliasing(); $graph->xgrid->Show(); // Creación de línea $lineplot=new LinePlot($array); $lineplot->SetColor("black"); $lineplot->SetWeight(2); // Titulo e informacion de muestra $graph->img->SetMargin(40,20,20,40); $graph->title->Set("VARIABLE ANALOGICA"); $graph->xaxis->title->Set("T"); $graph->yaxis->title->Set("TENSION [V]"); $graph->ygrid->SetFill(true,'#[email protected]','#[email protected]'); $graph->SetShadow(); // Adjunta dibujo con grafico $graph->Add($lineplot); // Imprime grafico $graph->Stroke(); Imagejpeg($image); // se genera el fichero final } else print "<p><b>NO EXISTEN DATOS PARA ESTE PERIODO DE TIEMPO $date2 - $date1</b>"; ?>

Técnicas Digitales III – Problema de ingeniería

20

Visualizacion de color según variable digital (dig1.php) <?php Header( "Content-type: image/jpeg"); // definimos la cabecera del fichero a generar $image = ImageCreate (400, 200); // se define una variable que genera un grafico // de x = 400 y = 2000; esto es desde (0,0) hasta (400,200) require ('db.inc.php'); //Consulta en la base de datos $query = "select var2 from datos order by t desc limit 1"; $results = mysql_db_query(DB,$query); $row = mysql_fetch_array($results); $png = imagecreatetruecolor(80,80); imagesavealpha($png, true); $trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127); imagefill($png, 0, 0, $trans_colour); //conversion de decimal a binario $decbin = decbin($row["var2"]); $bin = substr($decbin,0,1); // Eleccion de color según valor de variable if($bin != 0) { $color = imagecolorallocate($png, 255, 0, 0); } else { $color =imagecolorallocate($png, 0,255, 0); } imagefilledellipse($png, 40, 40, 40, 40, $color); header("Content-type: image/png"); imagepng($png); Imagejpeg($image); // se genera el fichero final ?> Visualizacion de historial de variable digital (Histdigital.php) <?php include ("jpgraph.php"); include ("jpgraph_line.php");

Técnicas Digitales III – Problema de ingeniería

21

require ('db.inc.php'); Header( "Content-type: image/jpeg"); // definimos la cabecera del fichero a generar $image = ImageCreate (700, 400); // se define una variable que genera un grafico // de x = 400 y = 2000; esto es desde (0,0) hasta (400,200) $array = ""; $d1=$_POST['d1']; $m1=$_POST['m1']; $y1=$_POST['y1']; $t1=$_POST['t1']; $d2=$_POST['d2']; $m2=$_POST['m2']; $y2=$_POST['y2']; $t2=$_POST['t2']; $date1="$y1-$m1-0$d1 $t1"; $date2="$y2-$m2-0$d2 $t2"; //Consulta en la base de datos $query="SELECT var2 FROM datos where t between '$date1' and '$date2'"; $results = mysql_db_query(DB, $query); $nrows = mysql_num_rows($results); if($nrows != 0) { for($j=0;$j<$nrows;$j++) { $row = mysql_fetch_array($results); $decbin = decbin($row["var2"]); $bin = substr($decbin,0,1); $array[] = $bin; } // Creación del grafico $graph = new Graph(1200,300,"auto"); $graph->SetScale("textlin"); $graph->img->SetAntiAliasing(); $graph->xgrid->Show(); // Creación de línea $lineplot=new LinePlot($array); $lineplot->SetStepStyle(); $lineplot->SetColor("black"); $lineplot->SetWeight(2); // Titulo e informacion de muestra $graph->img->SetMargin(40,20,20,40); $graph->title->Set("VARIABLE Digital D1"); $graph->xaxis->title->Set("T"); $graph->yaxis->title->Set("ESTADO"); $graph->ygrid->SetFill(true,'#[email protected]','#[email protected]'); $graph->SetShadow();

Técnicas Digitales III – Problema de ingeniería

22

// Adjunta dibujo con grafico $graph->Add($lineplot); // Imprime grafico $graph->Stroke(); } else print "<p><b>NO EXISTEN DATOS PARA ESTE PERIODO DE TIEMPO $date2 - $date1</b>"; Imagejpeg($image); // se genera el fichero final ?> Programa de trabajo para observar estado de base de datos (Showdata.php) <?php require ('db.inc.php'); //Consulta en la base de datos $query = "select * from datos"; $results = mysql_db_query(DB,$query); $nrows = mysql_num_rows($results); if($nrows != 0) { print "<p><b>Datos creados en la DB:</b><br />"; print "</b><br />"; print "<table border=4><tr><th>Indice<th>Var1<th>Var2<th>Hora\n"; for($j=0;$j<$nrows;$j++) { $row = mysql_fetch_array($results); print "<tr><td>".$row["indice"]; print "<td>".$row["var1"]; print "<td>".$row["var2"]; print "<td>".$row["t"]; print "\n"; } print "</table>\n"; } else print "<p><b>ERROR - La base no tiene datos o estas haciendo macanas</b>"; mysql_close($dbcon); Pagina encargada de obtener valores enviados por el AP (index.php) <?php require ('db.inc.php'); $var1 = $_REQUEST['var1']; $var2 = $_REQUEST['var2']; $crca = $_GET['var3']; $crcd = $_GET['var4']; $query = "insert into datos (var1,var2,crca,crcd,T) VALUES ('$var1','$var2','$crca','$crcd',now())";

Técnicas Digitales III – Problema de ingeniería

23

$results = mysql_db_query(DB,$query); mysql_close($dbcon); ?> Calculo de CRC-8 en servidor <?php require ('db.inc.php'); //Consulta en la base de datos $query = "SELECT * FROM datos"; $results = mysql_db_query(DB,$query); $nrows = mysql_num_rows($results); if($nrows != 0) { print "<p><b>Datos con verificacion erronea en variable Analogica</b><br />"; print "</p>"; print "</p>"; print "<table border=4><tr><th>Indice<th>Var1<th>CRC1<th>Hora\n"; for($j=0;$j<$nrows;$j++) { $row = mysql_fetch_array($results); $crc=$row["var1"]*0x100; for ($i=0;$i<8;$i++) { if (($crc&0x8000)==0x8000) { $crc=$crc^0x8380; // XOR } $crc=$crc<<1; // Movimiento hacia la izquierda } $crc=$crc/0x100; if ($crc!=$row["crca"]) //Impresion de datos con verificacion erronea { print "<tr><td>".$row["indice"]; print "<td>".$row["var1"]; print "<td>".$row["crca"]; print "<td>".$row["t"]; print "\n"; } } print "</table>\n"; } else print "<p><b>ERROR - La base no tiene datos o estas haciendo macanas</b>";

Técnicas Digitales III – Problema de ingeniería

24

//Consulta en la base de datos $query = "SELECT * FROM datos"; $results = mysql_db_query(DB,$query); $nrows = mysql_num_rows($results); if($nrows != 0) { print "<p><b>Datos con verificacion erronea en variable Digital</b><br />"; print "</p>"; print "</p>"; print "<table border=4><tr><th>Indice<th>Var2<th>CRC2<th>Hora\n"; for($j=0;$j<$nrows;$j++) { $row = mysql_fetch_array($results); $crc=$row["var2"]*0x100; for ($i=0;$i<8;$i++) { if (($crc&0x8000)==0x8000) { $crc=$crc^0x8380; // XOR } $crc=$crc<<1; // Movimiento hacia la izquierda } $crc=$crc/0x100; if ($crc!=$row["crcd"]) //Impresion de datos con verificacion erronea { print "<tr><td>".$row["indice"]; print "<td>".$row["var2"]; print "<td>".$row["crcd"]; print "<td>".$row["t"]; print "\n"; } } print "</table>\n"; } else print "<p><b>ERROR - La base no tiene datos o estas haciendo macanas</b>"; mysql_close($dbcon); ?>