Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Solicitar datos a balanza

Hola a tod@s.


Tengo un problema con una balanza que debe de ser una tontada pero no soy capaz de resolverlo.


Hasta ahora todas las balanzas que he conectado a mis programas llevan un protocolo (no recuerdo como se llama) pero que envían de forma continua el peso al puerto com al que están conectadas, de esta manera es fácil abrir el puerto y leer el valor.


Ahora me encuentro con una balanza que tiene el protocolo TINSA que consiste en que hay que enviarle un carácter "$" y la balanza te devuelve el peso.



He hecho un formulario de prueba en el que he incluido un componente TCommportDriver en el que, una vez configurada la velocidad, paridad, etc. hago lo siguiente:


CommportDriver1.Connect; // y conecta
CommportDriver1.SendString('$');


Intuyo que después de esto debería de pasar por el evento "OnReceiveData" pero ni se inmuta.


También he probado con:


CommportDriver1.SendString('$#13');
CommportDriver1.SendString('$#13#10');




y nada.


¿Alguien que se haya peleado antes con esto?


Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #2  
Antiguo 24-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Debería devolver la info en un array de bytes.
Creo que devuelve una cadena más o menos así: xx1234567xxxxx
Donde los valores del peso son de la posición 3 a 9, o sea 2 a 8 teniendo que empieza a contar desde cero.

También, dependiendo de la balanza, hay que configurarla para que devuelva en formato tinsa, porque algunas sabes que ofrecen distintos protocolos.

Te paso el código en otro lenguaje y para otro sistema operativo, por si acaso sirve de algo:
Código:
' cada tick se pide el peso 
Sub tmscale_tick 
    getWeight 
End Sub 

' pedir el peso 
Sub getWeight 
    asytreamms.Write( Array As Byte(Asc("$")) )    ' la balanza está configurada para recibir un $ y devolver info con el peso leido 
End Sub 

' devuelve la info 
Private Sub balanza_Streamm_NewData( Buffer() As Byte ) 
    Dim cPeso As String 
    Dim fPeso As Double 
    ' 
    cPeso = byc.StringFromBytes(Buffer,"ASCII") 
    ' 
    If Not (IsNumber(cPeso)) Then 
        cPeso = funciones.LimpiarNumeroDecimal(cPeso) 
        If cPeso="" Then cPeso="0" 
    End If     
    ' 
    If (cPeso.CompareTo(cLastPeso)<>0) Then 
        cPeso = byc.StringFromBytes(Buffer,"ASCII")         
        If Not (IsNumber(cPeso)) Then 
            cPeso = funciones.LimpiarNumeroDecimal(cPeso) 
            If cPeso="" Then cPeso="0" 
        End If         
        ' 
        cLastPeso=cPeso 
        fPeso = cPeso 
        '         
        If fPeso=0 Then 
            lbBalanza.Text = "" 
        Else 
          lbBalanza.Text = NumberFormat2(fPeso,1,3,3,False) &" g" 
        End If 
        '         
    End If     
End Sub

Private Sub dibal_Stream_NewData( Buffer() As Byte ) 
    Dim peso As Int 
    ' 
    peso = decodePeso( Buffer ) 
    CallSubDelayed2( a, subResultArrived, peso ) 
End Sub 
 
Private Sub decodePeso( buf() As Byte ) As Int 
    Dim cTxt As String 
    Dim peso As Int 
    ' 
    cTxt=bc.StringFromBytes(buf,"ASCII") 
    cTxt=cTxt.SubString2(2,8) 
    peso=(0+cTxt)/1000 
    Return peso     
End Sub
Responder Con Cita
  #3  
Antiguo 24-09-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.122
Poder: 35
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola newtron,

Seguramente digo una tontería, pero, ¿has probado a enviar el ASCII del $ en lugar del caracter tal cual? ¿Y has visto si acaso hubiera algún otro evento del componente que pudiera serte útil? Por probar... hasta todos...

