Sie sind auf Seite 1von 37

PROGRAMACIÓN ORIENTADA A OBJETOS

MANEJO DE PUERTOS EN C#.NET

Manejo de puertos
en C#.net

UNIVERSIDAD AUTÓNOMA DE TAMAULIPAS


Verdad, Belleza, Probidad

F.C.A.C.S. DIVISIÓN DE ESTUDIOS DE POSGRADO

Programación Orientada a Objetos


Ing. Ramón Roque Hernández, M.C.
En materia de computadoras, un puerto es una forma
genérica de denominar a una interfaz por la cual se
pueden enviar y recibir diferentes tipos de datos.

El uso de puertos permite conectar una computadora con


su entorno cercano, con lo que puede interactuar con
elementos externos, gracias a lo cual se ven ampliadas y
potenciadas sus capacidades de operación.

Aunque el USB es el tipo de puerto de uso más extendido


en la industria de las computaras desde hace casi ya una
década, el uso del puerto serie RS-232 con sus variantes, y
en menor medida del puerto paralelo Centronics, sigue
siendo valioso en aplicaciones industriales y de
MANUEL J. CHAVIRA TOVAR comunicación entre máquinas.

En este trabajo de investigación, el puerto serie RS232


tiene un trato preponderante por ser el de uso más
práctico y la implementación más directa en C#.net

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

 S-Video - Video
 VGA - Monitor
 DVI - Monitor
 RJ11 - Modem
 HDMI – Video de alta definición
 Ethernet - Redes
 PS2 – Teclado y ratón

Aplicaciones para uso de los puertos


El uso de los puertos de la computadora permite al equipo de cómputo interactuar con elementos
externos, para una gran variedad de aplicaciones, algunas de las cuales son:
Comunicaciones
 Entre dos computadoras
 Entre una computadora y una red
2
Telemetría e instrumentación electrónica
 La telemetría es una tecnología que permite la medición remota de magnitudes físicas y el
posterior envío de la información hacia el operador del sistema, típicamente mediante
comunicación inalámbrica, aunque también se puede realizar por otros medios (teléfono,
redes de ordenadores, enlace de fibra óptica, etcétera).
 La telemetría se utiliza en grandes sistemas, tales como las naves espaciales o las plantas
químicas, debido a que facilita el monitoreo automático y el registro de las mediciones, así
como el envío de alertas, con el fin de que el funcionamiento sea seguro y eficiente. Por
ejemplo, las agencias espaciales como la NASA, la Q.K, la ESA y otras, utilizan sistemas de
telemetría y de telecomando para operar con naves espaciales y satélites.
 Se utiliza también en infinidad de campos, tales como la exploración científica con naves
tripuladas o no (submarinos, aviones de reconocimiento y satélites), diversos tipos de
competición (por ejemplo, Fórmula 1 y MotoGP), o la operación de modelos matemáticos
destinados a dar sustento a la operación de embalses.
 Una aplicación muy importante de la telemetría es la perforación de pozos petroleros; ésta se
utiliza para la medición con herramientas navegables MWD y LWD. Se utiliza básicamente la
telemetría de pulso de lodo, que se transmite a través de la tubería de perforación por medio
del lodo de perforación.
3
Comunicación con periféricos
 Dispositivos de entrada:
 Teclado

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

 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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

Implementación de una aplicación con uso de puertos


Cuando se requiere crear una aplicación que comunique la computadora con elementos externos,
es necesario apegarse al siguiente procedimiento:
1. Determinar el tipo de estándar que se debe emplear para interactuar con el dispositivo
externo: RS-232, RS-422, RS-485 o acceso a líneas de entrada salida en paralelo.
2. Determinar si es necesario utilizar un adaptador de USB a RS-232 o USB a Paralelo, en el
caso de que la computadora no cuente con un puerto RS-232 instalado de fábrica. Tomar en
cuenta que algunos dispositivos USB incluyen un driver que instala un puerto serie virtual
asociado con el dispositivo USB, con lo que no se requiere emplear adaptadores físicos.
3. Determinar si es necesario un adaptador entre estándares serie: RS-232 a RS-422, RS-232
a RS-485.
4. Determinar el protocolo que se debe implementar para interactuar con el dispositivo externo.
5. Obtener el protocolo.
6. Crear la aplicación en Visual C#
a. Declarar el nombre de espacio System.IO.Ports, que hace posible leer y escribir en
un puerto serie.
b. Creación de un objeto tipo SerialPort.
c. Configurar el puerto: número de COM, baud rate, bits de inicio y paro, bits de
datos, paridad y control de flujo.
d. Escribir la función de escritura.
e. Escribir la función de lectura.
f. Implementar la lógica de la aplicación.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

