Come calcolare il checksum?

4

Sto sviluppando il driver dello strumento e voglio sapere come calcolare il checksum del frame.

Spiegazione:

Expressed by characters [0-9] and [A-F].

Characters beginning from the character after [STX] and until [ETB] or [ETX] (including [ETB] or [ETX]) are added in binary.

The 2-digit numbers, which represent the least significant 8 bits in hexadecimal code, are converted to ASCII characters [0-9] and [A-F].

The most significant digit is stored in CHK1 and the least significant digit in CHK2.

Questo è un esempio di frame:

<STX>2Q|1|2^1||||20011001153000<CR><ETX><CHK1><CHK2><CR><LF>

e voglio sapere qual è il valore di chk1 e chk2 e io sono nuovo in questo quindi sono totalmente in bianco su come calcolare il checksum

Non riesco a superare il 3 ° e il 4 ° punto.

Qualcuno può fornire un codice di esempio per c #?

    
posta Rikin Patel 11.06.2012 - 06:18
fonte

2 risposte

1

Finalmente ho avuto risposta.

Ecco il codice c # per calcolare il checksum.

private string CalculateChecksum(string dataToCalculate)
{
    byte[] byteToCalculate = Encoding.ASCII.GetBytes(dataToCalculate);

    int checksum = 0;

    foreach (byte chData in byteToCalculate)
    {
        checksum += chData;
    }

    checksum &= 0xff;

    return checksum.ToString("X2");
} 
    
risposta data 02.07.2012 - 14:15
fonte
9

Parlare come qualcuno che ha sviluppato un intero protocollo di comunicazione LIS dal driver seriale a entità strongmente tipizzate per una macchina utilizzata in centinaia di laboratori diversi.

Sono giunto a molte conclusioni (elenco breve):

  1. La LIS Spec è una cazzata (ogni fornitore di LIS ha una propria implementazione che differisce da tutte le altre) ogni LIS ospedaliero / di laboratorio differisce nel modo in cui viene scritto l'handshaking.
  2. Il frame "Checksum" non è altro che uno stupido calcolo che serve a rendere le persone che hanno scritto le specifiche si sentano meglio (non è in alcun modo un buon checksum in quanto può essere facilmente superato)
  3. Chi ha scritto la documentazione di "State Machine" per le specifiche LIS è stato un hack. Poiché non trasmette correttamente alcun stato né transizione (è meglio estrapolare la propria stat machine che cercare di dare un senso al disegno)

Detto questo:

link

È un semplice esempio di come calcolare un checksum per un frame LIS.

Se stai scrivendo un LIS Driver, il mio consiglio è di ottenere MOLTI registri dal fornitore (in modo che tu possa vedere esattamente la comunicazione in atto) a cui ti stai connettendo e scrivi un sacco di test unitari per abbinare quei log, (che e se deve essere per più di un venditore per renderlo estremamente flessibile). Oh e aggiungi un sacco di registrazioni per te.

    
risposta data 11.06.2012 - 18:16
fonte

Leggi altre domande sui tag