Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoć za izračunavanje kontrolnog broja (COM port)

[es] :: Visual Basic 6 :: Pomoć za izračunavanje kontrolnog broja (COM port)

[ Pregleda: 4062 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dnesic
Dragan Nešić
Požarevac

Član broj: 25816
Poruke: 3
93.87.244.*

Sajt: www.promargum.com


Profil

icon Pomoć za izračunavanje kontrolnog broja (COM port)09.12.2010. u 13:59 - pre 162 meseci
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 ?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
212.200.65.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoć za izračunavanje kontrolnog broja (COM port)15.12.2010. u 11:15 - pre 162 meseci
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]
 
Odgovor na temu

[es] :: Visual Basic 6 :: Pomoć za izračunavanje kontrolnog broja (COM port)

[ Pregleda: 4062 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.