calcular CRC

18/04/2005 - 10:34 por dps | Informe spam
hola

pues eso, tengo una matriz de 16 bytes.
el byte número 16 (el último) tiene que ser el crc de los
anteriores

por lo que recuerdo, creo que debería recorrer los 15
bytes, y con cada uno:

crc=(crc+byte(i)) mod 256

pero el resultado que obtengo no es correcto
alguna idea?

saludos al foro

Preguntas similare

Leer las respuestas

#1 Pep
18/04/2005 - 11:21 | Informe spam
Hola Dps,
El Crc puede ser muy sencillo o muy complicado!, dependiendo de quien lo
esta esperando.
El el caso de algun dispositivo con protocolo o bus industrial.. vease
ModBus, DeviceNet...etc, existe la complicacion adicional de que este ultimo
no ayuda.
Veamos, dependiendo de que dispositivo esta esperando, existe una
difilcultar añadida es tener que entregar dos caracteres (bytes) ASCII que
conformar el CRC de 16bits.
Un ejemplo a lo bruto podria ser :

CrcTemporal = &hFFFF
For i = 1 to len(Var)
CrcTemporal = CrcTemporal Xor Asc(Mid(Variable, i, 1))
for j = 1 to 8
'para tratrarlo como bytes individuales
CaracterT = CrcTemporal and &h1
If CrcTemporal < 0 then CaracterH=1 else CaracterH=0
CrcTemporal = CrcTemporal and &h7FFF
CrcTemporal = CrcTemporal / 2
If CaracterH = 1 then CrcTemporal = CrcTemporal Or &h4000
If CaracterT = 1 then CrcTemporal = CrcTemporal Xor &hA001
next j
next i
...
...
luego debes componer los filtros para entregar los dos caracters de 8 bits
en sus rangos respectivos.

No se si esto puede ayudarte
Saludos,
Pep.


"dps" escribió:

hola

pues eso, tengo una matriz de 16 bytes.
el byte número 16 (el último) tiene que ser el crc de los
anteriores

por lo que recuerdo, creo que debería recorrer los 15
bytes, y con cada uno:

crc=(crc+byte(i)) mod 256

pero el resultado que obtengo no es correcto
alguna idea?

saludos al foro



Respuesta Responder a este mensaje
#2 dps
18/04/2005 - 12:08 | Informe spam
muchas gracias por la explicación. comprendo que existen
multiples formas de calcular el crc.

en mi caso, se trata de un dispositivo serie que lee 16
bytes

b1,b2,b3..b16

el byte 16 es el que contiene el crc (un solo byte)

aunque todavio no entiendo como lo calculan, ya que para
una serie de 16 bytes como esta:


6E 61 75 6A 00 00 00 00 00 00 00 00 00 00 00 8C

el crc que sale es 8C

cómo han llegado a esa conclusión es lo que tengo que
averiguar

gracias de nuevo
un saludo

Hola Dps,
El Crc puede ser muy sencillo o muy complicado!,


dependiendo de quien lo
esta esperando.
El el caso de algun dispositivo con protocolo o bus


industrial.. vease
ModBus, DeviceNet...etc, existe la complicacion adicional


de que este ultimo
no ayuda.
Veamos, dependiendo de que dispositivo esta esperando,


existe una
difilcultar aà±adida es tener que entregar dos caracteres


(bytes) ASCII que
conformar el CRC de 16bits.
Un ejemplo a lo bruto podria ser :

CrcTemporal = &hFFFF
For i = 1 to len(Var)
CrcTemporal = CrcTemporal Xor Asc(Mid(Variable, i,


1))
for j = 1 to 8
'para tratrarlo como bytes individuales
CaracterT = CrcTemporal and &h1
If CrcTemporal < 0 then CaracterH=1 else


CaracterH=0
CrcTemporal = CrcTemporal and &h7FFF
CrcTemporal = CrcTemporal / 2
If CaracterH = 1 then CrcTemporal = CrcTemporal


Or &h4000
If CaracterT = 1 then CrcTemporal = CrcTemporal


Xor &hA001
next j
next i


luego debes componer los filtros para entregar los dos


caracters de 8 bits
en sus rangos respectivos.

No se si esto puede ayudarte
Saludos,
Pep.


"dps" escribió:

hola

pues eso, tengo una matriz de 16 bytes.
el byte nàºmero 16 (el àºltimo) tiene que ser el crc de




los
anteriores

por lo que recuerdo, creo que deberà­a recorrer los 15
bytes, y con cada uno:

crc=(crc+byte(i)) mod 256

pero el resultado que obtengo no es correcto
alguna idea?

saludos al foro





.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida