|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
peterv6i Član
Pridružen-a: Tor 22 Jan 2008 13:30 Prispevkov: 116 Aktiv.: 0.59 Kraj: Izola
|
Objavljeno: Tor Apr 25, 2017 10:41 pm Naslov sporočila: Arduino pošiljanje podatkov po nekem protokolu s CRC-jem |
|
|
Pozdrav,
potreboval bi pomoč pri pošiljanju dveh podatkov tipa int po RS232 v nekem protokolu, ki ima recimo takšno obliko:
STX F1 XXXXX F2 XXXXX CRC EOT
STX = 0x02
EOT = 0x03
Verjetno moram int nekako konvertirat v array bytov?
Če ima kdo kakšen primer iz prakse bi bil hvaležen (saj se protokol lahko razlikuje ni problem, samo da spravim 2 vrednosti + checksum skozi)..
hvala
lp
PETer |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.05
|
Objavljeno: Tor Apr 25, 2017 11:58 pm Naslov sporočila: Re: Arduino pošiljanje podatkov po nekem protokolu s CRC-jem |
|
|
peterv6i je napisal/a: |
Pozdrav,
potreboval bi pomoč pri pošiljanju dveh podatkov tipa int po RS232 v nekem protokolu, ki ima recimo takšno obliko:
STX F1 XXXXX F2 XXXXX CRC EOT
STX = 0x02
EOT = 0x03
Verjetno moram int nekako konvertirat v array bytov? |
Zgoraj določiš novo spremenljivko
byte ModBuffer[6]; // paket 8-bitnih spremenljivk
V programu določiš vrednosti posameznih členov paketa
ModBuffer[0] = 0x02; // STX
ModBuffer[1] = F1 >> 8; // premakne za 8 bitov v desno
ModBuffer[2] = F1 & 0xFF; // Samo spodnjih 8 bitov
ModBuffer[3] = F2 >> 8; // premakne za 8 bitov v desno
ModBuffer[4] = F2 & 0xFF; // Samo spodnjih 8 bitov
ModBuffer[6] = 0x03; // EOT
ModBuffer[5]= ModBuffer[0] + ModBuffer[1] + ... 2 , 3 , 4, + 6; // CRC = vsota vseh, razen CRC
Potem s funkcijo
Serial.write(ModBuffer, 7);
pošlješ znanih 7 bytov.
Je pa res, da je ponavadi CRC zadnji člen [6], saj se izračuna iz predhodnih.
Kadar je CRC enak 8-bitni vsoti predhodnih členov, se komunikaciji reče Modbus CRC8.
Obstaja pa še Modbus RTU, kjer je CRC izračunan malce bolj zapleteno .
Dodano: Če je EOT = End Of Transmittion, je celo možno, da je CRC samo vsota členov [1], [2], [3] in [4], ni pa nujno. V vsakem primeru je način izračuna odvisen od sprejemne naprave. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|