C# SerialConsoleApp1: Gestión básica de la línea serie

Conector DB9 (9 pines). Para conexiones en serie, ya que permite una transmisión asíncrona de datos según lo establecido en la norma RS-232

Hoy en día la mayoría de los temarios y contenidos de cursos de lenguajes de programación se dirigen a aplicaciones y servicios en la nube o interfaces gráficos de escritorio, pocas veces se tratan temas como protocolos de comunicación entre máquinas a bajo nivel.

El protocolo serie (RS232) aún hoy es un sistema de comunicaciones muy común en maquinas industriales, es conocido, confiable y además ya existe un montón de código desarrollado en cualquier lenguaje de programación.

Por desgracia hoy día la mayoría de máquinas no traen por defecto este puerto (en los PCs industriales sin embargo es común que vengan con varios puertos COM), en su lugar usan un puerto COM emulado mediante controladores del sistema operativo sobre un cable USB (por ejemplo un dispositivo Arduino).

Inclusión del espacio de nombres

Para trabajar con los puertos COM debemos añadir las siguientes líneas al comienzo del programa (más sobre System.IO en MSDN).

Primer paso: Obtención de puertos COM del sistema

Lo primero es crear una clase básica que albergara todas nuestras funciones para trabajar con el puerto serie. La clase inicial sólo contendrá un método público para imprimir por consola una enumeración de los puertos disponibles en el sistema operativo.

Para obtener los puertos hemos empleado el método SerialPort.GetPortNames. Este método estático retorna un array de cadenas con los nombres de los puertos serie.

Como no tengo otra cosa he conectado mi placa Arduino al PC y este es el resultado.

Abriendo el puerto COM

Lo siguiente es diseñar un método para configurar y abrir el puerto serie, la función recibe los parámetros de configuración de la línea.

Lo más interesante de esta función es la definición del evento DataReceived. Hacemos que DataReceived apunte a un método nuestro (EvtCOMDataRx) que será invocado cada vez que la línea serie indique que ha recibido nuevos datos (handle o manejador), de esta forma no tenemos que estar constantemente preocupados de si han llegado nuevos datos o no.

Enviando datos de prueba de Arduino a nuestro programa

Para no perder el tiempo he usado un proyecto super básico que ilustra como enviar una cadena desde nuestra placa Arduino al PC.

 

Cuando ejecuto mi aplicación C# puedo ver los datos enviados en mi PC!

Posts relacionados

Enlaces externos