P.S. No borro este mensaje por si sirviese de algo... pero Casimiro me adelantó acaso con la respuesta correcta.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 24-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Gracias a los dos por contestar.

Bueno... la línea:

asystreamms.write(Array As Byte (Asc("$"))

me suena a mi...

CommportDriver1.SendString('$');

también he probado (como sugiere el amigo Dec):

CommportDriver1.SendByte(36); // el código ascii del signo $
o también:
CommportDriver1.SendString(#36);

pero nada, no salta nada en ninguno de los dos eventos del componente (OnReceiveData, OnReceivePacket)

Tiene que ser una tontada pero ....

Gracias y un saludo
__________________
Be water my friend.

Última edición por newtron fecha: 24-09-2019 a las 19:27:38. Razón: completar respuesta
Responder Con Cita
  #5  
Antiguo 24-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Comprobaciones previas:

¿Está encendida la balanza?
¿El cable está conectado y es bueno?
Responder Con Cita
  #6  
Antiguo 25-09-2019
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.568
Poder: 26
egostar Va camino a la fama
Hola.

Para esos menesteres utilizo la famosa hiperterminal de Windows. Lo que a mi me parece es que tienes un problema de configuración del puerto serial en cuanto a velocidad, bits de datos, bit de parada, paridad e incluso si es XON/ XOFF

Con dicha hiperterminal no tienes problema ya que se auto configura a lo que el puerto requiere.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 25-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Comprobaciones previas:

¿Está encendida la balanza?
¿El cable está conectado y es bueno?



Cita:
Empezado por egostar Ver Mensaje
Hola.

Para esos menesteres utilizo la famosa hiperterminal de Windows. Lo que a mi me parece es que tienes un problema de configuración del puerto serial en cuanto a velocidad, bits de datos, bit de parada, paridad e incluso si es XON/ XOFF

Con dicha hiperterminal no tienes problema ya que se auto configura a lo que el puerto requiere.

Saludos

La conexión es correcta porque he localizado un programa por internet que recibe datos de la balanza con distintos protocolos, lo pruebo con esta y recibe el peso correctamente. El problema es que es un ejecutable y no sé cómo leches lo hace


Seguro que hay que enviar la cadena para preguntar el peso de una forma especial pero no doy con ella.


Seguiremos dando cabezazos.
Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #8  
Antiguo 25-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por probar:
Código Delphi [-]
buf : array [1] of byte;
buf[0] := '$'
CommportDriver1.SendString(buf);
Responder Con Cita
  #9  
Antiguo 25-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Por probar:
Código Delphi [-]buf : array [1] of byte; buf[0] := '$' CommportDriver1.SendString(buf);

Antonio.


La linea:

buf: array [1] of byte

no compila. La he cambiado por:
buf: array [0..1] of byte

y ya si que compila pero luego no puedo hacer un "Sendstring", imagino que habría que hacerlo de otra manera.


No te apures porque sé que no tienes ningún delphi a mano para probar las instrucciones. Ya me apaño.


Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #10  
Antiguo 25-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que el problema es de configuración del puerto, prueba con el hyperterminal o algo similar, ve probando distintas velocidades, paridad, etc.
Responder Con Cita
  #11  
Antiguo 25-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
He estado echando un vistazo a este hilo antiguo del compañero espinete y creo que los tiros van por ahí.


He hecho una prueba enviando el mismo código que él en el hilo y si que la balanza responde.


Seguiremos investigando.


Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #12  
Antiguo 25-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Eso no es para leer el peso, es para enviarle el precio a la balanza y lo multiplique por el peso.
Te adjunto el fichero (es una 'class') que trata la balanza, en un software que tú conoces para android, a ver si te sirve.
Es para protocolo tinsa en balanzas dibal, y supongo que otras que usen el mismo protocolo.
Archivos Adjuntos
Tipo de Archivo: zip dibalScale.bas.zip (1,1 KB, 15 visitas)
Responder Con Cita
  #13  
Antiguo 25-09-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.875
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por newtron Ver Mensaje
Ahora me encuentro con una balanza que tiene el protocolo TINSA que consiste en que hay que enviarle un carácter "$" y la balanza te devuelve el peso.
Ya se que no es lo que has preguntado [newtron], y a lo mejor me dices que ya lo has mirado, pero te lo comento por si acaso.
Muchas de estas balanzas tienen los 2 protocolos o modos de funcionamiento implantados (el "continuo" y el "bajo poetición").

Normalmente como tú comentas, el protocolo activado por defecto es el continuo (envían el pero continuamente) y sólo hay que leerlo cuando interesa. Que no sea que en este caso venga activado con el otro, pero se pueda cambiar.
Sólo para que lo mires...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 25-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Ya se que no es lo que has preguntado [newtron], y a lo mejor me dices que ya lo has mirado, pero te lo comento por si acaso.
Muchas de estas balanzas tienen los 2 protocolos o modos de funcionamiento implantados (el "continuo" y el "bajo poetición").

Normalmente como tú comentas, el protocolo activado por defecto es el continuo (envían el pero continuamente) y sólo hay que leerlo cuando interesa. Que no sea que en este caso venga activado con el otro, pero se pueda cambiar.
Sólo para que lo mires...

Efectivamente, según el protocolo que tengan predeterminado, envían el peso directamente o esperan a recibir el carácter de marras para enviarlo. Podría cambiar el protocolo y leer lo que va enviando pero me ha "picado" un poco el usar el protocolo TINSA y tener resueltas las dos opciones.


Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #15  
Antiguo 25-09-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.875
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por newtron Ver Mensaje
Efectivamente, según el protocolo que tengan predeterminado, envían el peso directamente o esperan a recibir el carácter de marras para enviarlo. Podría cambiar el protocolo y leer lo que va enviando pero me ha "picado" un poco el usar el protocolo TINSA y tener resueltas las dos opciones.
Gracias y un saludo

OK.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 25-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Bueno.


A lo tontorrón me estoy dando cuenta de que en el ejemplo del amigo espinete para enviar el precio a la balanza devuelve una cadena de caracteres entre la que se encuentra el peso. Así que la táctica podrá ser enviar un precio 0 y leer el peso que devuelve.


Gracias a todos y un saludo
__________________
Be water my friend.
Responder Con Cita
  #17  
Antiguo 26-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Hola de nuevo a tod@s.


Comentar (a quien le sirva) que al implementar el código de envío/captura de datos a la balanza me doy cuenta de que aproximadamente un 20% de las veces la balanza me devuelve datos erroneos. Después de algunas horas dando cabezazos opto por cambiar el componente que estaba usando para manejar el puerto serie del "TCommPortDriver" a otro que se llama "TCommPort" y han desaparecido los problemas. O sea, era problema del componente "TCommPortDriver".


Saludos
__________________
Be water my friend.
Responder Con Cita
  #18  
Antiguo 26-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Era demasiado raro que ni saltara el evento.
Responder Con Cita
  #19  
Antiguo 26-09-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Era demasiado raro que ni saltara el evento.

No me has entendido. El evento salta con los dos componentes al enviar un precio según el código de espinete, con el $ nidecoña.


El problema es que con un componente el 20% de las veces me devolvía cadenas erroneas y con el otro todo correcto.


Saludos
__________________
Be water my friend.
Responder Con Cita
  #20  
Antiguo 26-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues sigue siendo raro, aunque menos mal que asi funciona.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Solicitar habilitación georeferenciación Ricardo2010 Desarrollo en Delphi para Android 3 11-03-2019 23:33:16
Solicitar permisos en Android 6 ElGatitoTapatio FireMonkey 2 19-01-2017 19:06:12
Solicitar Confirmacion de Lectura y Entrega de correo jesus02018 Internet 10 15-10-2012 14:53:07
Solicitar contraseña en Terminal Server mjjj Windows 1 17-07-2012 11:13:43
Envío de datos a balanza puerto serie espinete Varios 8 20-04-2009 14:26:05


La franja horaria es GMT +2. Ahora son las 13:13:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi