luispaulocarlos 0 Posted February 28, 2020 Report Share Posted February 28, 2020 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 Link to post Share on other sites
Solution antseq 83 Posted February 28, 2020 Solution Report Share Posted February 28, 2020 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 1 Report Link to post Share on other sites
luispaulocarlos 0 Posted February 28, 2020 Author Report Share Posted February 28, 2020 (edited) 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 Edited February 28, 2020 by luispaulocarlos Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now