• No results found

66 The costs for replacement of part of a fixed asset

5.1 Control de la interfaz serial de la PC

Una interfaz es un dispositivo, el cual permite que dos equipos se enlacen, con la finalidad de intercambiar información. En el mercado existen diferentes fabricantes de este tipo de dispositivos los cuales no se podrían conectar si no existiesen normas o estándares. Por esta razón se creo una norma para la transmisión de señales digitales en modo serie, la cual fue definida por el CCITT (UIT-T) en su recomendación V.24 (la cual proporciona la lista de definiciones de circuitos de intercambio entre equipos terminales de datos “ETD “ y equipos terminales de circuitos de datos “ECD”), la cual tiene su equivalente en el RS232, esta norma se complementa con la norma V.28 (características eléctricas) y la ISO 2110 (características mecánicas) [7].

El µCu entrega los bits a transmitir por el pin RC6/TX/CK, los niveles de voltaje en este pin son TTL (0Volts y 5Volts nominales), y no son compatibles con el estándar RS232 (cero lógico va desde +3 a +25 volts y un 1 lógico se encuentra entre –3 a –25 volts) [7], [8], [11], [12], [19].

La conversión entre niveles se realiza con unos circuitos denominados drivers. En este proyecto se emplea el C.I. ST232CN, que es un equivalente al conocido MAX232 [10] (ver figura 4.6).

La salida de los drivers se aplica al radio módem de transmisión (Tx), y el radio módem de recepción (Rx) demodula la señal y la entrega con niveles TTL al puerto serie de la computadora.

Para la computadora la interfaz serie esta constituida por un conjunto de puertos y algunas interrupciones asociadas. Una PC es capaz de soportar más de un puerto serie. Se acostumbra nombrar a estos puertos como COM1, COM2, COM3... , y así sucesivamente.

A continuación se da una tabla de puertos COM1 a COM4, las direcciones bases de sus registros asociados, y las correspondientes interrupciones. La dirección base es la primera dirección de su correspondiente conjunto de puertos. Usualmente se identifica a los puertos con la dirección base (ver tabla 5.1).

NOMBRE DIRECCIÓN BASE INTERRUPCIÓN (IRQ)

Com1 3F8h 4

Com2 2F8h 3

Com3 3E8 4

Com4 2E8 3

Tabla 5.1 Direcciones bases más usadas para el puerto serie.

En caso de que no se conozcan la direcciones bases usadas por los puertos, estás se puede conocer leyendo la información directamente desde el área de datos del BIOS de la computadora a través de la dirección 0000:0400 [11].

Como ya se mencionó anteriormente los puertos series se implementan mediante un circuito denominado UART (Transmisor Receptor Asíncrono Universal). Las computadoras personales modernas emplean las UART 16550A, 16C550 o variantes de estas [4].

En una comunicación serie asíncrona es necesario que el transmisor y el receptor utilicen el mismo protocolo de comunicación, para que estos se puedan entender: número de bits de datos, bits de paridad, bits de paro, BAUDRATE y el control del flujo. El control de flujo se puede realizar por software o hardware.

Los conectores del puerto serie vienen en dos presentaciones: el conector de 25 terminales (DB25), y el conector de 9 terminales(DB9) (ver tabla 5.2).

#TERMINAL (D25) #TERMINAL (DB9) NOMBRE (E/S) FUNCIÓN

Pin 2 Pin 3 Transmitir Dato (Tx)Salida Salida de datos de la interfaz

Pin3 Pin2 Recibir Dato (Rx) Entrada Entrada de datos a la interfaz

Pin4 Pin7 Solicitud de Envió (RTS)Salida Define condición de dato,

listo para envío

Pin5 Pin8 Libre para Envío (CTS) Entrada Señal de entrada que permite

la transmisión

Pin6 Pin6 Equipo de Dato Listo

(DSR) Entrada

Entrada que notifica el estado de disponibilidad

Pin7 Pin5 Tierra(SG) Señal común de tierra única

Pin8 Pin1 Detección de Portadora

(CD) Entrada

Indica presencia de datos

Pin20 Pin4 Terminal de Datos Listo

(DTR)Salida

Salida de señal que indica disponible para transmitir

Pin22 Pin9 Indicador de Anillo (RI)Entrada Se lleva acabo, debido al

timbre de teléfono

Como ya se mencionó anteriormente la UART, cuenta con registros e interrupciones mediante las cuales se controla el funcionamiento del puerto. En total son 12 registros, los cuales se listan a continuación (ver tabla 5.3 y tabla 5.4):

• Registros de retención de datos (THR/RHR)

• Registros de estado de interrupción y registros de control (IER/ISR) • Registro de control FIFO (FCR)

• Registros de estado de la línea y de control (LCR/LSR) • Registros de estado del módem y de control (MCR/MSR)

• Registro de configuración del reloj (velocidad o BAUD RATE) y de control (DLL/DLM)

• Registro de cancelaciones accesible para el usuario (SPR)

A continuación se listan los registros detallando el significado de su contenido: DIRECCIÓN (0-7) LCR<7>(Divisor

Latch Enable)

MODO LECTURA MODO ESCRITURA

A2 A1 A0

0 0 0 0 RHR THR

0 0 0 1 LSB OF DIVISOR

LATCH (Latch Divisor para el bit

LSB)

LSB OF DIVISOR LATCH (Latch Divisor para el bit

LSB)

0 0 1 0 IER IER

0 0 0 1 MSB OF DIVISOR

LATCH (Latch Divisor para el bit

MSB)

MSB OF DIVISOR LATCH (Latch Divisor para el bit

MSB) 0 1 0 X ISR FCR 0 1 1 X LCR LCR 1 0 0 X MCR MCR 1 0 1 X LSR Reservado 1 1 0 X MSR Reservado 1 1 1 X SR SR

Tabla 5.3 Registros de la UART de la PC.

Donde:

DIRECCIÓN REGISTRO BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT1 BIT 0 COLECCIÓN DE REGISTROS GENERALES

0 RHR[XX] BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

0 THR[XX] BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

1 IER[00] 0 0 0 0 Interrupción de estado del módem Interrupción de estado de línea recibida THR RHR 2 FCR[00] RCVR gatillo (MSB) RCVR gatillo (LSB) 0 0 Selección del modo DMA Reset FIFO XMIT Reset FIFO RCVR Habilita FIFO 2 ISR[01] Habilita FIFO´s Habilita FIFO´s 0 0 INT prioridad bit 2 INT prioridad bit 1 INT prioridad bit 0 INT estado 3 LCR[00] Habilita latch divisor Selecciona Rompimiento (break) Selecciona paridad

Paridad par Habilita

paridad Bits de stop Longitud de palabra Longitud de palabra 4 MCR[00] 0 0 0 Habilita LoopBack -OP2 -OP1 -RTS -DTR 5 LSR[60] Error dato FIFO Registro de dato vacío Registro de transmisión vacío Interrupción de rompimiento Error de marco Error de paridad Error de desbordado (Overrrun) Recibe datos listo 6 MSR[X0] CD RI DSR CTS Delta -CD Delta -RI Delta -DSR Delta -CTS

7 SPR[FF] BIT 8 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1

REGISTROS DEL GENERADOR DEL BAUD RATE. ACCESIBLES CUANDO LCR<7>=1

0 DLL[XX] BIT 8 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1

1 DLM[XX] BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT8

Tabla 5.4 Configuración de bits de los registros internos de la UART.

De la tabla anterior se puede observar que los 12 registros requieren un total de 8 direcciones, esto es posible gracias al uso del bit 7 del registro LCR (Habilitador del Latch Divisor), también conocido como Bit de Acceso al Latch Divisor o DLAB por sus siglas en ingles (Divisor Latch Access Bit). De tal forma que cuando el bit LCR<7>=1, son habilitados dos registros a través de los cuales se programa el BAUDRATE.

La UART usa un reloj de 1.8432 MHz, cuya frecuencia se divide entre 16, lo que permite que el BUDRATE máximo posible sea de 115,200. Los valores que deben contener los registros de configuración del BAUDRATE, se muestran en la tabla 5.5:

BAUD RATE (Velocidad) en bps (Bits por Segundo)

16 X DIVISOR DLM DLL 50 2304d900h 09h 00h 75 1536d600h 06h 00h 150 768d300h 03h 00h 300 384d180h 01h 80h 600 192dC0h 00h C0h 1200 96d60h 00h 60h 2400 48d30h 00h 30h 4800 24d18h 00h 18h 7200 16d10h 00h 10h 9600 12d0Ch 00h 0Ch 19.2K 6d06h 00h 06h 38.4K 3d03h 00h 03h 57.6K 2d02h 00h 02h 115.2K 1d01h 00h 01h

