[C#] Função para calculo de CRC (Usado em MODBUS)

Segue método para calculo de CRC, muito usado em comunicações, por exemplo o MODBUS.

private void CalculaCRC(byte[] Mensagem, ref byte[] Valor_CRC)
{
   //Function expects a modbus message of any length as well as a 2 byte CRC array in which to
   //return the CRC values:

   ushort CRC_Inicial = 0xFFFF;
   byte CRC_ALTO = 0xFF, CRC_BAIXO = 0xFF;
   char CRC_TEMP;

   for (int Dados = 0; Dados < (Mensagem.Length) - 2; Dados++)
   {
      CRC_Inicial = (ushort)(CRC_Inicial ^ Mensagem[Dados]);

      for (int BITS = 0; BITS < 8; BITS++)
      {
         CRC_TEMP = (char)(CRC_Inicial & 0x0001);
         CRC_Inicial = (ushort)((CRC_Inicial >> 1) & 0x7FFF);

         if (CRC_TEMP == 1)
            CRC_Inicial = (ushort)(CRC_Inicial ^ 0xA001);
      }
   }
   Valor_CRC[1] = CRC_ALTO = (byte)((CRC_Inicial >> 8) & 0xFF);
   Valor_CRC[0] = CRC_BAIXO = (byte)(CRC_Inicial & 0xFF);
}

Para usar é só passar o array de bytes que se quer obter o CRC e o valor é retornado por referencia em Valor_CRC que é um array de 2 bytes.

Simples e funcional…


Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[C#] Função para calculo de CRC (Usado em MODBUS)
Tags:                         

Deixe uma resposta

%d blogueiros gostam disto: