Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Jeronimo en Mayo 19, 2015, 02:50:30 pm
-
¡Hola!
Estoy intentando comunicarme con un dispositivo mediante TCP.
El dispositivo necesita recibir y envía cadenas que al final tienen un CRC. El problema que tengo es que todos los ejemplos de cálculo que encontré dan un valor diferente al que recibe y envía el dispositivo (esto lo pude ver en una aplicación demo adquirida junto con el dispositivo).
Por ejemplo, la cadena que se envía es: ID=1;CPROD=MCPIC
Y el valor del CRC que envía al final es 102 (la cadena completa es "<[HELLO]ID=1;CPROD=MCPIC;CRC=102;>", pero deben omitirse los signos de mayor y de menor, la clave "[HELLO]" y el mismo CRC). En un sitio donde se puede hacer este cálculo online (http://www.lammertbies.nl/comm/info/crc-calculation.html) da otros valores en hexadecimal que, incluso convertidos a decimal, son diferentes.
La explicación que figura en la documentación del dispositivo es la siguiente: El valor de esta clave es calculado efectuando XOR con todos los caracteres que constituyen al pkt excluyendo al inicio y fin del Pkt ( <> ) y a la propia clave y valor del CRC.
¿Alquien me puede dar una mano, por favor?
Muchas gracias.
Jerónimo
-
Estimado Jeronimo
Según la explicación que indicas hay que efectuando XOR y un XOR se realiza evaluando 2 expresiones numéricas, por ejemplo:
11111111 <-- Expresión 1
XOR
01010101 <-- Expresión 2 (La clave)
Resultado
10101010
Por lo tanto, hay que determinar de la información de que dispones que corresponda a la expresión 1 y que a la expresión 2 para luego efectuar el XOR
Saludos, desde algún lugar de Lima-Perú
-
Hola, Albertomi.
Llamé por teléfono al fabricante del dispositivo y lo único que me dijeron es que debo "tomar byte por byte y hacerles XOR".
La expresión modelo sería la siguiente: [HELLO]ID=1;CPROD=MCPIC;
Y el resultado debiera ser 102.
¿Alguna idea de cómo es?
Muchas gracias.
Jerónimo
-
¡Ya lo solucioné!
No creo que sirva a nadie, pero por las dudas lo publico acá.
Dim Expresion As String
Expresion = Text1.Text
Dim i As Integer
Dim CRC As Integer
Dim V1 As Integer
CRC = 0
For i = 1 To Len(Expresion)
V1 = Asc(Mid$(Expresion, i, 1))
CRC = (CRC Xor V1)
Next
MsgBox CRC
¡Muchas gracias, Albertomi!
Jerónimo