Serijske komunikacije z obdelavo

Serijske komunikacije z obdelavo

Serijske komunikacije z obdelavo

Serijski razred

Operacije za uporabo serijskih komunikacij v Obravnavano so definirani v razredu Serial.Prva operacija za njihovo uporabo v programu (skica) bo vključitev v kodo z import processing.serial.*;.

Kazalo

    razred Serial Ima pet različnih konstruktorjev glede na navedene parametre. Edini zahtevani parameter je nadrejeni objekt (od staršev), ki običajno ustreza glavnemu programu (recimo oknu programa) razreda PApplet. Kot običajno bo nadrejeni program, ki se piše (the skica trenutni), bo vrednost tega prvega obveznega parametra this.

    Ostalih pet parametrov, ki jih je mogoče posredovati konstruktorju, so ① hitrost, ② ime serijskih vrat ③ pariteta uporabljeni v protokolu, ④ podatkovni biti in ⑤ stop bitovi. Najpogosteje posredovana parametra sta poleg zahtevanega nadrejenega objekta ime vrat in hitrost.

    La hitrost serijske komunikacije je celo število (int) To privzeta vrednost je 9600 če ta parameter ni posredovan konstruktorju.

    Na voljo so serijska vrata. Metoda seznama

    El ime pristanišča ima obliko, ki jo določa sistem, tako denimo v Distribucije Linuxa bo nekaj takega /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (odvisno od vrste vrat), medtem ko bo v sistemu Windows nekaj podobnega COM12. Če vrata niso fizično povezana z napravo, program običajno ne bo vedel, katera vrata uporabiti. Pogost način izbire vrat je pridobitev seznama razpoložljivih vrat, ki ga pokažete uporabniku in mu omogočite, da izbere tistega, ki ga želi uporabiti. Metoda Serial.list() vrne vektor besedilnih nizov (String) z imeni vrat, ki so na voljo v sistemu.

    Vrata, ki jih privzeto uporablja knjižnica Serial je prvi od tistih, ki jih vrne metoda list (zagotovo COM1 v sistemu Windows oz /dev/ttyS0 en GNU / Linux). Razen v zelo omejenih kontekstih, v katerih je strojna oprema, s katero se dela, natančno znana (kot je sistem v načinu kioska), se običajno ne izpusti in ciljna vrata so izrecno navedena.

    Obdelava serijskih vrat Linux Seznam serijskih ttyACM ttyS ttyUSB

    Zgornji posnetek zaslona prikazuje izhod sistema GNU / Linux ki ima štiri serijska vrata RS-232 (ttyS0 a ttyS3) in pet adapterjev dveh vrst (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Dovoljenja za serijske naprave Linux ttyACM ttyS ttyUSB

    Za dostop do serijskih vrat mora uporabnik pripadati skupini, ki ji jih sistem dodeli, običajno tty o klicanje. Na posnetku zaslona zgornje slike lahko vidite, da so serijska vrata navedena z ls /dev/tty[ASU]* -la pripadajo skupini klicanje ki ima na njih dovoljenja za dostop za branje in pisanje.

    Parametri serijskega protokola

    La pariteta serijskih komunikacij je izraženo v Obravnavano kot lik (char), ki ima lahko vrednosti: ① N (none), da ne zazna pariteta, ② E (celo), ki označuje, da je paritetni bit je sodo, ③ O (čudno), ki označuje, da je paritetni bit je liho, ④ M (znamka) vedno narediti paritetni bit in ⑤ S (prostor), da bo vedno ena paritetni bit. Privzeta vrednost, če ni posredovana konstruktorju kot parameter, je N (brez pariteta).

    Število podatkovnih bitov, ki je privzeto osem, označuje število bitov, ki sestavljajo neto podatkovno obremenitev (imenovano znak ali včasih beseda), ki se prenaša v vsaki osnovni enoti okvira. Parameter, ki označuje število podatkovnih bitov, je izražen kot celo število (int).

    Končno, peti možni parameter označuje trajanje končne ocene, izraženo kot stop bitov (stop bitov), ki je označeno kot število, predstavljeno v plavajočo vejico (float), ki lahko sprejme vrednosti 1.0 (privzeta vrednost, če parameter ni posredovan konstruktorju), 1.5ali 2.0.

    Konstruktorji razreda Serial

    Naslednji seznam prikazuje različne kombinacije parametrov, ki jih je mogoče posredovati konstruktorju razreda Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Končaj serijsko komunikacijo. Metoda zaustavitve.

    Za sprostitev serijskih vrat, dodeljenih ob instanciranju Serialin da ga lahko uporabljajo druge sistemske aplikacije, se komunikacije prekinejo z metodo stop, ki ne sprejema parametrov.

    Pošlji podatke prek serijskih vrat. Metoda pisanja

    Za pošiljanje podatkov razred Serial de Obravnavano vključuje metodo write s katerim lahko prenašate ① besedilne nize (String), ② bajtov ali ③ bajtnih vektorjev (byte[]). Zanimivo se je tega spomniti byte en Obravnavano (Ob Java) predstavlja celo število med -128 in 127 in nizi privzeto uporabljajo kodiranje UTF-16.

    Branje podatkov iz serijskih vrat

    Da lahko program med prejemanjem podatkov prek serijskih vrat izvaja druge naloge, je običajno shranjevanje v a varovalni prispele podatke in jih prebere, ko je to primerno. Čeprav običajno ni zelo učinkovito, lahko aplikacijo ustavite, da naloži vse razpoložljive podatke; Vendar pa bo najpogostejša stvar branje informacij, ko prispejo, bodisi v vsaki ponovitvi draw, ko je določena količina na voljo ali je prejeta posebna koda.

    Količina podatkov, ki so na voljo v medpomnilniku. Razpoložljiva metoda

    Če želite vedeti, ali so podatki prispeli na varovalni serija, metoda available vrne število bajtov, ki so že bili shranjeni v tem varovalni. V obeh primerih lahko operacije branja vrnejo posebno vrednost (kot npr -1 o null), ko poskušate naložiti podatke iz varovalni serija, ko je prazna.

    Nalagajte en bajt naenkrat. Metoda branja

    Glavne metode razreda Serial ki služijo za branje informacij, ki jih prejmejo serijska vrata, so tiste tipa " read» ki se med seboj razlikujejo predvsem po vrsti podatkov, v katerih posredujejo prejete informacije.

    read se uporablja za dostavo bajtov, ki jih prejmejo serijska vrata, kot vrednost med 0 in 255. Kot podatkovni tip byte de Obravnavano predstavlja obseg med -128 in 127 in ne med 0 in 255, je treba uporabiti int da predstavlja obseg, ki ga vrne read. Če poskušate brati z read in varovalni niz je prazen, vrne vrednost -1

    Branje znakov iz serijskih vrat. Metoda readChar

    Metoda readChar je podobno kot read vendar vrne vrednost v formatu char namesto a int. Tako kot interno, char en Obravnavano (Ob Java) so shranjeni z dvema bajtoma, izbrano vrednostjo za vrnitev pri branju readChar po varovalni prazna serija je 0xFFFF o -1.

    Naloži besedilni niz. Metodi readString in readStringUntil.

    Metoda readString vrne predmet String oblikovana iz vseh podatkov, ki so na voljo v varovalni serije v času posvetovanja z njo.

    Metoda readString ustvari besedilni niz ob predpostavki, da so bajti, ki jih prejmejo serijska vrata, v formatu ASCII zato te metode branja ni mogoče uporabiti za druga kodiranja.

    Če gre za branje varovalni serija z readString ko je prazen, je vrnjena vrednost null.

    Metoda readStringUntil dodati k readString možnost vrnitve informacij, naloženih v varovalni serija, ki jo razdeli s posebnim znakom (kodo), ki se posreduje kot parameter. Ta način branja prejetih informacij nam omogoča, da ločimo tako ločila kot terminatorje, ki pomagajo interpretirati prejete informacije.

    Metoda readStringUntil prinesi nazaj null ko v varovalni serija ne najde kode, podane v argumentu, ki ji je bil posredovan (en bajt).

    V naslednji kodi za Arduino pošlje tri sporočila prek serijskih vrat. Prva dva se končata z zavihkom, zato se bosta prikazala v konzoli. Obravnavano, medtem ko tretji, čeprav bo poslan prek serijskih vrat, ne bo prebran z readStringUntil(9) ker se ne konča z zavihkom (s kodo ASCII 9).

    Obdelava Serial.readStringUntil branje serijskega niza

    Branje podatkovnih blokov. Metodi readBytes in readBytesUntil.

    Zgoraj prikazane metode se uporabljajo za branje podatkov v določenih oblikah, za branje blokov neobdelanih podatkov ali z obliko, ki ni predvidena v Obravnavano uporabljajo se metode readBytes y readBytesUntil

    Metoda readBytes poskusite prebrati podatke, ki so na voljo v varovalni serije. Če metodi ni posredovan noben parameter readBytes vsi razpoložljivi podatki so prebrani in vrnjeni v vektorju (byte[]). Če je kot parameter posredovano celo število, se prebere največje število bajtov, ki jih označuje to število, in so tudi vrnjeni kot vektor.

    Obstaja še tretji način uporabe readBytes, učinkovitejši, ki kot argument vzame bajtni vektor, v katerega je vnesena vsebina varovalni serije. Ta način uporabe readBytes vrne celo število (int), ki predstavlja število prebranih bajtov.

    Metoda readBytesUntil deluje na podoben način, vendar vključuje prvi parameter, ki predstavlja vrednost bajta, ki je, če ga najdete v varovalni, označuje konec branja. Pri tej metodi parameter, ki določa največje število prebranih bajtov, ni smiseln, saj bo količino določila posebna koda.

    Za preizkus delovanja metode readBytes Predpostavimo naslednjo kodo za Arduino ki pošlje besedilo skozi serijska vrata.

    Naslednji primer programa za Obravnavano bere besedilo iz serijskih vrat v 32-bajtnih blokih (TOTAL_BYTES). Da bi preveril, ali deluje, ga prek konzole prikaže kot znake, pri čemer prisili vrsto prejetih bajtov v char.

    Na naslednjem posnetku zaslona lahko vidite, kako so prikazani v konzoli Obravnavano podatki, ki so bili naloženi v blokih (največ) 32 bajtov (TOTAL_BYTES) vsakič. Vendar obstaja problem, o katerem je bilo že govora: Arduino je pošiljal verze Federico García Lorca primera, kodiranega kot besedilo v formatu UTF-8, ki ni uporabljena Obravnavano (Java), kaj imaš raje UTF-16 torej tisti, ki ne ustrezajo rangu ASCII natisljive se nepravilno razlagajo.

    Obdelava Serial.readBytes UTF-16

    Za rešitev te težave je mogoče naložiti nabor znakov (črtico) in definirajte nov predmet String prisili, da je predstavljen s kodiranjem UTF-8 kot je prikazano v naslednjem primeru kode.

    Obdelava Serial.readBytes UTF-8

    Preberite zadnje prejete podatke. Metodi last in lastChar.

    Medtem ko ostale metode branja ("tip read») naložijo informacije o varovalni serija v istem vrstnem redu, kot je prispela (FIFO), s tema dvema metodama zadnji bajt, ki je dosegel varovalni serije. Metoda last vrne vrednost zadnjega bajta kot a int y lastChar vrne vrednost kot a char.

    Upravljanje serijskega medpomnilnika

    Čeprav so doslej videne metode popolnoma funkcionalne, ne predstavljajo vedno najboljšega načina za izkoriščanje dostopa do serijskih vrat. Za nalaganje podatkov morajo občasno preveriti stanje varovalni serije in preberite podatke, ki so na voljo v ponavljajočem se delu kode. Na splošno je učinkovitejši način branje podatkov le, če veste, da so na voljo.

    Preberite serijska vrata, ko so podatki prejeti. Serijski dogodek.

    Za dostop do varovalni serial, ko so podatki prejeti, lahko serijski dogodek izkoristite tako, da ga upravljate prek definicije metode serialEvent. Ta metoda kot argument uporablja serijska vrata, ki jo zaženejo.

    Velikost serijskega medpomnilnika. Puferska metoda.

    Če poznate število bajtov, ki sestavljajo blok uporabnih podatkov, lahko dodatno optimizirate ta slog branja podatkov. varovalni serija skozi serialEvent. Metoda buffer omogoča nastavitev števila bajtov, ki bodo shranjeni v varovalni pred zagonom serijskega dogodka. Metoda pričakuje kot parameter celo število, ki predstavlja število bajtov.

    Polnite medpomnilnik, dokler ne prejmete vrednosti. Metoda bufferUntil.

    Namesto nastavitve klica metode serialEvent za količino podatkov v varovalni, z metodo bufferUntil lahko konfigurirate tako, da shranjujete podatke, dokler ne prispe posebna vrednost in nato dvignete serijski dogodek. Parameter, posredovan tej metodi, je a int ki predstavlja vrednost, ki jo ustvari klic serialEvent.

    Izbrišite podatke, shranjene v medpomnilniku. Jasna metoda.

    z metodo clear Izbrišete lahko podatke, ki so trenutno v varovalni. To metodo je mogoče uporabiti na primer za začetek nove seje sprejema podatkov, pri čemer se ne upoštevajo podatki, ki so ostali iz prejšnje.

    Tipična aplikacija za obdelavo za branje podatkov prek serijskih vrat

    Končno je priročno povzeti delovanje objekta Serial de Obravnavano ki se pogosteje uporabljajo, skozi tipičen primer prejemanja podatkov prek serijskih vrat, da se z njimi nariše graf, v tem primeru zloženih območij.

    Uvozite serijsko knjižnico

    Določite podatkovni protokol (ločila)

    Določite objekt razreda Serial

    Instanciirajte objekt razreda Serial tako, da nastavite uporabljena serijska vrata

    Konfigurirajte medpomnilnik serijskih vrat

    Implementirajte obravnavo za serijski dogodek

    Branje serijskega medpomnilnika

    Pogojujte prejete podatke

    Končaj serijsko komunikacijo

    Spodnji primer kode ponazarja ta povzetek s funkcionalno (čeprav zelo preprosto) aplikacijo, ki generira ploščinski graf z vrednostmi, prejetimi prek serijskih vrat, nekaj podobnega temu, kar prikazuje naslednja animacija.

    grafika z obdelavo podatkov, prejetih prek serijskih vrat

    Da se ne izgubite v preostalem delu programa in pozornost usmerite na serijsko komunikacijo z Obravnavano, so označene vrstice kode, ki ustrezajo prejšnjim operacijam.

    po Komentar

    Morda ste zamudili