CRC MODBUS
A continuación se detallan los pasos a seguir para calcular el CRC del mensaje
MODBUS-RTU.
CRC (Chequeo de Redundancia Ciclica) es calculado por los siguientes pasos:
Paso 1: Cargar un Registro de 16-bit con FFFFH (llamada Registro CRC).
Paso 2: OR exclusivo el primer byte de 8-bit de mensaje de comando con la parte baja
del byte del registro CRC de 16-bit, poniendo el resultado en el registro CRC.
Paso 3: Elevar el registro CRC un bit a la derecha con el cero cayendo en el MSB.
Extraer y examinar el LSB.
Paso 4: Si el LSB del registro CRC es 0, repetir el paso 3, tambien OR exclusivo el
registro CRC con el valor polinominal A001H.
Paso 5: Repetir el paso 3 y 4 hasta que ocho mantensiones se hallan realizado.
Cuandoeste listo, un byte completo de 8-bit sera procesado.
Paso 6: Repetir del paso 2 al 5 para el siguiente byte de 8-bit de comando de mensaje.
Continue haciendo esto hasta que todos los byte hallan sido procesados. El
contenido final del registro CRC sera el valor de CRC. Cuando se transmite el valor de
CRC en el mensaje, la parte alta y baja del byte del valor de CRC debe ser
intercambiada,
El byte de bajo orden sera transmitido primero.
El siguiente es un ejemplo de generacion de CRC usando lenguaje C. La funcion toma
dos argumentos:
char* no signado dato
Char no signado largo
La Función devuelve el valor de CRC como un tipo de entero no signado.
Unsigned int crc_chk(unsigned char* data, unsigned char length){
intj;
unsigned int reg_crc=0xFFFF;
while (length-){
reg_crc^=*data++;
for(j=0;j<8;j++){
if (reg_crc & 0x01){ /* LSB(b0)=1 */
reg_crc=(reg_crc>>1)^0xA001;
}else{
reg_crc=reg_crc>>1;
}
}
}
return reg_crc;
}
NOTA:
Para más información sobre protocolo MODBUS visite www.modbus.org
un puntero al buffer de mensaje.
â
â la cantidad de bytes en el buffer de mensaje.
10