Puerto Serial

download Puerto Serial

of 43

Transcript of Puerto Serial

Diseo de Sistemas Informticos Industriales

Apuntes de

Comunicacin serie. RS-232 y RS-485Licencia

Ingeniera Tcnica Industrial (Electrnico) Departamento de Informtica de Sistemas y Computadores Escuela Tcnica Superior de Ingeniera del Diseocomunicaciones_serie_r10.odt

Contenido

6. Comunicacin serie..................................................................................................................3 6.1 Introduccin.......................................................................................................................3 6.2 Objetivos............................................................................................................................3 6.3 Esquema.............................................................................................................................3 6.4 Serie us paralelo.................................................................................................................4 6.5 Transmisin asncrona y sncrona.......................................................................................4 6.6 Conexin serie RS-232.......................................................................................................5 6.6.1 Especificaciones..........................................................................................................6 6.6.2 Control de flujo............................................................................................................9 6.6.3 Conexin estndar entre un computador y un modem.................................................9 6.6.4 Conexin null-modem...............................................................................................10 6.1.1 Terminales serie y emuladores...................................................................................11 6.6.5 Programacin de la interfaz serie en el PC................................................................12 6.6.6 Aplicacin general a dispositivos industriales...........................................................17 6.7 Ejemplo: Visor de pesoMicrogram IE-21.........................................................................21 6.8 Conexin serie RS-485.....................................................................................................23 6.8.1 Especificaciones y caractersticas..............................................................................23 6.8.2 Uso del RS-485 con el PC.........................................................................................25 6.9 Ejemplo: Mdulos NuDAM de ADLink...........................................................................27 6.9.1 Introduccin...............................................................................................................27 6.9.2 Configuracin de la red..............................................................................................28 6.9.3 Mdulo conversor RS-232 a RS-485 NuDAM-6520.................................................29 6.9.4 Mdulo de E/S digital. NuDAM-6050.......................................................................31 6.10 Puertos serie virtuales.....................................................................................................36 6.10.1 Bluetooth Serial Port Profile (SPP)..........................................................................37 6.10.2 Puerto serie sobre IrDA...........................................................................................40 6.10.3 Puertos serie virtuales sobre USB............................................................................41 6.1.2 Emulador de puertos NULL-MODEM......................................................................42 6.11 Resumen.........................................................................................................................42 6.12 Bibliografa y enlaces.....................................................................................................42

6.Comunicacin serie.

4

COMUNICACIN SERIE. RS-232 Y RS-485.

6.1INTRODUCCINEl objetivo de este tema es saber qu es una conexin serie y poder aprovechar las normas RS-232 y RS-485 que emplean muchos sistemas industriales desde el punto de vista del conexionado fsico y de su aprovechamiento desde una aplicacin para computador. Las normas RS-232 y RS-485 aqu descritas corresponde al nivel fsico (1) de referencia del estndar OSI. Sobre dichas normas se pueden construir nuevas capas que aporten otras funcionalidades. Este tema est pensado para trabajarlo de forma lineal sin necesidad de acudir a otras fuentes ni materiales adicionales. En puntos concretos se intercalan actividades que permitirn practicar los conocimientos adquiridos. En caso de dificultad en la resolucin de actividades s se recomienda acceder a fuentes externas, por ejemplo, a la bibliografa recomendada.

6.2OBJETIVOSComprender qu es trasmisin serie y paralelo. Conocer la norma RS-232. Aprender a desarrollar aplicaciones que hagan uso de la norma RS-232. Aplicar tcnicas de comunicacin serie a dispositivos industriales. Conocer la norma RS-485.

6.3ESQUEMAEl esquema de la unidad coincide con el desarrollo ordenado de los objetivos y que se plasman en la correspondiente tabla de contenidos.

4 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

6.4SERIE US PARALELOLa transmisin serie de informacin digital consiste en el envo/recepcin de secuencias de bits uno a uno. Como contraposicin, la transmisin paralela permite el envo/recepcin de ms de un bit a la vez. Como caractersticas destacables de la transmisin serie estn: Ms barata, al necesitar menos conductores. No sufre grandes problemas de autoinduccin entre lneas, pues usa pocas lneas. Menor velocidad de transmisin que la paralela.

Estas caractersticas la hacen adecuada para comunicaciones a distancias superiores a unos metros, donde el coste del cableado o su tamao son factores a considerar. Las transmisiones en paralelo son las ms adecuadas para alcanzar velocidades de transferencia altas al nivel de placas de circuito impreso o de circuito integrado.