Cable de Par Trenzado

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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 :

Conectores Macho de 4 puntos Conectores Hembra de 4 puntos


(Usados en los periféricos) (Usados en el controlador)

8
Pinouts.Ru. USB Pinout. Estados Unidos. 2005. http://pinouts.ru/Slots/USB_pinout.shtml

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

Puerto Serie Asíncrono


El puerto serie RS-232 (también conocido como COM) es del tipo asíncrono; utiliza cableado
simple desde 3 hasta 25 hilos y conecta computadoras o microcontroladores a todo tipo de
periféricos, como terminales, impresoras, módems y ratones.
La interfaz entre el RS-232 y el microprocesador generalmente se realiza mediante una UART
8250 (computadoras de 8 y 16 bits, PC XT) o 16550 (IBM Personal Computer/AT y posteriores).
El RS-232 original tenía un conector tipo DB-25, sin embargo la mayoría de dichos pines no se
utilizaban, por lo que IBM estandarizó con su gama IBM Personal System/2 el uso del conector DE-
9 (ya introducido en el AT) mayoritariamente usado en las computadoras comerciales, aunque
excepto los ratones, el resto de los periféricos presentaban el DB-25. En Europa la norma RS-422,

9
Wikipedia en Español. Puerto serie. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Puerto_serie

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

Tipos de Comunicación Serie


Existen tres clasificaciones de la comunicación serie, de acuerdo con la forma en que fluye la
información entre los dos extremos del lazo, mismos que se describen a continuación.
Simplex
En este caso el transmisor y el receptor están perfectamente definidos y la comunicación es
unidireccional. Este tipo de comunicaciones se emplean usualmente en redes de radiodifusión,
donde los receptores no necesitan enviar ningún tipo de dato al transmisor.
Duplex, half duplex o semi-duplex
En este caso ambos extremos del sistema de comunicación cumplen funciones de transmisor y
receptor y los datos se desplazan en ambos sentidos pero no simultáneamente. Este tipo de
comunicación se utiliza habitualmente en la interacción entre terminales y un computador
central.
Full Duplex
El sistema es similar al duplex, pero los datos se desplazan en ambos sentidos
simultáneamente. Para ello ambos transmisores poseen diferentes frecuencias de transmisión o
dos caminos de comunicación separados, mientras que la comunicación semi-duplex necesita
normalmente uno solo. Para el intercambio de datos entre computadores este tipo de
comunicaciones son más eficientes que las transmisiones semi-duplex.

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

Conexiones en el DTE
La disposición de los conectores DB9 y DB25 en el panel de la computadora es:

DB-9 Macho DB-25 Macho


11
En la siguiente tabla se indican las señales RS-232 más comunes según los pines asignados :
DB9 DB25 Símbolo Nombre Dirección Descripción
3 2 TxD Transmit Data  Transmite bytes desde la PC
2 3 RxD Receive Data  Recibe bytes en la PC
7 4 RTS Request To Send  Control de flujo RTS/CTS
8 5 CTS Clear To Send  Control de Flujo RTS/CTS
6 6 DSR Data Set Ready  Estoy listo para comunicarme
4 20 DTR Data Terminal Ready  Estoy listo para comunicarme
1 8 DCD Data Carrier Detect  Modem conectado a otra terminal
9 22 RI Ring Indicator  Indicador de marcación de la línea telefónica
5 7 SG Signal Ground
Nota: La línea DCD en ocasiones se etiqueta como CD
Construcción física
La interfaz RS-232 está diseñada para distancias cortas, de hasta 15 metros según la norma, y
para velocidades de comunicación bajas, de no más de 20 Kilobytes/segundo. A pesar de ello,
muchas veces se utiliza a mayores velocidades con un resultado aceptable. La interfaz puede
trabajar en comunicación asíncrona o síncrona y tipos de canal simplex, half duplex o full
duplex. En un canal simplex los datos siempre viajarán en una dirección, por ejemplo desde
DCE a DTE. En un canal half duplex, los datos pueden viajar en una u otra dirección, pero sólo
durante un determinado periodo de tiempo; luego la línea debe ser conmutada antes que los
datos puedan viajar en la otra dirección. En un canal full duplex, los datos pueden viajar en
ambos sentidos simultáneamente. Las líneas de handshaking de la RS-232 se usan para
resolver los problemas asociados con este modo de operación, tal como en qué dirección los
datos deben viajar en un instante determinado.
Si un dispositivo de los que están conectados a una interfaz RS-232 procesa los datos a una
velocidad menor de la que los recibe deben de conectarse las líneas handshaking que permiten
realizar un control de flujo tal que al dispositivo más lento le dé el tiempo necesario de procesar
la información. Las líneas de "hand shaking" que permiten hacer este control de flujo son las
líneas RTS y CTS. Los diseñadores del estándar no concibieron estas líneas para que
funcionen de este modo, pero dada su utilidad en cada interfaz posterior se incluye este modo
de uso.

11
AGG Software. Serial (RS232) port interface pinout and signals. Estados Unidos. 2007. http://www.aggsoft.com/rs232-pinout-cable/
pinout-and-signal.htm

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

Alcance de la transmisión vs Velocidad de transmisión

12
Interfaces W&T. Interfaz RS422. Inglaterra. 2005. http://www.wut.de/e-6wwww-10-apes-000.php

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

Usando el método de transmisión simétrico en combinación con cables de pares de baja


capacidad y amortiguación (twisted pair) pueden realizarse conexiones muy eficaces a través
de grandes distancias con velocidades de transmisión altas. El uso de un cable TP de alta
calidad evita por un lado la diafonía entre las señales transmitidas y por el otro reduce la
sensibilidad de la instalación de transmisión contra señales perturbadoras entremezcladas.
Terminación
El uso de una terminación en los extremos de cable depende por norma de la aplicación.
Con velocidades de transmisión superiores a 200kBit/s o un tiempo de funcionamiento de señal
en el cable de más de la mitad de tiempo Bit (en codificación NRZ), se debería emplear una
terminación para suprimir la reflexión en la magnitud de la impedancia del cable. En cables por
pares ésta queda por regla general entre 100 y 200 Ohmios.
Particularidades
Aunque determinado para grandes distancias, entre las que por regla general son inevitables
desplazamientos de potencial, la norma no prescribe para las interfaces RS422 ninguna
separación galvánica. Dado que los módulos receptores reaccionan sensiblemente a un
desplazamiento de los potenciales de masa, es recomendable necesariamente una separación
galvánica para instalaciones eficaces. En la instalación tiene que cuidarse de la polaridad
correcta de los pares de cables, puesto que una polaridad falsa lleva a una inversión de las
señales de datos y de Handshake.

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

 Longitud máxima de alcance de 1.200 metros (a 100 Kbps)


 Rango de bus de -7V a +12V
Aplicaciones
 SCSI -2 y SCSI-3 usan esta especificación para ejecutar la capa física.
 RS-485 se usa con frecuencia en las UARTs para comunicaciones de datos de poca velocidad
en las cabinas de los aviones, en donde algunas unidades de control del pasajero lo utilizan;
este estándar requiere un mínimo de cableado y puede compartirlo entre varios asientos, con
lo que contribuye a reducir el peso del sistema.
 RS-485 se utiliza en sistemas grandes de sonido, como los conciertos de música y las
producciones de teatro, se usa software especial para controlar remotamente el equipo de
sonido de una computadora, es utilizado más generalmente para los micrófonos.
 RS-485 también se utiliza en la automatización de los edificios pues el cableado simple del
bus y la longitud de cable es larga por lo que son ideales para ensamblar los dispositivos que
se encuentran alejados.

Puertos Serie Modernos


Uno de los defectos de los puertos serie iniciales era su lentitud en comparación con los puertos
paralelos, ya que era de 19.2 kbits por segundo, sin embargo, con el paso del tiempo han
aparecido diversos puertos serie de alta velocidad que los hacen muy interesantes ya que utilizan
las ventajas del menor cableado y solucionan el problema de la velocidad con un mayor blindaje
anti ruidos de los cables y más barato usando la técnica del par trenzado. Por ello, el puerto RS-
232 e incluso multitud de puertos paralelos están siendo reemplazados por nuevos puertos serie
como el USB, el Firewire o el Serial ATA.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

