Capítulo 5: Comunicaciones MODBUS del variador GS1
CRC (Verificación de Redundancia Cíclica) es calculado por los siguientes pasos:
Paso 1: Cargue un registro de 16-bits (llamado registro CRC) con FFFF H .
Paso 2: Haga la instrución Or Exclusivo el primer byte de 8-bits del mensaje de
Paso 3: Haga shift el registro CRC un bit hacia la derecha con llenado de cero MSB.
Paso 4: Si el LSB del registro CRC es 0, repita el paso 3, haga otro OR Exclusivo el
Paso 5: Repita pasos 3 y 4 hasta que se hayan hecho ocho shifts. Cuando se
Paso 6: Repita los pasos del 2 al 5 para el próximo byte de 8-bits del mensaje de
Continúe haciendo esto hasta que todos los bytes hayan sido procesados. El
contenido final del registro CRC son los valores del CRC.
Nota: Cuando se transmite el valor de CRC en el mensaje, los bytes superiores e
inferiores del valor del CRC deben ser intercambiados, por ejemplo, el byte de orden
inferior se transmitirá primero.
El siguiente es un ejemplo para generar CRC usando lenguaje C. La función toma
dos argumentos:
5–22
Manual del variador de frecuencia Serie GS1
comando con el byte de orden baja del registro de CRC de 16-bits, poniendo
el resultado en el registro CRC.
Extraiga y examine el LSB.
registro CRC con el valor polinomio de A001 H .
complete esto, se habrá procesado un byte de 8-bits completo.
comando.
Unsigned char* data
Unsigned char length
La función retorna el valor de CRC como un tipo entero sin signo.
Unsigned Int crc_chk(unsigned char* data, unsigned char length){
int j;
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;
}
Un puntero al buffer de mensaje
La cantidad de bytes en el buffer de mensaje