none
Leer Datos de una balanza por el puerto serial usando visual studio c#

    General discussion

  • Hola.

    de antemano muchas gracias por leer este  post.

    necesito ayuda en implementar una aplicacion que lea el peso en kg. de una balanza y lo muestre en un textbox, he visto muchas aplicaciones hechas en vb6.0 o visual basic. net , pero estoy mas familiarizado con c#

    realice una pequeña aplicación simple para que reciba los datos, pero no recibe nada. Tampoco tengo el protocolo de comunicacion de la balanza

    porfavor si alguien podria ayudarme con el codigo me seria de mucha ayuda.

    y de nuevo agradecerles por su atencion


    • Edited by pepePal Tuesday, April 03, 2012 11:24 PM
    • Moved by webJose Thursday, November 22, 2012 6:47 PM (De:Lenguaje C#)
    Tuesday, March 20, 2012 2:33 AM

All replies

  • Se mas especifico por favor osea solo quieres que te lea los datos, sin devolverte nada mas!!!

    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    Tuesday, March 20, 2012 2:38 AM
  • Joaquin. si solo necesito recibir el peso en kilogramos y mostrarlo dentro de un form, en un textbox o label el peso correspondiente.
    Tuesday, March 20, 2012 2:52 AM
  • el tema es que la interaccion con un dispositivo de hard como es la balanza solo podras lograrlo si tienes algun componente que la empresa que fabriza estos dispositivos proporciona

    o a lo sumo un manual del desarrollador que explique como enviar comando y asi poder dialogar con este

    has intentado contactar al fabricante para consultarle sobre la interaccion que se puede lograr ? la mayoria proporciona un componente COM quizas desarrollador en vb6 que podrias referenciar como unn componente de interop y utilizar en tu codigo .net

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Tuesday, March 20, 2012 3:51 AM
  • si lo unico que me proporcionaron es un manual de software en pdf , el nombre del software es HBM TRADE, segun lo que lei trabaja con celulas de carga y estas celulas se comunican con el convertidor RS485 - RS232, en este grafico se explica mejor

    Tuesday, March 20, 2012 4:44 AM
  • pero ese diagrama estaria muy bueno si fueras elecronico

    para programar he interacturar no creo que sea util, por ahi el que sea en RS232 ayudaria un poco mas ya que indica que se conectar por el puerto serie

    pero igual falta la forma de dialogar o sea los comando con los cual responde ese hard

    el fabricante no proporciona ningun componente, ojo quizas no se de libre uso, por ahi tengas que comprarlo, pero contacta al fabricante para consultarlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Tuesday, March 20, 2012 4:49 AM
  • Hola

    Como bien te comenta leandro, el diagrama te serviría si fueras electrónico, lo que en realidad necesitas conocer es por que vía te puedes comunicar (cosa que creo ya tienes: puerto serie) y ahora necesitas saber,  que comandos acepta, el formato en que debes enviar estos para que sean interpretados correctamente, así como el formato de las cadenas de respuesta (aunque esta parte, con un poco mas de trabajo, podrías ir descifrandola)... Sin eso es muy difícil que podamos ayudarte...

    * con relación a la comunicación vía puerto serie, necesitas conocer ademas: baudrate, paridad, bits de stop.... etc

        Saludos

    Tuesday, March 20, 2012 12:36 PM
  • Hola 

    lo que hice fue pedir un manual de usuario de la balanza, pero al parecer lo perdieron e incluso no saben exactamente el modelo que usan, en fin. pero por otro lado lo que si pude obtener es el programa en visual basic 6.0, me dijeron que lo revisara porque ahi esta el como realizan la configuracion y como captura el peso de la balanza.

    bueno la verdad, tengo muy pocos conocimientos de visual basic 6.0 y me es dificil de entender donde,como realizan la configuracion.

    bueno lo que crearon es basicamente un mscomm1 y 2 timers como se muestra en la siguiente figura

    Este codigo es del Timer1

    Private Sub Timer1_Timer()
    On Error GoTo errhandler
        LB91.LinkMode = 1
        TX8.LinkMode = 1
    
    LB91.LinkExecute ("@GI;23")
    TX8.LinkRequest
    
    ST = "kg"
    IT = 0
    IT = InStr(TX8, ST)
    
    L2 = Str(Val(Mid(TX8, IT + 5, 5))) & " Kg"
    TX8 = ""
    errhandler:
     If Err.Number <> 0 Then
       If Err.Number = 282 Or Err.Number = 293 Then
        L2 = "ERROR"
       Else
        MsgBox Err.Number & " " & Err.Description, 16, "Error"
        frm_PRINCIPAL.Show
        Unload Me
       End If
     End If
    
    End Sub

    Este es el codigo del timer2

    Private Sub Timer2_Timer()
    On Error GoTo errhandler
    
    Dim I, F As Integer
    Dim VALOR, CADENA As String
    Dim TiempoPausa, Inicio, Final
    Dim PARI As String
    
    If PARIDAD = "PAR" Then PARI = "E"
    If PARIDAD = "IMPAR" Then PARI = "O"
    If PARIDAD = "NONE" Then PARI = "N"
    
    MSComm1.CommPort = PUERTO
    
    MSComm1.Settings = BAUDIOS & "," & PARI & "," & BITS & "," & BITP
                 
                  If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
                  
                     TiempoPausa = TIEMPO  ' Asigna hora de inicio.
                     Inicio = Timer   ' Establece la hora de inicio.
                     Do While Timer < Inicio + TiempoPausa
                     DoEvents   ' Cambia a otros procesos.
                     Loop
                     Final = Time   ' Asigna hora de finalización.
                  VALOR = MSComm1.Input
                   I = InStr(VALOR, Chr(Val(CARINI)))
                   F = InStr(VALOR, Chr(Val(CARFIN)))
        
                  If I = 0 And F = 0 Then
                      CADENA = CADENA & VALOR
                  Else
                     If (F - I) + 1 = Val(CADFIN) Then
                      CADENA = Mid(VALOR, Val(CADINI), Val(CADLONG))
                      L2 = Str(Val(CADENA)) & " Kg"
                      CADENA = ""
                      VALOR = ""
                     End If
    
                  End If
        If MSComm1.PortOpen = True Then
               MSComm1.PortOpen = False
        End If
     
    errhandler:
     If Err.Number <> 0 Then
        MsgBox Err.Number & " " & Err.Description, 16, "Error"
        frm_PRINCIPAL.Show
        Unload Me
     End If
    End Sub

    yo se que con esta información no aporta mucha referencia para mi problema y una posible solucion pero quizas alguien que tenga conocimientos de programacion en visualbasic 6.0 o que entienda el codigo pueda ayudarme.

    gracias

    Monday, April 02, 2012 10:14 PM
  • No se si pueda poner links en este foro, pero te dejo un link a una página que convierte el codigo de visual basic a c# ..ya que no entiendo bien tu problema, alomejor esto te ayuda :P

    Saludos ! :D

    http://www.elguille.info/NET/WebServices/vb2csWeb.aspx

    (Si no puedes ver el link, busca algo similar en google)

    Espero ayude a la solucion de tu problema !

    Tuesday, April 03, 2012 4:31 AM
  • hola

    known_life, bueno como describo inicialmente en el post y en el titulo, necesito implementar una aplicación que reciba el peso de una balanza digital y mostrarlo en un textbox, todo hecho en visual studio c#, el problema era que no tenia mucha información sobre la balanza, solo que se comunicaba por via puerto serial, por otro lado, el código que muestro es en visual basic 6.0, lo cual es muy diferente a visual vb .net y el link que mostraste no funcionaria.

    a lo que me comento cruznik sobre baudrate, paridadbits de stop, el programa en visual basic tambien tiene un formulario para cambiar la configuracion de estos parametros, asi como seleccionar el puerto y esto almacenarlo en una base de datos. y como decia lo unico que tengo es el codigo de vb 6.0 que les mostre.

    cualquier aporte seria de mucha ayuda

    gracias

    Tuesday, April 03, 2012 2:27 PM
  • hola, nadie que pueda ayudarme?? 
    Tuesday, April 03, 2012 11:25 PM
  • Esta pagina si funcione para traspasar el código a C#

    http://www.elguille.info/NET/WebServices/deVBaCS_web.aspx

    Esto me dio:

    Timer1:

    private void Timer1_Timer() {
    On Error GoTo errhandler;
        LB91.LinkMode = 1;
        TX8.LinkMode = 1;
     
    LB91.LinkExecute ("@GI;23");
    TX8.LinkRequest;
     
    ST = "kg";
    IT = 0;
    IT = InStr(TX8, ST);
     
    L2 = Convert.ToString(Val(Mid(TX8, IT + 5, 5))) + " Kg";
    TX8 = "";
    errhandler:
     if( Err.Number != 0 ){
       if( Err.Number == 282 | Err.Number == 293 ){
        L2 = "ERROR";
       }else{
        MsgBox Err.Number + " " + Err.Description, 16, "Error";
        frm_PRINCIPAL.Show();
        Unload Me;
       }
     }
     
    }

    Timer2:

    private void Timer2_Timer() {
    On Error GoTo errhandler;
     
    int I, F;
    string VALOR, CADENA;
    TiempoPausa, Inicio, Final;
    string PARI;
     
    if( PARIDAD == "PAR" ) PARI = "E";
    if( PARIDAD == "IMPAR" ) PARI = "O";
    if( PARIDAD == "NONE" ) PARI = "N";
     
    MSComm1.CommPort = PUERTO;
     
    MSComm1.Settings = BAUDIOS + "," + PARI + "," + BITS + "," + BITP;
                 
                  if( MSComm1.PortOpen == false ) MSComm1.PortOpen = true;
                  
                     TiempoPausa = TIEMPO; // Asigna hora de inicio.
                     Inicio = Timer; // Establece la hora de inicio.
                     while( Timer < Inicio + TiempoPausa){
                     DoEvents; // Cambia a otros procesos.
                     }
                     Final = Time; // Asigna hora de finalización.
                  VALOR = MSComm1.Input;
                   I = InStr(VALOR, (char)(Val(CARINI)));
                   F = InStr(VALOR, (char)(Val(CARFIN)));
        
                  if( I == 0 & F == 0 ){
                      CADENA = CADENA + VALOR;
                  }else{
    System.Globalization.NumberFormatInfo nfi_g0 = new  System.Globalization.NumberFormatInfo();
    nfi_g0.CurrencyGroupSeparator = ".";
                     if( (F - I) + 1 == Convert.ToDouble(CADFIN, nfi_g0) ){
    System.Globalization.NumberFormatInfo nfi_g1 = new  System.Globalization.NumberFormatInfo();
    nfi_g1.CurrencyGroupSeparator = ".";
    System.Globalization.NumberFormatInfo nfi_g2 = new  System.Globalization.NumberFormatInfo();
    nfi_g2.CurrencyGroupSeparator = ".";
                      CADENA = Mid(VALOR, Convert.ToDouble(CADINI, nfi_g1), Convert.ToDouble(CADLONG, nfi_g2));
                      L2 = Convert.ToString(Val(CADENA)) + " Kg";
                      CADENA = "";
                      VALOR = "";
                     }
     
                  }
        if( MSComm1.PortOpen == true ){
               MSComm1.PortOpen = false;
        }
     
    errhandler:
     if( Err.Number != 0 ){
        MsgBox Err.Number + " " + Err.Description, 16, "Error";
        frm_PRINCIPAL.Show();
        Unload Me;
     }
    }

    Espero que sirva de algo, ya que es lo unico en lo que te puedo ayudar por ahora (ya que no se hacer lo que necesitas)

    Saludos !

    Wednesday, April 04, 2012 12:42 AM
  • Buenos dias pepePal y resto del foro

    Soy nuevo en esto del Visual C# y por lo tanto no te puedo ayudar con código, pero voy a intentar ayudarte con loo de la comunicación serie.

    En un puerto serie lo principal es saber que como está configurado el dispositivo con el que quieres comunicar, si tienes haceso al resto del código busca donde

    inicializa las variables BAUDIOS , PARI , BITS , BITP. Donde BAUDIOS es la velocidad de comunicaión, PARI es la paridad que puede ser par, impar, ninguna,

    BITS numero de bit y BITP si hay bid de stop. Esto es muy importante para poder comunicar con el dispositivo. Donde COM es el puerto serie del ordenador donde

    esta conectado. MSComm1.PortOpen abre o cierra el puerto, VALOR = MSComm1.Input le el buffer del puerto en esta clase de dispositivos suele ser un string.

    Debes buscar por el código MSComm1.output=”Variable o cadena” con esta instrucción pide los datos a la bascula es muy importante no creo que en cuanto abras el

    puerto la bascula empiece a enviar datos como loca. Por ultimo la bascula es HBM consigue el modelo y entra en la web de HBM Iberica, hay tendrás teléfonos de

    contacto para poder pedir el manual del protocolo de  comunicación de la bascula. Espero que esto te ayude

    Un saludo.

    Wednesday, April 04, 2012 10:36 AM
  • Hola:

    Antes que nada, que pasen este  tema a la sección del puerto serie para eso se creó, que las ocmunicaciones vayan en un único sector y  sea más fácil. Se los digo a los moderadores y que hagan caso, últimamente me he encontrado varios temas de puerto serie y no hacen caso a paesar de los avisos. ;)

    http://social.msdn.microsoft.com/Forums/es-ES/devcommes/threads

    Con el tema.

    Aquí hay manuales en Visual Studioi sobre comunicación del puerto serie. El del C# es más completo.

    Ver manual Visula C#

    Ver manual VC++ y VB 2008

    Tienes que conocer el Hardware de la balanza. Envío de tramas y eso. Si no sabes, al menos con el HyperTeminal registra los datos. Los pimeros datos al recibir suelen ser de control y no se debe tocar. Luego están los datos de propósito general que es la cantidad en bytes dentro de una variable, por ejemplo, los Kg.

    El RS232 tanto en PC, como en microcontroladores, como en balanza es la misma. No hace falta saber de electrónica pero como no eres adivino ni naciste aprendido, si hace falta saber los datos que suelta el puerto serie.

    Con el manual de arriba en Visual C#, te explica como recibir datos en el puerto serie, que es lo que tienes que registrar y estudiarlo para saber que significa, cosas así.

    Un cordial saludo.


    http://electronica-pic.blogspot.com

    Wednesday, April 04, 2012 6:06 PM
  • Hola

    Luis XCII voy a probar con el hyperterminal y ver que datos me envia la bascula HBM, estare posteando los resultados.

    Rodripelto solo tengo una consulta, a que te refieres a protocolos de comunicación de la balanza, quizas me puedas dar un ejemplo de algunos protocoles, y mejor aun como es que estos protocolos van a servir para programar en C#, esto lo pregunto ya que no se mucho sobre electronica. disculpen mi ignorancia

    Metaconta no sabia que existia otro foro de debate sobre dispositivos externos, me disculpo ante todo, lo postie aqui porque estoy aplicando C# para programar el puerto serial y por eso crei conveniente postearlo aqui.

    a todos muchas gracias por la informacion que me brindaron, estoy implementando el codigo, pero necesito afinar algunos puntos que no tengo bien claro como lo del protocolo y como implemento este protocolo en mi programa.

    Friday, April 06, 2012 2:24 AM
  • Hola señor:

    Lo del protocolo se refiere unas normas a seguir de una comunicación.

    Si le saludas a un japonés en español y te responde ruso. ¿Qué impresión te da?

    En la red hay mejores programas que el HyperTerminal de Windows por si este no es suficiente.Con el HyperTerminal no vez los pasos de control, si los bytes recibidos, en otros vez todo.

    Cuando tengas las órdenes vistas en el HyperTerminal, las guardas y las analiza, cuando recibe datos, cuando los envías, qué son esos datos, etc. Así se empieza.

    Con saber del protocolo, no necesitas saber mucho de electrónica.

    Un saludo.


    http://electronica-pic.blogspot.com

    Sunday, April 08, 2012 6:27 AM
  • Bueno lo del protocolo de comunicación como te a respondido Metaconta es la forma con la que te comunicas con el dispositivo externo, en primer lugar la velocidad con la que se comunica "Baudios" después el numero de bit o bayt bueno en cualquier caso la longitud del dato lo normal es que sean 7 ó 8, en tercer lugar la paridad, par, impar o ninguna, y por ultimo si hay algún bit de stop, esto es lo esencial para poder usar el puerto serie, después no creas que vas a configurar el puerto serie y vas ha recibir datos como poco tendrás que saber que comando tienes que mandar a la bascula para que te devuelva una lectura, ese dato puede ser un carácter una palabra un numero, no lo se cada equipo es un mundo, yo tengo algún equipo HBM y hay que mandarle es "msv?" para que te devuelva el dato de pantalla, pero antes hay que enviarle un par de comandos para configurar la lectura.

    Sunday, April 08, 2012 7:09 PM
  • Hola:

    Fíjae bien los códigos de ejemplo por aquí.

    http://www.codeproject.com/Articles/46603/A-PicRS232-control-with-a-PIC-microcontroller-seri

    Antes que nada, puedes hacerte un capturador muy sencillo con la electrónica sin complicarte la vida, suele funcionar a la primera y haciendo tu propia placa.

    Captura los datos de entrada y de salida. Pon el circuito normal y haces pruebas. Los primeros bytes suelen ser de control, luego de datos. A veces ni control ni nada, sólo datos. Lo de control son órdenes, cosas así. Estas cosas cuando las captures, luego las analizas. Si envía o revibe un comando al puerto serie de la balanza. Apuntas lo que haz enviado o recibido esos bytes, luego, con un programa explicado en el manual arriba, envías esos mismos bytes y sabes su comportamiento. Cosas así, con palabras no lo puedes ver tan claro que al hacerlo uno mismo en prácticas.

    Ánimo y adelante.

    Un saludo.


    http://electronica-pic.blogspot.com

    Monday, April 09, 2012 12:41 AM
  • Saludos con todos

    Bueno sigo con el problema de la balanza, fui a probar que datos envía la bascula al hyperterminal, probe todas las configuraciones desde 1200 de baudrate hasta la ultima, al igual que bits de parada, bits de datos, etc. pero seguia sin recibir datos o tramas, sin embargo el software que vino con la balanza ( se llama TRADE), lee el peso sin ningún problema, la unica conclusión a la que llegue es, que se necesita un comando para enviarle a la bascula para que esta pueda responder, y realmente era lo que menos quería , ya que el manual de usuario de la balanza se perdío en el olvido o nadie donde se encuentra( es un problema que ocurre en varias empresas).

    lo unico que sé es que la balanza o bascula la comercializa HBM, es una bascula con celulas de carga tal como lo mostre en una figura al inicio del post.

    me gustaría saber si existe alguna otra solucion alterna, que podria darle a este problema. si alguien sabe como ayudarme, me seria de mucha ayuda

    Muchas Gracias

    Monday, April 23, 2012 4:24 PM
  • Hola

    Sinceramente amigo, lo que te queda según lo veo es ponerte en contacto con HBM y solicitarles el manual para desarrollador, para que así tengas acceso a la información que necesitas... Saludos y suerte!!!

    Monday, April 23, 2012 4:31 PM
  • Bueno buca por la red los siguientes programas Lauch BillSerialMonitor y HDD Free Serial Port Monitor. Son emuladores de puerto serie y con ellos podras ver lo que se trasmite por el puerto serie con el segundo conseguiras la configuración del puerto y con el primero ver todo lo que se escribe en el puerto, las versiones libres permiten conexiones de un par de minutos tiempo suficiente para ver que comando manda el programa a la bascula, si no HBM iberica como te comente anteriormente.
    Wednesday, April 25, 2012 10:55 AM
  • Hola

    Yo tambien quisiera elaborar un programa, capturar el peso de una balanza. Tengo conocimientos en visual basic.

    Me podrías enviar a mi email: dariovef (en hotmail) el codigo fuente del programa en visual basic.

    Thursday, November 22, 2012 5:43 PM
  • Hola Rodripelto, yo tambien estoy buscando capturar el peso de una balanza HBM que tiene sus software Trade, si has hecho ya una implementacion con esa marca podrias pasarme tu codigo y poder guiarme por favor. valdezalva@gmail.com

    william

    Thursday, December 05, 2013 5:12 AM
  • Hola William.

    Yo no he echo nada con las basculas HBM Trade pero he encontrado este manual que sera de gran ayuda

    http://www.lasbasculas.com/files/master/pdf/HBM/HBM%20GUIA.pdf

    Pagina 36 apartado 17.1.2. hay encontraras los comandos de comunicacion con la bascula. La forma de como abrir el puerto y leerlo lo tienes en los codigos que se han posteado anteriormente. Si tienes problemas pon el codigo que tienes hasta el momento y podremos decirte donde falla y ayudarte. Recuerda que este foro es para ayudar no para hacerle el trabajo a nadie.

    De todas formas mira este enlace

    http://msmvps.com/blogs/peplluis/archive/2009/12/01/como-comunicarme-con-una-bascula.aspx

    Es de un moderador del foro. PepLluis es un ejemplo muy bien esplicado y muy facil de entender, donde el dice envio "P" tu lo sustitulles por el comando que te interes del manual que te he pasado

    Un saludo.


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


    • Edited by Rodripelto Thursday, December 05, 2013 4:20 PM Añadir comentario
    Thursday, December 05, 2013 3:53 PM