Buscar

Protocolo CRC - Mostrador Digital

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

PROTOCOLO CRC – Mostrador Digital 
 
 
 
• CMD – Comando enviado para painel 
• NFR – Número do Frame 
• NFRAME – Número de Frames do pacote 
• TAM_DATA – Número de dados a serem transmitidos 
 
 
 
Input Dados (Comando 0x80): Exemplo de painel com 8 dígitos. 
 
01 02 50 01 01 DB 01 01 80 01 01 00 08 31 32 33 34 35 36 37 38 03 6A AB 
 
Cabeçalho: 
01 – SOH 
02 – STX 
50 – CLASSE DA ORIGEM 
01 – GRUPO DA ORIGEM 
01 – ID DA ORIGEM 
DB – CLASSE DO DESTINO (MOSTRADOR DIGITAL) 
01 – GRUPO DO DESTINO 
01 – ID DO DESTINO (ID do Painel – Configuração feita pela DipSwitch na CPU do 
Painel) 
80 – COMANDO INPUT DADOS 
01 – NÚMERO DO FRAME NO PACOTE 
01 – NÚMERO DE FRAMES EXISTENTES NO PACOTE 
00 08 – TAMANHO DOS DADOS A SEREM TRANSMITIDOS (HEX) 
Dados: 
31 – ‘1’ (ASC) 
32 – ‘2’ (ASC) 
33 – ‘3’ (ASC) 
SOH STX 
CLAS. 
ORIG. 
GROUP 
ORIG. 
ID 
ORIG. 
CLAS. 
DEST. 
GROUP 
DEST. 
ID 
DEST. CMD NFR NFRAME TAM_DATA DATA ETX CRC 
01 
byte 
01 
byte 01byte 01 byte 
01 
byte 
01 
byte 01 byte 
01 
byte 
01 
byte 
01 
byte 01 byte 02 byte 
n 
bytes 
01 
byte 
02 
bytes 
01h 02h 03h 
34 – ‘4’ (ASC) 
35 – ‘5’ (ASC) 
36 – ‘6’ (ASC) 
37 – ‘7’ (ASC) 
38 – ‘8’ (ASC) 
03 – ETX 
6A AB – CRC - CHECKSUN 
 
OBS: O Exemplo acima coloca os seguintes valores nos campos: 
 
Campo 01 – Valor 12345678. 
 
*Alterando o valor enviado, basta aumentar ou diminuir 
o número de dados transmitidos. 
 
 
 
Configuração das Dip’s 
 
 Dip 1 – OFF : Protocolo CRC / ON: Protocolo BCC 
 Dip 2 – OFF : Não Pisca / ON: Pisca ao receber novo valor 
 Dip 3 e Dip 4 – Tempo de Acionamento Relé e Beep. 
 OFF – OFF: 3 segundos 
 OFF – ON: 5 segundos 
 ON – OFF: 7 segundos 
 ON – ON: 9 segundos 
 Dip 5, Dip 6, Dip 7 e Dip 8: Configuração do ID do Painel (Dip 8 menos 
significativa). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Cálculo do CRC16 em Linguagem C: 
 
//=============================================================== 
// 
// CÁLCULO DO VALOR CRC16 
// RESULTADO: Valor CRC16 (16 Bits) 
// 
//=============================================================== 
 
short CRC_Calc(unsigned char *Char_Addr,unsigned short Char_Qtdy) 
{ 
 unsigned short CRC16 = 0xFFFF; // Buffer para valor CRC16 calculado 
 unsigned short Char_to_CRC; // Buffer para operar caracteres durante cálculo CRC16 
 unsigned char Bit_Counter; // Contador de bits do caracter a adicionar ao cálculo CRC16 
 unsigned char Polin_Flag; // Flag para sinalizar se necessário calcular com Polinômio 
 const unsigned short Polynom = 0x1021; // Polinômio para cálculo do valor CRC16 
 
 while (Char_Qtdy != 0) // Enquanto não processados todos os caracteres previstos 
 { 
 Bit_Counter = 8; // Contador de bits de cada caracter a ser processado 
 Char_to_CRC = (*Char_Addr * 256); // Prepara caracter do Buffer para cálculo 
 CRC16 = (CRC16 ^ Char_to_CRC); // CRC16 = (Valor atual CRC16 EXOR'ed com caracterdo Buffer 
 
 while (Bit_Counter != 0) // Enquanto não processados todos os bits do caracter atual 
 { 
 if (CRC16 > 32767) // Se bit 15 do CRC atual = 1 
 { 
 Polin_Flag = 1; // Sinaliza necessária operação com o POLINÔMIO PADRÃO 
 } 
 
 else 
 { 
 Polin_Flag = 0; // Sinaliza desnecessário operação com o POLINÔMIO PADRÃO 
 } 
 
 CRC16 = (CRC16 * 2); // Shift Left valor CRC16 atual 
 
 if (Polin_Flag != 0) // Se bit 15 do CRC atual = 1 
 { 
 CRC16 = (CRC16 ^ Polynom); // ExOR valor CRC16 atual e polinômio padrão 
 } 
 
 Bit_Counter--; // Decrementa contador de bits do caracter atual 
 } 
 
 Char_Addr++ ; // Prepara ponteiro para o próximo caracter a processar 
 Char_Qtdy-- ; // Decrementa contador de caracteres a processar 
 } 
 
 return CRC16; 
}

Continue navegando