CONFIGURACIÓN DEL PROTOCOLO MODBUS
ALTOSONIC 5
10
Ejemplo
A continuación se muestra un ejemplo de función en lenguaje C que genera el LRC.
La función considera dos argumentos:
unsigned char *auchMsg; un puntero en el buffer de mensaje que contiene los datos binarios
para utilizar para la generación del LRC
unsigned short usDataLen; la cantidad de bytes en el buffer de mensaje. La función devuelve el
LRC como un tipo unsigned char.
Función para la generación del LRC
static unsigned char LRC(auchMsg, usDataLen)
unsigned char *auchMsg ; /* message to calculate */
unsigned short usDataLen ; /* LRC upon quantity of */
/* bytes in message */
{
unsigned char uchLRC = 0 ; /* LRC char initialized */
while (usDataLen--) /* pass through message */
uchLRC += *auchMsg++ ; /* buffer add buffer byte*/
/* without carry */
return ((unsigned char)(-((char_uchLRC))) ;
/* return twos complemen */
}
Anexo C: Generación del CRC
(Extracto de la página web: www.modicon.com/techpubs/crc7.html)
El campo Verificación de Redundancia Cíclica (CRC) es de dos bytes y contiene un valor binario
de 16 bits. El valor del CRC es calculado por el equipo emisor que añade el CRC al mensaje. El
equipo receptor recalcula un CRC durante la recepción de mensaje y compara el valor calculado
con el valor real recibido en el campo CRC. Si los dos valores no son iguales se genera un error.
El cálculo del CRC empieza con la precarga de un registro de 16 bits con todos los bits a 1. Luego
comienza un proceso que aplica los sucesivos bytes de ocho bits del mensaje al contenido actual
del registro. Para generar el CRC se utilizan sólo los ocho bits de datos de cada carácter. Los
bits de arranque y parada y el bit de paridad no se aplican al CRC.
Durante la generación del CRC, se efectúa una disyunción exclusiva ("O" exclusivo) de cada
carácter de ocho bits con el contenido del registro. Al resultado se le aplica un desplazamiento
en la dirección del bit menos significativo (LSB) rellenando la posición del bit más significativo
(MSB) con un cero. Se extrae y examina el LSB. Si el LSB es un 1, se efectúa una disyunción
exclusiva del registro con un valor fijo predeterminado. Si el LSB es un 0 la disyunción exclusiva
no se efectúa.
Este proceso se repite hasta efectuar ocho desplazamientos. Después del último (octavo)
desplazamiento, se efectúa una disyunción exclusiva del siguiente carácter de ocho bits con el
valor actual del registro; a continuación el proceso se repite con ocho desplazamientos más
como descrito arriba. El contenido final del registro, después del procesamiento de todos los
caracteres del mensaje, proporciona el valor del CRC.
Generación del CRC
Paso 1
Cargar un registro de 16 bits con FFFF hex (todos los bits a 1). Se denominará registro CRC.
Paso 2
Efectuar una disyunción exclusiva del primer byte de ocho bits del mensaje con el byte de orden
bajo del registro CRC de 16 bits, situando el resultado en el registro CRC.
Paso 3
Desplazar el registro CRC un bit a la derecha (hacia el LSB), rellenando el MSB con cero. Se
extrae y examina el LSB.
Paso 4
Si el LSB es 0, repetir el paso 3 (otro desplazamiento). Si el LSB es 1, efectuar una disyunción
exclusiva del registro CRC con el valor polinómico A001 hex (1010 0000 0000 0001).
Paso 5
Repetir los pasos 3 y 4 hasta realizar ochos desplazamientos. De esta forma se habrá procesado
06/2018 - 4004473501 - MA ALTOSONIC 5 es R04
www.krohne.com
323