Sarjaliikenne ja käsittely

Sarjaliikenne ja käsittely

Sarjaliikenne ja käsittely

Sarjaluokka

Toiminnot, joissa käytetään sarjaliikennettä Käsittely määritellään luokassa Serial. Ensimmäinen toiminto, joka suoritetaan käyttääksesi niitä ohjelmassa (luonnos) on sisällyttää se koodiin import processing.serial.*;.

Sisällysluettelo

    Luokka Serial Siinä on viisi eri konstruktoria ilmoitetuista parametreista riippuen. Ainoa vaadittu parametri on pääobjekti (vanhempi), joka yleensä vastaa luokan pääohjelmaa (esimerkiksi ohjelmaikkunaa). PApplet. Kuten yleensä, vanhempi on kirjoitettava ohjelma ( luonnos nykyinen), tämän ensimmäisen pakollisen parametrin arvo on this.

    Muut viisi parametria, jotka voidaan välittää rakentajalle ovat ① nopeus, ② sarjaportin nimi ③ pariteetti protokollassa käytettävät ④ databitit ja ⑤ lopetusbitit. Useimmin välitetyt parametrit vaaditun yläobjektin lisäksi ovat portin nimi ja nopeus.

    La sarjaliikenteen nopeus on kokonaisluku (int) että oletusarvo on 9600 jos tätä parametria ei välitetä rakentajalle.

    Sarjaportit saatavilla. Luettelomenetelmä

    El portin nimi on järjestelmän määrittelemä muoto tällä tavalla, esimerkiksi sisään Linux-jakelut tulee olemaan jotain sellaista /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (riippuen portin tyypistä), kun taas Windowsissa se on jotain tällaista COM12. Ellei porttia ole fyysisesti liitetty laitteeseen, ohjelma ei yleensä tiedä mitä porttia käyttää. Yleinen tapa valita portti on hankkia luettelo käytettävissä olevista porteista, näyttää se käyttäjälle ja antaa hänen valita haluamasi portti. Menetelmä Serial.list() palauttaa vektorin tekstimerkkijonoista (String) ja järjestelmässä olevien porttien nimet.

    Kirjaston oletusarvoisesti käyttämä portti Serial on ensimmäinen menetelmällä palautetuista list (varmasti COM1 Windowsissa tai /dev/ttyS0 en GNU / Linux). Lukuun ottamatta hyvin rajoitettuja yhteyksiä, joissa työstettävä laitteisto on tiukasti tunnettu (kuten järjestelmä kioskitilassa), sitä ei yleensä jätetä pois ja kohdeportti ilmoitetaan nimenomaisesti.

    Käsitellään sarja-Linux-sarjaporttia ttyACM ttyS ttyUSB

    Yllä oleva kuvakaappaus näyttää järjestelmän lähdön GNU / Linux jossa on neljä sarjaporttia RS-232 (ttyS0 a ttyS3) ja viisi kahden tyyppistä sovitinta (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Linux-sarjalaitteiden käyttöoikeudet ttyACM ttyS ttyUSB

    Päästäkseen sarjaportteihin käyttäjän tulee kuulua siihen ryhmään, johon järjestelmä ne määrittää, normaalisti tty o valintaikkuna. Yllä olevan kuvan kuvakaappauksessa näet, että luettelossa olevat sarjaportit ovat ls /dev/tty[ASU]* -la kuuluvat ryhmään valintaikkuna jolla on luku- ja kirjoitusoikeudet.

    Sarjaprotokollan parametrit

    La pariteetti sarjaviestinnästä ilmaistaan Käsittely hahmona (char), joka voi ottaa arvot: ① N (ei mitään) jotta et havaitse pariteetti, ② E (jopa) osoittamaan, että pariteetti bitti on parillinen, ③ O (pariton) osoittamaan, että pariteetti bitti on outoa, ④ M (Merkitse) tehdäksesi aina pariteetti bitti ja ⑤ S (tila) tehdäksesi aina yhden pariteetti bitti. Oletusarvo, jos sitä ei välitetä rakentajalle parametrina, on N (synti pariteetti).

    Määrä databittejä, joka on oletuksena kahdeksan, osoittaa bittien määrän, jotka muodostavat nettodatan hyötykuorman (kutsutaan merkiksi tai joskus sanaksi), joka lähetetään kehyksen jokaisessa perusyksikössä. Databittien lukumäärää ilmaiseva parametri ilmaistaan ​​kokonaislukuna (int).

    Lopuksi viides mahdollinen parametri ilmaisee viimeisen arvosanan keston ilmaistuna stop bitit (stop bitit), joka on merkitty numerolla, joka on edustettuna liukuluku (float), joka voi ottaa arvot 1.0 (oletusarvo, jos parametria ei välitetä rakentajalle), 1.5tai 2.0.

    Serial-luokan rakentajat

    Seuraava luettelo näyttää eri parametrien yhdistelmät, jotka voidaan välittää luokan rakentajalle Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Lopeta sarjaliikenne. Pysäytysmenetelmä.

    Vapauttaaksesi sarjaportin, joka on määritetty luomisen yhteydessä Serial, ja että muut järjestelmäsovellukset voivat käyttää sitä, viestintä lopetetaan menetelmällä stop, joka ei vastaanota parametreja.

    Lähetä tiedot sarjaportin kautta. Kirjoita.menetelmä

    Voit lähettää tietoja, luokka Serial de Käsittely sisältää menetelmän write jolla voit lähettää ① tekstijonoja (String), ② tavua tai ③ tavuvektoria (byte[]). Se on mielenkiintoista muistaa byte en Käsittely (At Jaava) edustaa kokonaislukua välillä -128 ja 127, ja oletusarvoisesti merkkijonot käyttävät koodausta UTF-16.

    Lue tiedot sarjaportista

    Jotta ohjelma voi suorittaa muita tehtäviä, kun tietoja vastaanotetaan sarjaportin kautta, on tavallista tallentaa a puskuri saapuvat tiedot ja lue se tarvittaessa. Vaikka se ei yleensä ole kovin tehokasta, voit pysäyttää sovelluksen ladataksesi kaikki saatavilla olevat tiedot. Yleisin asia on kuitenkin lukea tiedot sen saapuessa, joko jokaisessa iteraatiossa draw, kun tietty määrä on saatavilla tai erikoiskoodi on vastaanotettu.

    Puskurissa käytettävissä olevan tiedon määrä. Käytettävissä oleva menetelmä

    Tietää, onko tietoja saapunut puskuri sarja, menetelmä available palauttaa tähän jo tallennettujen tavujen määrän puskuri. Kummassakin tapauksessa lukutoiminnot voivat palauttaa erityisen arvon (esim -1 o null), kun yrität ladata tietoja kohteesta puskuri sarja tyhjänä.

    Lataa tavu kerrallaan. Lukumenetelmä

    Luokan päämenetelmät Serial jotka palvelevat sarjaportin vastaanottamien tietojen lukemista, ovat "tyyppiä read» jotka eroavat toisistaan ​​pääasiassa sen mukaan, minkä tyyppisellä tiedolla he toimittavat vastaanottamansa tiedot.

    read käytetään toimittamaan sarjaportin vastaanottamat tavut arvona 0 - 255. Tietotyyppinä byte de Käsittely edustaa aluetta -128 ja 127 välillä eikä välillä 0 ja 255, on tarpeen käyttää int edustamaan palauttamaa aluetta read. Jos yrität lukea kanssa read ja puskuri merkkijono on tyhjä, palauttaa arvon -1

    Lue merkit sarjaportista. ReadChar-menetelmä

    Menetelmä readChar es samanlainen a read mutta se palauttaa arvon muodossa char a sijasta int. Kuten sisäisesti, char en Käsittely (At Jaava) tallennetaan kahdella tavulla. Arvo valitaan palautettavaksi, kun sitä luetaan readChar mukaan puskuri tyhjä sarja on 0xFFFF o -1.

    Lataa tekstimerkkijono. Menetelmät readString ja readStringUntil.

    Menetelmä readString palauttaa objektin String muodostetaan kaikista saatavilla olevista tiedoista puskuri sarjaa sen kuulemisen yhteydessä.

    Menetelmä readString luo tekstimerkkijonon olettaen, että sarjaportin vastaanottamat tavut ovat muodossa ASCII joten tätä lukumenetelmää ei voi käyttää muille koodauksille.

    Jos kyse on lukemisesta puskuri sarjan kanssa readString tyhjänä palautusarvo on null.

    Menetelmä readStringUntil lisätä readString kyky palauttaa laitteeseen ladatut tiedot puskuri sarja jakaa sen erikoismerkillä (koodilla), joka välitetään parametrina. Tämä tapa lukea vastaanotettua tietoa mahdollistaa sekä erottimet että terminaattorit, jotka auttavat tulkitsemaan vastaanotettua tietoa.

    Menetelmä readStringUntil tuo takaisin null kun sisällä puskuri sarja ei löydä sille välitetyssä argumentissa määritettyä koodia (yksi tavu).

    Seuraavassa koodissa Työläs lähettää kolme viestiä sarjaportin kautta. Kaksi ensimmäistä päättyvät välilehteen, joten ne näkyvät konsolissa. Käsittely, kun taas kolmatta, vaikka se lähetetään sarjaportin kautta, ei lueta kanssa readStringUntil(9) koska se ei pääty välilehteen (koodilla ASCII 9).

    Käsitellään Serial.readStringUntil lue sarjamerkkijono

    Lue tietolohkoja. ReadBytes- ja readBytesUntil-menetelmät.

    Yllä nähtyjä menetelmiä käytetään tietojen lukemiseen tietyissä muodoissa, raakatietolohkojen lukemiseen tai sellaisessa muodossa, jota ei ole määrätty Käsittely menetelmiä käytetään readBytes y readBytesUntil

    Menetelmä readBytes yritä lukea saatavilla olevat tiedot puskuri sarja. Jos menetelmälle ei välitetä parametria readBytes kaikki saatavilla oleva data luetaan ja palautetaan vektorissa (byte[]). Jos parametrina välitetään kokonaisluku, luetaan enintään tämän luvun osoittama tavumäärä ja ne palautetaan myös vektorina.

    On olemassa kolmas tapa käyttää readBytes, tehokkaampi, joka ottaa argumenttina tavuvektorin, johon sisältö on puskuri sarja. Tämä tapa käyttää readBytes palauttaa kokonaisluvun (int), joka edustaa luettujen tavujen määrää.

    Menetelmä readBytesUntil toimii samalla tavalla, mutta sisältää ensimmäisen parametrin, joka edustaa sen tavun arvoa, joka, jos se löytyy puskuri, osoittaa lukemisen päättymisen. Tässä menetelmässä parametrilla, joka määrittää luettavien tavujen enimmäismäärän, ei ole järkeä, koska määrä määräytyy erikoiskoodin avulla.

    Testaa menetelmän toimintaa readBytes Oletetaan seuraava koodi Työläs joka lähettää tekstin sarjaportin kautta.

    Seuraava esimerkkiohjelma Käsittely lukee tekstiä sarjaportista 32-tavuisina lohkoina (TOTAL_BYTES). Varmistaakseen, että se toimii, se näyttää sen konsolin kautta merkeinä ja pakottaa vastaanotettujen tavujen tyypin char.

    Seuraavassa kuvakaappauksessa näet, kuinka ne näkyvät konsolissa Käsittely tiedot, jotka on ladattu (enintään) 32 tavun lohkoissa (TOTAL_BYTES) joka kerta. Mutta on ongelma, josta on jo puhuttu: Työläs on lähettänyt säkeitä Federico Garcia Lorca esimerkistä koodattu tekstiksi muodossa UTF-8, jota ei käytetä Käsittely (Jaava), mistä pidät UTF-16 joten ne, jotka eivät vastaa sijoitusta ASCII tulostettavat tulkitaan väärin.

    Käsitellään Serial.readBytes UTF-16

    Tämän ongelman ratkaisemiseksi merkistöjä voidaan ladata (charset) ja määritä uusi objekti String pakottaa sen esittämään koodauksella UTF-8 kuten seuraavassa esimerkkikoodissa näkyy.

    Käsitellään Serial.readBytes UTF-8

    Lue viimeisimmät vastaanotetut tiedot. Viimeinen ja lastChar menetelmä.

    Kun taas muut lukutavat ("tyyppi read») he lataavat tiedot puskuri sarja samassa järjestyksessä kuin se saapui (FIFO), näillä kahdella menetelmällä viimeinen tavu, joka on saavuttanut puskuri sarja. Menetelmä last palauttaa viimeisen tavun arvon muodossa a int y lastChar palauttaa arvon muodossa a char.

    Sarjapuskurin hallinta

    Vaikka tähän mennessä nähdyt menetelmät ovat täysin toimivia, ne eivät aina edusta parasta tapaa hyödyntää pääsyä sarjaporttiin. Tietojen lataamiseksi heidän on tarkistettava ajoittain laitteen tila puskuri sarjassa ja lue koodin toistuvassa osassa saatavilla olevat tiedot. Yleisesti tehokkaampi tapa on lukea tiedot vasta, kun tiedät sen olevan saatavilla.

    Lue sarjaportti, kun tietoja vastaanotetaan. Sarjatapahtuma.

    Päästäksesi puskuri serial, kun data vastaanotetaan, Serial-tapahtumaa voidaan hyödyntää hallitsemalla sitä menetelmän määrittelyn kautta serialEvent. Tämä menetelmä käyttää argumenttina sarjaporttia, joka käynnistää sen.

    Aseta sarjapuskurin koko. Puskurimenetelmä.

    Jos tiedät hyödyllisten tietojen lohkon muodostavien tavujen määrän, voit edelleen optimoida tätä tietojen lukutyyliä. puskuri sarjan läpi serialEvent. Menetelmä buffer voit määrittää tiedostoon tallennettavien tavujen määrän puskuri ennen sarjatapahtuman käynnistämistä. Menetelmä odottaa parametrina kokonaislukua, joka edustaa tavujen määrää.

    Täytä puskuri, kunnes saat arvon. BufferUntil-menetelmä.

    Metodikutsun asettamisen sijaan serialEvent tietylle datamäärälle puskuri, menetelmällä bufferUntil voit määrittää tallentamaan tietoja, kunnes erityinen arvo saapuu, ja nostaa sitten sarjatapahtumaa. Tälle menetelmälle välitetty parametri on a int joka edustaa kutsun tuottamaa arvoa serialEvent.

    Poista puskuriin tallennetut tiedot. Selkeä menetelmä.

    menetelmän kanssa clear Voit poistaa tiedostossa tällä hetkellä olevat tiedot puskuri. Tällä menetelmällä voidaan esimerkiksi aloittaa uusi datan vastaanottoistunto jättäen huomioimatta edellisestä jäljellä olevat tiedot.

    Tyypillinen käsittelysovellus tietojen lukemiseen sarjaportin kautta

    Lopuksi on kätevää toistaa kohteen toiminnot Serial de Käsittely jotka ovat yleisemmin käytettyjä, käyvät läpi tyypillisen esimerkin datan vastaanotosta sarjaportin kautta piirtääkseen niiden kanssa kaavion, tässä tapauksessa pinotuista alueista.

    Tuo sarjakirjasto

    Määritä dataprotokolla (erottimet)

    Määritä Serial-luokan objekti

    Instantoi Serial class -objekti asettamalla käytetyn sarjaportin

    Määritä sarjaportin puskuri

    Toteuta käsittelijä sarjatapahtumalle

    Lue sarjapuskuri

    Ehdoi vastaanotetut tiedot

    Lopeta sarjaliikenne

    Alla oleva esimerkkikoodi havainnollistaa tätä yhteenvetoa toiminnallisella (vaikkakin hyvin yksinkertaisella) sovelluksella, joka luo aluekaavion sarjaportin kautta vastaanotetuista arvoista, jotain samanlaista kuin seuraavassa animaatiossa.

    grafiikka, jossa käsitellään sarjaportin kautta vastaanotettuja tietoja

    Jotta et eksy ohjelman muuhun osaan ja keskityisi sarjaviestintään Käsittely, edellisiä toimintoja vastaavat koodirivit on korostettu.

    Post Comment

    Olet ehkä missannut