Cómo controlar el puerto serie usando C#? Javier Gómez. Ingeniero de Telecomunicaciones por la Escuela Tecnica Superior de Bilbao



Documentos relacionados
I.- Objetivo. II.- Introducción

Tema: Manejo del Pue r t o Serie

TUTORIAL APLICACIONES EVOLUTION CON ACTIVEX EVOLINK

Manual de instalación AutoFirma 1.4.2

INGENIERIA EN MICROCONTROLADORES

2. Hacer Clic en instalación y cambia a la ventana siguiente

SOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0

INGENIERIA EN MICROCONTROLADORES. Protocolo RS-232. Introducción

1.1 Requerimientos del Sistema, Introducción al MESSAGE RUNNER

GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA

Introducción a Python Qué es Python?

Tema: Comunicación en Serie. Interfaz RS-232.

Práctica de laboratorio: Administración de la carpeta de inicio en Windows 7 y Vista

Desarrollo de Aplicativos con winsockets

El control MSComm proporciona comunicaciones serie para que su aplicación pueda transmitir y recibir datos a través de un puerto serie.

INTERCAMBIO DINAMICO DE DATOS

CONFIGURACIÓN DE IMPRESORAS

USO DEL OBJETO JTABLE

INSTITUTO TECNOLÓGICO METROPOLITANO ITM GUÍA DE LABORATORIO INSTRUMENTACIÓN ELECTRÓNICA INTERFAZ ARDUINO - LABVIEW

Práctica de laboratorio: Administración de la carpeta Inicio en Windows 7

Manual del usuario de SnapMusic

Configuración de Correo en Microsoft Outlook 2003

de Desarrólló de Java (JDK) y verificació n

Manual de instalación AUTOFIRMA LA SEDE ELECTRÓNICA XUNTA DE GALICIA GUÍAS DE AYUDA DE

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Manual de instalación de DVB-T 100

Instalación del controlador de impresoras Custom PostScript o PCL en Windows

PROGRAMACION EN VISUAL BASIC

HERRAMIENTAS BASICAS DE MANEJO DE WINDOWS

Servicios Computacionales y Tecnologías de Información INDICE Cuadro de diálogo Iniciar sesión en Windows

cuestionarios de evaluación

Manual de instalación AutoFirma 1.4.2

Este producto utiliza tecnología de visualización "EasyFlip" de PFU. PFU LIMITED 2011

Notas de la versión para el cliente

OPERACIONES CON UNIDADES, DIRECTORIOS Y ARCHIVOS (3 puntos = 1 test + 2 supuesto práctico)

3 Interfaz PC DSP. 3.1 Introducción a las comunicaciones serie. 3 Interfaz PC DSP

Generación de Certificados SSL con IIS

Práctica de laboratorio: Administración de la carpeta Inicio en Windows Vista

Manual de instalación del IPTV UB310

GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA

Instalación del sistema VSControl Total

SISTEMAS INFORMATICOS PRÁCTICA SERIE

Manual del usuario de Crystal Reports. Instalar Crystal Reports XI Release 2

Instalación del Sistema VSControl Total 2012

Manual de instalación de DVD MAKER PCI

Conexión punto a punto entre dos Novacom Mix para la transmisión de ficheros.

Manual de instalación del LiveQ IPTV UB310

Práctica 5MODBUS: Bus Modbus

TEMA 3. SISTEMAS OPERATIVOS

Manual de usuario del Linnker

ABRIENDO BASES DE DATOS USANDO EL ASISTENTE PARA BASES DE DATOS

CyberLink. PowerDVD Copy. Guía del usuario

X-RiteColor Master Web Edition

M-Bus Master MultiPort 250D

HP USB Port Manager. Guía del administrador

Software para crear presentaciones

I NTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA

Para poder trabajar con el Archivos y Carpetas primero debemos conocer la terminología con la que trabaja, de esta manera será más fácil su manejo.

CENTOS: SUSE Linux Slackware Linux Gentoo Linux Mandriva Linux Fedora

INTRODUCCIÓN A WINDOWS FORM

Manual de instalación de DVB-T 210

TOOLS for CC121 Guía de instalación

Manual de instalación de NB-TV 100