El Puerto Paralelo Centronics


El puerto paralelo más conocido es el puerto de impresora que destaca por su sencillez y que
transmite 8 bits a la vez. Se ha utilizado principalmente para conectar impresoras, pero también ha
sido usado para programadores EPROM, escáners, interfaces de red Ethernet a 10 MB, unidades
ZIP, SuperDisk y para comunicación entre dos PC (MS-DOS trajo en las versiones 5.0 ROM a 6.22
un programa para soportar esas transferencias).
El puerto paralelo de las computadoras, de acuerdo a la norma Centronics, está compuesto por un
bus de comunicación bidireccional de 8 bits de datos, además de un conjunto de líneas de
protocolo. Las líneas de comunicación cuentan con un registro de datos retenidos, que mantiene el
último valor que les fue escrito hasta que se realiza la escritura de un nuevo dato.
Sus características eléctricas son:
 Tensión de nivel alto: 3.3 o 5 V.
 Tensión de nivel bajo: 0 V.
 Intensidad de salida máxima: 2.6 mA.
 Intensidad de entrada máxima: 24 mA.
Los sistemas operativos basados en DOS y compatibles, gestionan las interfaces de puerto
paralelo con los nombres LPT1, LPT2 y así sucesivamente. Las direcciones base de los dos
primeros puertos son:
 LPT1 = 0x378
 LPT2 = 0x278
La estructura consta de tres registros: de control, de estado y de datos.
 El registro de control es un bidireccional de 4 bits, con un bit de configuración que no tiene
conexión al exterior, su dirección en el LPT1 es 0x37A.

14
Wikipedia en Español. Puerto paralelo. Estados Unidos. 2009. http://es.wikipedia.org/wiki/Puerto_paralelo

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

 El registro de estado, se trata de un registro de entrada de información de 5 bits, su dirección


en el LPT1 es 0x379.
 El registro de datos, se compone de 8 bits, es bidireccional. Su dirección en el LPT1 es 0x378.

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

STROBE C0 Salida Indica que hay datos válidos en la línea de datos


AUTOFEED C1 Salida Hace que la impresora automáticamente inserte una línea por cada
Control

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

PE S5 Entrada Sin papel


SELECT S4 Entrada Indica que la impresora está en línea
nERROR S3 Entrada Indica que existe una condición de error
DATA (8:1) D0 Entrada / Salida 8 líneas de datos, en el antigua puerto paralelo estándar son sólo de
Data

.. salida
D7

15
Wikipedia en Español. IEEE 1284. Estados Unidos. 2009. http://es.wikipedia.org/wiki/IEEE_1284

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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:

DB-25 Hembra con sus líneas de señal


La tabla siguiente identifica los registros para el puerto paralelo estándar. El método básico de
transferencia de datos hacia la impresora usando el puerto es descrito en la sección Modo de
Compatibilidad. La posición del Registro se cuenta a partir de la dirección de memoria del puerto.
Definición del Registro del Puerto Paralelo Estándar (SPP)
Posición del Nombre Lectura/Escritura Descripción
Registro
0 Registro de Datos Lectura y Escritura Puerto de datos para leer o escribir datos
1 Registro de Estado Lectura Contiene los bits indicadores del status
2 Registro de Control Escritura Usado para establecer señales de control
3-7 Varios - Usado para distintas implementaciones

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.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

Introducción al estándar IEEE 1284-1994


Este estándar define 5 modos de transferencia de datos. Cada uno provee un método de pasar
datos entre la PC y el periférico (directa) y entre el periférico y la PC (inversa); o de manera
bidireccional (half duplex). Los modos definidos son:
 Modo de Compatibilidad: modo estándar o “Centronics”, sólo en sentido directo.
 Modo Nibble: 4 bits a la vez usando las líneas de estado (Status) para datos (Hewlett Packard
Bi-tronics), este mode es de dirección inversa:
 Modo de Octeto (Byte Mode): 8 bits a la vez usando las líneas de datos, a veces nombrado
como puerto bidireccional.
 EPP (Enhanced Parallel Port): Puerto Paralelo Extendido, usado principalmente para
periféricos que no son impresoras, como CD-ROM, Adaptadores de Red, etc. Este modo
permite la comunicación bidireccional.
 ECP (Extended Capability Port): Puerto de Capacidades Extendidas, usado principalmente por