El manejo del puerto serie en cuanto al momento en que puede transferirse un dato entre la UART y la PC, se puede implementar de dos maneras:

• Mediante el censado o chequeo constante de los bits indicadores de estado de las tareas de la UART (Polling).

• Mediante la utilización de interrupciones.

El hacer un polling a la UART, es un método más lento que el de las interrupciones, porque le exige más atención al CPU de la PC, pero es mucho más sencillo implementarlo. En este trabajo se usará el método de polling, debido a su sencillez, y a que esta aplicación en particular no requiere grandes velocidades, además de que los procesadores modernos son sumamente rápidos, y son capaces de manejar estas tareas, y otras más, al mismo tiempo con facilidad.

El control de flujo requiere del manejo de varias señales (RTS, DTR, CTS, Rx y Tx). En aplicaciones de baja velocidad es posible reducir el número de señales a sólo 3 (Rx,Tx y SG). Esta forma de implementación del control de flujo se conoce como módem nulo. A continuación la figura 5.1 muestra la configuración de módem nulo empleado.

Figura 5.1 Configuración de módem nulo (comunicación simplex).

En esta configuración las terminales DTR, DSR, y CD, están unidas, de tal forma que cuando DTR=1, se indica que la PC esta lista para recibir datos y automáticamente se activa

DSR indicando que la línea esta disponible, y CD también se activa indicando que se detectó una señal de datos (ver figura 5.1).

Además las líneas RTS y CTS también se unen. Por lo tanto cuando RTS=1 indicando que se desea Tx en forma inmediata recibe la respuesta de que puede iniciar la transmisión CTS=1. Por lo tanto sólo se necesita de 2 terminales (ver figura 5.1) en la PC, RD y SG ya que está sólo recibirá datos, nunca transmitirá datos. Es decir la comunicación será simplex [7], [8], [11].

5.2 Elección del lenguaje de programación, para la implementación del control del puerto serie de la PC

Se requiere de un lenguaje de programación que permita controlar la UART de la PC mediante el acceso directo a sus registros. En el mercado existe más de una opción, pero se decidió emplear C++ (Turbo C++ versión 3.0 de Borland), debido a que C++ permite tener acceso directo a cualquier puerto de la PC de una manera relativamente sencilla. Debe recordarse que para la PC los registros de la UART son solamente puertos.

En el mercado existen otros lenguajes mediante los cuales se puede controlar el puerto serie, como por ejemplo Visual Basic 6.0 (VB). Pero emplear VB trae consigo, llevar acabo el control del puerto mediante el uso de las APIS de windows (Windows Application Programming Interface), esto requeriría de recursos que van más allá del lenguaje y los controles comunes con que cuenta Visual Basic, lo cual le agregaría una complejidad mayor al programa. De cualquier forma a través de VB no se tiene un control directo del puerto, se podría decir que es una forma virtual de controlar el puerto, ya que no se tiene acceso directo a los registros de la UART como en el caso de C++.

5.3 Programa para la recepción de los datos

El programa de recepción en la PC, realiza las siguientes funciones: • Sincronizar la recepción del paquete de datos.

• Revisar que el paquete no contenga algún error. Si se recibe sin errores, entonces hace lo siguiente:

• Filtrar los datos de las señales analógicas (ver capítulo 6).

• Generar los archivos necesarios para el programa de graficación (ver capítulo 7).

Sincronización de la recepción

Para sincronizarse el sistema primero espera recibir el probable carácter de inicio de paquete. Posteriormente recibe los siguientes 10 caracteres, una vez que ya tiene formado el probable paquete se verifica si el carácter de fin de paquete se encuentra en la última posición, y si los caracteres correspondientes a la posición 4, y 5 del paquete poseen valores digitales lógicos entre 1 o 0, ya que estos no pueden contener ningún otro valor, sólo cuando todas estas condiciones se cumplen es cuando se considera que existe sincronía. Posteriormente los interpreta de acuerdo con el formato del paquete: los primeros 7 son los datos, los dos siguientes el CRC y el último el carácter de fin de paquete. Después de recibir el último carácter el programa reinicia la secuencia anterior.

Verificación de que el paquete no contenga algún error

Durante la recepción se pueden presentar los siguientes tipos de errores: • Datos alterados

• No se reciben caracteres • Perdida de sincronía

