FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Envío de datos a balanza puerto serie
Hola...
Llevo varios días peleándome con una balanza por puerto serie. La comunicación funciona, ya que he conseguido enviar y recibir respuesta. El problema es que no siempre recibo respuesta, y seguramente se debe a que estoy enviando mal la cadena HEX a la balanza. La balanza es de la marca DIBAL. Utilizo el protocolo TISA. El formato de envío es el siguiente: 9 8 P P P P P C Cr Lf Los dos primeros dígitos (9 y 8) son fijos. PPPPP son los 5 dígitos para el precio Cr es el retorno de carro (0D en HEX) Lf es el Line Feed (0A en HEX) El problema está en la posición "C". Ahí debo poner la suma lógica (XOR) de todos los números anteriores. Con algunas pruebas sí me responde la balanza, pero con otras no. Depende del peso/precio/etc... que devuelva la balanza, lo cual indica que, o bien estoy haciendo mal la suma XOR, o la balanza no me hace caso. El siguiente ejemplo funciona: ASCII: 98001505 + CR + LF HEX: 39 38 30 30 31 35 30 35 0D 0A En este ejemplo, la suma XOR es 5 (35 HEX). La he obtenido con Delphi de la siguiete forma: x := 39 xor 38 xor 30 xor 30 xor 31 xor 35 xor 30 Eso devuelve 35, y enviando esa cadena, la balanza responde perfectamente. Sin embargo, si envío otra cadena, por ejemplo si el precio es 9,50, quedará de la siguiente forma: HEX: 39 38 30 30 39 35 30 0D 0D 0A ¿Se hace así la suma lógica? ¿O hay que hacer algo más? Puede incluso que en el manual de la balanza esté mal explicado. Dice textualmente "C es la suma lógica (XOR) de todos los números anteriores". Y a saber si hay que contar el 98 del principio o no. Muchas gracias por anticipado. Llevo varios días y sólo veo números cuando cierro los ojos |
#2
|
||||
|
||||
me gustaria saber como queda tu código
tal vez si lo viera me daria ideas para hecharlo a andar...
componentes, librerias, etc... saludos!!!
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!! |
#3
|
|||
|
|||
Hola.
Gracias por la respuesta. Todavía no estoy usando ni componentes, ni librerías, ni nada. SImplemente estoy intentando hacer una suma XOR de varios números. Con la calculadora de Windows, en modo "científica", y en Hex, la suma es correcta, pero haciendo lo siguiente... x := 39 xor 39 xor 30....... ...no coincide. Imagino que se debe a que estoy sumando numeros enteros y no en HEX? |
#4
|
|||
|
|||
Ya lo he solucionado. Estaba calculando mal la suma lógica XOR de los números. Tenía primero que convertirlos a Integer, luego otra vez a HEX, luego el resultado a HEX y finalmente a ASCII, es decir, una vuelta de tuerca impresionante que no aparece en ningún manual.
Mañana intentaré postera el código exacto. |
#5
|
|||
|
|||
Aquí va el código que utilizo para calzular el checksum dichoso y enviar correctamente el resultado a la balanza.
En el ejemplo envío la siguiente cadena: 9 8 0 0 1 5 0 X Cr Lf Código:
a:='30'; b:='30'; c:='31'; d:='35'; e:='30'; h:=inttohex(hextoint('39') xor hextoint('38'),1); h:=inttohex(hextoint(h) xor hextoint(a),1); h:=inttohex(hextoint(h) xor hextoint(b),1); h:=inttohex(hextoint(h) xor hextoint(c),1); h:=inttohex(hextoint(h) xor hextoint(d),1); h:=inttohex(hextoint(h) xor hextoint(e),1); //Cadena completa en HEX edit21.text:='39'+'38'+a+b+c+d+e+h+'0D'+'0A'; //Cadena en ASCII (sin #13 ni #10) edit19.text:=chr(hextoint('39'))+chr(hextoint('38'))+chr(hextoint(a))+chr(hextoint(b))+chr(hextoint(c))+chr(hextoint(d))+chr(hextoint(e))+chr(hextoint(h)); //Cadena ASCII completa (CON #13#10) ApdComPort1.OutPut := edit19.text+#13+#10; |
#6
|
||||
|
||||
ingeniosa tu solución!!!
felicidades por que te quedo tu problema...
y si la verdad es que buscando ayuda o consultando en foros es como se hecha a andar nuestro codigo... que bueno que fue un problema de conversion... saludos!!!...
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!! |
#7
|
|||
|
|||
Consulta
Hola, ¿podrías indicarme como haces para poder recuperar los datos que te manda la pesa de regreso?.
Quiero decir, si yo le mando un precio o no pero quiero recuperar el peso que hay en la balanza, ¿Que tengo que hacer?. ¿Tienes alguna documentación del protocolo Tisa?, ¿una lista de comandos o algo para poder recuperar los datos desde la balanza?. Un saludo. |
#8
|
|||
|
|||
Hola...
Para recibir la respuesta de la balanza no hay que hacer nada. Una vez envíes la cadena con el componente, el propio componente se encarga de recibir la respuesta en un evento propio. Ahora mismo no recuerdo qué evento es y qué código hace falta porque no estoy en el trabajo. En cuanto a la documentación sobre el protocolo TISA, o cualquier otro protocolo, lo mejor es que consultes el manual de la balanza. Si no lo tienes, en Internet o en la web del fabricante seguro que lo encuentras. Siento no poder ayudarte más en este momento. |
#9
|
|||
|
|||
Gracias, trataré de ver si encuentro algo más sobre el protocolo TISA, pues quería pasarle pesos de TARA etc...
Si tienes algún código completo de ejemplo de como funciona el objeto de comunicaciones... espero que no sea pedir mucho, es que por más que busco ejemplos casi no encuentro nada, y con la documentación que viene con el paquete de componentes tampoco es que me queda muy claro. Gracias y un saludo. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Recibir datos del puerto serie en bytes. | REHome | .NET | 1 | 31-10-2008 17:50:10 |
Puerto Serie / Envio De Datos | alebarto | C++ Builder | 4 | 07-09-2008 22:46:58 |
Quiero tomar datos de puerto serie con Delphi4PHP | lsg | PHP | 1 | 09-08-2008 03:24:37 |
Capturar datos por el puerto serie | mierda | Varios | 8 | 05-12-2007 18:23:29 |
Envio de datos al puerto serie COM1 | Niko | Varios | 5 | 15-03-2005 18:38:21 |
|