impresoras recientes y scanners. Este modo permite la comunicación bidireccional.
Todos los puertos paralelos pueden implementar un enlace bidireccional usando los modos
Compatible y Nibble para transferir datos. El Modo de Octeto puede ser usado por cerca del 25%
de los puertos básicos instalados; y los 3 modos anteriores transmiten los datos controlados por
software. El manejador tiene que escribir los datos, revisar las líneas que establecen la conexión
(handshake), por ejemplo que no haya una señal de ocupado, determinar las señales apropiadas
de control, y entonces ir al siguiente byte. Esto es muy demandante y limita la efectividad del radio
de transferencia de 50 a 100 Kbytes por segundo. Además de esos 3 modos previos, EPP y ECP
están implementados en los controladores más nuevos de entrada y salida (I/O) por la mayoría de
los fabricantes. Estos modos usan un control por hardware para asistir la transferencia de datos.
Por ejemplo, en el modo EPP, un byte de datos puede ser transmitido a un periférico por una
simple instrucción de salida. El controlador maneja todo el establecimiento de conexión y la
transferencia de datos al periférico.
Además de todo, el estándar provee lo siguiente:
 5 modos de operación para transferir datos
 Un método para que la PC y el periférico determinen los modos soportados y negocien cual
será usado.
 Define la Interfaz Física: Cables y conectores
 Define la Interfaz Eléctrica: Manejadores/Receptores, Terminación e Impedancia
En conclusión, el puerto paralelo definido por el estándar IEEE 1284-1994 nos proporciona una
interfaz fácil de usar y de alto rendimiento para periféricos diversos e impresoras.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

Null Modem DB9 a DB9 Null Modem DB25 a DB25


Adaptador DB25 a DB9

Entre dispositivos RS-232 y RS-422 o RS-485


La comunicación con un dispositivo que utilice alguno de estos dos estándares de aplicación
principalmente en entornos industriales requiere el uso de un adaptador que interconecte el
extremo de RS-232 con el otro. Existen convertidores de RS-232 a RS-422, y otros de RS-232 a
RS-485, sin embargo, lo más recomendable es utilizar un convertidor de RS-232 a RS-422/485,
que soportan ambos estándares, existen más opciones comerciales y no hay gran diferencia entre
los precios de los adaptadores combinados y los sencillos. Los precios varían entre los $50 y los
$100 dólares, dependiendo del fabricante.
Algunos ejemplos de adaptadores sencillos son:

Adaptador RS-232 a RS-485

Adaptador RS-232 a RS-485


Adaptador RS-232 a RS-422

Algunos ejemplos de adaptadores combinados son:

Adaptador RS-232 a RS-422/485


Adaptador RS-232 a RS-422/485
Adaptador RS-232 a RS-422/485

Entre dispositivos USB y RS-232


Las computadoras portátiles han desplazado desde hace ya varios años a los equipos de escritorio
en volumen de ventas en el mercado mundial, gracias a su versatilidad y conveniencia de uso, sin
embargo, las portátiles actuales carecen en su mayoría de puertos de comunicación y paralelo, los

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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:

Adaptadores sencillos USB a RS-232


Adaptador múltiple USB a RS-
232

Puerto Paralelo Real


Trabajar con las líneas eléctricas de un puerto paralelo real es una tarea que debe realizarse con
sumo cuidado, precaución y, especialmente, conocimiento de lo que se está haciendo, porque
cualquier conexión que se realice incorrectamente puede dañar permanentemente el puerto o su
tarjeta, en el mejor de los casos, o la tarjeta madre en casos de daños severos. El nivel eléctrico de
los voltajes manejados en este puerto no es dañino ni perjudicial para el usuario, de ninguna
manera, pero las acciones de éste sí pueden causar daños graves en la computadora.
Para conectar elementos externos al puerto paralelo, es muy recomendable hacerlo a través de un
adaptador que provea protección eléctrica, preferentemente por medio de optoaisladores; nunca
será buena idea conectar sensores y circuitos directamente a las líneas que salen del puerto.
A continuación se muestran algunos productos comerciales que permiten interconectar cualquier
circuito externo al puerto paralelo de una computadora, en forma segura.

Interfaz LPT a tarjeta o protoboard

Interfaz LPT a cables

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

