AutomationDirect DURAPULSE GS3-21P0 Manual De Instrucciones página 193

Tabla de contenido
Capítulo 5: Comunicaciones del Durapulse con MODBUS
CRC (Cyclical Redundancy Check) es calculado con los siguientes pasos:
Paso 1: Cargue un registro de 16 bits (llamado el registro CRC) con FFFFH.
Paso 2: Haga un OR Exclusivo del primer byte del mensaje de comando con el byte
Paso 3: Desplace (shift) el registro CRC un bit a la derecha con llenado de un cero del
Paso 4: Si el LSB del registro CRC es 0, repita el Paso 3; si no es así, haga un OR
Paso 5: Repita los Pasos 3 y 4 hasta que se completen ocho shifts. Cunaso sea hecho,
.Paso 6: Repita los Pasos 2 a 5 para el próximo byte del mensaje de comando.
Continúe haciendo esto hasta que todo los bytes hayan sido procesados. El
contenido final del registro CRC es igual al valor CRC.
Nota: Al transmitir el valor del CRC en el mensaje, los bytes superiores e inferiores del
valor del CRC deben ser intercambiados (swapped), es decir el byte más bajo será
transmitido primero.
Lo que sigue es un ejemplo de como generar el CRC usando lenguaje C. La función
toma dos argumentos:
Unsigned char* data
Unsigned char length
Nota: Se prefiere el modo RTU. Se tiene un apoyo limitado disponible a usuarios con
5–32
M
ANUAL DEL VARIADOR
menos significativo del registro CRC, colocando el resultado en el registro CRC.
bit más signiticativo( MSB). Extraiga y examine el LSB (Bit menos significativo).
Exclusivo del registro CRC con el valor polinomial A001
un byte completo deberia haber sido procesado.
un puntero al buffer de mensajes
la cuantidad de bytes en el buffer de mensajes
La función vuelve el valor CRC como formato 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;
}
ASCII.
D
URAPULSE
.
H
Tabla de contenido
loading

Tabla de contenido