ACTIVIDAD DE AMPLIACIÓN VOLUNTARIA

MD0040: Módulo Transceptor Inalámbrico NRF24L01

Instalación de MySQL, PHP y Servidor Apache en Windows

IIC1103 Introducción a la Programación. Ayudantía: Archivos

NXA FUNCIONES PARA EXTRACCIÓN DE DATOS

Eliminar virus que convierte carpetas en accesos directos (.lnk) en WINDOWS 7

GCC para plataforma Windows

Comunicación Serial: Conceptos Generales

FUNDAMENTOS DE INFORMATICA

En el siguiente tutorial le guiaremos para que pueda instalar el SQL Express 2014

Empezando... Taller 1. 1C de Marzo de DC. FCEyN. UBA. Taller 1. 1C 2017 (UBA) 20 de Marzo de / 20

SOFTWARE AKRIBIS THERM

Soluciones Vending y Control. V1.1 05/2012 Archivo Confidencial. Guia de Usuario Convertidor MDB USB

Generalitat de Catalunya Departament d Ensenyament Institut d Educació Secundària i Superior d Ensenyaments Professionals Esteve Terradas i Illa

INTRODUCCIÓN AL CAPÍTULO 3 7. INTRODUCCIÓN A RSLINX LITE 4

INSTRUCTIVO INSTALADOR ENTEPRISE WEB

IBM SPSS Statistics para Mac OS Instrucciones de instalación (Licencia de sede)

Guía Práctica. Certificado electrónico: cómo obtenerlo

FUNDAMENTOS DE INFORMÁTICA

Funcionamiento con Sistemas Operativos Windows 7 y 8

VISUAL BASIC 6 GUIA 4. Ing. Raymond Marquina 1

Sharpdesk V3.3. Guía de instalación Versión


Manual de instalación de PVR-TV USB2.0

TRABAJO CON DOCUMENTOS LARGOS

Tutorial Configuración del entorno de compilación de lenguage C en ambientes Windows Utilizando Visual Studio

Guía de instalación de COMPRESS

Tema: Introducción al IDE de Microsoft Visual C#.

Guía de instalación de PostScript 3

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

SEMINARIO DE DQL CON PHP Y MYSQL

Sharpdesk V3.5. Guía de instalación Versión

INSTALACIÓN FACTEL 5 DESDE MI MOVISTAR FIJO

Raymer Acosta

HERRAMIENTAS BASICAS DE MANEJO DE WINDOWS

Transcripción:

Cómo controlar el puerto serie usando C#? Javier Gómez Ingeniero de Telecomunicaciones por la Escuela Tecnica Superior de Bilbao

Cómo controlar el puerto serie usando c#? Prerrequisitos Para poder utilizar el puerto serie, es necesario tener instalada la librería MSComm.ocx. Esta librería viene incluida con el VB del Visual Studio 6 y versiones anteriores. Aquellos programadores que tengan instalado Visual Studio 2003.NET y no tengan las versiones anteriores necesitarán instalar este archivo. En algunas versiones de Windows se puede encontrar en el directorio de instalación de Windows (c:/winnt/system32/ o c:/windows/system32/). Para usar esta librería se necesita una licencia para componentes ActiveX de Visual Studio 6. Los pasos para instalar la librería y obtener la licencia usando Visual Studio.NET 2003 son los siguientes: 1. Insertar el disco de instalación de Visual Studio.NET que contiene el directorio \Extras\VB6 Controls en el lector de CD o DVD. La siguiente lista describe que disco es necesario en cada versión: Visual Studio.NET 2002 All Enterprise Editions Disco 4 Professional Edition Disco 4 Standard Edition Disco 3 Academic Edition Disco 4 Visual Studio.NET 2003 All Enterprise Editions Disco 2 Professional Edition Disco 2 Standard Edition Disco 1 Academic Edition Disco 2 2. Ir a Inicio, y luego hacer clic en Ejecutar... 3. En el cuadro de diálogo Ejecutar, escribir regedit y hacer clic en Aceptar. 4. En el Editor del registro, hacer click en Importar en el menú Archivo. 5. Localizar la carpeta \Extras\VB6 Controls en tu CD-ROM de instalación de Visual Studio.NET, seleccionar el archivo VB6Controls.reg, y luego hacer