Puerto Paralelo Simulado para USB


Como se explicó previamente para el caso de los adaptadores USB a RS-232, eventualmente
podría estarse en la situación de tener que interconectar una computadora moderna a un circuito
externo por medio de un puerto paralelo, contando solamente con puertos USB en el equipo.
En este caso será necesario utilizar un convertidor de USB a Paralelo, 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 DB25 con las líneas y señales especificadas para el puerto
paralelo. A diferencia de los adaptadores USB a RS-232, de los que la mayoría funciona bien, en el
caso de los adaptadores a paralelo no es así, ya que fueron diseñados concretamente para
conectar impresoras que incorporan un puerto Centronics y nada más, por lo que al momento de
tratar de usar esos puertos simulados como se haría con un puerto paralelo real, los resultados no
son los esperados.
Los adaptadores USB a Paralelo no se consiguen con gran facilidad y su costo varía entre $12 y
$50 dólares, dependiendo de la marca y características. Existe un fabricante que afirma tener un
adaptador USB a Paralelo con funcionalidad real, pero al menos en mi caso, no ha sido posible
validar su funcionamiento.
Algunos ejemplos de este tipo de adaptadores son los siguientes:

Adaptadores USB a paralelo de uso limitado a impresora

Adaptador USB a paralelo bidireccional

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

P ROGRAMACIÓN CON EL P UERTO S ERIE


Conexión física
Se entiende que para iniciar la elaboración de un programa que utilice el puerto serie, se habrán
cubierto ya los requerimientos de hardware, como se ha detallado en las secciones previas. Se
asume que ya se tienen instalados los cables, adaptadores e interfaces necesarias para
implementar la comunicación.

Funcionalidad en diferentes versiones de .net


Mientras que en la versión 1.1 de .net el soporte para la comunicación serie era limitado, a partir de
la versión 2.0 se introdujeron mejoras que permiten utilizar en forma más eficiente este recurso. La
implementación de un programa para comunicación serie en Visual C# debe utilizar la clase
System.IO.Ports.SerialPort, que viene incluida gratuitamente en este lenguaje.

Funcionalidades más comunes


Las funcionalidades que se deben implementar como mínimo en cualquier programa que soporte
comunicación serie son:
 Creación del objeto SerialPort
 Configuración de los parámetros del puerto serie
 Escritura
 Lectura
 Verificación del puerto abierto
 Enumeración de puertos

Creación del objeto SerialPort


Declarar el uso del nombre de espacio IO:
using System.IO.Ports;

Al inicio del programa se crea el objeto que se usará para tener acceso al puerto:
static SerialPort _serialPort;

Inicialización del puerto


Una vez creado el objeto, se configuran los parámetros del puerto:
_serialPort.PortName = “COM1”;
_serialPort.BaudRate = 9600;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
También podría haberse configurado los parámetros del puerto al momento de la creación del
objeto, usando la sintaxis que se indica a continuación:
private SerialPort _serialPort = new SerialPort("COM1", 9600, Parity.None, 8,
StopBits.One);
Se recomienda también configurar los tiempos de espera, tanto de lectura como de escritura:

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
Finalmente, abrir el puerto para dejarlo listo para su uso:
_serialPort.Open();

Verificación del puerto abierto


Antes de intentar escribir en el puerto, es conveniente verificar que éste se encuentre abierto,
utilizando el siguiente comando:
string message = _serialPort.IsOpen();

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.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

private static void SendTextFile(SerialPort port, string FileName)


{
port.Write(File.OpenText(FileName).ReadToEnd());
}

private static void SendBinaryFile(SerialPort port, string FileName)


{
using (FileStream fs = File.OpenRead(FileName)) port.Write((new
BinaryReader(fs)).ReadBytes( (int)fs.Length), 0, (int)fs.Length);
}

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;

private static void SendSampleData()


{
// Instantiate the communications
// port with some basic settings
SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);

// Open the port for communications


port.Open();

// Write a string
port.Write("Hello World");

// Write a set of bytes


port.Write(new byte[] {0x0A, 0xE2, 0xFF}, 0, 3);

// Close the port


port.Close();
}

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();
}

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

private SerialPortProgram()
{
Console.WriteLine("Incoming Data:");

// Attach a method to be called when there


// is data waiting in the port's buffer
port.DataReceived += new
SerialDataReceivedEventHandler(port_DataReceived);

// Begin communications
port.Open();

// Enter an application loop to keep this thread alive


Application.Run();
}

