[ dnesic @ 09.12.2010. 13:59 ] @
Za komunikaciju sa fiskalnom kasom koristim sledeću strukturu okvira poruke koja se šalje na COM port:

polje sadržaj vrednost
(A)1 bajt identifikacija starta okvira 3
(B)1 bajt dužina okvira +32 38..96
(C)1 bajt Redni broj poruke (0 - 15) +32 32..47
(D) 0..58 bajtova Podaci koji se prenose okvirom 32..127
(E) 2 bajta Suma za proveru ispravnosti 32..95
(F) 1 bajt Identifikacija kraja okvira 4

Primer jedne poruke:

3 38 47 33 56 4

Objašnjenje za računanje:

"Suma za proveru ispravnosti okvira računa se na sledeći način: saberu se svi bajtovi okvira (osim poslednja tri, polja E i F) na nivou 12 bita (na pr. sabirati 16-bitno i na kraju očistiti najviša 4 bita); prvi bajt za proveru formira se tako što se na 6 značajnijih bitova iz 12-bitne sume doda 32; drugi bajt za proveru se dobija od 6 manje značajnih bitova zbira na koje se takođe doda 32; na ovaj način je obezbeđeno da bajtovi za proveru sadrže samo vrednosti iz opsega 32-95."

Pitanje:
Kako uz pomoć gornjeg objašnjenja dobijam od 3 38 47 brojeve 33 56 ?
[ X Files @ 15.12.2010. 11:15 ] @
Dakle, imamo sumu:
3 + 38 + 47 + 0 = 88

Da pretvorimo u binarni oblik:
88 (dec) = 1011000 (bin) = 0000000001011000 (bin 16)

Odbacujemo 4 najznačajnija bita, ostaje:
000001011000 (bin 12)

Razdvajamo 6 manje značajnih bitova (000001011000 (bin 12)):
011000 (bin 12 LO)
... pa na to dodajemo 32:
011000 (bin 12 LO) + 32 (dec) = 24 (dec) + 32 (dec) = 56.


Razdvajamo 6 značajnijh bitova (000001011000 (bin 12)):
000001 (bin 12 HI)
... pa na to dodajemo 32:
000001 (bin 12 HI) + 32 (dec) = 1 (dec) + 32 (dec) = 33.




EDIT: Ispravljeno "manje značajnih", "značajnijih" u tekstu.




[Ovu poruku je menjao X Files dana 15.12.2010. u 13:48 GMT+1]