SANYU SY6600 Serie Manual De Usuario página 110

Tabla de contenido
APÉNDICE
Formato de CRC
El marco de chequeo CRC no podrá devolver el código de error 04.
Por ejemplo, la longitud del formato no es correcta, el comando es incorrecto, la dirección es incorrecta y el
CRC arrojara error. Etc.
Código de modo de chequeo RTU (Chequeo CRC).
El código de chequeo empieza en la dirección y termina en el contenido de datos.
La operación sigue estas reglas:
Paso1: hace un registro de 16 bits (registro CRC) = FFFFH.
Paso2: hace un OR exclusivo entre los primeros 8 bits del mensaje de instrucción con bits más bajos del registro
de 16bits. Se escribe el resultado en el registro CRC.
Paso 3: se desplaza a la derecha un bit del registro CRC, llenando con 0 el bit alto.
Paso 4: chequea el registro movido a la derecha del valor si este es 0. El nuevo valor del paso 3 al registro CRC
estando el CRC dentro del registro A001H. Los resultados se escribirán en el registro CRC.
Paso 5: repetir el paso 3 y paso 4, haciendo que el 8 bit complete todas las operaciones.
Paso 6: repetir paso 2, paso 5, sacar un mensaje de instrucción de 8 bit, hasta que todos los mensajes de
instrucción hayan completado la operación.
Al final el valor del registro es el código de chequeo de CRC. Es importante notar que el código de chequeo del
CRC esté colocado en el mensaje de instrucción.
Lo siguiente está escrito usando lenguaje C y un ejemplo del cálculo de chequeo CRC:
Unsigned char*data ¿ / / comando índice de mensaje
Unsigned char lenght ¿ / / el largo de la instrucción del mensaje
Unsigned int crc_chk (unsigned char] data, unsigned char lenght)
{
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 erg_crc; / / finalmente retorna al valor de los registros CRC
}
{
106
Tabla de contenido
loading

Tabla de contenido