private void port_DataReceived(object sender,


SerialDataReceivedEventArgs e)
{
// Show all the incoming data in the port's buffer
Console.WriteLine(port.ReadExisting());
}
}
}

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;

public class PortChat


{
static bool _continue;
static SerialPort _serialPort;

public static void Main()


{
string name;
string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
Thread readThread = new Thread(Read);

// Create a new SerialPort object with default settings.


_serialPort = new SerialPort();

// Allow the user to set the appropriate properties.


_serialPort.PortName = SetPortName(_serialPort.PortName);
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
_serialPort.Parity = SetPortParity(_serialPort.Parity);
_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

// Set the read/write timeouts


_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;

_serialPort.Open();
_continue = true;
readThread.Start();

Console.Write("Name: ");
name = Console.ReadLine();

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

Console.WriteLine("Type QUIT to exit");

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();
}

public static void Read()


{
while (_continue)
{
try
{
string message = _serialPort.ReadLine();
Console.WriteLine(message);
}
catch (TimeoutException) { }
}
}

public static string SetPortName(string defaultPortName)


{
string portName;

Console.WriteLine("Available Ports:");
foreach (string s in SerialPort.GetPortNames())
{
Console.WriteLine(" {0}", s);
}

Console.Write("COM port({0}): ", defaultPortName);


portName = Console.ReadLine();

if (portName == "")
{
portName = defaultPortName;
}
return portName;
}

public static int SetPortBaudRate(int defaultPortBaudRate)


{
string baudRate;

Console.Write("Baud Rate({0}): ", defaultPortBaudRate);


baudRate = Console.ReadLine();

if (baudRate == "")
{
baudRate = defaultPortBaudRate.ToString();
}

return int.Parse(baudRate);
}

public static Parity SetPortParity(Parity defaultPortParity)

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

{
string parity;

Console.WriteLine("Available Parity options:");


foreach (string s in Enum.GetNames(typeof(Parity)))
{
Console.WriteLine(" {0}", s);
}

Console.Write("Parity({0}):", defaultPortParity.ToString());
parity = Console.ReadLine();

if (parity == "")
{
parity = defaultPortParity.ToString();
}

return (Parity)Enum.Parse(typeof(Parity), parity);


}

public static int SetPortDataBits(int defaultPortDataBits)


{
string dataBits;

Console.Write("Data Bits({0}): ", defaultPortDataBits);


dataBits = Console.ReadLine();

if (dataBits == "")
{
dataBits = defaultPortDataBits.ToString();
}

return int.Parse(dataBits);
}

public static StopBits SetPortStopBits(StopBits defaultPortStopBits)


{
string stopBits;

Console.WriteLine("Available Stop Bits options:");


foreach (string s in Enum.GetNames(typeof(StopBits)))
{
Console.WriteLine(" {0}", s);
}

Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString());


stopBits = Console.ReadLine();

if (stopBits == "")
{
stopBits = defaultPortStopBits.ToString();
}

return (StopBits)Enum.Parse(typeof(StopBits), stopBits);


}

public static Handshake SetPortHandshake(Handshake defaultPortHandshake)


{
string handshake;

Console.WriteLine("Available Handshake options:");


foreach (string s in Enum.GetNames(typeof(Handshake)))
{
Console.WriteLine(" {0}", s);
}

Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString());


handshake = Console.ReadLine();

if (handshake == "")
{

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

handshake = defaultPortHandshake.ToString();
}

return (Handshake)Enum.Parse(typeof(Handshake), handshake);


}
}

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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 System.IO.Ports


A manera de referencia se incluyen aquí los detalles de este recurso. El espacio de nombres
System.IO.Ports contiene clases para controlar puertos serie. La clase más importante, SerialPort,
proporciona un marco de trabajo para la E/S sincrónica y orientada a eventos, el acceso a los
estados de punto de conexión e interrupción y el acceso a las propiedades del controlador serie.
Se puede usar para ajustar objetos Stream, permitiendo que las clases que utilizan secuencias
obtengan acceso al puerto serie.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

P ROGRAMACIÓN CON EL P UERTO P ARALELO