6.5TRANSMISIN ASNCRONA Y SNCRONASupngase el siguiente escenario en una transmisin serie: Imagnese que un emisor emite una secuencia de bits a 10 millones de bits por segundo 10 Mbps, --> un bit dura 1/107= 01s. Un receptor, para recibirlos debe muestrear la lnea a la misma velocidad, es decir, cada 01s. Cada uno basa la medida del tiempo en su propio reloj, que pueden no estar sincronizados con precisin. Si, por ejemplo, la diferencia de velocidad entre uno y el otro es del 1%, entonces el primer muestreo estar desplazado 0001s. Tras 200 muestras, los relojes estarn desplazados 200*0001s=02s por lo que no se estar recogiendo adecuadamente la informacin.

Para resolver el problema ilustrado es necesario introducir tcnicas de sincronizacin que permiten ponerse de acuerdo en las temporizaciones. Hay dos grupos de soluciones: utilizar transmisin asncrona o utilizar transmisin sncrona. La transmisin asncrona intenta evitar el problema enviando secuencias de bits que no sean muy largas y sincronizando los relojes al principio de cada secuencia.

X reposo

bit

bit

bit

bit

bit

bit

X

b

b

b

b

b

b

lecturas

lecturas

sincronizacin reloj

BIBLIOGRAFA

5

En la transmisin sncrona los relojes se mantienen sincronizados usando una lnea de reloj o una codificacin de datos "autorreloj". Usando lnea de reloj, lnea de reloj lnea de datos X b X b b b b b b b b b b

Por ejemplo el bus I2C utiliza dos lneas, una para datos y otra para reloj Usando una codificacin autorreloj "1" 0110010 reloj datos Por ejemplo, la codificacin Manchester empleada en el protocolo CSMA/CD usado en redes tipo Ethernet. La forma en que se sincroniza la informacin en ambos tipos de transmisin da lugar a los conceptos de sincronismo de bit, de carcter y de bloque. (?ampliar) codificador autoreloj 0 1 1 0 0 1 0 "0"

6.6CONEXIN SERIE RS-232EIA RS-232 es un conjunto de normas del nivel fsico de la terminologa OSI para la conexin DTE-DCE con velocidades de hasta 20 Kbits/s. Inicialmente se desarroll para conectar un ordenador con un mdem, pero su aceptacin ha hecho que se aplique a infinidad de equipos industriales y domsticos. Este tipo de interfaz fsica tiende a desaparecer con la aparicin de nuevos interfaces serie de alta velocidad (USB, FireWire, etc.), pero los principios aqu descritos son igualmente aplicables. FICAR FOTO D'EQUIP Permite transmisin serie asncrona y sncrona entre equipos. El modo de transmisin asncrono es el ms implantado y el que se ver aqu. Son tres especificaciones: Mecnica: ISO 2110 Funcional: norma CCITT V.24 Elctrica: norma CCITT V.28

6 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

6.6.1ESPECIFICACIONESEspecificaciones mecnicas La norma original utiliza un conector tipo DB-25 mostrado en la Figura 4-1. La Tabla 4-1 muestra el nombre de los pines ms importantes para nuestro trabajo.

Figura 4-1. Conectores macho y hembra tipo DB-25 Pin 1 2 3 4 5 6 7 8 20 22 Seal PGND (Protective Ground) TXD (Transmit Data) RXD (Receive Data) RTS (Ready to Send) CTS (Clear to Send) DSR (Data Set Ready) SG (Signal Ground) CD (Carrier Detect) DTR (Data Terminal Ready) RI (Ring Indicator)

Tabla 4-1. Nombre de seal asignado a los pines del conector tipo DB-25 La desvirtuacin de la especificacin ha llevado a simplificar la interfaz y es muy habitual encontrarnos dispositivos con interfaz RS-232 con muchas lneas eliminadas y con un conector tipo DB-9. Hay desvirtuaciones mayores que llegan a dejar solo la linea de referencia (SG) y YXD y RXD (telfonos mviles, camaras fotogrficas digitales, GPS, etc.).

Figura 4-2. Conectores macho y hembra tipo DB-9 Pin 1 2 3 4 5 6 7 8 9 Seal CD (Data Carrier Detect) RD (Recive Data) TD (Trasmit Data) DTR (Data Terminal Ready) SG (Signal Ground) DSR (Data Set Ready) RTS (Request To Send) CTS (Clear To Send) RI (Ring Indicator)

BIBLIOGRAFA

7

Tabla 4-2. Nombre de seal asignado a los pines del conector tipo DB-9 Especificaciones funcionales Las especificaciones funcionales indican el significado y funcionalidad de cada seal. Se resumen a continuacin las ms interesantes para nuestro trabajo. Seales para establecimiento de conexin: DTR (Data Terminal Ready), DTE operativo. DSR (Data Set Ready), DCE operativo. RI (Ring Indicator), el telfono est sonando. RTS (Request To Send, Ready To Send), DTE indica al DCE cuando tiene un carcter a transmitir. CTS (Clear To Send), DCE est listo para aceptar un carcter del DTE. CD (Carrier Detect), DCE indica que la conexin remota est activa. TXD envo de datos en el DTE, recepcin en el DCE. RXD recepcin de datos en el DTE, envo en el DCE. SG (Signal Ground), referencia de las seales. PGND (Protective Ground), masa de proteccin.

Seales para el control de flujo de datos:

Seales de transmisin de datos:

Otras:

El formato de los datos que circula por los pines TXD y RXD tiene el siguiente formato:

lnea inactiva nivel SPACE nivel MARK START

lsb (b0) Datos

msb

PARIDAD

STOP

1 bit

4,5,6,7 u 8 bits

0 1 bit 1, 15 2 bits

Una forma habitual de expresar la configuracin de datos a usar y su velocidad consiste en una cadena de la forma:velocidad en bps paridad (N=none, E=even/par, O=odd/impar, M=mark, S=space)

9600 8 N 1

8 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

bits de datos (4, 5, 6, 7 u 8)