clic en Abrir. Esto introduce todas las claves de licencia de los controles ActiveX de Visual Basic 6.0 en el registro. Añadiendo el control MSComm Debes añadir el control a un Windows form para poder utilizarlo. Para ello, Visual Studio.NET facilita la tarea siguiendo estos pasos: 1. Crear un Windows Form. 2. Añadir el control MSComm COM/OCX a tu Windows Form. a. Clic con el botón derecho en el Cuadro de herramientas. b. Escoger Agregar o quitar elementos c. Seleccionar y añadir Microsoft Communication Control.

3. Dibujar el nuevo control en el Form(Icono de teléfono). Propiedades y eventos principales del control MSComm CommPort Establece u obtiene el puerto serie del ordenador que se va a utilizar. Por ejemplo, 1 = com1, 2 = com2, PortOpen Abre o cierra el puerto. RThreshold Establece cuantos caracteres deben ser recibidos antes de ejecutar un evento del tipo OnComm. Establecer un 0 si no se quieren tener eventos. Poner un 1 si se quiere que aparezca un evento cada vez que se reciba un carácter por el puerto serie. InputMode Se le pasa una constante de la clase MSCommLib.InputModeConstants, con ella le indicamos el tipo de datos que se van a recibir o a enviar. Pueden ser cadenas de texto (cominputmodetext) o arrays de byte (cominputmodebinary). Por defecto, el modo es de texto, más sencillo para poder trabajar, pero menos versátil que el modo binario.

Settings Se usa para configurar las propiedades del protocolo serie. Así, el formato utilizado es baudios, paridad, bits de datos, bits de stop. Por ejemplo: 9600,n,8,1 (9600 baudios, paridad no, 8 bits de datos y un bit de stop). Handshaking Utilizar las constantes de MSCommLib.HandshakeConstants para definir el tipo de control de transmisión que se desea en la comunicación: none (NoHandshaking): sin control de transmisión. RTS/CTS hardware (RtsCts): utiliza los pines RTS (Ready To Send)/CTS (Clear To Send) para controlar la transmisión. Xon/Xoff software (XonXoff): utiliza los comandos Xon/Xoff. InBufferCount Devuelve el número de caracteres que están esperando en el buffer de entrada. Input Devuelve los datos que se encuentren en el buffer de entrada y los elimina de allí. Perrmite comprobar si existen datos en el buffer de entrada. Devuelve una cadena de texto o un array de bytes en función de que el modo de entrada sea texto/binario. Output Escribe una ráfaga de datos en el buffer de salida.. Por ejemplo com.output= Hola envía Hola a traés del puerto serie. CommEvent Devuelve una constante MSCommLib.CommEventConstants, una constante MSCommLib.ErrorConstants, o una constante MSCommLib. OnCommConstants representado el error o evento más reciente. Interesa comprobarlo en el evento OnComm. NullDiscard Si su valor es true, el controlador del puerto ignorará todos los caracteres que sean nulos (0x00). InputLen Indica el número de caracteres que puede leer del buffer cuando se utiliza la propiedad Input. Si el valor es 0, entonces se leen todos los caracteres que se encuentre en el buffer de entrada. Evento OnComm

El único evento al que se le llama cuando sucede algo es el OnComm. Para usarlo, hay que asegurarse de que el RThresold esta a 1. Hay que comprobar que tipo de evento se ha producido. Por ejemplo: public Form() InitializeComponents(); // Inicializa los componentes del Form com.rthreshold = 1; // Activa el registro de los eventos cuando se reciba algún dato com.oncomm += new System.EventHandler(this.OnComm); /* Asigna el controlador de eventos */ private void OnComm(object sender, EventArgs e) // MSCommLib OnComm Event Handler if (com.inbuffercount > 0) ProcessData((string) com.input); if (com.commevent == MSCommLib.OnCommConstants.comEvCTS) Console.WriteLine("Cambio del CTS"); Codigo de ejemplo // Constructor para el Form con un control AxMSCommLib llamado "comserial" public SerialTerm() // Inicializa los componentes del Form InitializeComponent(); // Inicializa el control del Puerto COM InitComPort(); // Envía datos por el Puerto COM comserial.output = "Serial Terminal Initialized"; private void InitComPort() // Establece com1 como Puerto serie comserial.commport = 1; // Si el puerto está abierto, se cierra para resetearlo. if (comserial.portopen) comserial.portopen = false; // Disparar el evento OnComm cuando se reciban datos comserial.rthreshold = 1; // Configurar el puerto a 9600 baudios, sin paridad, 8 bits de datos y un bit de stop comserial.settings = "9600,n,8,1";

