![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
||||
|
||||
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
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
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. ![]() |
#4
|
||||
|
||||
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 |
#5
|
||||
|
||||
Comprobaciones previas:
¿Está encendida la balanza? ¿El cable está conectado y es bueno? ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
|||
|
|||
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 |
#7
|
||||
|
||||
Cita:
![]() Cita:
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. |
#8
|
||||
|
||||
Por probar:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#9
|
||||
|
||||
Cita:
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. |
#10
|
||||
|
||||
Creo que el problema es de configuración del puerto, prueba con el hyperterminal o algo similar, ve probando distintas velocidades, paridad, etc.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
||||
|
||||
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. |
#12
|
||||
|
||||
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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#13
|
||||
|
||||
Cita:
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. |
#14
|
||||
|
||||
Cita:
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. |
#15
|
||||
|
||||
Cita:
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. |
#16
|
||||
|
||||
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. |
#17
|
||||
|
||||
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. |
#18
|
||||
|
||||
Era demasiado raro que ni saltara el evento.
![]() ![]() ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#19
|
||||
|
||||
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. |
#20
|
||||
|
||||
Pues sigue siendo raro, aunque menos mal que asi funciona.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
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 |
![]() |
|