Comunicação serial

1 resposta
boneazul

Boa tarde a todos ,

Estou tendo contato pela primeira vez com comunicação serial , tenho que me comunicar com um dispositivo serial e veio acompanhado um manual do protocolo de comunicação , queria que voces me ajudassem a entender apenas o trecho que interessa pois dai o resto me viro .

Segundo o documento para enviar um command segue o seguinta layout :

FORMAT : <command><size><data><checksum>
<command> : 1 byte type : CAPITAL LETTER from 'A' to 'Z'
<size> : 1 byte type : char between 0 and 255
<data> : String composed of <size> bytes : Format is depending on the command
<checksum> Calculated as follow : checksum = -(<command> + <size> + [b]E[/b](<data>(i))) modulo 0x100   ([b]E[/b] quem dizer o simbolo de somatorio)

Command example : 0x43,0x10,0x87,0x31,0x2E,0x35 (Qual a tradução desse comando para string ?)

CheckSum calculation : 
      0x43+0x10+0x87+0x31+0x2E+0x35 = 0x16E (Como é feito essa soma ??)
      Then calcule it complement : -0x16E = 0xE92
      Then : checksum = 0xE92 modulo 0x100 = 0x92

To quebrando a cabeça pra entender isso , alguem pode me ajudar ?? Agradeço a ajuda

1 Resposta

E

A primeira coisa a fazer é evitar usar String - pense sempre em arrays de bytes.

A segunda coisa é que vou lhe dar uma rotina prontinha para você calcular o checksum.
Ela está comentada, mas uso operações equivalentes o que foi especificado.

// Nao se deve traduzir o comando para string. 
// Evitar problemas (a proposito, 0x43 é a letra B, se você olhar a tabela ASCII. 
// Ele pode ser representado como (byte) 'B' se você achar isso mais claro. 
byte[] comando = { (byte) 0x43, (byte) 0x10, (byte) 0x87, (byte) 0x31, (byte) 0x2E, (byte) 0x35 };
byte calculoChecksum (byte[] array, int nBytes) {
    int soma = 0;
    // A soma referida no cálculo do checksum...
    for (int i = 0; i < nBytes; ++i) {
        soma = soma + (array & 0xFF);
    }
    // Cálculo do complemento 
    soma = -soma;
    // O valor a ser retornado 
    return (byte) (soma & 0xFF);
}
Criado 11 de agosto de 2012
Ultima resposta 11 de ago. de 2012
Respostas 1
Participantes 2