Apuntes de
Ingeniera Tcnica Industrial (Electrnico) Departamento de Informtica de Sistemas y Computadores Escuela Tcnica Superior de Ingeniera del Diseo
comunicaciones_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.
6.1INTRODUCCIN
El 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.2OBJETIVOS
Comprender 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.3ESQUEMA
El esquema de la unidad coincide con el desarrollo ordenado de los objetivos y que se plasman en la correspondiente tabla de contenidos.
6.4SERIE US PARALELO
La 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.
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
lecturas
lecturas
sincronizacin reloj
BIBLIOGRAFA
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.6.1ESPECIFICACIONES
Especificaciones 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
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.
Otras:
El formato de los datos que circula por los pines TXD y RXD tiene el siguiente formato:
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
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
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 FLUJO
La 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.
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
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.
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
6.6.4CONEXIN NULL-MODEM
La 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 20
Cable-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 24
Cable-I EYN255C
1 2 3 4 8 6 20 7 17 24
1 2 3 7 11 5 6 8 20
Cable-I EYN256C
1 2 3 7 11 5 6 8 20
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
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 <vcl.h> #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"; // 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 <vcl.h> #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
Actividad. Modificar los programas anteriores para que en ambas partes se puedan teclear y recibir datos.
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.
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.
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
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
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 <blanco>,<blanco> peso estable D, <blanco> peso inestable I,+ fuera de rango superior I, - fuera de rango inferior carcter para signo del peso <blanco> peso positivo - peso negativo 9 caracteres con el peso y coma decimal inglesa <blanco> "kg" <blanco> retorno de carro
\x0D
\x0A
BIBLIOGRAFA
23
6.8.1ESPECIFICACIONES Y CARACTERSTICAS
La 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" <= -0.2 V. Formato de los datos idntico a RS-232 Control de flujo half-duplex. La distancia mxima que se puede alcanzar depende de la velocidad de transmisin. Por ejemplo: a 10 Mbps 12 metros. a 100 Kbps 1200 metros
La Figura 4-8 muestra un diagrama de una conexin tipo RS-485. Las estaciones transmisoras se conectan, en cualquier punto, a los conductores de un nico par trenzado. A los extremos del par se conectan resistencias terminadoras de 120 Ohms. En la Figura 4-9 se muestra en ms detalle la circuitera implicada en la transmisin y recepcin de datos. Como el medio se comparte entre todas las estaciones, la transmisin solo podr ser half-duplex.
tra n s m is o r
tra n s m is o r
tra n s m is o r
Figura 4-9. Circuitera del emisor/receptor El estndar RS-485 est ampliamente extendido en la industria, utilizndose para los siguientes tipos de comunicacin: Punto a punto. Maestro-esclavos. Multimaestro. En funcin del tipo de comunicacin seleccionado aparecern diferentes problemticas a la hora de compartir el medio fsico. La problemtica a este nivel la debe resolver el software que se desarrolle en el nodo de transmisin. La Figura 4-10 muestran una configuracin maestro-esclavo. En esta configuracin, el maestro es el nico autorizado a iniciar una transmisin, que sern bsicamente rdenes a los esclavos para que hagan determinadas cosas o respondan con su estado (por ejemplo, la lectura de un sensor).
BIBLIOGRAFA
25
Nodo Maestro
Figura 4-10. Configuracin maestro-esclavos (DRETS) La Figura 4-11 muestra una configuracin multimaestro. Al compartirse un medio fsico y ser la transmisin half-duplex, es necesario establecer un reparto del uso del medio por parte de los maestros. Una opcin empleada suele ser crear un anillo lgico, que consiste en un mecanismo de paso de turnos entre los maestros mediante el intercambio de un testigo.
Figura 4-11. Configuracin multimaestro (DRETS) La Tabla 4-4 resume las caractersticas de algunas normas RS.
mercado que, bsicamente, adaptan los niveles de tensin y el modo de transmisin de la conexin RS-232 del PC a la norma RS-485. Con uno de estos adaptadores capacitaremos al PC para comunicarse, por ejemplo, con sensores y actuadores industriales, PLCs, reguladores, etc. En la Figura 4-12 puede verse una configuracin tpica. Para alcanzar mayores velocidades que el RS-232 especfico del PC ser necesario adquirir una tarjeta RS-485 para instalarla en una ranura de expansin del PC. Desde el punto de vista del programador, las conexiones serie se vern en Windows como COMx adicionales.
sensores y actuadores
Autmata programable
Regulador
Figura 4-12. Configuracin tpica con un PC conectado a un RS-485 Actividad Localizar informacin en Internet sobre aplicaciones del RS-485 y sus precios. Antes de empezar el trabajo se deber decidir sobre que se quiere localizar informacin y comentarlo con el profesor. Al final de la actividad, cada grupo expondr lo ms interesante que ha encontrado. Si tenis inters en algn tipo de producto especfico, por ejemplo, autmatas y reguladores: www.omrom.com, autmatas y reguladores www.embedded.com, de todo sobre informtica industrial www.adlink.co.tw, mdulos NuDam que se estudiarn y usarn ms adelante www.advantech.com, mdulos ADAM similares a los anteriores www.qnv.com, suministrador de equipos informticos industriales en Espaa, dispone de lista de precios.
BIBLIOGRAFA
27
6.9.2CONFIGURACIN DE LA RED.
Para montar una red se pueden usar hasta 256 mdulos y un mximo de 128 mdulos por segmento. En la Figura 4-13 se muestra un esquema de la conexin de un PC a un segmento. Obsrvese que cada segmento del bus se debe acabar con una resistencia terminadora de 120 .
Terminator
Figura 4-13. Configuracin sencilla con mdulos Nu-DAM En el caso de necesitar extender ms la red o crear bifurcaciones se pueden emplear repetidores, tal y como se muestra en la Figura 4-14 y en la Figura 4-15.
BIBLIOGRAFA
29
Figura 4-15. Configuracin libre Para el cableado se usar par trenzado, y se recurrir a par trenzado apantallado en caso de interferencias, teniendo especial precaucin en cuidar la conexin a tierra. La Figura 4-16 muestra una recomendacin para la derivacin a tierra.
Para utilizar el mdulo basta con conectarlo con un cable serie DTE-DCE (sin ningn cruce de cables) al PC, alimentarlo y conectarlo al par trenzado. En la Tabla 4-5 se pueden comprobar las especificaciones.
Tabla 4-5. Especificaciones del mdulo NuDAM 6520 La Figura 4-17 muestra el aspecto del mdulo y el significado de cada una de las conexiones disponibles.
Figura 4-17. Aspecto del mdulo NuDAM 6520 y significado de las conexiones En el mdulo se deber configurar previamente la velocidad en bps a la que se desea transmitir. Para su conexin al PC se deber respetar el interconexionado mostrado en la Figura 4-18 Como ya se ha dicho, se deduce de l que se trata de una conexin DTE-DCE.
BIBLIOGRAFA
31
Tabla 4-6. Especificaciones del mdulo NuDAM 6050 La Figura 4-19 muestra el aspecto del mdulo y la funcin asignada a cada conexin. La referencia de las entradas y salidas digitales corresponde al pin GND.
Figura 4-19. Aspecto del mdulo NuDAM 6050 y significado de las conexiones Para manejar todos los mdulos de emplean rdenes con el formato:
BIBLIOGRAFA
33
Por ejemplo,
BIBLIOGRAFA
35
Actividad. Escribe la cadena que pone a 1 la salida digital 5 del mdulo A7h. Escribe la cadena que pone a 1 las 4 salidas digitales de ms peso y a 0 el resto
Actividad. Realizar una funcin para el mdulo NuDAM 6050 cuyo prototipo sea int salida_digital(int modulo, int salida, int estado); a la que, pasndole como parmetros el identificador del mdulo, la salida a manipular y el valor que se quiere dar a la salida, cree el mensaje necesario y lo enve a travs del RS-232 utilizando la funcin genrica envia_rs232(). Actividad. Ampla la funcin de manera que compruebe que la operacin de salida se realice correctamente. Utiliza la funcin genrica recibe_rs232(). La funcin devolver 0 si la operacin ha ido bien y un nmero negativo en caso contrario. Qu problemas presenta la solucin propuesta? Cmo se pueden solucionar? Actividad. Analizar un mdulo NuDAM, indicando: Referencia numrica y propsito. Precio aproximado. Caractersticas y especificaciones ms destacables. Conexionado al proceso. Formato de las rdenes y respuestas. E/S digital: 6052, 6056, 6060 (6053, 6054, 6058, 6063) E analgica: 6011, 6013, 6017, 6018, (6012, 6014) S analgica: 6021, 6024 Contador: 6080
comunicaciones_serie_r10.odt
BIBLIOGRAFA
37
cin que haga uso de estos puertos series virtuales no notar que no es un puerto real, siendo el desarrollo del programa idntico al de uno clsico. Los puertos serie virtuales estn estndarizados en Bluetooth, IrDA, fibra ptica, etc. y se dispone tambin en el mercado de productos no estndar para crear puertos virtuales sobre Wifi, Ethernet, USB, etc. Desde el punto de vista del sistema operativo Microsoft Windows, estos puertos virtuales se nombrarn igual que los reales (COMx). Desde del punto de vista de los SO tipo *nix, el nombre del puerto puede variar de una plataforma a otra. Este apartado pretende mostrar el uso de los perfiles serie ms habituales.
En la siguiente imagen se ha usado el emulador de terminal TeraTerm y se ha seleccionado la apertura del puerto COM8.
BIBLIOGRAFA
39
Ahora se dispone de los identificador de dispositivo que desean ser visibles. Podemos seleccionar uno e interrogar los servicios que ofrece mediante la orden sdptool.
aperles@bacterio:~$ sdptool browse 00:0b:0d:6c:c2:ed Browsing 00:0B:0D:6C:C2:ED ... Service Name: SPP slave Service Description: Bluetooth SPP V1.52 Service RecHandle: 0x10000 Service Class ID List: "Serial Port" (0x1101) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 1
Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100
El protocolo RFCOMM es el que ofrece el servicio de conexin serie, y lo hace por el canal 1. Ahora podemos usar la orden rfcomm para crear un canal serie virtual. Esto se puede configurar para que sea automtico para siempre siempre que se encienda el ordenador.
aperles@bacterio:~$ rfcomm connect 3 00:0B:0D:6C:C2:ED 1 Connected /dev/rfcomm3 to 00:0B:0D:6C:C2:ED on channel 1 Press CTRL-C for hangup
Ahora se debera disponer de la conexin serie virtual /dev/rfcomm3, Se puede utilizar, por ejemplo, gtkterm para abrir el dispositivo. Las velocidades, bits, etc. dan igual porque es virtual tal cual.
BIBLIOGRAFA
41
Hay un driver GPL disponible en http://www.ircomm2k.de/ que lo utilizan bastantes dispositivos para emular una conexin serie, sobre todo mviles. En Linux hay informacin en http://oasis.dit.upm.es/~jantonio/documentos/revistas/irda/irda3.html
6.11RESUMEN
En este tema se han visto y practicado las comunicaciones serie entre computadores y dispositivos industriales. La amplia aceptacin de las normas RS-232 y RS-485 hacen que estn presentes en infinidad de dispositivos industriales, por lo que ser requisito imprescindible el dominar las tcnicas de programacin que permiten explotarlos. Hoy en da, las normas RS-232 y RS-485 estn siendo desplazadas por otros tipo de interfaces como USB o conexiones inalmbricas. En muchos casos, este desplazamiento no afecta a las tcnicas practicadas, pues es muy habitual la existencia de puertos serie virtuales que sobre los nuevos interfaces que permitirn continuar aplicando las mismas tcnicas.
6.12BIBLIOGRAFA Y ENLACES
manual visor manual Nudam Puertos serie virtuales/redirectores
http://lpccomp.bc.ca/remserial/ http://www.dest-unreach.org/socat/ <- viene con Ubuntu http://sourceforge.net/projects/ser2net <- viene con Ubuntu "sredird" <- viene con Ubuntu
BIBLIOGRAFA
43
Emuladores de NULL-modem
"snooper" es para capturar trfico entre dos dispositivos <- viene con Ubuntu