bits de stop (1, 1'5 2)

Los dos equipos que comunican deben ser configurados con el mismo formato de datos. A partir de ese momento, los datos transmitidos entre los dos extremos deber seguir ese formato. Algunas velocidades de comunicacin habituales son 150, 300, 600, 1200, 2400, 4800, 9600, ... baudios. Especificaciones elctricas Define los niveles de tensin, corriente, etc. a emplear. Destacar: Transmisin no balanceada (referencia de tensin comn a todas las seales). Limitacin de corriente a 0,5 A. Capacidad mxima de conductor de 2.500 pF Tiempo de flanco de seal de un mnimo del 4% del tiempo de bit Longitud mxima recomendada de 15 metros Niveles de tensin segn diagrama

BIBLIOGRAFA

9

+15 V +5 V 0 voltios -5 V -15 V Actividad.

Datos "0" MARK estado no definido "1" SPACE

+15 V +5 V 0 voltios -5 V -15 V

Control ON estado no definido OFF

Dibuja el cronograma que resulta de enviar la cadena "Hola" por una conexin RS-232 utilizando la configuracin 2400 8N1. Calcula el tiempo mnimo que se necesitar para transmitir la cadena. Actividad. Suponiendo que un modem transmite al DTE a una velocidad mxima de 56 kbps 8N1 por una conexin RS-232. Cuntos bytes tiles se transmiten realmente por segundo? Cunto tiempo tardar en transmitir 1 Mbyte como mnimo?

6.6.2CONTROL DE FLUJOLa interfaz serie RS-232 permite control de flujo half-duplex y full-duplex. Para ello se pueden emplear protocolos hardware, basados en el uso de las seales asignadas a los pines; o software, basados en el envo de cdigos especiales que controlan el flujo. Para los protocolos hardware, los ms extendidos son: RTS-CTS. Por CTS se indica que se est listo para aceptar datos. DTR-DSR. Lo mismo, pero por DSR. XON (11h), XOFF (13h). Basado en enviar caracteres especiales para indicar que se pueden enviar o no datos. ENQ (?5h), ACK (?6h). Basado en solicitud y contestacin.

Para los software, los ms extendidos son:

La ventaja de los protocolos software es su compatibilidad con todos los equipos, pero a costa de un menor rendimiento. En algunos casos no se emplea ningn tipo de control de flujo, debindose asegurar de que no se van a perder datos o de que las prdidas no afectan al funcionamiento de la aplicacin.

6.6.3CONEXIN ESTNDAR

ENTRE UN COMPUTADOR Y UN MODEM

El diseo original de la norma estaba pensado para conectar un computador a un mdem. En la Figura 4-3 se indican las conexiones fsicas que habr entre un mdem y un conector tipo DB-25 disponible en cualquier computador que cumpla la norma.

10 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

DTE

DCE

Figura 4-3. Conexi RS-232 con conector DB-25 entre un computador y un modem. Es posible emplear un adaptador DB-9 a DB-25 siguiendo el conexionado mostrado en la Tabla 4-3. Seal CD (Data Carrier Detect) RD (Receive Data) TD (Transmitted Data) DTR (Data Terminal Ready) SG (Signal Ground) DSR (Data Set Ready) RTS (Request to Send) CTS (Clear to Send) RI (Ring Indicator) 9 Pin DTE 1 2 3 4 5 6 7 8 9 25 Pin DCE 8 3 2 20 7 6 4 5 22 Fuente DTE o DCE Desde el mdem Desde el mdem Desde el Comp. /Term. Desde el Comp. /Term. Desde el mdem Desde el mdem Desde el Comp. /Term. Desde el mdem Desde el mdem

Tabla 4-3. Conversin DB-9 a DB-25

6.6.4CONEXIN NULL-MODEMLa norma RS-232 se aplica a una gran cantidad de productos comerciales. Dichos productos pueden ser diseados como DTE o como DCE. En muchos casos puede ser interesante interconectar DTE-DTE o DCE-DCE. Para ello es necesario utilizar un cable que "engae" a las partes para que parezca una conexin DTE-DCE. Para esto se utilizan los denominados cables null-modem (anulador de mdem). Un cable mnimo NULL-MODEM consiste en cruzar las seales TXD y RXD y conectar las referencias de seal, tal como se muestra en el esquema de la Figura 4-4. Dicho cable no permitir control de flujo hardware, por lo que, si es necesario un control de flujo, este ser obligatoriamente software.

BIBLIOGRAFA

11

TXD RXD SG

TXD RXD SG

Figura 4-4. Conexin NULL-MODEM mnima La interpretacin y simplificacin de la norma ha hecho que no exista un cable null-modem universal, por lo que es imposible dar un esquema universal para este tipo de cable. La Figura 4-5 muestra algunas posibilidades para conexin DB-25.

1 2 3 4 8 7 5 6 20Cable-I EYN253C

1 2 3 4 8 7 20 5 6

1 2 3 7 5 6 8 20

Cable-I EYN254C

1 2 3 7 5 6 8 20

1 2 3 4 8 6 20 7 17 24Cable-I EYN255C

1 2 3 4 8 6 20 7 17 24

1 2 3 7 11 5 6 8 20Cable-I EYN256C

1 2 3 7 11 5 6 8 20

Figura 4-5. Diferentes modelos de conexin NULL-MODEM para DB-25

6.1.1TERMINALES SERIE Y EMULADORESLa interfaz serie est muy ligada a los antiguos computadores que basaban su funcionamiento en terminales conectados a ellos mediante una conexin serie directa o un modem. La siguiente figura muestra el aspecto de un antiguo terminal serie.

12 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

Ilustracin 1: Un terminal serieUn terminal serie es un equipo constituido por una pantalla, un teclado y una conexin serie que permite representar en pantalla los datos que se reciben por el serie como cdigos ASCII, mientras que los grafos que se pulsan en el teclado son enviados codificados en el correspondiente cdigo ASCII. Los terminales disponen de microinterruptores que permiten configurar los parmetros de la conexin serie (bits de datos, paridad, bit de stop, velocidad, etc.). Los terminales serie han desaparecido del mercado pero se siguen utilizando ampliamente en la industrial y en el desarrollo de hardware (y en muchos bancos y hospitales) sustituyendo el terminal por un programa ejecutndose sobre un computador que lo emula, y aportando ventajas aadidas como mayor flexibilidad en la configuracin y posibilidad de transferencia de ficheros. Los emuladores de terminales se suelen utilizar en la configuracin de dispositivos, reprogramacin, depuracin, etc. Para Microsoft Windows hay gran cantidad de emuladores de terminal, incluso viene uno incorporado en el SO que se llama Hyperterminal y que se recomienda no usar. En su lugar, un buen emulador de terminal con muchas posibilidades es Teraterm (http://en.wikipedia.org/wiki/ TeraTerm). Para los sistemas *nix suele estar muy extendido en uso del emulador minicom (), pero es demasiado complejo para la moayora de casos. Para empezar, es mejor recurrir a GtkTerm, que est disponible en cualquier repositorio de Linux.

6.6.5PROGRAMACIN DE LA INTERFAZ SERIE EN EL PCConceptos El PC suele disponer de 1 2 conexiones serie tipo RS-232. El conector exterior suele ser del tipo DB-9 macho, pero tambin puede ser un conector DB-25 macho. Este tipo de interfaz tiende a desaparecer en los PC de sobremesa y porttiles para el hogar (est, pero no tiene puesto el conector), y se mantiene en los PC de tipo negocio e industriales. En caso de no disponer de ella, se puede utilizar un conversor USB-serie disponible en el mercado.

BIBLIOGRAFA

13

La funcionalidad hardware interna se implementa mediante circuitera UART (??Universal Asynchronous Receiver Transmiter) compatible INTEL 8250 o INTEL 16550A. Para usar este hardware se dispone de unos registros de entrada/salida y de una lnea de interrupcin hardware para cada canal serie. Para que un software pueda hacer uso directo de estos circuitos, deber hacer directamente las lecturas/escrituras de estos puertos y aportar una rutina de servicio para la interrupcin. Dicha interrupcin se disparar cuando se reciban datos y cuando se termine de transmitir un dato. En la web de la asignatura hay disponible un ejemplo de este tipo para MS/DOS y tambin se puede recurrir al cdigo fuente de Linux para ver cmo se hace. Los sistemas operativos suelen ofrecer servicios que permiten usar ms fcilmente estos puertos. Una de las formas estndar de tratar los puertos serie es como unos ficheros en los que las rdenes de escritura envan caracteres y las de lectura permiten recoger los caracteres recibidos. Tanto MS-DOS/WINDOWS como Unix proporcionan este tipo de servicio. Desde el punto de vista de los sistemas operativos MS-DOS y WINDOWS, los puertos serie son dispositivos de tipo fichero que se nombran como COM1, COM2, COM3 COMn. En el caso de sistemas tipo *nix (Linux, MacOSX, Android, Solaris, ...), los dispositivos de este tipo se suelen nombrar como /dev/ttyS0, /dev/ttyS1 ... En la web de la asignatura hay ejemplos de como usar el puerto serie accediendo a la fubncionalidad de tratamiento de ficheros, tanto desde los sistemas operativos Windows como de Linux. Con Borland C++/Buider Con C++ Builder podemos usar la propuesta anterior o conseguir mejores caractersticass accediendo a los servicios del API (??Application Program Interface) de WINDOWS para uso del puerto serie. La programacin de las caractersticas bsicas es sencilla, pero el mximo aprovechamiento se consigue slo con conocimientos ms avanzados de programacin multihilo. Para sacar el mximo partido al puerto serie sin necesidad de conocimientos de programacin avanzados se puede recurrir a un componente prefabricado. En C++ Builder no se incluye un componente para el uso de puerto serie, pero se puede recurrir al de una tercera compaa. Un posible componente es recurrir al componente ActiveX que incorpora Visual Basic, que puede ser incorporado fcilmente a Builder. La funcionalidad aportada por dicho componente no suele ser muy satisfactoria en la prctica, as que se recomienda evitar su uso para evitar futuras sorpresas. Otro ejemplo es el componente de cdigo abierto ComPort (http://comport.sourceforge.net) que permite acceder a prcticamente todas las caractersticas del puerto serie con las ventajas que nos ofrecen la programacin orientada a eventos. Se recomienda el uso de este componente por ser muy superior a otros componentes comerciales y disponer del cdigo fuente para poder modificarlo, si es necesario. Para hacerse una idea de su funcionalidad, supngase el objeto ComPort1 instancia de la clase TComPort, establecer la configuracin del puerto podra ser: ComPort1->Port = "COM2"; ComPort1->BaudRate = br9600; ComPort1->DataBits = dbSeven; ComPort1->Parity->Bits = prOdd; ComPort1->StopBits = sbTwoStopBits; // // // // // usar com2 velocidad 9600 bits de datos paridad impar dos bits de stop

14 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

Antes de "usar" el puerto hay que "abrirlo". Se debe "cerrar" si se deja de usar o se quiere cambiar la configuracin. Este mecanismo permite al S.O. proporcionar a una tarea el uso exclusivo de un puerto. ComPort1->Open(); // intentar abrir el puerto

Ahora ya se puede enviar algo al puerto. Por ejemplo, se puede enviar cualquier secuencia de datos, unsigned char datos[]={54,97,10,234}; ComPort1->Write (datos, 4); Y la secuencia 54, 97, 10, 234 se enva por el serie. En el caso de que la configuracin del puerto no admita la totalidad de bits del dato, entonces los bits ms significativos son descartados. Por ejemplo, si elegimos 6 bits de datos, se descartan los 2 bits de mayor peso de cada dato. Es importante destacar que el programa no espera a que se haya enviado la informacin fsicamente por el cable. sta es colocada en un "buffer" y es el S.O. el encargado de ir envindolo mediante el mecanismo de interrupciones. As se consigue que nuestro programa contine haciendo otras tareas. Para obtener en una variable la informacin recibida por el canal serie se podra hacer: char buffer[1000]; int num_datos; num_datos = ComPort1->Read(buffer, 10); que indica que se saquen 10 datos del tampn de entrada. Si al llamar a la funcin no estn disponibles 10 datos, entonces se esperar a que lo esten. Es muy habitual que lo enviado por el canal serie sean datos correspondientes a cadenas de caracteres, por lo que se suele facilitar el envo y recepcin de caracteres. Por ejemplo, se puede usar la siguiente sintaxis, ComPort1 -> WriteStr("Hola"); y la secuencia H, o, l,a, se enva por el serie. Para obtener en una variable de cadena la informacin recibida por el canal serie se podra hacer: AnsiString a; int num_datos; num_datos = ComPort1 -> ReadStr(a,10); En realidad no existe diferencia alguna entre enviar/recibir caracteres y datos, pues se trata en los dos casos de datos binarios de n bits.

BIBLIOGRAFA

15

(parlar de com configurar els protocols) La mejor forma de "recibir" informacin sin utilizar tcnicas de encuesta (polling) que desperdicien el tiempo de la CPU es aprovechar el evento OnRxChar, que se genera cuando han llegado datos por el puerto serie. ... OnRxChar (TObject Sender, int Count) { ... ComPort1->ReadStr(Label1 -> Caption, Count); } Ejemplo: Se desea conectar dos PC por el puerto serie y desarrollar una aplicacin de consola de manera que lo que se teclee en uno de los ordenadores aparezca en el otro. En primer lugar hay que interconectar los dos ordenadores. Si tienen conectores tipo DB-9 se puede realizar un cable NULL-MODEM bsico segn el siguiente esquema. DB-9 pin 2 (TXD) pin 3 (RXD) pin 5 (SG) DB-9 pin 2 (TXD) pin 3 (RXD) pin 5 (SG)

El siguiente programa sirve para enviar caracteres por el serie utilizando el componente.

Enviado

//--------- PROGRAMA PARA ENVIAR ------------------------------------------#include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma link "CPort" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)

16 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

: TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { ComPort1->Port = "COM1"; // 9600, 8N1 ComPort1->BaudRate = br9600; ComPort1->Parity->Bits = prNone; ComPort1->DataBits = dbEight; ComPort1->StopBits = sbOneStopBit; ComPort1->Open(); } //--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { ComPort1->Close(); } //--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) { ComPort1->Write(&Key,1); } //---------------------------------------------------------------------------

El siguiente listado permite recibir caracteres por el puerto serie y mostrarlos por pantalla.

//-------------- PROGRAMA PARA RECIBIR -------------------------------------#include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma link "CPort" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { //ComPort1->Port = "COM1"; ComPort1->BaudRate = br9600; ComPort1->Parity->Bits = prNone; ComPort1->DataBits = dbEight; ComPort1->StopBits = sbOneStopBit; ComPort1->Open(); } //--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { ComPort1->Close(); } //--------------------------------------------------------------------------char buffer[1000]=""; //buffer vacio void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count) { AnsiString a; ComPort1->ReadStr(a,Count); strcat(buffer,a.c_str());

BIBLIOGRAFA

17

Label2->Caption = buffer; } //---------------------------------------------------------------------------

Actividad. Modificar los programas anteriores para que en ambas partes se puedan teclear y recibir datos.

6.6.6APLICACIN GENERAL A DISPOSITIVOS INDUSTRIALESLa norma RS-232 es utilizada en una gran variedad de dispositivos de dos maneras no excluyentes: Configuracin del dispositivo. Para establecer el comportamiento del dispositivo. Trabajo normal. El dispositivo trabajar en colaboracin con otro dispositivo, recibiendo y/o enviando informacin durante el trabajo normal.

Un ejemplo tpico del primer caso sera la programacin de un autmata programable, donde, en una primera fase, se transfiere a travs de una conexin serie el programa de control que ejecutar el autmata. Un ejemplo del segundo caso sera un mdulo GPS conectado a travs de su salida serie a un sistema de seguimiento de vehculos. Para la configuracin de dispositivos suele ser habitual utilizar un terminal serie. Un terminal serie es un equipo constituido por una pantalla, un teclado y una conexin serie que permite representar en pantalla los datos que se reciben por el serie como cdigos ASCII, mientras que los grafos que se pulsan en el teclado son enviados codificados en el correspondiente cdigo ASCII. Los terminales disponen de microinterruptores que permiten configurar los parmetros de la conexin serie (bits de datos, paridad, bit de stop, velocidad, etc.). Actualmente suele ser muy habitual sustituir el terminal por un programa ejecutndose sobre un computador que lo emula, y aportando ventajas aadidas como mayor flexibilidad en la configuracin y posibilidad de transferencia de ficheros. (Ficar fotos de terminal y ordinador amb hyperterminal). El uso habitual de los terminales hace que muchas veces la informacin transferida entre los dos equipos sea textual y con significado fcilmente comprensible por el usuario. De lo dicho se deduce que hay dos modalidades de transferir datos en RS-232: informacin binaria o informacin en forma de cadenas de texto (en realidad la segunda es un subconjunto de la primera). Desde el punto de vista del programador, ambas aproximaciones son equivalentes, la diferencia es que, en el segundo caso, la interpretacin humana del significado es ms sencilla. El aprovechamiento de la conexin serie consistir entonces en saber generar las secuencias a enviar por el canal serie y en interpretar dichas secuencias, aspecto que se trata en este apartado.

18 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

Partiendo de que el puerto serie del computador est abierto y configurado adecuadamente, supngase que se tienen dos funciones generales que permiten usar la conexin serie y cuyos prototipos son void serie_envia(unsigned char *datos, int cant_datos); void serie_recibe(unsigned char *datos, int *cant_datos); La funcin serie_envia(), deposita en el buffer de transmisin serie del sistema operativo (es decir, no espera a que termine la transmisin de datos) una secuencia de cant_datos datos que sern transmitidos uno a uno a travs del serie. Como resultado devuelve si los datos han sido correctamente volcados en el buffer. En funcin de la configuracin del nmero de bits, los bits de mayor peso de los bytes son descartados. Por ejemplo, para transmitir los datos 125, 33, 40, 100 en ese orden se podra hacer: unsigned char info[] = {125, 33, 40, 100}; serie_envia( info, 4); Para transmitir la cadena Hola se podra hacer: char *cad = Hola; serie_envia( cad, strlen(cad)); Obsrvese que realmente no hay diferencia entre las dos posibilidades. La funcin serie_recibe() copia en la direccin indicada por el puntero los datos recibidos a travs del serie. En cant_datos se deposita la cantidad de datos copiada, pudiendo valer 0 si no se ha recibido nada (ello permite comprobar si se ha recibido algo sin bloquear el programa que utiliza dicha funcin aplicando una tcnica de encuesta o polling). Para recoger la informacin recibida del serie, independientemente de si es texto o datos, se podra hacer, unsigned char buffer[1000]; int n_datos; //deposito datos

serie_recibe( buffer, &n_datos); Si los datos son textuales, podramos mostrarlos por pantalla de la siguiente forma, buffer[n_datos] = '\0'; //para que sea cadena C printf("Se ha recibido %s\n", buffer);

BIBLIOGRAFA

19

En el caso de informacin textual, se deber tener especial precaucin con los 'retornos de carro' para que sean compatibles con el sistema utilizado. Como recomendacin, nunca se deber utilizar '\n' para evitar la traslacin CR+LF de MS-DOS/Windows. Estas funciones son lo suficientemente genricas como para que puedan aplicarse a cualquier software que utilice el serie, incluido el componente elegido. Como estrategia de aprendizaje y afianzamiento del uso de programas que aprovechen el puerto serie se propone la resolucin de las siguientes actividades mediante el mtodo del descubrimiento guiado. Actividad. Se desea controlar una red industrial basada en RS-485 (suponemos ahora que es lo mismo que RS-232) usando un PC. Cada mdulo conectado a la red tiene un identificador diferente y se desea acceder a un mdulo de salidas digitales que acepta el formato de mensaje abajo mostrado. Disear una funcin para C++Builder que haga uso de la funcin envia_rs232() y construya un mensaje y lo enve por el serie a partir de los parmetros que se le pasan como argumento. Formato mensaje: #mmssvccc mm identificador de mdulo, nmero decimal de 2 cifras ss salida a modificar, nmero decimal de 2 cifras v valor de la salida (0 o 1) ccc suma de comprobacin, la suma de mm, ss y v con 3 cifras decimales Ejemplo: #07011009 mdulo 7, salida 1, valor 1, suma de comprobacin 9 La funcin a rellenar es void maneja_modulo(int num_modulo, int num_salida, int valor) { } Y un ejemplo de uso: maneja_modulo(7,1,1);

Siguiendo con la metodologa del descubrimiento se propone ahora una actividad que pretende ensear las bases del tratamiento de la informacin que se recibe por una conexin serie.

20 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

En este caso se supone la llegada de un flujo continuo de informacin. Dado que el programa abre el puerto en un momento indefinido, el flujo de informacin puede encontrarse en cualquier punto de la secuencia. Para interpretar la informacin se sigue el siguiente planteamiento: 1. Acumular fragmento recibido en un buffer. 2. Comprobar la completitud del mensaje. Actividad. Un mdulo industrial de entradas digitales emite continuamente la secuencia de caracteres mostrada abajo, donde el carcter numrico de ms a la derecha corresponde a la entrada 1 y el de ms a la izquierda a la entrada 8. Los caracteres "H" y "L" representan un nivel alto y bajo respectivamente en la entrada correspondiente. Suponiendo que se conecta el mdulo a una entrada serie de un PC y se usa la funcin recibe_rs232(), desarrollar el programa que analiza los caracteres recibidos y, en funcin del valor de la entrada 7, poner la propiedad Visible a true (para un 1) o a false (para un 0) de un objeto llamado Puerta. ...*HLLHHLHL... Actividad. Adapta las actividades anteriores al componente TComPort. En el segundo caso se deber emplear el evento de recepcin de caracteres. SI: Interpretar y eliminar mensaje. NO: Continuar con 1.

BIBLIOGRAFA

21

6.7EJEMPLO: VISOR DE PESOMICROGRAM IE-21El visor de peso industrial modelo IE-21 de la empresa Microgram Instruments Espaola S.A. posee una salida de comunicacin serie RS-232 configurable en velocidad, bits de datos, bits de stop, y paridad. El formato de la transmisin de datos, puede variar entre 7 modalidades distintas, configurables externamente. Gracias a la gran flexibilidad de la configuracin del visor, se puede conectar a cualquier plataforma o sistema de pesaje (tolvas, silos, basculas areas, etc.). El visor posee un conversor analgico/digital de 16 bits, lo que supone mas de 65000 subdivisiones del peso. El peso se muestra a travs de 6 displays de 7 segmentos con punto decimal. Internamente, se puede configurar el modo de funcionamiento (valor de la divisin, valor de fondo de escala, transmisin bruto / neto, n de decimales, brillo de los displays, etc.) y ajustar la ganancia del peso, y los parmetros para la conversin. Tiene un pulsador para tarar el peso, situado en ese momento sobre la plataforma, que desaparece automticamente cuando se detecta una pesada estable superior al peso tarado seguida de una bajada del peso hasta el nivel cercano al cero. Otro pulsador sirve para bloquear la tara, y que esta se mantenga hasta que esta se desbloquee mediante una nueva pulsacin del mismo. Tambin muestra informacin adicional mediante 5 leds, con los que informa cuando el peso es estable, cero, o esta dentro de la zona de pesada mnima. Dos de ellos sirven para sealar cuando acta la tara y el bloqueo de tara.

Figura 4-6. Visor de peso modelo IE-21. Para interconectar el visor con un PC a travs de la conexin serie se debe tener en cuenta que los dos lados actan como DTE, por lo que el cable de conexin es una variante null-modem con un conector DB-9 hembra para el PC y un conector DB-9 macho para el lado del visor. Las seales RXD y TXD van cruzadas al igual que las seales RTS y CTS. En el conector del lado del ordenador hay un puente entre las seales DTR y DSR

22 COMUNICACIONES INDUSTRIALES. COMUNICACIN SERIE (NIVEL FSICO)

Figura 4-7. Esquema del cable de conexin RS-232 de PC / IE-21. El comportamiento de la salida serie se puede configurar de distintas maneras, por ejemplo, que la transmisin de datos se haga solo por peticin o como un flujo continuo. En el caso particular del visor disponible, la configuracin es 9600-7O1 y transmisin continua del peso tomado. El formato de los datos utiliza codificacin ASCII de la siguiente forma: carcter de comienzo de trama 2 caracteres para estado del peso , peso estable D, peso inestable I,+ fuera de rango superior I, - fuera de rango inferior carcter para signo del peso peso positivo - peso negativo 9 caracteres con el peso y coma decimal inglesa "kg" retorno de carro

S

D

_

3

3

6

.

0

k

g

\x0D

\x0A

BIBLIOGRAFA

23

6.8CONEXIN SERIE RS-485Como actualizaciones de la norma RS-232 se propusieron nuevas normas, por ejemplo: RS-422. Especificacin elctrica diferencial. RS-423. Conexin sistemas RS-422 y RS-232. RS-485. Especificacin elctrica multimaestro. Las limitaciones de la norma RS-232 se pueden superar con las mejoras que aportan estas normas posteriores. Gracias al uso de una transmisin balanceada, RS-485 aporta como beneficio inmediato una mayor velocidad de transmisin, una longitud de lnea del orden de kilmetros y una buena inmunidad al ruido. FICAR FOTO, UN OMROM AMB RS_485 i PROFIBUS ESTARA B.

6.8.1ESPECIFICACIONES Y CARACTERSTICASLa norma RS-485 engloba caractersticas de propuestas posteriores a la RS-232. Las siguientes caractersticas y especificaciones son las ms destacables: Red multipunto, con hasta 32 emisores/receptores Medio fsico Par trenzado (mejor si se apantalla). Terminadores de 120 . Opcionalmente, resistencias pull-up y pull-down. Tensiones Voltaje en modo comn de 7 a +12 V. Histresis de 200 mV. "1">= +0.2 V, "0"