Como comunicarme con una Bascula

‘Respondiendo a la pregunta :


‘ ¿Cómo puedo establecer comunicación con una bascula que tiene un RS232?



‘En este ejemplo podremos ver diferentes formas de enviar una petición


‘ a una bascula, simulando que nos responde al enviar el carácter ‘P’


‘ y visualizar su respuesta en una etiqueta llamada ‘Recibidos’


 


Public Class Form1


    ‘Constructores


    Private BasculaCom As New System.IO.Ports.SerialPort        ‘Puerto conectado a la báscula


    Private Recibidos As New Label                              ‘Etiqueta para visualizar la recepción


    Private Peticion As New Button                              ‘Botón para disparar el envío


    Delegate Sub MostrarRecepcion(ByVal Texto As String)        ‘Delegado para asignar el valor recibido


 


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        ‘ Ajustar los parámetros de comunicaciones


        ‘ adaptándolos a las especificaciones o configuración


        ‘ de la bascula en concreto.


        BasculaCom.PortName = “COM1″                            ‘Conectaremos la bascula al puerto COM1


        BasculaCom.BaudRate = 9600                              ‘La velocidad de intercambio será de 9600


        BasculaCom.Parity = IO.Ports.Parity.None                ‘No verificaremos la paridad


        BasculaCom.StopBits = 1                                 ‘Final de Byte con 1 bit de Stop


        BasculaCom.Open()                                       ‘Abrir las comunicaciones con la bascula


       


        ‘ marco


        Dim marcoDGV = New FlowLayoutPanel                      ‘Conformar los controles del form


        marcoDGV.BorderStyle = BorderStyle.Fixed3D


        marcoDGV.Width = Me.Width


        marcoDGV.Height = Me.Height


        ‘ Añadir el marco con el Label y el Buton


        Recibidos.Text = “-“


        Peticion.Text = “Enviar p”


        marcoDGV.Controls.AddRange(New Control() {Peticion, Recibidos})


        Me.Controls.Add(marcoDGV)


 


        ‘Dirigir los eventos a las funciones para procesarlos


        AddHandler Peticion.Click, AddressOf EnviarUnaP         ‘Ejecución de ‘EnviarUnaP’ al pulsar el boton


        AddHandler BasculaCom.DataReceived, AddressOf Recibir   ‘Ejecución de ‘Recibir’ al recibir respuesta de la bascula


    End Sub


   


    ‘ Enviar una solicitud a la bascula


    Sub EnviarUnaP()


        ‘enviar una p


        BasculaCom.Write(“P”)


        ‘tambien puede ver/probar…


        BasculaCom.WriteLine(“P”)


        BasculaCom.Write(Chr(80))


        ‘… etc


    End Sub


 


    ‘al recibir de la bascula los bytesToRead indicara


    ‘un valor superior a 0, indicando el numero de caracteres


    Sub Recibir()


        ‘Dim NumeroDeBytesEnBuffer As Integer = BasculaCom.BytesToRead


        MostrarRececibidos(BasculaCom.ReadExisting)


    End Sub


   


    ‘ Mostrar los bytes recibidos en el Label recibidos


    Private Sub MostrarRececibidos(ByVal [texto] As String)


        If Recibidos.InvokeRequired Then


            Dim delegado As New MostrarRecepcion(AddressOf MostrarRececibidos)


            Me.Invoke(delegado, New Object() {[texto]})


        Else


            Me.Recibidos.Text = [texto]


        End If


    End Sub


 


End Class


 

