Conexión Balanza Dibal (mal suma lógica XOR de los números)

245 views
Skip to first unread message

gonzalo especht freire

unread,
Apr 17, 2019, 6:14:09 AM4/17/19
to Comunidad de Visual Foxpro en Español

Hola, tengo un problema con mi función en vfp con la conexión de balanzas (protocolo tipsa), resulta que cuando mando un precio como 9,50 no se me comunica con la balanza y con el resto me funciona correctamente. He estado informándome por foros y he encontrado este hilo el cual dice que el problema es que hace mal la suma lógica XOR: http://www.clubdelphi.com/foros/showthread.php?t=63904 

Es el mismo problema que me ocurre a mi pero no soy capaz de seguir los pasos indicados y realizarlo en visual fox pro 9. Por favor necesito ayuda de como hacerlo, el código que uso es el siguiente:

 

  A=VAL(SUBSTR(STR(PRECIO,6,2),1,1))
  B=VAL(SUBSTR(STR(PRECIO,6,2),2,1))
  C=VAL(SUBSTR(STR(PRECIO,6,2),3,1))
  D=VAL(SUBSTR(STR(PRECIO,6,2),5,1))
  E=VAL(SUBSTR(STR(PRECIO,6,2),6,1))

 

thisform.oleBascula.output=ALLTRIM("98"+ALLTRIM(STR(A))+ALLTRIM(STR(B))+ALLTRIM(STR(C))+ALLTRIM(STR(D))+ALLTRIM(STR(E))+ALLTRIM(STR(BITXOR(9,8,a,b,c,d,e))))+chr(13)+chr(10)

 

Gracias por vuestra atención, saludos

Carlos Alfaro

unread,
Apr 17, 2019, 9:05:10 AM4/17/19
to publice...@googlegroups.com

Saludos cordiales estimado Gonzalo:

 

Lo que veo en tu codigo es que pones fragmentos de la variable precio y los concatenas.

 

Por otro lado mencionas que debes calcular la suma lógica XOR.

 

Mi pregunta es: que codigo usas para calcular la suma lógica XOR?

 

Buen dia.

 

 

 

Carlos Alfaro

gonzalo especht freire

unread,
Apr 17, 2019, 10:24:52 AM4/17/19
to Comunidad de Visual Foxpro en Español
thisform.oleBascula.output=ALLTRIM("98"+ALLTRIM(STR(A))+ALLTRIM(STR(B))+ALLTRIM(STR(C))+ALLTRIM(STR(D))+ALLTRIM(STR(E))+ALLTRIM(STR(BITXOR(9,8,a,b,c,d,e))))+chr(13)+chr(10)


ALLTRIM(STR(BITXOR(9,8,a,b,c,d,e)))) / este es el código el cual hace la suma y funciona correctamente menos en los precios como 9,50 que indico en el anuncio. Si revisas el link: http://www.clubdelphi.com/foros/showthread.php?t=63904  explica que da con el fallo y es debido a que hace mal la suma lógica y dice como solucionarlo pero no se traducirlo a código vfp. Gracias por tu atención, saludos 

Carlos Alfaro

unread,
Apr 17, 2019, 5:01:44 PM4/17/19
to publice...@googlegroups.com

Según lo que dice en ese link, te falta convertirlo a hexadecimal, de la siguiente manera:

 

En primer lugar en VFP no hay funcion de conversión a hexadecimal, por lo que hay que crearla, en el link:

https://www.lawebdelprogramador.com/codigo/FoxPro-Visual-FoxPro/2220-Conversion-decimal-hexadecimal.html

 

Encontré el siguiente código:

* Funcion para pasar de decimal a hexadecimal

function Dec2Hex(tnDec)

    return SUBSTR(TRANSFORM(tnDec,";@0"),3)

endfunc

 

* Funcion para pasar de hexadecimal a decimal

function Hex2Dec(tcHex)

    return EVALUATE("0x"+ALLTRIM(tcHex))

endfunc

 

Entonces lo que dice en el link que pusiste de referencia es que debe enviar la concatenación:

Chr(hex2dec(‘9’))+ [“los demás digitos de igual manera a la muestra”] + alltrim(str(dec2hex(bitxor(hex2dec(‘9’), hex2dec(‘8’), [“Igual aquí colocar los demás digitos a evaluar”] ))))

 

Pero es posible que la función para convertir a hexadecimal de la muestra en Delphi no se comporte exactamente igual que la función que encontré, si yo tuviera tiempo me pondría a probar para darte mayor seguridad.

 

A ver si te da el resultado necesario.

 

Atentamente,

Marco Romero

unread,
Apr 18, 2019, 7:29:49 AM4/18/19
to Comunidad de Visual Foxpro en Español
Hola Gonzalo, para conectarme con dibal protocolo tisa utilizo lo siguiente :

 cadesali=strtran(str(trabajo.pvpii,5,2),".","")
 cadesali=strtran(str(val(cadesali),5)," ","0")
 cadesali="98"+cadesali

 micadena=bitxor(asc(substr(cadesali,1,1)),asc(substr(cadesali,2,1)),asc(substr(cadesali,3,1)),asc(substr(cadesali,4,1)),;
          asc(substr(cadesali,5,1)),asc(substr(cadesali,6,1)),asc(substr(cadesali,7,1)),asc(substr(cadesali,8,1)))

.output = cadesali+chr(micadena)+chr(13)+chr(10)

Oscar Bonet

unread,
Apr 18, 2019, 8:45:56 PM4/18/19
to publice...@googlegroups.com
si lo primero que haces es obtener el precio porque no obtienes mejor el peso en una variable y luego lo multiplicas y el resultado seria el que enviarlas a la bascula mejor, no se muy enredado pudiendo hacer mas simple de otra formas.

att

_________________
Oscar B.
   
De conformidad con el decreto 2242 de Noviembre de 2015, nuestra Compañía está implementando la Facturación Electrónica y según comunicado  100202211-410 del 29 de Junio de 2018 emitido por la DIAN, se nos fijó el 1 de diciembre de 2018 para la emisión de la factura electrónica.
En consecuencia, hemos destinado la cuenta de correo electrónico: 
e-fac...@cialta.com      para recepción y emisión de facturas electrónicas.

Habeas Data: La Compañía Internacional de Alimentos Agropecuarios CIALTA S.A.S. cumple con los requerimientos de la Superintendencia de Industria y Comercio de Colombia sobre el manejo de información de datos personales, lo cual implica tener políticas claras de tratamiento de Base de Datos que usted puede consultar: Politicas Habeas Data 

Si desea tener más información sobre el particular, puede escribirnos al correo habea...@cialta.com 

gonzalo especht freire

unread,
Apr 22, 2019, 11:32:41 AM4/22/19
to Comunidad de Visual Foxpro en Español
Muchas Gracias, funciona correctamente!!! saludos
Reply all
Reply to author
Forward
0 new messages