Beruflich Dokumente
Kultur Dokumente
Manejo de puertos
en C#.net
I NTRODUCCIÓN
Con cada día que pasa, confiamos más y más en las computadoras para todas las facetas de
nuestras vidas en la era de la información. Todos los aspectos de nuestra vida diaria, como temas
financieros, asuntos clínicos y tiempo de esparcimiento, tienen lazos con la red mundial de
información, y por lo tanto, con computadoras. Para algunos, su computadora es su vida, e incluso
más, su computadora les proporciona un recurso crucial de información, comunicación y
organización. Una razón de que las computadoras sean capaces de realizar todas estas tareas
asombrosas que nos facilitan la vida, es su habilidad de ser versátiles, poderosas y rápidas para
acometer las tareas que se les asignen. La clave de la capacidad de conectividad de las
1
computadoras está en sus puertos.
Puertos de la computadora
Las computadoras están equipadas con varios puertos que les permiten operar y comunicarse con
dispositivos periféricos intercambiables, algunos de los cuales son cruciales para que el usuario
pueda operar y manipular la computadora, tal como en los casos del teclado y el ratón. Otros
dispositivos sirven como capacidad externa, como los casos de la impresora y las bocinas. Incluso
algunos más permiten que su computadora se conecte e interactúe con otros dispositivos, como
asistentes personales digitales (PDA), teléfonos celulares y reproductores de MP3.
El puerto USB es uno de los puertos más populares y más usados que viene de serie en
prácticamente todas las computadoras que se fabrican hoy en día. USB significa “universal serial
bus” o “bus serie universal” y es un estándar de facto tanto para computadoras basadas en
Windows como en las computadoras Apple. Los puertos USB típicamente permiten hacer
conexiones con dispositivos más pequeños. El puerto USB también es muy útil para las
aplicaciones “plug and play” en las cuales cuando un dispositivo se conecta al puerto USB de una
computadora, ésta localiza automáticamente el driver que le corresponda, reduciendo o eliminando
la necesidad de un reinicio de software.
Los puertos llamados Firewire fueron desarrollados por Apple y fueron muy usados hace unos
cuantos años, sin embargo, Apple ha abandonado prácticamente al Firewire en favor del estándar
USB 2.0, que es más aceptado, aunque todavía muchas de sus computadoras vienen de fábrica
con el puerto Firewire.
Los puertos paralelo son otro de tipo muy utilizado para conectar periféricos, como impresoras, a
las computadoras, tienen un mayor tamaño que los puertos USB y Firewire, además tienen
múltiples contactos que reciben al conector complementario en el extremo de un cable, y se
atornillan al gabinete de la computadora para estar protegido contra desconexiones accidentales.
Algunos otros tipos de puerto son:
RCA – Aplicaciones de audio/video
1
TechFAQ. What is a computer port? Estados Unidos. 2009. http://www.tech-faq.com/computer-port.shtml
S-Video - Video
VGA - Monitor
DVI - Monitor
RJ11 - Modem
HDMI – Video de alta definición
Ethernet - Redes
PS2 – Teclado y ratón
2
Wikipedia en Español. Telemetría. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Telemetr%C3%ADa
3
Wikipedia en Español. Entrada/Salida. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Entrada/salida
Ratón
Joystick
Lápiz óptico
Micrófono
Webcam
Escáner
Escáner de código de barras
Pantalla táctil
Lector biométrico (huellas digitales, iris, palma, etc.)
Dispositivos de salida:
Monitor
Altavoz
Auriculares
Impresora
Plotter
Proyector
Dispositivos bidireccionales (entrada y salida):
Unidades de almacenamiento
CD
DVD
Módem
Fax
USB
Dispositivos para acceso a redes inalámbricas WiFi y WiMax
Definiciones importantes
4
Telecomunicación
La telecomunicación o comunicación a distancia, es una técnica consistente en transmitir un
mensaje desde un punto a otro, normalmente con el atributo típico de ser bidireccional. El
término telecomunicación cubre todas las formas de comunicación a distancia, incluyendo radio,
telegrafía, televisión, telefonía, transmisión de datos e interconexión de ordenadores a nivel de
enlace. El Día Mundial de la Telecomunicación se celebra el 17 de mayo. Telecomunicaciones
abarca toda transmisión, emisión o recepción de signos, señales, datos, imágenes, voz, sonidos
o información de cualquier naturaleza que se efectúa a través de cables, radioelectricidad,
medios ópticos, físicos u otros sistemas electromagnéticos.
4
Wikipedia en Español. Telecomunicación. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Telecomunicaci%C3%B3n
Estándar
En términos de comunicaciones, estándar es una especificación que regula la realización de
ciertos procesos o la fabricación de componentes para garantizar la interoperabilidad de
equipos5, es decir, se refiere a las normas y especificaciones físicas y eléctricas que rigen el
comportamiento de un determinado elemento. En el caso de los estándares de comunicación
serie RS-232, RS-422 y RS-485, las diferencias entre ellos son los niveles de voltaje que
manejan y utilizan para señalizar marca o espacio, el tipo de cables que se debe utilizar y su
configuración física (cables simples o par trenzado), las dimensiones mecánicas, etc. No se
debe confundir este término con el de protocolo, porque estándar se limita a definir las
características físicas, mecánicas y operativas del medio físico y eléctrico de comunicación.
6
Protocolo
En el campo de las telecomunicaciones, un protocolo de comunicaciones es el conjunto de
reglas normalizadas para la representación, señalización, autenticación y detección de errores
necesario para enviar información a través de un canal de comunicación. Los protocolos de
comunicación para la comunicación digital entre computadoras tienen características destinadas
a asegurar un intercambio de datos confiable a través de un canal de comunicación imperfecto.
Los protocolos de comunicación siguen ciertas reglas para que el sistema funcione
apropiadamente.
Los protocolos implantados en sistemas de comunicación de amplio impacto, suelen
estandarizarse, debido a que la comunicación e intercambio de información (datos) es un factor
fundamental en numerosos sistemas, y para asegurar tal comunicación se vuelve necesario
copiar el diseño y funcionamiento a partir del ejemplo pre-existente, lo cual ocurre tanto de
manera informal como deliberada. Existen consorcios empresariales, que tienen como propósito
precisamente el de proponer recomendaciones de estándares que se deben respetar para
asegurar la interoperabilidad de los productos.
La especificación de un protocolo incluye:
Sintaxis: especifica cómo son y cómo se construyen los mensajes de intercambio de
información.
Semántica: especifica el significado de cada comando o respuesta del protocolo respecto a
sus parámetros/datos.
Procedimientos de uso de esos mensajes: es lo que hay que programar realmente (los
errores, como tratarlos).
5
Wikipedia en Español. Estándar. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Est%C3%A1ndar
6
Wikipedia en Español. Protocolo de comunicaciones. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Protocolo_de_comunicaci%
C3%B3n
E L P UERTO USB
El Universal Serial Bus (bus universal en serie), abreviado comúnmente USB, es un puerto que
sirve para conectar periféricos a una computadora. Fue creado en 1996 por siete empresas: IBM,
7
Intel, Northern Telecom, Compaq, Microsoft, Digital Equipment Corporation y NEC.
El diseño del USB buscaba eliminar la necesidad de adquirir tarjetas separadas para poner en los
puertos bus ISA o PCI, y mejorar las capacidades plug-and-play permitiendo a esos dispositivos
ser conectados o desconectados al sistema sin necesidad de reiniciar. Sin embargo, los buses PCI
o PCIe funcionan mucho mejor en aplicaciones en las que se necesita un ancho de banda mayor
para grandes transferencias de datos o una latencia baja. De igual forma sucede si la aplicación
requiere de robustez industrial. En contraparte, el bus USB tiene la ventaja significativa de la
sencillez de incorporación de nuevos dispositivos, ya que cuando se conecta un nuevo dispositivo,
el servidor lo enumera y agrega el software necesario para que pueda funcionar.
El USB por sí solo no funciona para conectar los periféricos, porque requiere ser dirigido por el
drive central, con lo que se pueden incorporar aplicaciones como ratones, teclados, escáneres,
cámaras digitales, teléfonos móviles, reproductores multimedia, impresoras, discos duros externos
entre otros ejemplos, tarjetas de sonido, sistemas de adquisición de datos y componentes de red.
Para dispositivos multimedia como escáneres y cámaras digitales, el USB se ha convertido en el
método estándar de conexión. Para impresoras, el USB ha crecido tanto en popularidad que ha
desplazado a un segundo plano a los puertos paralelos porque el USB hace mucho más sencillo el
poder agregar más de una impresora a una computadora personal.
Algunos dispositivos requieren una potencia mínima, así que se pueden conectar varios sin
necesitar fuentes de alimentación extra. La gran mayoría de los concentradores incluyen fuentes
de alimentación que brindan energía a los dispositivos conectados a ellos, pero algunos
dispositivos consumen tanta energía que necesitan su propia fuente de alimentación. Los
concentradores con fuente de alimentación pueden proporcionarle corriente eléctrica a otros
dispositivos sin quitarle corriente al resto de la conexión (dentro de ciertos límites).
En el caso de los discos duros, es poco probable que el USB reemplace completamente a los
buses (el ATA (IDE) y el SCSI), pues el USB tiene un rendimiento más lento que esos otros
estándares. Sin embargo, el USB tiene una importante ventaja en su habilidad de poder instalar y
desinstalar dispositivos sin tener que abrir el sistema, lo cual es útil para dispositivos de
almacenamiento externo. Hoy en día, una gran parte de los fabricantes ofrece dispositivos USB
portátiles que ofrecen un rendimiento casi indistinguible en comparación con los ATA (IDE). Por el
contrario, el nuevo estándar Serial ATA permite tasas de transferencia de hasta aproximadamente
150/300 MB por segundo, y existe también la posibilidad de extracción sin interrumpir la operación
e incluso una especificación para discos externos llamada eSATA.
7
Wikipedia en Español. Universal Serial Bus. Estados Unidos. 2009. http://es.wikipedia.org/wiki/USB
El USB casi ha reemplazado completamente a la interfaz PS/2 en los teclados y ratones, hasta el
punto de que un amplio número de tarjetas madre (motherboards) modernas carecen de dicho
puerto o cuentan solamente con uno, que funciona con ambos periféricos.
Características de transmisión
Los dispositivos USB se clasifican en cuatro tipos según su velocidad de transferencia de datos:
Baja velocidad (1.0). Tasa de transferencia nominal de 1.5 Mbps (192 KB/s) o mayor. Se
utiliza principalmente en dispositivos de interfaz humana (Human interface device, en inglés)
como teclados, ratones, hornos microondas y artículos del hogar.
Velocidad completa (1.1). Tasa de transferencia nominal de hasta 12 Mbps (1.5 MB/s),
aunque fuentes independientes sugieren realizar nuevas mediciones. Este tipo fue el más
rápido antes de que surgiera la especificación USB 2.0; muchos dispositivos fabricados
actualmente funcionan a esta velocidad. Estos dispositivos dividen el ancho de banda de la
conexión USB entre ellos, basados en un algoritmo de impedancias LIFO.
Alta velocidad (2.0). Tasa de transferencia nominal de hasta 480 Mbps (60 MB/s), que por lo
general funciona hasta 125Mbps (16MB/s).
Súper alta velocidad (3.0): Tiene una tasa nominal de transferencia de hasta 4.8 Gbps (600
MB/s) y actualmente se encuentra en fase experimental. Esta especificación será diez veces
más veloz que la anterior 2.0 y se espera que salga al mercado a mediados de 2009 aunque
aún no hay hardware disponible que lo soporte. La velocidad del bus es diez veces más rápida
que la del USB 2.0, debido a que han incluido 5 conectores extra, desechando el conector de
fibra óptica propuesto inicialmente, pero manteniendo la compatibilidad con los estándares
anteriores. Se espera que los productos fabricados con esta tecnología lleguen al consumidor
entre 2009 y 2015.
Las señales del USB se transmiten por medio de un cable de par trenzado con una impedancia
característica de 90 Ω ± 15%, cuyos hilos se denominan D+ y D-. Estos, colectivamente, utilizan
señalización diferencial en full dúplex para combatir los efectos del ruido electromagnético en
enlaces largos. D+ y D- operan en conjunto como conexión única. Los niveles de transmisión de la
señal varían de 0 a 0.3 V para nivel bajo (cero lógico) y de 2.8 a 3.6 V para nivel alto (uno lógico)
en las versiones 1.0 y 1.1, y en ±400 mV en el USB 2.0 de alta velocidad.
En las primeras versiones los alambres de los cables no se conectan a tierra, pero en el modo de
alta velocidad se tiene una terminación de 45 Ω a tierra o un diferencial de 90 Ω para acoplar la
impedancia del cable. Este puerto sólo admite la conexión de dispositivos de bajo consumo, es
decir, que tengan un consumo máximo de 100 mA por cada puerto; sin embargo, en caso de que
estuviese conectado un dispositivo que permite 4 puertos por cada salida USB (extensiones de
máximo 4 puertos), entonces la energía del USB se asignará en unidades de 100 mA hasta un
máximo de 500 mA por puerto.
Compatibilidad y conectores
El estándar USB especifica características eléctricas y mecánicas de los conectores, pero a
diferencia de otros estándares también define tamaños para el área alrededor del conector de un
dispositivo, buscando evitar el bloqueo de un puerto adyacente por el dispositivo en cuestión.
Las especificaciones USB 1.0, 1.1 y 2.0 definen dos tipos de conectores para conectar dispositivos
al dispositivo servidor: A y B. Sin embargo, la capa mecánica ha cambiado en algunos conectores.
Por ejemplo, el IBM UltraPort es un conector USB privado localizado en la parte superior del LCD
de las computadoras portátiles de IBM. Utiliza un conector mecánico diferente mientras mantiene
las señales y protocolos característicos del USB. Otros fabricantes de artículos pequeños han
desarrollado también sus medios de conexión pequeños, y ha aparecido una gran variedad de
ellos, algunos de baja calidad.
Una extensión del USB llamada "USB-On-The-Go" (sobre la marcha) permite a un puerto actuar
como servidor o como dispositivo - esto se determina por qué lado del cable está conectado al
aparato. Incluso después de que el cable está conectado y las unidades se están comunicando,
ambas unidades pueden "intercambiar de papel" bajo el control de un programa. Esta facilidad está
específicamente diseñada para dispositivos como PDA, donde el enlace USB podría conectarse a
un PC como un dispositivo, y conectarse como servidor a un teclado o ratón. El "USB-On-The-Go"
también ha diseñado 2 conectores pequeños, el mini-A y el mini-B, así que esto debería detener la
proliferación de conectores miniaturizados de entrada.
La asignación de funciones de cada punto de conexión (pin) se detalla a continuación:
CONECTOR USB ESTÁNDAR CONECTOR USB MINIPLUG/MICROPLUG
Pin Nomb Color del cable Descripción Pin Nombre Color del Descripción
re cable
1 VCC Rojo +5v 1 VCC Rojo +5v
2 D− Blanco Data – 2 D− Blanco Data –
3 D+ Verde Data + 3 D+ Verde Data +
4 GND Negro Tierra 4 ID Ninguno Permite distinguir
Micro-A y Micro-B
5 GND Negro Tierra
8
La especificación del USB incluye los siguientes tipos de conexión mecánica :
8
Pinouts.Ru. USB Pinout. Estados Unidos. 2005. http://pinouts.ru/Slots/USB_pinout.shtml
E L P UERTO S ERIE
Un puerto serie es una interfaz de comunicaciones de datos digitales, frecuentemente utilizado por
computadoras y periféricos, en donde la información es transmitida bit a bit enviando un solo bit a
la vez, a diferencia del puerto paralelo que envía varios bits simultáneamente. La comparación
entre la transmisión en serie y en paralelo se puede explicar con analogía con las carreteras. Una
carretera tradicional de un sólo carril por sentido sería como la transmisión en serie y una autopista
9
con varios carriles por sentido sería la transmisión en paralelo, siendo los coches los bits.
En informática, un puerto serie es una interfaz física de comunicación en serie a través de la cual
se transfiere información mandando o recibiendo un bit. A lo largo de la mayor parte de la historia
de las computadoras, la transferencia de datos a través de los puertos serie ha sido generalizada.
Se ha usado y sigue usándose para conectar las computadoras a dispositivos como terminales o
módems. Los ratones, teclados, y otros periféricos también se conectaban de esta forma.
Mientras que otras interfaces como Ethernet, FireWire, y USB mandaban datos como un flujo en
serie, el término "puerto serie" normalmente identifica el hardware más o menos conforme al
estándar RS-232, diseñado para interactuar con un módem o con un dispositivo de comunicación
similar.
En muchos periféricos la interfaz USB ha reemplazado al puerto serie; en el año 2009 la mayor
parte de las computadoras están conectadas a dispositivos a través de USB, y con frecuencia ni
siquiera tienen un puerto serie, el cual se omite para reducir costos de manufactura de los equipos
y se considera que es un puerto heredado. Sin embargo, los puertos de serie todavía se
encuentran en sistemas de automatización industrial y algunos productos industriales y de
consumo. Los dispositivos de redes (como ruteadores y conmutadores) frecuentemente tienen
puertos serie para su configuración, en donde se usan por ser sencillos, baratos y porque permiten
la interoperabilidad entre dispositivos. La desventaja es que configurar conexiones de serie puede
requerir el conocimiento de un experto y el uso de comandos complejos.
9
Wikipedia en Español. Puerto serie. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Puerto_serie
similar al RS-232, es un estándar utilizado en el ámbito industrial. Un mismo puerto serie puede
utilizar estándares de comunicación diferentes al RS-232 en aplicaciones de uso industrial, en cuyo
caso se utilizan convertidores de niveles de señales para adaptarse a la conexión con RS-422 o
RS-485. Estos tres tipos de estándar de comunicación más utilizados (RS-232, RS-422 y RS-485),
se describen párrafos adelante en esta misma sección.
El Estándar RS-232
RS-232 (también conocido como Electronic Industries Alliance RS-232C) es una interfaz que
designa una norma para el intercambio serie de datos binarios entre un DTE (Equipo terminal de
datos) y un DCE (Data Communication Equipment, Equipo de Comunicación de datos), aunque
10
existen otras en las que también se utiliza la interfaz RS-232.
En particular, existen ocasiones en que interesa conectar otro tipo de equipos, como
computadoras. Evidentemente, en el caso de interconexión entre los mismos, se requerirá la
conexión de un DTE (Data Terminal Equipment) con otro DTE, para lo que se utiliza una conexión
entre ellos sin usar modem, por lo que se le conoce como null modem ó modem nulo.
El RS-232 consiste en un conector tipo DB-25 (de 25 puntos), aunque es normal encontrar la
versión de 9 puntos (DE-9), más barata y más extendida; este estándar está diseñado para
permitir la comunicación entre dos equipos y no para un bus o red de dispositivos.
10
Wikipedia en Español. RS-232. Estados Unidos. 2009. http://es.wikipedia.org/wiki/RS232
Conexiones en el DTE
La disposición de los conectores DB9 y DB25 en el panel de la computadora es:
11
AGG Software. Serial (RS232) port interface pinout and signals. Estados Unidos. 2007. http://www.aggsoft.com/rs232-pinout-cable/
pinout-and-signal.htm
El Estándar RS-422
Las interfaces con el estándar RS-422 se desarrollaron para transmisiones de datos en serie a
alta velocidad y a grandes distancias, encontrando una amplia aplicación en el sector industrial.
Además este estándar permite la conexión de hasta 10 receptores con un transmisor RS-422
12
dentro de un mismo bus serie.
Conexiones
En el estándar RS-422 no se establece ninguna especificación mecánica sino que se remite
solamente a la RS449, que describe una conexión SUB-D de 37 puntos. Por motivos de espacio
y costo no se ha popularizado esta forma de conexión mecánica, pero la mayoría de las
aplicaciones utilizan conexiones SUB-D en versión de 9, 15 y 25 puntos. Al no existir una
designación de circuitos o puntos, cuando se hace una conexión con dispositivos RS-422 debe
consultarse invariablemente la descripción de conexiones de la documentación del dispositivo.
Método físico de transmisión
Los datos en serie se transmiten sin relación a tierra, como diferencia de tensión entre las líneas
correspondientes. Para cada señal a transmitir existe un par de conductores que se compone
de una línea de señales invertida y otra no invertida. La línea invertida se caracteriza por regla
general con la marca índice "A" o "-", mientras que la línea no invertida lleva "B" o "+". El
receptor evalúa solamente la diferencia existente entre ambas líneas, de modo que las
modalidades comunes de perturbación hasta 7V en la línea de transmisión no falsifican la señal
útil. Los transmisores RS-422 dan una salida de ±2V entre las dos líneas, en condiciones de
carga; mientras que los módulos de recepción reconocen el nivel de ±200mV como señal válida.
La asignación tensión de diferencia al estado lógico se define del modo siguiente:
A - B < -0,3V = MARK = OFF = Lógico 1
A - B > +0,3V = SPACE = ON = Lógico 0
Longitud de líneas
La longitud máxima de los cables utilizados con este estándar, depende de la velocidad de
transmisión que se elija y es como máximo 1,200 metros; conforme la velocidad de transmisión
se incremente por encima de los 100 Kbit/s, el alcance desciende, como se ilustra en la
siguiente gráfica.
12
Interfaces W&T. Interfaz RS422. Inglaterra. 2005. http://www.wut.de/e-6wwww-10-apes-000.php
El Estándar RS-485
Definido como un sistema en bus de transmisión multipunto diferencial, es ideal para transmitir a
altas velocidades sobre largas distancias (35 Mbps hasta 10 metros y 100 Kbps en 1,200 metros) y
a través de canales ruidosos, ya que reduce las señales parásitas que aparecen en los voltajes por
efecto de su paso a través de la línea de transmisión. El medio físico de transmisión es un par
trenzado que admite hasta 32 estaciones en 1 solo hilo, con una longitud máxima de 1,200 metros
operando entre 300 y 19,200 bps y la comunicación half-duplex (semiduplex). Soporta 32
transmisiones y 32 receptores. La transmisión diferencial permite múltiples drivers dando la
posibilidad de una configuración multipunto. Al tratarse de un estándar bastante abierto permite
13
muchas y muy diferentes configuraciones y utilizaciones.
Especificaciones
Interfaz diferencial
Conexión multipunto
Alimentación única de +5V
Hasta 32 estaciones (ya existen interfaces que permiten conectar 128 estaciones)
Velocidad máxima de 10 Mbps (a 12 metros)
13
Wikipedia en Español. RS-485. Estados Unidos. 2009. http://es.wikipedia.org/wiki/RS-485
E L P UERTO P ARALELO
Un puerto paralelo es una interfaz entre una computadora y un periférico, cuya principal
característica es que los bits de datos viajan juntos, enviando un paquete de 1 byte a la vez,
gracias a que se implementa un cable o una vía física para cada bit de datos formando un bus.
Mediante el puerto paralelo es posible controlar también periféricos como indicadores, lámparas,
14
motores y demás dispositivos usados en automatización.
El cable paralelo es el conector físico entre el puerto paralelo y el dispositivo periférico. En un
puerto paralelo existe una serie de bits de control que se conectan por cables adicionales que
facilitan el flujo de información bidireccional por caminos independientes.
La principal diferencia de este puerto con el puerto serie, es que éste envía un bit a la vez,
mientras que el paralelo envía 8 bits de datos simultáneamente, proporcionando una velocidad de
transferencia significativamente mayor.
14
Wikipedia en Español. Puerto paralelo. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Puerto_paralelo
Señales Eléctricas
Como se diseñó originalmente, las líneas de control son usadas como control de la interfaz y
señalización de establecimiento de comunicación (Hand Shaking) de la PC a la impresora. Las
líneas de estado (Status) se usan para la señalización de establecimiento de conexión y como
indicador de estado para cosas tales como no tener papel, indicador de ocupado y errores de la
interfaz o del periférico. Las Líneas de datos son usadas para proveer la información desde la PC a
la impresora, en esa única dirección. Implementaciones posteriores del puerto paralelo permiten
15
que los datos fluyan en sentido inverso.
La siguiente tabla identifica cada una de esas señales y da su definición de acuerdo al Puerto
Paralelo Estándar (SPP). Las señales dentro de estos grupos asignadas a bits específicos dentro
de los registros hacen la interfaz de hardware/software del Puerto Paralelo. El Registro consiste en
un bloque contiguo de 3 registros comenzando desde la dirección base del puerto paralelo. Estos
puertos son comúnmente referidos como los puertos LPT y tienen su dirección base típicamente en
3BCh, 378h y 278h (valores hexadecimales). Implementaciones recientes que soportan modos
avanzados del estándar IEEE 1284 usan entre 8 16 registros y están localizados en las direcciones
de entrada y salida (I/O address) 378h o 278h o son “reubicables”, como es el caso del adaptador
compatible paralelo Plug and Play.
Definición de las señales del Puerto Paralelo
Grup Señal Entrada/Salida Descripción
o
retorno de carro
SELECTIN C3 Salida Le indica a la impresora que está seleccionada
INIT C2 Salida Usado para reiniciar la impresora
ACK S6 Entrada Indica que el último carácter fue recibido
BUSY S7 Entrada Indica que la impresora está ocupada y no puede aceptar datos
Status
.. salida
D7
15
Wikipedia en Español. IEEE 1284. Estados Unidos. 2009. http://es.wikipedia.org/wiki/IEEE_1284
El uso de las señales descritas anteriormente y la siguiente tabla son para describir el modo de
transferencia. Muchas otras señales son usadas para modos de transición y para información
adicional sobre el estado.
La disposición del conector DB25 del puerto paralelo, en el panel de la computadora es:
Modos de transferencia
El uso de distintos modos de transferencia nos da la capacidad de crear un canal de dos sentidos
entre la computadora anfitrión y el periférico conectado. Como sólo hay un juego de líneas de
datos la comunicación es Half Duplex, o sea se transmiten datos en una dirección a la vez.
El modo de operación de la compatibilidad y de Nibble se puede poner en ejecución en cualquier
puerto paralelo existente para crear una trayectoria de comunicación bidireccional completa entre
el anfitrión y el periférico. Los modos de la compatibilidad y de octeto (byte) se pueden también
utilizar para crear una trayectoria de comunicación bidireccional, pero el puerto paralelo debe
soportar la capacidad del modo de octeto. El modo de octeto requiere que un octeto entero de
datos se pueda leer en las líneas de datos externas. Esto es implementado generalmente por la
adición de un bit de dirección en el registro de control del puerto paralelo. Este tipo de puerto
generalmente se llama un puerto paralelo "bidireccional".
Los modos de EPP y de ECP tienen capacidad bidireccional como parte de su protocolo. Estos
modos requieren que el hardware cree un estado de máquina que sea capaz automáticamente de
generar los pulsos de control que son necesarios para estos modos de transferencia de datos del
alto rendimiento.
Cada uno de los modos de funcionamiento, con excepción de la compatibilidad, renombra las
señales del control y del estado para tener significado dentro del modo que es utilizado. Las
discusiones para cada modo utilizarán los nombres constantes con el modo que es discutido.
I NTERCONEXIONES
Entre dispositivos RS-232
La comunicación entre dos dispositivos RS-232 es la más sencilla y económica de implementar.
Requiere simplemente el uso de un cable para interconectar ambos extremos, tomando la
precaución de emplear el cable con los conectores correctos, de entre las dos posibles
configuraciones que pudieran presentarse (DB9 – DB9 o DB25 – DB25). Si se requiere conectar
DB9 a DB25 deberá incluirse además un adaptador de este tipo. Los precios varían entre $10 y
$25 dólares, dependiendo del fabricante.
cuales han remplazado por múltiples puertos USB que, como ya se ha explicado, tienen ventajas
de uso para la mayoría de las aplicaciones.
No obstante lo anterior, eventualmente llegará a ser necesario conectar la computadora a un
dispositivo RS-232 y escribir un programa para realizar alguna tarea específica con se dispositivo;
en este caso será necesario utilizar un convertidor de USB a RS-232, que implementa mediante un
hardware sencillo y un controlador o driver, la funcionalidad requerida.
Este tipo de adaptadores se conectan por un extremo al puerto USB del equipo y cuentan en su
extremo opuesto con un conector DB9 con el estándar RS-232. La mayoría de estos adaptadores
funcionan impecablemente, aunque algunos pueden presentar fallas o retrasos en la información
de hasta varios segundos, cuando han estado operando por algunas horas.
Los adaptadores USB a RS-232 se consiguen con gran facilidad y su costo varía entre $12 y $50
dólares, dependiendo de la marca y características.
Algunos ejemplos de este tipo de adaptadores son los siguientes:
Al inicio del programa se crea el objeto que se usará para tener acceso al puerto:
static SerialPort _serialPort;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
Finalmente, abrir el puerto para dejarlo listo para su uso:
_serialPort.Open();
Escritura
Para escribir a un puerto previamente abierto, se utiliza el siguiente comando:
_serialPort.WriteLine(“MENSAJE”);
En el caso de que se requiera enviar por el puerto una cadena de bytes, el envío debe
implementarse de esta forma:
byte[] mBuffer= new byte[1];
mBuffer[0] = 0x4D; //ASCII letra 'M'.
mBuffer[1] = 0x45; //ASCII letra 'E'.
mBuffer[2] = 0x4E; //ASCII letra 'N'.
mBuffer[3] = 0x53; //ASCII letra 'S'.
mBuffer[4] = 0x41; //ASCII letra 'A'.
mBuffer[5] = 0x4A; //ASCII letra 'J'.
mBuffer[6] = 0x45; //ASCII letra 'E'.
mBuffer[7] = 0x74; //ASCII letra 't'.
mBuffer[0] = 0x74; //ASCII letra"t".
serialPort1.Write(mBuffer, 0, mBuffer.Length);
Lectura
Para leer los datos recibidos por el puerto, se utiliza el siguiente comando:
string message = _serialPort.ReadLine();
Enumeración de puertos
Es necesario con frecuencia, enlistar los puertos disponibles en un equipo, lo que se implementa
de la siguiente forma:
string[] _SerialPortNames = System.IO.Ports.SerialPort.GetPortNames();
Envío de archivos
A continuación se dan dos pequeños métodos que resultan de mucha utilidad para el envío de
archivos por medio del puerto serie. Se presentan en forma esencial, pero en la práctica se deberá
siempre verificar que el puerto esté abierto antes de intentar escribir en él y usar una estructura
Try/Catch para atrapar errores en tiempo de ejecución al momento de intentar abrir el archivo. La
rutina de envío en binario está limitada a aproximadamente 2GB (el tamaño de un int), lo cual
debería ser suficiente para la mayoría de los casos reales.
Ejemplo 1: Escritura
El siguiente programa implementa una sencilla aplicación para escribir al puerto. Para probarlo es
necesario ejecutar en otra computadora el programa del Ejemplo 2, y que ambas estén conectadas
correctamente por medio del puerto serie.
using System.IO.Ports;
// Write a string
port.Write("Hello World");
Ejemplo 2: Lectura
El siguiente programa implementa una sencilla aplicación para leer los datos recibidos en el puerto.
Para probarlo es necesario ejecutar en otra computadora el programa del Ejemplo 1, y que ambas
estén conectadas correctamente por medio del puerto serie.
#region Namespace Inclusions
using System;
using System.IO.Ports;
using System.Windows.Forms;
#endregion
namespace SerialPortExample
{
class SerialPortProgram
{
// Create the serial port with basic settings
private SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
[STAThread]
static void Main(string[] args)
{
// Instatiate this class
new SerialPortProgram();
}
private SerialPortProgram()
{
Console.WriteLine("Incoming Data:");
// Begin communications
port.Open();
Ejemplo 3: Chat
El siguiente programa implementa una sencilla aplicación de chat entre dos computadoras,
utilizando las funcionalidades básicas descritas. Para probarlo es necesario ejecutar en otra
computadora este mismo programa, y que ambas estén conectadas correctamente por medio del
puerto serie.
using System;
using System.IO.Ports;
using System.Threading;
_serialPort.Open();
_continue = true;
readThread.Start();
Console.Write("Name: ");
name = Console.ReadLine();
while (_continue)
{
message = Console.ReadLine();
if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else
{
_serialPort.WriteLine(
String.Format("<{0}>: {1}", name, message) );
}
}
readThread.Join();
_serialPort.Close();
}
Console.WriteLine("Available Ports:");
foreach (string s in SerialPort.GetPortNames())
{
Console.WriteLine(" {0}", s);
}
if (portName == "")
{
portName = defaultPortName;
}
return portName;
}
if (baudRate == "")
{
baudRate = defaultPortBaudRate.ToString();
}
return int.Parse(baudRate);
}
{
string parity;
Console.Write("Parity({0}):", defaultPortParity.ToString());
parity = Console.ReadLine();
if (parity == "")
{
parity = defaultPortParity.ToString();
}
if (dataBits == "")
{
dataBits = defaultPortDataBits.ToString();
}
return int.Parse(dataBits);
}
if (stopBits == "")
{
stopBits = defaultPortStopBits.ToString();
}
if (handshake == "")
{
handshake = defaultPortHandshake.ToString();
}
La clase SerialPort
Como ya se mencionó previamente, esta clase proporciona todo el soporte para implementar
aplicaciones con comunicación serie. En esta sección se han mostrado las funcionalidades
esenciales para una aplicación, pero el nivel de control que permite sobre el puerto puede ser tan
completo como se requiera, utilizando el resto de los métodos, propiedades y eventos que la clase
ofrece, los cuales se detallan como referencia.
La clase SerialPort se utiliza para controlar un recurso de archivo de puerto serie. Esta clase
proporciona E/S sincrónica y orientada a eventos, acceso a los estados de punto de conexión e
interrupción, así como acceso a las propiedades del controlador serie. Además, la funcionalidad de
esta clase se puede contener en un objeto Stream interno, accesible por medio de la propiedad
BaseStream, y pasarla a clases que contengan o utilicen secuencias.
La clase SerialPort admite las codificaciones siguientes: ASCIIEncoding, UTF8Encoding,
UnicodeEncoding, UTF32Encoding y cualquier codificación definida en mscorlib.dll donde la página
de códigos sea menor que 50000 o sea 54936. Se pueden utilizar codificaciones alternativas, pero
es preciso usar el método ReadByte o Write y el usuario debe realizar la codificación por sí
16
mismo.
17
El tipo SerialPort expone los siguientes miembros:
Constructores
Nombre Descripción
SerialPort Sobrecargado. Inicializa una instancia nueva de la clase SerialPort.
Métodos
Nombre Descripción
Close Cierra la conexión del puerto, establece el valor de la propiedad IsOpen en false y elimina
el objeto Stream interno.
CreateObjRef Crea un objeto que contiene toda la información relevante necesaria para generar un
proxy utilizado para comunicarse con un objeto remoto. (Se hereda de
MarshalByRefObject).
DiscardInBuffer Descarta los datos del búfer de recepción del controlador serie.
DiscardOutBuffer Descarta los datos del búfer de transmisión del controlador serie.
Dispose Sobrecargado. Libera los recursos no administrados que utiliza el objeto SerialPort.
Equals Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de
Object).
Finalize Libera recursos no administrados y realiza otras operaciones de limpieza antes de que se
reclame el objeto Component durante la recolección de elementos no utilizados. (Se
hereda de Component).
16
MSDN. SerialPort (Clase). Microsoft. 2007. http://msdn.microsoft.com/es-es/library/system.io.ports.serialport.aspx
17
MSDN. SerialPort (Miembros). Microsoft. 2007. http://msdn.microsoft.com/es-es/library/system.io.ports.serialport_members.aspx
GetHashCode Actúa como función hash para un tipo concreto. (Se hereda de Object).
GetLifetimeService Recupera el objeto de servicio de duración actual que controla la directiva de duración de
esta instancia. (Se hereda de MarshalByRefObject).
GetPortNames Obtiene una matriz con los nombres de los puertos serie del equipo actual.
GetService Devuelve un objeto que representa el servicio suministrado por Component o por
Container. (Se hereda de Component).
GetType Obtiene el objeto Type de la instancia actual. (Se hereda de Object).
InitializeLifetimeService Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta
instancia. (Se hereda de MarshalByRefObject).
MemberwiseClone Sobrecargado.
Open Abre una nueva conexión de puerto serie.
Read Sobrecargado. Lee datos del búfer de entrada de SerialPort.
ReadByte Lee sincrónicamente un byte del búfer de entrada de SerialPort.
ReadChar Lee sincrónicamente un carácter del búfer de entrada de SerialPort.
ReadExisting Lee todos los bytes inmediatamente disponibles, basándose en la codificación, en la
secuencia y el búfer de entrada del objeto SerialPort.
ReadLine Lee hasta el valor de NewLine en el búfer de entrada.
ReadTo Lee una cadena hasta el value especificado en el búfer de entrada.
ToString Sobrecargado.
Write Sobrecargado. Escribe datos en el búfer de salida del puerto serie.
WriteLine Escribe la cadena especificada y el valor de NewLine en el búfer de salida.
Campos
Nombre Descripción
InfiniteTimeout Indica que no se debe agotar el tiempo de espera.
Propiedades
Nombre Descripción
BaseStream Obtiene el objeto Stream subyacente para un objeto SerialPort.
BaudRate Obtiene o establece la velocidad en baudios del puerto serie.
BreakState Obtiene o establece el estado de la señal de interrupción.
BytesToRead Obtiene el número de bytes de datos en el búfer de recepción.
BytesToWrite Obtiene el número de bytes de datos en el búfer de envío.
CanRaiseEvents Obtiene un valor que indica si el componente puede provocar un evento. (Se hereda de
Component).
CDHolding Obtiene el estado de la línea de detección de portadora para el puerto.
Container Obtiene IContainer que contiene Component. (Se hereda de Component).
CtsHolding Obtiene el estado de la línea Listo para enviar.
DataBits Obtiene o establece la longitud estándar de los bits de datos por byte.
DesignMode Obtiene un valor que indica si Component está actualmente en modo de diseño. (Se
hereda de Component).
DiscardNull Obtiene o establece un valor que indica si no se tienen en cuenta los bytes nulos en las
transmisiones entre el puerto y el búfer de recepción.
DsrHolding Obtiene el estado de la señal Conjunto de datos preparado (DSR).
DtrEnable Obtiene o establece un valor que habilita la señal Terminal de datos preparado (DTR)
durante la comunicación en serie.
Encoding Obtiene o establece la codificación de bytes para la conversión de texto previa y posterior
a la transmisión.
Events Obtiene la lista de controladores de eventos asociados a Component. (Se hereda de
Component).
Handshake Obtiene o establece el protocolo de enlace para la transmisión de datos a través del
puerto serie.
IsOpen Obtiene un valor que indica el estado abierto o cerrado del objeto SerialPort.
NewLine Obtiene o establece el valor utilizado para interpretar el final de una llamada a los
métodos ReadLine y WriteLine.
Parity Obtiene o establece el protocolo de comprobación de la paridad.
ParityReplace Obtiene o establece el byte que reemplaza los bytes no válidos en una secuencia de
datos cuando se produce un error de paridad.
PortName Obtiene o establece el puerto de comunicaciones, incluidos por lo menos todos los
puertos COM disponibles.
ReadBufferSize Obtiene o establece el tamaño del búfer de entrada de SerialPort.
ReadTimeout Obtiene o establece el número de milisegundos que transcurren antes de que se agote el
tiempo de espera si una operación de lectura no finaliza.
ReceivedBytesThreshold Obtiene o establece el número de bytes en el búfer de entrada interno antes de que
ocurra un evento DataReceived.
RtsEnable Obtiene o establece un valor que indica si la señal Solicitud de envío (RTS) está habilitada
durante la comunicación en serie.
Site Obtiene o establece ISite de Component. (Se hereda de Component).
StopBits Obtiene o establece el número estándar de bits de parada por byte.
WriteBufferSize Obtiene o establece el tamaño del búfer de salida del puerto serie.
WriteTimeout Obtiene o establece el número de milisegundos que transcurren antes de que se agote el
tiempo de espera si una operación de escritura no finaliza.
Eventos
Nombre Descripción
DataReceived Representa el método que controlará el evento de recepción de datos de un objeto
SerialPort.
Disposed Se produce cuando el componente se elimina mediante una llamada al método Dispose.
(Se hereda de Component).
ErrorReceived Representa el método que controlará el evento de error de un objeto SerialPort.
PinChanged Representa el método que controlará el evento de cambio de punto de conexión serie de
un objeto SerialPort.
El espacio de nombres incluye enumeraciones que simplifican el control de los puertos serie, como
18
Handshake, Parity, SerialPinChange y StopBits.
Clases
Clase Descripción
SerialDataReceivedEventArgs Proporciona datos del evento DataReceived.
SerialErrorReceivedEventArgs Proporciona datos del evento ErrorReceived.
SerialPinChangedEventArgs Proporciona datos del evento PinChanged.
SerialPort Representa un recurso de puerto serie.
Delegados
Delegado Descripción
SerialDataReceivedEventHandler Representa el método que controlará el evento DataReceived de un objeto
SerialPort.
SerialErrorReceivedEventHandler Representa el método que controlará el evento ErrorReceived de un objeto
SerialPort.
SerialPinChangedEventHandler Representa el método que controlará el evento PinChanged de un objeto
SerialPort.
Enumeraciones
Enumeración Descripción
Handshake Especifica el protocolo de control utilizado para establecer una comunicación
con un puerto serie para un objeto SerialPort.
Parity Especifica el bit de paridad de un objeto SerialPort.
SerialData Especifica el tipo de carácter recibido en el puerto serie del objeto SerialPort.
SerialError Especifica los errores que se producen en el objeto SerialPort.
SerialPinChange Especifica el tipo de cambio que se ha producido en el objeto SerialPort.
StopBits Especifica el número de bits de parada utilizado en el objeto SerialPort.
18
Microsoft. MSDN: System.IO.Ports (Espacio de nombres). Estados Unidos. 2007. http://msdn.microsoft.com/es-es/library/system.io.
ports.aspx
Implementación
Para implementar el uso del puerto paralelo en una aplicación, debe aplicarse el procedimiento
20
siguiente:
19
Logix4u. Inpout32.dll for Windows 98/2000/NT/XP MSDN. Estados Unidos. 2006. http://logix4u.net/Legacy_Ports/Parallel_Port/
Inpout32.dll_for_Windows_98/2000/NT/XP.html
20
Gonzaga, Jeff. eHow: How to program a parallel port using c# the way you want.Estados Unidos. 2009. http://www.ehow.com/how_
2186075_ port-using-c-way-want.html
El uso de estas funciones es indicando la dirección del puerto, en ambos casos, aunque en
el caso del comando Output también se debe indicar el valor que será escrito en el puerto.
No se debe olvidar que el puerto paralelo tiene 8 bits de datos, por lo que el número que se
escriba (en el ejemplo es 64) nunca deberá ser mayor a 255.
Ejemplo
El siguiente programa implementa una clase que permite el uso del puerto paralelo.
using System;
using System.Runtime.InteropServices;
/// <summary>
/// Class to access the Port API's from the inpout32.dll.
/// </summary>
public class PortAccessAPI
{
/// <summary>
/// This method will be used to send the data out to the parallel port.
/// </summary>
/// <param name="adress">Address of the port to which the data will be sent.</param>
/// <param name="value">Data that need to send out.</param>
[DllImport("inpout32.dll", EntryPoint="Out32")]
public static extern void Output(int address, int value);
/// <summary>
/// This method will be used to receive any data from the parallel port.
/// </summary>
/// <param name="address">Address of the port from which the data will be
received.</param>
/// <returns>Returns Integer read from the given port.</returns>
[DllImport("inpout32.dll", EntryPoint = "Inp32")]
public static extern int Input(int address);
}
C ONCLUSIONES
La elaboración de programas que trabajen con información obtenida de dispositivos externos, o
que interactúen con ellos, puede parecer a primera vista una labor compleja, aunque en realidad
no es algo imposible ni reservado para personas con conocimientos especiales, como se ha visto
en este documento que trata de resumir en forma breve, sencilla y práctica los pasos y
conocimientos prácticos necesarios para emprender un proyecto de esta naturaleza.
Por otra parte, el lenguaje de programación C ofrece el mejor punto de equilibrio para las
aplicaciones de instrumentación, por todas sus bondades ya conocidas. Aunque inicialmente la
plataforma .net carecía de un soporte para realizar un manejo de puertos eficiente, a partir de la
versión .net 2.0 esta deficiencia fue subsanada, por lo que ahora es posible trabajar con los
puertos sin mayores problemas.
I NFOGRAFÍA
Bibliografía
Tompkins, Willis J.; Webster, John G.
Interfacing sensors to the IBM PC. Estados Unidos. 1988. Prentice Hall.
Sherman, Kenneth
Data Communications. A users guide. Estados Unidos. 1981. Prentice Hall.
Referencias en Línea
AGG Software
Serial (RS232) port interface pinout and signals. Estados Unidos. 2007.
http://www.aggsoft.com/rs232-pinout-cable/ pinout-and-signal.htm
Gonzaga, Jeff
eHow: How to program a parallel port using c# the way you want.Estados Unidos. 2009.
http://www.ehow.com/how_2186075_ port-using-c-way-want.html
Interfaces W&T
Interfaz RS422. Inglaterra. 2005.
http://www.wut.de/e-6wwww-10-apes-000.php
Logix4u
Inpout32.dll for Windows 98/2000/NT/XP MSDN. Estados Unidos. 2006.
http://logix4u.net/Legacy_Ports/Parallel_Port/Inpout32.dll_for_Windows_98/2000/NT/XP.html
Microsoft
MSDN: SerialPort (Clase). Estados Unidos. 2007.
http://msdn.microsoft.com/es-es/library/system.io.ports.serialport.aspx
Pinouts.Ru
USB Pinout. Estados Unidos. 2005.
http://pinouts.ru/Slots/USB_pinout.shtml
TechFAQ
What is a computer port? Estados Unidos. 2009.
http://www.tech-faq.com/computer-port.shtml
Wikipedia en Español
Entrada/Salida. Estados Unidos. 2009.
http://es.wikipedia.org/wiki/Entrada/salida