Restricciones del Sistema Operativo
Escribir programas que utilizaran el puerto paralelo era una tarea muy fácil en los antiguos
sistemas operativos DOS y Windows 95/98, en donde se podía usar las funciones Inporb y
Outporb, o Inp() y Outp() dentro de un programa sin problema alguno. Sin embargo, con la llegada
de los sistemas operativos basados en NT, como Win NT4, Win2000 y WinXP, se acabó esa
posibilidad, quien haya estado interesado en escribir programas que hagan uso del puerto paralelo
19
seguramente habrá experimentado problemas.
Lo anterior se debe a que Windows NT es un sistema operativo muy seguro, que asigna algunos
privilegios y restricciones a los diferentes tipos de programas que se ejecuten dentro de él,
clasificándolos en dos categorías: Modo Usuario y Modo Kernel. Los programas en modo usuario
normalmente se ejecutan en modo ring3, mientras que los programas en modo kernel se ejecutan
en modo ring0. Los programas que uno elabora caen en la categoría de Modo Usuario, en la cual
se restringe el uso de instrucciones como IN, OUT, etc. Siempre que el sistema operativo
encuentra que un programa en modo usuario intenta ejecutar tales instrucciones, el S.O. detiene la
ejecución del programa y muestra un mensaje de error.
En cambio, los programas en Modo Kernel no tienen esa restricción, y los controladores o drivers
son capaces de ejecutarse en este modo, por lo que la solución al problema anterior es escribir un
controlador en modo kernel que escriba y lea datos por medio del puerto paralelo.

Uso de librerías externas


Por lo anteriormente expuesto, es necesario utilizar recursos de terceros. Existe una librería muy
referida en foros y tutoriales en Internet, llamada inpout32.dll, que funciona muy bien para hacer
aplicaciones que utilicen este puerto. En mi experiencia, utilicé esta librería hace algunos años con
Visual Basic 6, para crear una estación de pruebas funcionales en una línea de producción; la
implementación fue muy sencilla, el programa funcionó sin problemas e incluso hoy en día se sigue
utilizando sin que haya presentado problemas desde entonces. Para esa aplicación también tuve
que crear un accesorio de hardware al que se conecta el puerto paralelo de la computadora, para
realizar la tarea para la que fue creado.
Una restricción importante que se debe tomar en cuenta es que esta librería funciona en Windows
XP y previos. Su uso con Windows Vista no está documentado por su creador.

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

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

1. Descargar del sitio www.logix4u.net la librería inpout32.dll y guardarla en la carpeta


System32.
2. Incluir la librería System.Runtime.InteropServices in el programa.
3. Crear una clase nueva para el .dll que se estará usando (inpout32.dll).
4. Usar la herramienta de C# para importer librerías dll.
namespace IntruderAlarm
{
class PortInterop
{
[DllImport("inpout32.dll",EntryPoint="Out32")]
public static extern void Output(int address,int value);
[DllImport("inpout32.dll",EntryPoint="Inp32")]
public static extern int Input(int address);
}
}
5. En el programa principal puede ahora llamarse los métodos input y output de la siguiente
forma:
PortInterop.Input(889);
PortInterop.Output(888,64);
// this is the format if your class is named PortInterop

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);
}

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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.

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

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

MSDN: SerialPort (Miembros). Estados Unidos. 2007.


http://msdn.microsoft.com/eses/library/system.io.ports.serialport_members.aspx

MSDN: System.IO.Ports (Espacio de nombres). Estados Unidos. 2007.


http://msdn.microsoft.com/es-es/library/system.io.ports.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

Estándar. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/Est%C3%A1ndar

IEEE 1284. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/IEEE_1284

Protocolo de comunicaciones. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/Protocolo_de_comunicaci% C3%B3n

Puerto serie. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/Puerto_serie

Puerto paralelo. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/Puerto_paralelo

MANUEL DE JESÚS CHAVIRA TOVAR


PROGRAMACIÓN ORIENTADA A OBJETOS
MANEJO DE PUERTOS EN C#.NET

RS-232. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/RS232

RS-485. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/RS-485

Telecomunicación. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/Telecomunicaci%C3%B3n

Telemetría. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/Telemetr%C3%ADa

Universal Serial Bus. Estados Unidos. 2009.


http://es.wikipedia.org/wiki/USB

MANUEL DE JESÚS CHAVIRA TOVAR

Das könnte Ihnen auch gefallen