unsigned int crc_value=0xffff;
while(data_length--)
{
crc_value^=*data_value++;
for(i=0;i<8;i++)
{
if(crc_value&0x0001)crc_value=(crc_value>>1)^0xa001;
else crc_value=crc_value>>1;
}
return(crc_value);
}
En lógica de escalera, CKSM calculó el valor CRC según el marco con la tabla de pregunta. El método es
avanzado con programación fácil y cálculos rápidos. Sin embargo, el espacio ROM que ocupa el
programa es muy grande. Por esto úselo con cautela de acuerdo al espacio requerido por el programa.
7.3 Código de Comando RTU e Ilustración de Datos de Comunicación
7.3.1 Código de Comando: 03H
03H(corresponde a 0000 0011 binario, lee N palabras(Word)(La lectura continua Max. son 16
palabras)
Código de comando 03H significa que si el maestro lee datos del inversor, el numero de lectura depende
del "numero de datos" en el código de comando. El numero de lectura continua Max. es 16 y la dirección
del parámetro debe ser continua. El largo del byte de cada dato es 2 (una palabra). El siguiente formato de
comando es ilustrado por hex (un numero con "H" significa hex) y un hex ocupa un byte.
El código de comando es usado para leer el paso en funcionamiento del inversor.
Por ejemplo, leer contenido continuo de 2 datos desde 0004H del inversor con la dirección de 01H (leer el
contenido de la dirección de datos de 0004H y 0005H), la estructura de marco está abajo:
Mensaje de comando maestro RTU (del maestro al inversor)
START (INICIO)
ADDR
CMD
Bit alto del bit de inicio
Bit bajo del bit de inicio
Bit alto del numero de dato
Bit bajo del numero de dato
Bit bajo CRC
Bit alto CRC
END (FIN)
T1-T2-T3-T4 entre INICIO y FIN es para proveer por lo menos el tiempo de 3.5 bytes como el tiempo de
ocio (leisure time) y distinguir dos mensajes para evitar tomar dos mensajes como uno.
ADDR = 01H significa que el mensaje de comando se envía el inversor con la dirección 01H y ADDR
ocupa un byte
}
T1-T2-T3-T4 (tiempo de transmisión de 3.5 bytes)
T1-T2-T3-T4 (tiempo de transmisión de 3.5 bytes)
01H
03H
00H
04H
00H
02H
85H
CAH
105