28 thoughts on “Como comunicarme con una Bascula”

  1. Hola Pep, gracias ante todo por darnos ayuda.
    Te explico ya yo realice un proyecto con basculas y tus ejemplos y explicaciones me sirvieron excelentes, trate de aplicar el mismo modelo a otro indicador diferente pero no me funciona nisiquiera me muestra datos.
    Lo que noto es que con el otro indicador si usaba el hyperterminal enviaba los datos de la siguiente forma
    0.00 kg
    0.01 kg
    .
    .
    .
    1.00 kg

    mientras que este otro indicador muestra
    en el hyperterminal los valores pero no de forma continua si no que el valor se va sobreponiedo al anterior de modo que al final solo quedaria mostrandose el 1.00 kg como ejemplo

    Estoy usando este mismo modelo que presentas en este ejemplo solo que no le envio el parametro “P”

    Por favor espero puedas ayudarme saludos

  2. Hola Joehit,
    Entiendo que el otro indicador envia una secuencia que finaliza con el Chr(13) y el que estas comentando no, por lo que deberias revisar que dice el manual del fabricante que describe el protocolo.

    Pep Lluis,

  3. Ahora Pep, puede influir en la recepcion de los datos el hecho de que no tenga el CR al final de la secuencia?
    Yo no le tengo seteado a la aplicacion que busque este caracter.
    Es realmente necesario enviar el “P” ?
    espero tus atinados comentarios

  4. No exactamente, solo digo que quizas exista esa diferencia, aunque deberias estar visualizando los datos si estos realmente estan llegando del visualizador. Por eso deberias ver las especificaciones del fabricante para saber exactamente que protocolo esta utilizando para intercambiar datos. Es obvio que no requiere una “p”, simplemente es un ejemplo, pues existen mil y un visualizadores que pueden conectarse a unas celulas de carga para realizar funciones de pesaje.

    Saludos,
    Pep Lluis,

  5. Listo Pep, corregi el problemita con la bascula, con el ejemplo y un par de adecuaciones para procesar la información del pesaje quedo de maravilla

    Gracias por ofrecer siempre una buena guia.

  6. Hola Pep como estas, espero bien
    Ya he desarrollado por completo mi aplicacion de pesaje, pero aun hay algo que me sigue dando lata y es que al momento de intentar cerrar el puerto aveces la aplicacion tiende como a congelarce
    tengo el siguiente fragmento de codigo para cerrar el puerto

    ‘Verifico si esta abierto para entonces
    If RS232.IsOpen Then
    RS232.Close()
    End If

    Si tienes alguna idea o sugerencia que pudiera ayudarme a corregir esta situacion

    Agradecido como siempre de antemano por tu ayuda

  7. Hola Joe,
    Dependiendo de donde tengas ubicado el codigo, es correcto. En todo caso si lo incluyes en la sub de “Unload” o “Finalice” no es necesario verificar si esta abierto : con Close es suficiente.

    Saludos,
    Pep Lluis,

  8. hola PepLluis,
    antes que nada gracias por este fabuloso Blog e aprendido mucho gracias ati
    yo ya logre la comunicacion con la bascula y me devuelve el peso en un textbox presionando un boton, ahora lo que quiero lograr es que me aparesca el peso en el textbox al subir algo a la bascula y no esperar a dar click al boton.
    te dejo el codigo en vb.net 2005 que utilize para que lo cheques y si me puedes ayudar a realizar lo que te digo

  9. Hola Juan Carlos,
    Gracias por tu amables comentarios acerca del Blog, Referente a tu pregunta ya te respondi directamente a tu correo. Si no recibiste la respuesta, te ruego contactes de nuevo [Contact] (Opcion menu) en la parte superior derecha.

    Saludos,
    Pep Lluis,

  10. Hola PepeLluis, es ungusto encontrar blogs y gente como tu muy intelectual y mas aun anuentes a compartir conocimientos.

    Yo necesito hacer una lectura de bascula como la que realizo Juan Carlos, que me despliegueen un textbox el peso despues de hacer clir en un boton, te agradeciria si me pudieras apoyar, es para un mi proyecto de la U. Gracias

  11. Gracias Grego,
    En todo caso deberias concretar como puedo ayudarte o que pregunta sobre el post.

    Espero tus noticias,
    Pep Lluis,

  12. Estimado Pep Luis

    Mucho gusto, mi nombre es Fernando Renteria. Aprovecho el medio para agradecerte el post que realizaste. Quería saber si alguna vez intentaste configurar el dispositivo bluetooth como puerto com para comunicar la bascula. Yo lo intente y me hace el open, de ahí lo que no hace es mandar los parámetros. Alguna idea de lo que puedo haber sido?

    De antemano muchas gracias.

  13. Hola Fernando, Gracias por tus amables comentarios.
    Si he tenido algunas experiencias con este tipo de disposivos y no existe ningun problema siempre y cuando ambos conversores esten configurados adecuandamente. Puedes contactarme directamente si lo deseas y concretarme tu problema.
    Saludos,
    Pep Lluis,

  14. Que tal peplluis

    oye apenas estoy entrando con esto de la bascula con VB6 y tengo una duda. tengo una bascula que pesa camiones de carga, es una bascula de marca RICE LAKE, Modelo: IQ-710-2A
    y he estado notando que la bascula no da el mismo peso el ticket y el sistema pues varia generalmente 10 o 20 Kg y maximo 40 Kg. rara vez pesa lo exacto.

    Es normal esto?? Como puedo corregir este tipo de detalle?

    Espero puede ayudarme

    Saludos

  15. Que tal peplluis

    oye apenas estoy entrando con esto de la bascula con VB6 y tengo una duda. tengo una bascula que pesa camiones de carga, es una bascula de marca RICE LAKE, Modelo: IQ-710-2A
    y he estado notando que la bascula no da el mismo peso el ticket y el sistema pues varia generalmente 10 o 20 Kg y maximo 40 Kg. rara vez pesa lo exacto.

    Es normal esto?? Como puedo corregir este tipo de detalle?

    Espero puede ayudarme

    Saludos

  16. Hola Grimaldo,

    En función a la precisión de las células de carga y su mecánica es un efecto totalmente correcto, pues debes tener en cuenta que el mínimo movimiento cuando estas pesando un camión, provoca esa oscilación de entre 10/40Kg. Una forma para evitarlo sería promediar el desvío producido por las oscilaciones manteniendo dicho dato con un refresco temporizado antes de darlo por definitivo. Con ello minimizaras esas inevitables oscilaciones.

    Saludos,

    Pep Lluis

  17. Hola amigos, Estoy hacindo un programa en Visual basic .net 2005 que maneja el peso de camiones en una bascula y debo obtener el valor del peso en un textbox, vi que algunos tienen esa solución y yo he estado ya 5 dias investigando y probando y nada, si alguno de los que tienen el codigo mepuede ayudar o tu Pep tienes el codigo corregido, se los agradeceria es para un proyecto que debo entregar pronto. Yo he intentado con todo lo que he encontrado y no me lee nada, les agradeceria por favor que me envien aquellos amigos lo que lo solucionaron a mi correo y asi nos ayudamos todos y compartir mi experiencia tambien. Muchas gracias
    Mi correo es: aasahito@yahoo.com.ar/shinigami_darkx@hotmail.com
    Muchas gracias y espero que me puedan ayudar.

  18. Hola Pep Luis,

    He intentado unirme a tu blog, pero no he tenido la suerte, la verdad es que estoy interesado en especial en una de las necesidades en la que apoyaste en este tema de “Como comunicarme con una Báscula”, y es precisamente en referencia a la consulta que te hace Jose Carlos: “ahora lo que quiero lograr es que me aparesca el peso en el textbox al subir algo a la bascula y no esperar a dar click al boton.”

    Gracias de antemano por atender mi comentario, y además espero contar con tu apoyo para resolver este dilema.

    Saludos,

    Raúl Flores

  19. Buenas tarde PepLluis muy buen aporte, pero me puedes ayudar con el codigo, porque necesito realizar un programa que lea el peso de la bascula y colocarlo en un textbox, por favor si me pueden ayudar aqui dejo mi correo.

    Gracias de antemano

  20. Gracias por tu ayuda, corrí el código en VB y la balanza que utilizo responde bien, utilizo c# para la programación y al cambiar el código no logro que funcione bien la parte de la recepción de datos. Utilizo un evento Click de un botón para enviar la instrucción, y coloco: BasculaCom.DataReceived += new SerialDataReceivedEventHandler(BasculaCom_DataReceived);

    luego tengo el evento de recepción de datos

     private void BasculaCom_DataReceived(object sender, SerialDataReceivedEventArgs e)

           {

               SerialPort sp = (SerialPort)sender;

               string indata = sp.ReadExisting();

           }

    pero nunca se dispara este evento. La idea es que luego los datos leídos se muestren en un textbox. De antemano muchas gracias

  21. Erika,
    Creo que ya conteste a tu pregunta en los correos que cruzamos. En otro caso contactame de nuevo.

    Saludos,
    PepLluis,

  22. Buenas tardes Pep, quisiera ver si me puede ayudar. Necesito hacer una aplicación en C# o VB#, en Visual Studio 2005, que pueda leer datos del pesaje de una bascula SIPEL y ponerlos en un textbox. Mi correo es lesternp@gmail.com.

  23. Quisiera una ayuda tengo una balanza satorius y he copiado tu codigo y nunca entra al evento DataReceived no si me pudieras dar una mano

  24. Pep,
    Buen dia, genial tu blog,de verdad agradecemos mucho a las personas como tu que comparten sus conocimientos. Por fa, necesito tu ayuda, estoy realizando un sistema para una recicladora, debe pasarme el peso de la báscula CAS CI-2001A, al dar click en algun boton debe obtener el peso, y realizar los cálculos respectivos.
    Agradeceria muchísmo tu ayuda.
    lexy_1624@hotmail.com

  25. Pep,
    Buen dia, genial tu blog,de verdad agradecemos mucho a las personas como tu que comparten sus conocimientos. Por fa, necesito tu ayuda, estoy realizando un sistema para una recicladora, debe pasarme el peso de la báscula CAS CI-2001A, al dar click en algun boton debe obtener el peso, y realizar los cálculos respectivos.
    Agradeceria muchísmo tu ayuda.

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>