none
Problema con SerialPort en mi programa RRS feed

  • Pregunta

  • Buenas tardes, hice un programa en el cual recibo datos de una balanza a traves del puerto COM. Los datos que me va enviando la balanza son los siguientes:

    04301013S.I04808,28/10/2015,28/02/2016,  0.240,0239\r

    el problema es que cuando me envía la segunda pesada recibo datos como un cero, o un numero raro, o "". 

    No entiendo porqué a veces recibo bien los datos y a veces no. A través de hyper terminal siempre los recibo bien, osea que descartemos problemas con la balanza.

    Además me hice un software simulador de balanzas para enviar la cadena manualmente, y mi programa las procesa correctamente. 

    La configuración del serialport debe ser: 600,n,1,1

    Alguien me podría ayudar?

    Muchas gracias.

    Ss.

    miércoles, 20 de enero de 2016 18:40

Respuestas

  • El DataRecever solo se dispara cuando hay datos nuevos en el bufer, pero en cuanto hay algo se dispara y no tiene por que ser el dato completo, por eso te puse que le echaras un vistazo al otro hilo, donde se comenta como asegurarse o almenos intentarlos que el datareciver se dispara en el momento de recibir los datos completos.

    la velocidad tiene que ser de 600 baudios ya que el programa que está actualmente funcionando funciona a esa velocidad.

    Si son 600 baudios pues son esos, yo lo unico que quise comentar que el problema podria venir por ahí que el datareciver se dispara antes de recibir toda la trama de datos al ser 600 baudios lentos para los sistemas actuales.

    Por otro lado no me queda muy claro si la bascula manda los datos automaticamente o eres tu quien pide el dato a traves de un comando, ¿no lo puedes decir?. Y si nos pones tu codigo del DataRever lo podemos analizar para ayudarte mejor.

    Un saludo.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
    Blog

    jueves, 21 de enero de 2016 16:34

Todas las respuestas

  • >>el problema es que cuando me envía la segunda pesada recibo datos como un cero, o un numero raro, o "".

    Es siempre con la segunda pesada el problema ? La primera siempre es correcta y las siguentes empiezan los problemas ? 

    Podra deverse a una configuracion de la balanza ? intentaste consultar el soporte tecnico de la balanza para ver si hay alguna config que pueda causar el problema

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 20 de enero de 2016 18:55
  • Aún no he llamado al fabricante, justamente estoy haciendo el programa por falta de respuestas de éste.

    Puedo tirar una pista más, cuando mando la primer pesada toma todo bien. Pude darme cuenta que cuando termina el evento datareceived del serialport (procesa la pesada) vuelve a ingresar otra vez al mismo evento datareceived y ahí por supuesto, da error.

    miércoles, 20 de enero de 2016 19:32
  • >>Pude darme cuenta que cuando termina el evento datareceived del serialport (procesa la pesada) vuelve a ingresar

    pero ingresa teniendo aun la misma pesada ?

    puede que la balanza despues de enviar datos de la pesada envie algunos datos de control que quizas en tu caso deberias descartar si es que los recibes

    >>ahí por supuesto, da error.

    pero es un error del serial port, o es de tu codigo porque no puede parsear los datos ?


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 20 de enero de 2016 20:54
  • Buenos días,

    El problema puede ser causado por la velocidad de comunicación 600 baudios es muy lento, puede ser que el evento se dispara antes de que el bufer este completo.

    Precisamente en este hilo se trata un caso parecido Problema trama recepción de datos por SerialPort


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
    Blog

    jueves, 21 de enero de 2016 8:17
  • Buenas:

    Antes que nada, este tema va a la sección https://social.msdn.microsoft.com/Forums/es-ES/home?forum=devcommes&filter=alltypes&sort=lastpostdesc Así que moderadores.

    Dices que el Hyper Terminal muestra valores, ahora, la balanza, mejor dicho, el programa original que tiene la valanza.

    ¿Haz pensado que puede entregar algún dato a la balanza después de recibir la primera trama de bytes?

    Si tienes un analizador lógico, comprueba físicamente el Rx y el Tx. Si no, estás navegando a ciegas.

    Saludos.


    http://electronica-pic.blogspot.com

    jueves, 21 de enero de 2016 8:18
  • Bueno, contesto algunas preguntas:

    * la velocidad tiene que ser de 600 baudios ya que el programa que está actualmente funcionando funciona a esa velocidad.

    * Por hyperterminal veo que es lo que mando la balanza, y los datos son esos. No veo nada extraño al final de la línea. Sólo el \r para indicar un enter.

    * El parser funciona bien, el problema es lo que explico ahora:

    No entiendo porque el Private void finaliza y se vuelve a iniciar. Y claro, al volverse a iniciar es lógico que me mande una línea en blanco (""), ya que yo no le mandé datos desde la balanza. Aquí se me quemaron los papeles..

    A la línea: 04301013S.I04808,28/10/2015,28/02/2016,  0.240,0239\r la separo en donde están las comas. Y proceso toda la información en el DataReceiver, pero cuando finaliza, vuelve a ingresar al datareceiver con datos en "".

    jueves, 21 de enero de 2016 16:02
  • El DataRecever solo se dispara cuando hay datos nuevos en el bufer, pero en cuanto hay algo se dispara y no tiene por que ser el dato completo, por eso te puse que le echaras un vistazo al otro hilo, donde se comenta como asegurarse o almenos intentarlos que el datareciver se dispara en el momento de recibir los datos completos.

    la velocidad tiene que ser de 600 baudios ya que el programa que está actualmente funcionando funciona a esa velocidad.

    Si son 600 baudios pues son esos, yo lo unico que quise comentar que el problema podria venir por ahí que el datareciver se dispara antes de recibir toda la trama de datos al ser 600 baudios lentos para los sistemas actuales.

    Por otro lado no me queda muy claro si la bascula manda los datos automaticamente o eres tu quien pide el dato a traves de un comando, ¿no lo puedes decir?. Y si nos pones tu codigo del DataRever lo podemos analizar para ayudarte mejor.

    Un saludo.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
    Blog

    jueves, 21 de enero de 2016 16:34
  • RodriPelto! Sos un crack! evidentemente es cierto,viene por el lado de que el programa no termina de recibir toda la linea completa. La báscula es manual, es el usuario quien debe apretar un botón para mandar el pesaje.

    Ahora tengo que solucionar el problema de que cuando termina el datareceiver vuelve a ingresar a él. Tengo una versión de hace dos días que no lo hace... A alguien se le ocurre porque vuelve a ingresar? será que todavía está recibiendo datos?

    Mañana me voy a poner tranquilo a analizar bien el código que decís RodriPelto!

    Muchas gracias.

    Ss.

    jueves, 21 de enero de 2016 18:54