Formato de la respuesta mens aje:
LRC Check es el val or añadi do des de la dirección al conteni do de los datos. Por ejempl o, el LRC Check de los anteriores 3.3.1
mens ajes es: 01H + 03H + 21H + 02H + 00H + 02H = 29H, a continuación, s e toma el complemento de 2 (D7H).
CRC Chec k del modo RTU
CRC Chec k es de dirección al contenido de datos , y s u regla de funcionamiento es el siguiente:
Paso 1: Asegúr ese de almacenamiento tempor al de 16-bit (CRC almacenami ento temporal) = FFFFH.
Paso 2: OR Exclusivo con los primeros 8-bit del mensajes y la parte baj a de 16-bit del almacenami ento tempor al CRC :
Realiz ar OR Exclusi vo y al mac enar el resul tado temporal del CRC.
Paso 3: Mover al al mac enami ento temporal CRC un bi t mas, y llenar con 0 la posici ón al ta.
Paso 4: C ompr uebe el valor desplazamiento a l a der echa, si es 0, almacenar el nuevo valor para el paso 3 en el almacenamiento
temporal CRC, si no hacer un OR exclusi vo con A001H y almacenamiento tempor al CRC, almacenar el resultado en CRC tempor al.
Paso 5: R epetir paso3 ~ paso 4, y operar c ompletamente en 8 bits
Paso 6: R epetir paso 2 ~ pas o 5, y tomar la i nstrucción de mens aje para el próxi mo 8 bits, hasta que todas las instrucci ones del
mens aje son operadas por compl eto. Por último, el valor obtenido de almacenami ento temporal CRC es CRC Chec k. Es de destacar
que, CRC C hec k debe s er coloc ado en el modo de comprobación de i nstrucción de mens aje indistintamente.
El siguiente es el ejempl o de CRC Chec k corriendo escrito en lenguaje C:
Unsigned char * data ← //Mess age instruction poi nter Unsigned
char length ← //Length of message instruction
unsig ned int crc_c hk (unsigned char*data, unsigned char
length)
{ int j; unsigned int reg_crc=OXffff; while( 1ength--) {
reg_crc^=*data ; for (j = 0; j<8; j ) { if (reg _crc & Ox01) {
/* LSB (b0) =1 */
reg_ere=(reg_crc﹥ ﹥ 1) ∧ OXa001;
﹜ else﹛
reg_cre=reg_crc﹥ ﹥ 1
﹜
﹜
return reg_crc;//finall y feedbac k the val ue of CRC temporar y
stor ag e﹜