Dada uma mensagem do tipo :0104020A11, temos que calcular mais dois caracteres para serem enviados, além dos caracteres de terminação 0x0D (13) e 0x0A (11), que devem seguir no fim da mensagem. Numa mensagem do tipo ASCII, dentro do protocolo MODBUS, esses caracteres, necessários para fazer verificação de erro, são chamados Longitudinal Redundancy Check (LRC) ou
horizontal redundancy check, e são calculados da seguinte maneira:
1) Passar cada par de hexa para decimal
2) Somar todos os resultados
3) Fazer a operação FFFFFFF-resultado de 2
Para o exemplo :0104020A11, fazemos
01 = 1 em hexa
04 = 4
02 = 2
A = 10
11 = 17
Você pode realizar essa operação numa planilha no Google Docs, da seguinte maneira: HEX2DEC
|
Passo 1: Da coluna A para B |
A soma, feita em decimal mesmo, é 1+4+2+10+17=34. Em seguida, faz-se a diferença, na planilha pode ser usada a função DEC2HEX, lembrando que deve entrar o negativo do resultado da soma. De forma mais detalhada, esta operação DEC2HEX(-ans) faz a conversão do total (no exemplo, 34) em hexadecimal (que dá 22) e tira a diferença FFFFF-22=FFFFDD, somando 1 a este resultado: FFFDE (ou seja, complemento de 2).
O valor do LRC são os dois últimos caracteres e devem ser enviados junto com a mensagem. A mensagem final ficaria:
:0104020A11DE\r\n
Se enviarmos em um terminal com seus valores na tabela ASCII, ficaria:
3A 30 31 30 34 30 32 30 41 31 31 44 45 0D 0A
Fonte de consulta:
Nenhum comentário:
Postar um comentário