// Forzar el DTR a nivel alto, usado a menudo por los modems comserial.dtrenable = true; // No se usa control de tráfico comserial.handshaking = MSCommLib.HandshakeConstants.comNone; // Trabajar sólo con cadenas de texto comserial.inputmode = MSCommLib.InputModeConstants.comInputModeText; // Usar esta línea para entradas de arrays de bytes. //comserial.inputmode = MSCommLib.InputModeConstants.comInputModeText; // Leer todos los datos del buffer de entrada cuando se usa comserial.input comserial.inputlen = 0; // No descartar los bytes nulos, 0x00 es un byte útil comserial.nulldiscard = false; // Agregar el controlador de eventos comserial.oncomm += new System.EventHandler(this.OnComm); // Abrir el puerto comserial comserial.portopen = true; private void OnComm(object sender, EventArgs e) // Controlador de eventos del puerto serie // Si hay datos esperando en el buffer, procesarlos. if (comserial.inbuffercount > 0) ProcessComData((string) comserial.input); private void ProcessComData(string input) // Enviar los datos recibidos a un Rich Text Box rtfterminal.appendtext(input + "\n"); Enviando datos con arrays de bytes Generalmente es más sencillo usar el modo texto, pero esto puede causar resultados imprevisibles cuando se usan algunos caracteres especiales. En este caso debe usar arrays de bytes. Ej: comserial.output = new byte[] 0, 0x41, (byte) 'A', 255; Recibiendo datos como arrays de bytes A veces, los datos que se reciben por el puerto serie no son ni letras ni números. Si estás usando un programa con cuadros de texto y ves caracteres extraños, necesitarás utilizar arrays de bytes. A continuación te explico cómo:

1. Configurar el comserial.input para recibir arrays de bytes. comserial.inputmode = MSCommLib.InputModeConstants.comInputModeBinary; 2. Cuando recibas datos, guárdalos en un array de bytes. private void OnComm(object sender, EventArgs e) // Controlador de eventos // Recibir datos en un array de bytes, una buena idea para cualquier tipo de datos byte[] indata = (byte[]) comserial.input; // Mostrar cada byte en la consola de salida foreach (byte b in indata) Console.WriteLine("Byte Data: " + b); Recibiendo paquetes de datos La recepción de los datos puede ser complicada si no se envían todos a la vez. Si envías "Hola Mundo" por el puerto serie, es posible que en la recepción aparezca en muchos trozos, como por ejemplo "Ho", "la ", "M", "un", "do". Para evitarlo existen diversas técnicas. A continuación se muestra una de ellas: Usar llaves de start y stop Este es el método más común. Se designan unos prefijos y sufijos como delimitadores del paquete de datos. El receptor los conoce y comprueba la llegada de los mismos en el buffer. Cuando los reconoce, extrae los datos que se encuentrn entre las llaves y borra el buffer. El código siguiente es un buen ejemplo de este método: // Usaremos Regular Expressions para las llaves 'start'/'stop' using System.Text.RegularExpressions; // private string ComBuffer = ""; private void OnComm(object sender, EventArgs e) // Controlador de eventos // Añadir al buffer los datos de entrada ComBuffer += (string) comserial.input; // Ejemplo de contenido de buffer de entrada // string ComBuffer = "trash---hello World===trash---How Are You?===trash"; // Construir una regular expression para delimitar los datos // starts with '---' and ends with '===' Regex r = new Regex("---.*?==="); // Realizar bucles para encontrar las llaves for (Match m = r.match(combuffer); m.success; m = m.nextmatch())

// Mostrar el resultado por consola Console.WriteLine(m.Value); // Eliminar los datos del buffer ComBuffer = ComBuffer.Replace(m.Value, "");