www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Arduino pošiljanje podatkov po nekem protokolu s CRC-jem

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
peterv6i
Član
Član



Pridružen-a: Tor 22 Jan 2008 13:30
Prispevkov: 116
Aktiv.: 0.59
Kraj: Izola

PrispevekObjavljeno: Tor Apr 25, 2017 10:41 pm    Naslov sporočila:  Arduino pošiljanje podatkov po nekem protokolu s CRC-jem Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Tor Apr 25, 2017 11:58 pm    Naslov sporočila:  Re: Arduino pošiljanje podatkov po nekem protokolu s CRC-jem Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group