Para converter um número em decimal para seu complemento de dois, conforme usado no post anterior, utilizei o seguinte programa em C:
int inteiro=236;
unsigned char buf[20];
sprintf(buf,"%X",0xFFFFF-inteiro+1);
printf("%c%c",buf[3],buf[4]);
>> 14
Descrevendo as operações realizadas:
sprintf - retorna um inteiro com o númeor de caracteres (informação inútil para mim neste programa) e faz a string do primeiro argumento (buf) receber, no formato em que está (%X, que significa hexadecimal) a variável no terceiro argumento, que na verdade, é a conta de complemento de dois: FFFFF-DEC2HEX(inteiro) (ele já interpreta como hexadecimal pelo %X) +1.
Mostrando postagens com marcador modbus. Mostrar todas as postagens
Mostrando postagens com marcador modbus. Mostrar todas as postagens
23 de ago. de 2012
Complemento de 2 em Hexadecimal em C
21 de ago. de 2012
Calcular LRC em MODBUS ASCII
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
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:
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 |
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:
Veja outros posts sobre:
eletrônica,
modbus,
programação
Assinar:
Postagens (Atom)
Quem sou eu
Raphael Fernandes
Carioca, Brasileiro, Estudante de Robótica
Hiperativo, Imperativo
Gosto de tecnologia, de transporte, de Rock, de reclamar e de propagandas criativas (e outras coisas que posso ter falado em um post ou não)
Hiperativo, Imperativo
Gosto de tecnologia, de transporte, de Rock, de reclamar e de propagandas criativas (e outras coisas que posso ter falado em um post ou não)
Veja também...
-
Ligue para *8486 Espere as eventuais propagandas e informação do número de protocolo Promoções ou pacotes de desconto - 2 Pacotes de desc...
-
Caminho percorrido pela linha 348, antiga 268 via linha amarela e Estrada dos Bandeirantes. A linha, que já foi até a Praça XV e, teve de se...
-
Caminho percorrido pela linha 341 Taquara x Candelária, antiga 241 Taquara x Praça Mauá Sentido Candelária: Praça Nídia Otero Estra...
-
Caminho percorrido pela linha 332, da Redentor, Taquara x Castelo via praia da Barra e orla da Zona Sul. OBS: A linha foi encurtada e agora...
-
Trajeto percorrido pelas linhas 561L e 4561L Caxias x Freguesia via Jacarepaguá e 568L Caxias x Praça Seca via Vaz Lobo. Sentido Freguesia...
-
Procurei no FAQ do apoia.se e não encontrei como substituir a foto de perfil adicionada como doador. Vi até algumas informações para trocar ...
-
No Blogger, ao alterar o cabeçalho, é possível adicionar uma imagem (em Layout , Cabeçalho ). Entretanto, ela fica alinhada com a e...
-
No post anterior , vimos como obter um conteúdo da interface Android para dentro do processamento em Java. Agora, o objetivo é processar alg...
-
Caminho percorrido pela linha 352 Riocentro x Castelo, antiga 268 via Autódromo Sentido Jacarepaguá: Rua Santa Luzia Avenida Marechal C...
-
Veja a a lista atualizada em Diário do Transporte Coletivo e em Minha linha mudou, e agora? Publicado em 20 de Abril de 2013 Segue adi...