none
comunicacion serial/usb de bascula digital con C# RRS feed

  • Pregunta

  • Buen día, he intentado ya de bastantes formas...no ver los datos de la bascula; sino controlarla tal cual remotamente. La bascula Tiene por default comandos para poder controlarla, como por ejemplo el comando P, que sirve para prender o apagar la bascula. Con hyperterminal ya le he enviado todos los comandos y la bascula responde como se supone. Pero al momento de crear el programa en C#, la bascula no me responde, Con un simple botón que creo y no responde. La forma en que esta conectada la bascula es de la forma siguiente:

    Cable serial DB9-->convertidor 232usb9m--->cable usb--->> Laptop.
    Tal vez me falta un comando o algo, pero como he escrito ya, con hyperterminal y otros programas si me respondio.

    La Forma mas facil de configurar en C# el puerto, fue agregando la terminal de serialport fisicamente en Form1 y ahi stableciendo los valores del puerto. Dentro del codigo, abro el puerto con un boton, o de otra manera al momento que carga el programa. Como he escrito ya lo intente de varias formas. Y al momento envio el comando; lo hago a travez del boton:

                

     private void button1_Click(object sender, EventArgs e)
            {

                serialPort1.WriteLine("P");

               }

    Esa es una de las formas que lo intentado. Lo he intentado con try y catch y nada. Incluso probé un programa ya creado en C# que se parece a hyperterminal y lo mismo la bascula no me responde. Incluso el programa se llama SerialPortTerminal. 

    La bascula es una AND FC-50ki, incluso existe un programa para controlarla. Pero pues quiero crear uno mas amigable gráficamente.

    Espero me puedan ayudar. Gracias

    martes, 12 de marzo de 2013 14:19

Respuestas

  • Hola Ananller,

    Creo que el detalle de todo esto se resume en que algunos dispositivo (como la Bascula), esperan un fin de linea determinado... ejemplo LF/CR.

    Prueba enviando :

    serialPort1.Write("P\r\n");

    Con esto deberias estar recibiendo lo mismo que con el hyperterminal.

    Saludos,
    PepLluis,


    MVP - Visual Developer

    • Marcado como respuesta ananller jueves, 13 de junio de 2013 0:41
    • Desmarcado como respuesta ananller jueves, 13 de junio de 2013 0:42
    • Marcado como respuesta ananller jueves, 5 de diciembre de 2013 5:53
    miércoles, 22 de mayo de 2013 20:57
    Moderador