El sistema detecta que un dato fue alterado cuando el cálculo del CRC (CRC-16) del paquete recibido es diferente de cero, lo que provoca que el contador de errores se incremente. La lógica del programa del CRC-16 en el receptor es exactamente la misma que en el transmisor, por esta razón la lógica de implementación del CRC-16 ya mostrada también es aplicable en el receptor, la única diferencia consiste en que se implemento empleando otro lenguaje de programación el cual es C++ (ver figura 3.11 y figura 3.12).

Si no se reciben caracteres durante 1 segundo, se detecta que hay un cero, y se incrementa el contador de ceros y el de errores en 1.

Además es posible que el sistema se descincronice debido a la pérdida de uno o más caracteres durante la transmisión, lo cual se detecta como un error, y se incrementa el contador de errores del sistema.

La tabla 5.6 muestra cuando se incrementan los contadores de errores y ceros.

MOTIVO ERRORES CEROS

Si no se recibe nada durante un segundo SI SI

Si el carácter recibido no corresponde con lo esperado (caracteres de inicio y fin de

paqueteerror de sincronía)

SI NO

Si el CRC es diferente de cero SI NO

Tabla 5.6 Motivos que producirán un incremento en los contadores de errores y ceros.

Es importante mencionar que una vez que se detecta un error, la estrategia que se sigue es la siguiente: el paquete de información no es corregido, sino que se toma el último paquete recibido correctamente, y se continúa con el procesamiento (filtrado, almacenamiento, y generación de archivos).

Procesamiento de un paquete sin errores

Una vez que el paquete se recibe sin errores, o que se toma el paquete de datos anterior se realiza lo siguiente: los datos que provienen de señales analógicas son filtrados, almacenados, y finalmente se generan sus archivos binarios correspondientes. Los datos digitales se almacenan directamente sin filtrarse y se generarán sus archivos binarios.

Se decidió almacenar los datos como archivos de tipo binario ya que este tipo de archivos requieren menos espacio de memoria al almacenarse.

Es importante mencionar que los archivos generados con este programa, almacenarán como máximo el equivalente a las ultimas 12 horas de información, generadas por los equipos, y se estarán actualizando una vez por minuto.

Además de generar los 7 archivos correspondientes a los canales de información, también se generan los archivos de los errores y ceros ocurridos durante las ultimas 12 horas, los cuales también se actualizan por minuto.

Funcionamiento general del programa

Primero se declaran las variables, se selecciona y configura el puerto COM a emplear, y se limpian los archivos binarios si ya existen o se generan si no existen.

Posteriormente se cargan los coeficientes del filtro digital a emplear, para el filtrado de los datos correspondientes a las señales analógicas. A continuación se intenta leer un dato, en caso de que no se haya recibido ningún dato durante e1 transcurso de un segundo, se incrementan los contadores de ceros y errores ocurridos, se toma el último paquete de datos recibido correctamente, y se continua (Continue).

Una vez que el flujo del programa se encuentra en Continue, lo cual ocurre cada vez que se forme un paquete de datos, se pasa a filtrar los datos recibidos, de cada uno de los canales analógicos, y posteriormente son almacenados. Los datos de los canales digitales no se filtran, se almacenan directamente. Y cuando se hayan almacenado la cantidad de datos equivalentes a 1 minuto de información se pasa a generar los archivos binarios de los 7 canales de información, del conteo de errores, del conteo de ceros ocurridos, se limpian los contadores de errores y ceros, y se pasa el flujo del programa a esperar el inicio de un nuevo paquete de información (Again) (ver figura 5.2). Si no se ha almacenado aun el equivalente a 1 minuto de información, entonces sólo se procesa (filtra y/o almacena) el último paquete de datos, y se pasa el flujo del programa a Again para esperar el inicio de un nuevo paquete de datos.

En caso de haberse recibido algún dato se examina este para ver si es el carácter de inicio de paquete, si no lo es se regresa a leer otro dato nuevo (Again). Si es el carácter de inicio de paquete se inicializa el contador de canales.

Lo siguiente es esperar un nuevo dato, el cual corresponderá con el primer dato del primer canal analógico muestreado, se revisa si llegó algún dato en el último segundo, si no se recibió nada se incrementan los contadores de errores y ceros, se toma el último paquete de datos recibidos, y se pasa a continuar (Continue). En caso de haber recibido algún dato se revisa si el dato recibido es el carácter de fin de paquete y si el contador de canales llegó a su máximo, en caso de no serlo se verifica sólo si el contador de canales a alcanzado su valor máximo, si es así significa que ocurrió algún error, por lo que se pasa a incrementar el contador de errores, se toma el último paquete de información recibido correctamente y se continúa (Continue). Si el contador no a llegado a su valor máximo, se almacena el dato, se incrementa contador de canales, y si no ha llegado a su máximo, regresa a leer el siguiente dato del puerto.

