3.5 Método de verificación CRC 16:
CRC (verificación de redundancia cíclica) utiliza el formato de trama RTU y el mensaje incluye un dominio de detección de
errores basado en el método CRC. El campo CRC detecta el contenido de todo el mensaje. El campo CRC tiene dos bytes y
contiene valores binarios de 16 bits. Es calculado por el dispositivo de transmisión y agregado al mensaje. El dispositivo
receptor recalcula el CRC del mensaje recibido y lo compara con el valor en el campo CRC recibido. Si los dos valores de CRC no
son iguales, entonces hay un error en la transmisión.
CRC se almacena primero en 0xffff y luego llama a un procedimiento para procesar los bytes consecutivos de 8 bits en el mensaje con el valor
en el registro actual. Solo los datos de 8 bits en cada carácter son válidos para CRC, y ni el bit de inicio ni el bit de parada ni el bit de paridad son
válidos.
Durante la generación de CRC, cada carácter de 8 bits es exclusivo o (xor) diferente del contenido del registro. El
resultado se desplaza hacia el bit menos significativo y el bit más significativo se rellena con 0. Se extrae y detecta el LSB.
Si LSB es 1, el registro es diferente del valor preestablecido o si LSB es 0, no se realizará. Todo el proceso debe repetirse
ocho veces. Una vez completado el último bit (bit 8), el siguiente byte de 8 bits difiere del valor actual del registro o por
separado. El valor en el registro final es el valor CRC después de que se ejecutan todos los bytes del mensaje.
Cuando se agrega CRC al mensaje, primero se agrega el byte bajo y luego el byte alto. La función simple de
CRC es la siguiente:
unsigned int crc_chk_value(carácter sin firmar * valor_datos, longitud de caracteres sin firmar) {
unsigned int crc_value = 0xFFFF;
int i;
tiempo(largo--)
crc_value = ̂ * data_value ++; por(
yo = 0; yo <8; yo ++)
}
}
regreso(crc_value);
}
{
si(crc_value y 0x0001)
crc_value =(crc_value >> 1) 0̂ x a001;
}
demás
{
crc_value = crc_value >> 1;
}
{
{
57