Jump to content
luispaulocarlos

ANSWERED Calcular XOR para balança TISA

Recommended Posts

luispaulocarlos

Boas!

Estou a implementar no meu POS (em VB.NET) a utilização de balanças com protocolo TISA, mas esbarrei completamente com a sequência a enviar para a balança. A documentação do protocolo define que a cadeia de texto a enviar é esta:

98  +  PPPPP + C + CR + LF, que trocando por miúdos, é:

98  cadeia de texto fixa

PPPPP  5 dígitos para o preço

C  Checksum, logic add(XOR) of all previous characters

e está a funcionar lindamente, para um preço de por exemplo 17,88 eu retiro a virgula, acrescento um zero no inicio para respeitar a definição de 5 dígitos para o preço, concateno a cadeia e fico com 9801788, calculo o checksum "of all previous characters" que dá 7, acrescento então o 7 à cadeia que já tinha e fico com 98017887, acrescento o CR + LF, mando para a balança e tudo funciona, a balança devolve o peso, e nos seus mostradores apresenta corretamente o peso, o preço/KG e o valor a pagar.

Até que calhou eu usar um preço de 17,85. Calculando o XOR da cadeia correspondente (98 & 0 & 1785) o resultado é 10. Como é que é suposto eu colocar 10 numa única posição? o que é suposto eu fazer aqui? Eu comecei a testar diferentes valores, e o padrão repete-se sempre: se o resultado do XOR estiver entre 0 e 9, tudo funciona. Caso contrário, a balança nem pia.

No exemplo que dei do preço de 17,85, comecei a enviar manualmente diferentes cadeias para a balança, sem qualquer êxito. enviei 9801785 seguido de 0,1,2,3,4,5,6,7,8,9, sempre erro. seguido de 10 (resultado do XOR em decimal), erro. Seguido de 1010, 12, A (resultados do XOR em binário, octal e hexa), erro.  Validei o calculo do XOR via https://toolslick.com/math/bitwise/xor-calculator

Alguém me consegue ajudar com isto? Obrigado :)

Share this post


Link to post
Share on other sites
antseq
On 2/28/2020 at 12:09 PM, luispaulocarlos said:

Boas!

Estou a implementar no meu POS (em VB.NET) a utilização de balanças com protocolo TISA, mas esbarrei completamente com a sequência a enviar para a balança. A documentação do protocolo define que a cadeia de texto a enviar é esta:

98  +  PPPPP + C + CR + LF, que trocando por miúdos, é:

98  cadeia de texto fixa

PPPPP  5 dígitos para o preço

C  Checksum, logic add(XOR) of all previous characters

e está a funcionar lindamente, para um preço de por exemplo 17,88 eu retiro a virgula, acrescento um zero no inicio para respeitar a definição de 5 dígitos para o preço, concateno a cadeia e fico com 9801788, calculo o checksum "of all previous characters" que dá 7, acrescento então o 7 à cadeia que já tinha e fico com 98017887, acrescento o CR + LF, mando para a balança e tudo funciona, a balança devolve o peso, e nos seus mostradores apresenta corretamente o peso, o preço/KG e o valor a pagar.

Até que calhou eu usar um preço de 17,85. Calculando o XOR da cadeia correspondente (98 & 0 & 1785) o resultado é 10. Como é que é suposto eu colocar 10 numa única posição? o que é suposto eu fazer aqui? Eu comecei a testar diferentes valores, e o padrão repete-se sempre: se o resultado do XOR estiver entre 0 e 9, tudo funciona. Caso contrário, a balança nem pia.

No exemplo que dei do preço de 17,85, comecei a enviar manualmente diferentes cadeias para a balança, sem qualquer êxito. enviei 9801785 seguido de 0,1,2,3,4,5,6,7,8,9, sempre erro. seguido de 10 (resultado do XOR em decimal), erro. Seguido de 1010, 12, A (resultados do XOR em binário, octal e hexa), erro.  Validei o calculo do XOR via https://toolslick.com/math/bitwise/xor-calculator

Alguém me consegue ajudar com isto? Obrigado :)

 

Não sei se ajuda, mas fiz um cálculo rápido e o XOR da cadeia "9801785" dá "3ah" (hexadecimal) ou seja o caracter ":"
Também confirmei o valor do site que indicaste.

Experimenta enviar "9801785:"+CR+LF

  • Vote 1

Share this post


Link to post
Share on other sites
luispaulocarlos
1 hora atrás, antseq disse:

Não sei se ajuda, mas fiz um cálculo rápido e o XOR da cadeia "9801785" dá "3ah" (hexadecimal) ou seja o caracter ":"
Também confirmei o valor do site que indicaste.

Experimenta enviar "9801785:"+CR+LF

 

Perfeito, é isso mesmo! Ainda estou a ver como converter tudo para ASCII de forma a que o meu código chegue a esse resultado, mas testei direto a enviar essa cadeia e funcionou, muito obrigado :D

Edited by luispaulocarlos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.