Si el dato recibido es el carácter de fin de paquete y el contador de canales llegó a su máximo, entonces se revisa si los caracteres correspondientes a la posición 4 y 5 del paquete de datos son 1 o 0, y si es así, se procede a calcular el CRC del paquete recibido, si el CRC resultante es igual a cero, se actualiza el último paquete recibido correctamente, y se va a continuar (Continue). En caso de que alguno de los caracteres 4 y 5 del paquete de datos sea diferente de 1 o 0, o en caso de que el CRC sea diferente de cero, significa que el paquete tiene un error, entonces se incrementa el contador de errores, se toma el paquete de datos anterior y se va a continuar (Continue).

INICIO

DECLARAR VARIABLES

CONFIGURAR PUERTO SELECCIONAR PUERTO

BORRAR ARCHIVOS BINARIOS

CARGAR COEFICIENTES DEL FILTRO DIGITAL

Se recibio algo durante 1 seg?

SI

NO

REINICIA CONTADOR DE CANALES LEER DATO DEL PUERTO

Llego carácter de incio de paquete?

SI NO

INCREMENTA CONTADOR DE ERRORES Y CEROS

SE TOMA EL PAQUETE DE DATOS ANTERIOR

A

Again

Si DATO recibido es igual al carácter de fin de paquete y contador canales llego a

su máximo?

SI

LEER DATO DEL PUERTO

Se recibio algo durante 1 seg?

SI

NO

PAQUETE DE DATOS ANTERIOR=PAQUETE DE DATOS

INCREMENTA CONTADOR DE ERRORES Y CEROS

SE TOMA EL PAQUETE DE DATOS ANTERIOR

Continue A NO CALCULAR CRC CRC=0? SI NO

Contador canales llego a su máximo?

SI

NO

INCREMENTA CONTADOR DE ERRORES SE TOMA EL PAQUETE DE DATOS ANTERIOR

ALMACENA EL DATO EN EL PAQUETE DE DATOS

INCREMENTA CONTADOR DE CANALES

Contador de canales llego a su máximo?

NO

SI

A

INCREMENTA CONTADOR DE ERRORES

SE TOMA EL PAQUETE DE DATOS ANTERIOR Si los caracteres correspondientres a las

posicines 4 y 5 del paquete de datos son diferentes de 1 o 0?

SI

Figura 5.2 Diagrama de flujo general de recepción en la PC.

FILTRAR LA INFORMACIÓN DE CADA UNO DE LOS CANALES ANALÓGICOS, Y ALMACENAR

LOS VALORES OBTENIDOS

REINICIA CONTADOR DE CANALES INCREMENTAR CONTADOR DE CANALES

Contador canales es mayor o igual a total canales? SI NO Continue 1 0 ( ) ( ) ( ) N M k k k k y n a y n k b x n k = = = −

− +

ALMACENAR LOS DATOS DELOS CANALES DIGITALES

INCREMENTA CONTADOR POSICIÓN

Posición es mayor o igual al máximo de datos por minuto?

NO

SI

REINICIAR POSICIÓN

GENERAR LOS ARCHIVOS BINARIOS DE LOS 7 CANALES DE INFORMACIÓN, ERRORES, Y

EL DE CEROS OCURRIDOS DURANTE EL ÚLTIMO MINUTO

REINICIAR CONTADOR DE ERRORES Y

CEROS Again

Se presionó alguna tecla?

SI NO

5.4 Conexión vía radio módems

Los radio módems, son dispositivos de comunicación inalámbrica (radio frecuencia), que se han diseñado para sustituir los enlaces seriales por cable entre dispositivos de comunicación, en aplicaciones de monitoreo y control (ver figura 8.1). Los radio módems son transparentes para los usuarios, ya que emplean el protocolo de un módem nulo.

En el mercado existen una gran variedad de estos, los hay desde los que soportan velocidades de transmisión de 300bps hasta 115.2 kbps, empleando el puerto de entrada/salida serie (RS-232), requiriendo una alimentación de 5Vcd ( www.comlab.com ).

5.5 Elección del radio módem

El radio módem a emplear en una aplicación de este tipo debe contar con las siguientes