lunes, 20 de julio de 2015

Receta C# No. 5-20: Cómo Acceder a un Puerto COM

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
3.1 Clase SerialPort
3.2 Método static GetPortNames
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Podríamos en algún momento requerir comunicarnos con un dispositivo que cuente únicamente con la interfaz serial COM, ya sea para escribir o recuperar datos; es por eso que en esta receta C# explicaremos el procedimiento para acceder a un puerto de esta categoría y escribir información sobre él. Para ello utilizaremos la clase SerialPort (NS: System.IO.Ports).

1. Problema

Debemos escribir datos sobre un puerto serial COM.

2. Solución

El namespace System.IO.Ports ofrece la clase SerialPort; clase diseñada para representar un puerto serial y permitir la comunicación para escritura y lectura de datos.

3. Discusión de la Solución

3.1 Clase SerialPort

La clase SerialPort [2] (System.IO) representa un puerto serial. Podemos usar la funcionalidad de esta clase para controlar un puerto serial. Entre las funcionalidades específicas de esta clase están [2]:
  • Lectura/escritura sincrónica y orientada a eventos, 
  • Acceso a propiedades del controlador, 
Por otra parte, entre los sistemas de codificación de caracteres soportados por esta clase están:
  • ASCIIEncoding
  • UTF8Encoding
  • UnicodeEncoding
  • UTF32Encoding

3.2 Método static GetPortNames

Para obtener los nombres de los puertos seriales del equipo local usamos el método GetPortNames [3].

Ejemplo de uso:

Con la invocación del método static SerialPort.GetPortNames (línea 16) obtenemos un arreglo de objetos string con los nombres de los puertos seriales instalados en el equipo local. Con el ciclo foreach (línea 19-22) mostramos los nombres de los puertos en salida estándar.

Compilación: 


  1. csc /target:exe UsoGetPortNames.cs

Ejecución assembly:


  1. .\UsoGetPortNames.exe

> Prueba de ejecución: http://ideone.com/hFMK8w

> Prueba de ejecución: 
Ejecución assembly UsoGetPortNames.exe
Figura 1. Ejecución assembly UsoGetPortNames.exe.

4. Práctica: Código C#

Con la siguiente aplicación consola escribiremos una cadena de caracteres en el puerto serial COM1:

En la sentencia contextual using creamos un objeto SerialPort (línea 15) con el cual referenciamos el puerto serial COM1. En las líneas establecemos propiedades propias de esta categoría de puertos: velocidad de transmisión, paridad, tiempo de espera de lectura, etc. (líneas 18-21).

Con 

puerto.Open();


(línea 24) abrimos la conexión del puerto COM1. Con puerto.Write escribimos la cadena de caracteres Blog xCSw en el puerto.


Compilación: 


  1. csc /target:exe EscrituraEnCom1.cs

Ejecución assembly


  1. .\EscrituraEnCom1.exe

> Prueba de ejecución: 
Ejecución assembly EscrituraEnCom1.exe
Figura 2. Ejecución assembly EscrituraEnCom1.exe.

5. Conclusiones

Aprendimos que el namespace System.IO.Ports provee la clase SerialPort para permitir establecer conexión con puertos seriales COM para permitir la escritura y lectura de datos. En código C# vimos que las operaciones para establecer conexión con un puerto COM son relativamente sencillas: basta con instanciar, establecer propiedades, abrir el puerto, y empezar a escribir datos.


En la receta C# número 21 aprenderemos a obtener un nombre aleatorio para un archivo.

8. Glosario

  • COM1
  • Dato
  • Orientado a eventos
  • Puerto
  • Puerto serial

9. Literatura & Enlaces

[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: SerialPort Class (System.IO.Ports) - https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx
[3]: SerialPort.GetPortNames Method (System.IO.Ports) - https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.getportnames(v=vs.110).aspx


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.