Componer las tramas recibidas en el puerto serie (C#)


Respondiendo a la petición de nuestro compañero Pablo :
___________ Foro C# MSDN Spanish.


Cuando recibo los bytes en el evento DataRecived del SerialPort1; a veces estos bytes me llegan completos otras no; solucione este problema con tu idea de un bucle; solo q este bucle lo hice infinito, es decir, un while (true) y todo mi codigo para almacenar esos bytes y desplegarlos en en textbox1; pormedio del delegado; mi pregunta es ¿existe alguna otra manera para recibir esta trama completa desde mi inicio H01…….H3F;  de 19 elementos de longuitd; a veces me llegan H01….3F; de por decir 15 elementos de longuitud; y esto si lo soluciono con el bucle while; pero no lo quiero hacer infinito? espero haberme explicado bien y me puedas ayudar.


____________


Podéis descargaros el ejemplo pulsando sobre el link de ‘attachments’… estaré encantado de responder a cualquier pregunta relacionada. Os invito a participar.
Saludos,
Pep Lluis,

28 thoughts on “Componer las tramas recibidas en el puerto serie (C#)”

  1. Hola!

    Yo tengo un probleama parecido o casi igual. la cosa es que yo recibo unos datos desde el puerto serie y necesito analizarlos.

    En mi programa, recibo byte a byte y tengo que completar una trama de 5 bytes (bueno los recibo como string). Despues miro el start y el fin, seguido el checksun y al final lo que queda.

    Me gustaría saber como puedo hacerlo, es que no se muy bien si el ejemplo de arriba me sirve.

    Para mi el start es 0xAA y stop 0xDS.

    Espero que me ayudes.

    Gracias

     

  2. Hola , yo quisiera saber como hacer para manejar los datos desde el codigo y poder enviarlos por medio de un puerto serie, es decir para comunicar un externo de manera que yo lee envie informacion codificada, que codigo debo conocer para manejar las señales del puerto serie?

  3. Hola Aitzi y Alf,

    Bien pero deberias concretarme, cual es la dificultat. Si te parece para poder concretarme mas, contacta conmigo directamente en la opcion que tienes arriba a la derecha [This Blog] — Contact.

    Espero tus noticias,

    Pep Lluis

  4. Que tal!! Sr. peplluis estoy realizando un pequeño programa el cual consta de graficar los datos recibidos a través del puerto serie, mando los datos de 6 bytes (i.e. 499560) y despues mando un retorno de carro \r, realizo las conversiones pertinentes pero SIEMPRE se traba la maquina cuando lee los datos, estoy realizando todo lo que usted expone, no se que sea tiene alguna idea con la que me pueda ayudar? de ante mano gracias

  5. crei que nadie en este mundo, sabria resolverme unas dudas q tengo sobre las librerias y la forma de usarlas, para realizar comunicacion entre el computador y un micro por rs232…en realidad necesito ayuda…”muero si no la consigo”

  6. Saludos Ricardo y Maleja,
    Para poder intentar ayudaros, necesitaria que concretarais el punto concreto del problema. Deberias precisar donde teneis la dificultat o error. Os invito a contactar a traves de la opcion [This Blog][Contact]… estare encantado de leeros y por supuesto ayudaros… si esque esta a mi alcance!

    Pep Lluis,

  7. Hola… mira estoy haciendo un proyecto en el cual recibo datos por medio del puerto serial.. quiero saber como es que puedo manejar el tema de la recepcion.. es decir, de leer los datos que me envia el equipo al cual conecto el cable haciami pc. Mi proyecto es web… pero tb tengo un webservice… te agradeceria tu pronta ayuda.

    si puedes lo respondes directo a mi blog o a mi correo..rmendoza@linurp.org

    gracias

  8. Saludo PepLluis,

    aunque mi pregunta se aisla un poco con el tema, quisiera saber si es posible comunicarse a partir de system.io.port a conexion de tipo paralelo o USB.
    Si es posible como lo hago, tenes informacion acerca de ello. Esta informacion la necesito para un proyecto que etoy haciendo para la empresa donde actualmente trabajo.

    De antemano agradesco su tiempo prestado
    prontamente colaborare en el foro ya que para mi la conexion serial me funciona correctamente.

    Gracias!

  9. Hola Freddy,
    Aunque tarde te respondere que eso dependera del fabricante del USB. La Idea es entender que USB se comunica con un Host aplicando toda una serie de protocolos en Stack donde el dispositivo se enumera, define que tipo de conexion…etc y pasa USB cada dispositivo necesita un Driver que acostumbra a suministrar el fabricante. En algunos casos el Driver mantiene compatibilidad para virtualizar un puerto serie y de esa forma podemos intercambiar informacion como si de un puerto serie se tratara… si te parece contacta a traves de blog y concretamos como puedo ayudarte, pues el tema es complejo para tratarlo como comentario.
    Saludos,
    Pep Lluis,

  10. Hola.. estaba viendo el blog, felicitaciones.. a pesar de ser algo AntiMicrosoft.. me parece recontra interesante tu aporte. Actualmente estoy programando un sistema usando VS2008 – c#. Serà vìa web. El asunto que en una parte del sistema tengo que recibir tramas mediante el puerto serial. Asi como prender y apagar algunos dispositivos. Todo es vìa web. Mi pregunta es.. como varian tus codigos? que using son necesarios? que librerias? no se si me puedas ayudar porque ando un poco confundido con esto. Muchas gracias.

    Roger
    rmendoza@linurp.org

  11. Gracias por tu amabilidad,
    Supongo que te refieres a una aplicacion ASP.NET, en tal caso entiendo que no existe ningun problema para llamar a las librerias System.IO.Ports y añadir la funcionalidad de acceso al puerto serie a la dll de tu aplication.
    En todo caso para despejar dudas, permite un poco de tiempo para presentarte un ejemplo en el blog.
    Espero tener-lo listo en un par de dias.
    Saludos,
    Pep Lluis,

  12. Muy buenas, en mi caso tambien tengo que hacer una aplicacion web que acceda al puero serie, pero en mi caso (no se si sera tambien el caso de rogertrips) al puerto serie que debo acceder es al del servidor web donde estara alojada la aplicacion web, mi pregunta es si ¿con estas librerias puedo acceder al pto serie del servidor o simplemente sirven para acceder al pto serie del pc cliente?.

    Saludos y felicidades por el blog nos ayuda mucho a los mas torpes…

  13. Hola,

    Estoy haciendo un programa para enviar tramas por el puerto serie a un hardware que posee un modulo Zigbee (hasta aqui todo OK!). El caso es que cuando mi hardware responde no soy capaz de recoger las tramas que vienen en hexadecimal.

    He utilizado el ejemplo de PepLluis (tramaspuertoserie.zip) y lo he adaptado a mi programa pero no hay manera. En mi listbox veo correctamente los caracteres del 0 al 7 pero cuando es uno mayor o es una letra sale 3f, alguien sabe que significa y como se puede solucionar???? No se si es que no se utilizar el foreach, o la conversion a byte, la listbox…

    Ando algo desesperado ya la verdad…

    Os dejo aqui el codigo a ver si me podeis echar una mano

    muchas gracias

  14. Hola Luisao,

    Efectivamente llevas razón, te ruego contactes conmigo a traves del Blog, opcion [Contact],

    A nivel del compilacion 0xff lo interpreta como un int32 por lo que existe un lio con los encodings. Para resolverlo asigna los valores de byte usando expresiones en decimal, tambien debes añadir este mandato antes del open del puerto serie.

    this.serialPort1.Encoding = System.Text.Encoding.Default;

    El caso es que sin duda esto funciona:
    byte Valor_Byte = 0xFF;
    char Valor_Char = Convert.ToChar(Valor_Byte);
    byte Recuperado = Convert.ToByte(Valor_Char);

    … entonces estoy confundido en la parte donde se pierde.

    Espero tus noticias,

    Pep Lluis,

  15. Saludos PepLluis
    Estoy haciendo un programa que reconstruye datos que llegan por el puerto serial estuve probando estos datos con los valores de voltaje que envio utilizando un potenciomentro junto a un ADC el caso es que comprobando los valores que me llegan por el puerto y comprobando con el osciloscopio veo que en el osciloscopio veo un valor los datos que llegan por el puerto serial estan todavia con el valor anterior y tarda un tiempo para que comience a llegar el nuevo valor es esta la demora en la lectura del puerto serie y no hay nada que se pueda hacer ? o es la manera en que leo el puerto ya que para la lectura en existen de diferentes metodos como readline(),readbyte ..
    Agradesco mucho tu ayuda
    Vanessa

  16. Saludos Vanessa,
    La recepcion de datos en el UART del PC es inmediata. Provablemente el detalle viene dado por la manera que estas procesando el buffer.

    Si lo consideras adecuado, escribe a traves de la opcion [Contact] de este blog y comentamos el codigo que tienes implementado.

    Saludos,
    Pep Lluis,

  17. Saludos PepLluis

    He estado navegando buscando información a cerca de la recepción de datos por el puerto serial y este blob, ha sido interesante, muy revelador.

    Estoy terminando un programa en el cual debo de leer tramas del puerto serial.
    Los datos se obtienen muy bien en ASCII, pero tengo el problema que cuando recibo los datos no los recibo al mismo tiempo, he tratado de componer la trama, pero no he tenido exito, no se vacia el buffer de datos y la variable se llena indefinidamente.
    La trama no lleva ningun codigo al final que pueda leer….y definir el fin.

    Agradezco mucho la ayuda que pueda recibir
    Raul

  18. Hola Raul,
    Si te parece mandame a traves de la opcion [Contact] de este blog, tal y como tienes el codigo… con eso intentare ofrecerte alguna alternativa.

    Saludos,
    Pep Lluis,

  19. Hola tengo un codigo el cual lee correctamente varios caracteres pero al leer el hexadecimal 00 se cuelga el programa, no se que puede pasar por que puedo leer todo los hexadecimales menos el 00 alguien me puede ayudar.
    Gracias

  20. Hola, yo estoy haciendo una aplicacion en c# en visual studio 2010, en la cual tengo que comunicarme con el puerto serie. Yo escribo un comando y el me debe responder. He usado el componente serialPort, lo que yo le escribo va perfectamente y el me contesta, pero esos datos no lo termino de recoger. ¿Alguien puede ayudarme?

  21. Feliz Navidad Jose,
    Puedes utilizar la opcion [Contact], para enviarme tus dudas en privado… espero que pueda ayudarte.

    Espero tus noticias,
    Pep Lluis,

  22. INTERESENTE LAS APORTACIONES QUE HACES. MUY BIEN

    Saludos PepLuis,

    Mi nombre es ADRIAN, tengo un problema que no puedo resolberlo hasta ahora, se trata de la “COMUNICACION SERIE RS232 CON PIC16F84A CONTROLADO POR VISUAL C# ” (Manual de Angel Acaymo M. G.) y el libro “MICROCONTROLADOR PIC16F84A DESARROLLO DE PROYECTOS” (Capitulo 20: Comunicacion con Ordenador) (Libro de Enrique Palacios, Fernando Remiro y Lucas J. Lòpez). Entiendo muy bien el manual de Angel Acaymo y ya lo realice y en cuanto al libro de Enrique Palacios del capitulo 20 tambien lo entiendo bien, EL GRAN PROBLEMA QUE TENGO ES : Donde y como se debe modificar el codigo tanto el el VISUAL C# como en el MPLAB (incluyendo sus librerias RS232.INC, LCD_4BIT.INC, RETARDOS.INC, RS232MEN.INC,LCD_MENS.INC ) para que TENIENDO DOS BOTONES (uno para ENVIAR letras o numeros al LCD LM016L , y otro para BORRAR esas letras y numeros del LCD LM016L ) Y UN TEXTBOX (para colocar cualquier palabra o numeros o signos ) EN EL C# se pueda colocar cualquier palabra o numeros o signos el el TEXTBOX y luego con el boton ENVIAR se refleje en el LCD LM016L y luego con el boton BORRAR borrar lo que esta en el LCD LM016L.

    Espero que me puedas ayudar , porfavor si no seria mucha molestia podias pasarmelo si seria posible a mi E-Mail gohu_pale_32@hotmail.com , te lo agradeceria muchísimo. Ahhhh porfavor pasame tu correo (para enviarte esos libros o talvez ya lo tienes).

    Muchas Gracias.

  23. Saludos PepLuis,

    Mi nombre es ADRIAN, tengo un problema que no puedo resolberlo hasta ahora, se trata de la “COMUNICACION SERIE RS232 CON PIC16F84A CONTROLADO POR VISUAL C# ” (Manual de Angel Acaymo M. G.) y el libro “MICROCONTROLADOR PIC16F84A DESARROLLO DE PROYECTOS” (Capitulo 20: Comunicacion con Ordenador) (Libro de Enrique Palacios, Fernando Remiro y Lucas J. Lòpez). Entiendo muy bien el manual de Angel Acaymo y ya lo realice y en cuanto al libro de Enrique Palacios del capitulo 20 tambien lo entiendo bien, EL GRAN PROBLEMA QUE TENGO ES : Donde y como se debe modificar el codigo tanto el el VISUAL C# como en el MPLAB (incluyendo sus librerias RS232.INC, LCD_4BIT.INC, RETARDOS.INC, RS232MEN.INC,LCD_MENS.INC ) para que TENIENDO DOS BOTONES (uno para ENVIAR letras o numeros al LCD LM016L , y otro para BORRAR esas letras y numeros del LCD LM016L ) Y UN TEXTBOX (para colocar cualquier palabra o numeros o signos ) EN EL C# se pueda colocar cualquier palabra o numeros o signos el el TEXTBOX y luego con el boton ENVIAR se refleje en el LCD LM016L y luego con el boton BORRAR borrar lo que esta en el LCD LM016L. En resumen quiero hacer igual que hace en este video http://www.youtube.com/watch?v=1oWU1Z87OgY pero usando el PIC16F84A

    Espero que me puedas ayudar , porfavor si no seria mucha molestia podias pasarmelo si seria posible a mi E-Mail gohu_pale_32@hotmail.com , te lo agradeceria muchísimo. Ahhhh porfavor pasame tu correo (para enviarte esos libros y el video que encontre o talvez ya lo tienes).

    Muchas Gracias.

  24. Hola ydo,
    Deberias visitar los foros de MSDN, para ver si algun especialista puede aportarte ese ejemplo.

    Saludos,
    PepLluis,

Leave a Reply

Your email address will not be published. Required fields are marked *