Todas las respuestas

  • Hola,

    Para que pueda ayudarte primero deberias detallarme exactamente las operaciones que funcionan y realizas desde el Hyperterm; luego lo traducimos a codigo.

    Espero tus noticias,
    PepLluis,


    MVP - Visual Developer

    domingo, 17 de marzo de 2013 11:43
    Moderador
  • Q tal,

    La bascula se configura en modo comandos, donde en hyperterminal si responde a los siguientes comandos tal cual:

    comando      funcion

    @                 empieza, termina transmision de datos

    A                  Reset

    E                  Establecer un peso tare conocido

    F                  Llamar un elemento de la memoria ID

    G                 Establecer una unidad de peso conocido

    I                   Activar escala remota

    P                  Prender o apagar

    T                  Tarear

    etc               etc

    Estos comandos son algunos de los mas importantes, y en hyperterminal escribo tal cual el comando; por ejemplo: P + enter, y la bascula prende.

    En C# tmb trate de mandarlos como hexadecimal : con try y catch, 0x50.

    Gracias

    martes, 19 de marzo de 2013 14:33
  • Has comprobado que la configuración de puerto es identica que en terminal?. Pon la cofig del terminal y la tuya en c#. ¿El conversor serie/usb lo usas tanto con el terminal y con c#?. Abres el puerto con serialport1.open(); parece que comentas que si pero en el codigo que has puesto no se ve. Has probado a mandar el comondo como char.

    No hay problema bajo el Sol que no tenga solución. Nunca una noche ha vencido a un amanecer.

    sábado, 6 de abril de 2013 11:51
  • Efectivamente, es la misma configuración. Y si, he usado el conversor en los 2. Si abro el puerto, emm solo puse uno de tantos ejemplos de como trate de mandar los comandos; lo que si ya no recuerdo es si trate el comando como char. Supongo que si. Lo unico que pude avanzar hasta la fecha. Es que la comunicacion del puerto serie, tiene q ser independiente a el traslado de comandos. Me explico, la comunicación del puerto serie aislada en un hilo, en forma independiente. Y la trasmision de comandos por medio de un delegado. Lo intente, pero los resultados no han sido buenos. En algun tiempo libre, ire poniendo los intentos de manipualcion de la bascula...  
    martes, 30 de abril de 2013 20:11
  • Hola.

    Estoy convencido que es un problema de configuración del puerto, no es normal que con el terminal comuniques y con c# no, insisto aunque parezca pesado que nos pongas la parte del código donde configuras el puerto serie en C# y la configuración del terminal. Por otro lado yo no utilizo el terminal y no se como funciona exactamente utilizo hercules podrías probar con este haber que tal. Comentas que con el terminal pones P y luego pulsas enter, no será  que el terminal manda P y el char(13) que es el enter. Prueba a mandar esto
    serialPort1.WriteLine("P\r"); 
    \r es fin de carro, tambien prueba.
    char[] envio = new char[2];
    envio[0] = Convert.ToChar("P");
    envio[1]=(char)13;
    serialPort1.Write(envio, 0, 2);



    No hay problema bajo el Sol que no tenga solución. Nunca una noche ha vencido a un amanecer.

    sábado, 4 de mayo de 2013 9:46
  •  Es que la comunicacion del puerto serie, tiene q ser independiente a el traslado de comandos. Me explico, la comunicación del puerto serie aislada en un hilo, en forma independiente. Y la trasmision de comandos por medio de un delegado. Lo intente, pero los resultados no han sido buenos. En algun tiempo libre, ire poniendo los intentos de manipualcion de la bascula...  

    Creo según la documentación de Microsoft que la comunicación serie por si sola crea un hilo aparte, no creo que tengas que complicarte con eso. En este enlace lo explica http://msdn.microsoft.com/es-es/library/system.io.ports.serialport.datareceived.aspx



    No hay problema bajo el Sol que no tenga solución. Nunca una noche ha vencido a un amanecer.

    sábado, 4 de mayo de 2013 9:55
  • Hola Ananller,

    Creo que el detalle de todo esto se resume en que algunos dispositivo (como la Bascula), esperan un fin de linea determinado... ejemplo LF/CR.

    Prueba enviando :

    serialPort1.Write("P\r\n");

    Con esto deberias estar recibiendo lo mismo que con el hyperterminal.

    Saludos,
    PepLluis,


    MVP - Visual Developer

    • Marcado como respuesta ananller jueves, 13 de junio de 2013 0:41
    • Desmarcado como respuesta ananller jueves, 13 de junio de 2013 0:42
    • Marcado como respuesta ananller jueves, 5 de diciembre de 2013 5:53
    miércoles, 22 de mayo de 2013 20:57
    Moderador
  • Las funciones que imprimen cadenas en C# son todas Unicode, y la impresora seguro que espera caracteres ASCII.

    Todas esas escrituras, por ejemplo "P\r\n" realmente están sacando por el puerto

    0,'P',0,'\r',0,'\n'

    Hay que hacerlo con arrays de bytes.


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    lunes, 27 de mayo de 2013 12:25
  • En efectoooo....muchas gracias a todoss por su ayuda. Nunca tome en cuenta esoo. Y si lo tenia frente a mis ojos. Todo lo demas estaba bien configurado, solo habia que mandarle el final de linea.

    Aprovechando, hay un boton muy famoso de nombre SAMPLE, que no esta incluido en la lista de comandos de fabrica. Todos los demas botones si estan incluidos, menos ese. Pero es muy necesario. Habra alguna forma de detectar, con que comando lo puedo mandar llamar? Asi tal cual como el comando de prendido es "P". 

    Nota: Dentro de la misma linea de basculas AND, viene q su comando es: "SMP". Pero la bascula FC-50ki no lo reconoce.

    Muchas gracias a todos

    jueves, 13 de junio de 2013 0:49
  • Creo que en ese modelo el numero de muestras solo se puede introducir en la propia balanza

    No hay problema bajo el Sol que no tenga solución. Nunca una noche ha vencido a un amanecer.

    viernes, 14 de junio de 2013 18:35