Autor Tema: Cálculo de CRC  (Leído 3845 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Cálculo de CRC
« 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

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Cálculo de CRC
« Respuesta #1 en: Mayo 20, 2015, 04:14:21 pm »
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ú
Saludos, desde algún lugar de Lima-Perú

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Cálculo de CRC
« Respuesta #2 en: Mayo 20, 2015, 07:37:14 pm »
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


Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Cálculo de CRC
« Respuesta #3 en: Mayo 20, 2015, 08:58:52 pm »
¡Ya lo solucioné!
No creo que sirva a nadie, pero por las dudas lo publico acá.

Código: (VB) [Seleccionar]
    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