Ohjelmointi

Java saa sarjatuen uudella javax.comm-paketilla

Java Communications (alias javax.comm) -sovellusliittymä on ehdotettu vakiolaajennus, jonka avulla viestintäsovellusten kirjoittajat voivat kirjoittaa Java-ohjelmistoja, jotka käyttävät tietoliikenneportteja alustasta riippumattomalla tavalla. Tätä sovellusliittymää voidaan käyttää pääteemulointiohjelmiston, faksiohjelmiston, älykortinlukijaohjelmiston ja niin edelleen kirjoittamiseen.

Hyvän ohjelmiston kehittäminen tarkoittaa yleensä joitakin selkeästi määriteltyjä rajapintoja. API-rajapintakerrosten korkean tason kaavio on esitetty tässä kuvassa.

Tässä artikkelissa näytämme sinulle, miten javax.commia käytetään kommunikoimaan RS-232-pohjaisen sarjalaitteen kanssa. Keskustelemme myös siitä, mitä javax.comm-sovellusliittymä tarjoaa ja mitä se ei tarjoa. Esittelemme pienen esimerkkiohjelman, joka näyttää, kuinka kommunikoida sarjaporttiin tämän sovellusliittymän avulla. Artikkelin lopussa kerromme lyhyesti, miten tämä javax.comm-sovellusliittymä toimii muiden laiteajurien kanssa, ja käymme läpi vaatimukset, jotka koskevat tämän sovellusliittymän natiiviportin suorittamista tietylle käyttöjärjestelmälle.

Toisin kuin klassiset ohjaimet, joissa on omat asynkronisten tapahtumien viestintämallit, javax.comm-sovellusliittymä tarjoaa tapahtumalaitteisen käyttöliittymän, joka perustuu Java-tapahtumamalliin (paketti java.awt.event). Oletetaan, että haluamme tietää, onko tulopuskurissa uutta tietoa. Voimme selvittää sen kahdella tavalla - mennessä äänestys tai kuuntelemalla. Pollausprosessori tarkistaa prosessorin säännöllisesti puskurista, onko puskurissa uutta tietoa. Kuuntelun aikana prosessori odottaa tapahtuman tapahtumista uuden datan muodossa syöttöpuskurissa. Heti kun uutta tietoa saapuu puskuriin, se lähettää ilmoituksen tai tapahtuman prosessorille.

Saatavilla olevien sarjaliitäntöjen joukossa kaksi suosituinta ovat RS-232C- ja RS-422-standardit, jotka määrittelevät sähköisen signaalin tason ja erilaisten signaalilinjojen merkityksen. Hidas nopeus sarjaliitännät yleensä kellon tiedot ulos neliön aallon, kellon koordinointi tarjoaa alku- ja pysäytysbitit.

RS-232 tarkoittaa Suosittele standardia 232; C viittaa yksinkertaisesti standardin viimeisimpään versioon. Useimpien tietokoneiden sarjaportit käyttävät RS-232C-standardin osajoukkoa. Täysi RS-232C-standardi määrittelee 25-napaisen "D" -liittimen, josta käytetään 22 nastaa. Suurinta osaa näistä nastoista ei tarvita normaaliin tietoliikenteeseen, ja todellakin useimmat uudet tietokoneet on varustettu uros-D-tyypin liittimillä, joissa on vain 9 nastaa. Lisätietoja RS-232: sta on Resurssit-osiossa.

Huomaa: Jos haluat ymmärtää, mitä muut ohjaimet ovat tehneet aiemmin, tutustu Unixiin termio manuaalinen sivu tai OpenBSD Unix, muunnelma BSD Unix -ajurilähteestä. Tämä on saatavana ilmaiseksi Internetissä. Katso lisätietoja Resurssit-osiosta.

Javax.comm-sovellusliittymä: Mitä tarjotaan

Javax.comm-sovellusliittymä tarjoaa kehittäjille seuraavat toiminnot:

  • Sarja- ja rinnakkaisliikenneporttien täydellinen API-määritys. (Tässä artikkelissa tarkastellaan vain sarjaportteja.) Ilman yhteistä sovellusliittymää kehitystyössäsi työmäärä kasvaa, koska joudut tarjoamaan tukea sarjalaitteille.

  • Kaikkien sarjakehysparametrien (baudin pysäytysbitit, pariteetti, bitit / kehys) täysi hallinta sekä virtauksen ohjauslinjojen manuaalinen tai automaattinen hallinta. Normaalisti RS-232: ssa on kaksi signaalilinjaa ja loput on tarkoitettu ohjauslinjoille. Tietoliikenteen tyypistä riippuen (synkroninen tai asynkroninen) valittujen ohjauslinjojen määrä voi vaihdella. Tämä API tarjoaa pääsyn taustalla oleviin ohjaussignaaleihin.

    Lyhyt ohjaaminen tässä voi auttaa sinua ymmärtämään jotain pariteetista sekä aloitus- ja lopetusbitistä. Pariteetti lisättiin RS-232: een, koska tiedonsiirtolinjat voivat olla meluisia. Oletetaan, että lähetämme ASCII: n 0, joka heksadesimaalina on 0x30 (tai 00110000 binaarisena), mutta matkan varrella joku kulkee pitämällä kiinni magneetista, mikä saa yhden biteistä vaihtumaan. Tämän seurauksena sen sijaan, että lähetettäisiin 8 bittiä tarkoitetulla tavalla, ensimmäiseen lähetettyyn bittijonoon lisätään lisäbitti, jolloin lähetettyjen bittien summa on parillinen tai pariton. voilà! Sinulla on pariteetti.

    Aloitus- ja lopetusbitit lisättiin sarjaliikenneprotokollaan, jotta vastaanottimet voivat synkronoida lähetettäviä merkkejä. Yhden bittinen pariteetti ei salli virheenkorjausta - vain havaitseminen. Ratkaisut tähän ongelmaan tulevat protokollista, jotka on kerrostettu sarjaliittymien päälle. Suurin osa sarjaliikenteestä käyttää nykyään estoprotokollia, joissa on tarkistussummat (matemaattinen toiminto, joka voidaan generoida vastaanottimessa ja verrata lähetettyyn tarkistussummaan), jotka mahdollistavat virheiden havaitsemisen suuremmilla bittiryhmillä. Kun olet yhteydessä Internet-palveluntarjoajaasi PPP: n kautta, paketit voivat olla 128 tavua pakettia kohden tarkistussumman kanssa. Jos ne vastaavat, olet 99,999% varma, että tiedot ovat kunnossa.

    On tapauksia, joissa tämä järjestelmä ei toimi. Esimerkiksi kun lähetät kriittisiä komentoja laitteille, jotka ovat hyvin kaukana aurinkokunnasta, eteenpäin korjaavat protokollat voidaan käyttää. Edelleen korjaavia protokollia tarvitaan, koska uudelleenlähetykselle ei ehkä ole aikaa, ja avaruudessa on paljon sähkömagneettista kohinaa.

    Okei, palaa javax.comm-sovellusliittymän tarjoamaan toimintojen luetteloon!

  • Perus-I / O Java IO -virtojen alaluokan kautta. Javax.comm-sovellusliittymä käyttää syötteitä ja lähtöjä virtauksia; virtojen käsitteen tulisi olla tuttu kaikille Java-ohjelmoijille. On tärkeää käyttää Java-käsitteitä uudelleen, kun rakennetaan uusia toimintoja, tai API: t tulevat hankaliksi.

  • Suoratoistot, joita voidaan laajentaa tarjoamaan asiakkaan virtauksen ja kynnyksen hallintaa. Voit esimerkiksi haluta hälytyksen, kun puskurissa on 10 merkkiä tai kun merkkejä varten on jäljellä vain 10 sijaintia. Virtauksen hallinta on tärkeää, kun kaksi liitännän kautta liitettyä laitetta eivät pysty pysymään toistensa kanssa. Ilman virtauksen hallintaa voit ylitykset tai underruns. Ylitystilassa sait tietoja ennen niiden käsittelyä, joten ne menetettiin. alituksessa olit valmis tietoihin, mutta niitä ei ollut saatavilla. Yleensä nämä olosuhteet tapahtuvat USART: lla (Universal Synchronous Asynchronous Receiver Transmitter), joka on laitteisto, joka muuntaa tavut sarjaaaltomuodoksi, jonka ajoitus vastaa siirtonopeutta.

    Javax.comm-sovellusliittymä käyttää Java-tapahtumamallia ilmoittamaan erilaisista signaalilinjan muutoksista sekä puskurin tilasta. Tilamuutokset viittaavat RS-232-standardissa määriteltyihin hyvin määriteltyihin signaaleihin. Esimerkiksi modeemi käyttää kantoaaltotunnistusta osoittamaan, että se on muodostanut yhteyden toiseen modeemiin, tai se on havainnut kantoaalton. Yhteyden muodostaminen tai kantoaaltosignaalin havaitseminen on tapahtuma. Tapahtumien havaitseminen ja muutosten ilmoittaminen on toteutettu tässä sovellusliittymässä.

Mitä ei toimiteta

Javax.comm-sovellusliittymä ei tarjoa:

  • Linja kurinalaisuuden käsittely, soittajan hallinta tai modeemin hallinta. Linjakuri viittaa syötettyjen tai tulostettujen merkkien lisäkäsittelyyn. Esimerkiksi yksi yleinen jälkikäsittelyvaihtoehto on CR: n muuntaminen CR LF: ksi. Nämä termit ovat peräisin teletyyppien alkuaikoista. CR (vaunun paluu) tarkoittaa vaunun yksinkertaista palauttamista vasemmalle marginaalille; arabimaailmassa tämä olisi oikea marginaali. LF (rivinsyöttö) siirtää tulostusalueen ylöspäin. Kun bittikartta-näytöt ja lasertulostimet tulivat mukaan, näistä termeistä tuli vähemmän tärkeitä.

    Soittajan hallinta ja modeemin hallinta ovat lisäsovelluksia, jotka voidaan kirjoittaa javax.comm-sovellusliittymän avulla. Soittajan hallinta tarjoaa tyypillisesti käyttöliittymän modeemin hallinnan AT-komentorajapintaan. Lähes kaikilla modeemeilla on AT-komentorajapinta. Tämä käyttöliittymä on dokumentoitu modeemikäsikirjoissa.

    Ehkä pieni esimerkki tekee tämän käsitteen selväksi. Oletetaan, että meillä on modeemi COM1: ssä ja haluamme valita puhelinnumeron. Java-soittajanhallintasovellus kysyy puhelinnumeroa ja kysyy modeemin. Näitä komentoja kantaa javax.comm, jota ei tulkita. Esimerkiksi numeron 918003210288 valitsemiseksi soittajan hallinta todennäköisesti lähettää "AT", toivoen saavansa takaisin "OK", jota seuraa ATDT918003210288. Yksi tärkeimmistä soittajanhallinnan ja modeemin hallinnan tehtävistä on käsitellä virheitä ja aikakatkaisuja.

  • GUI sarjaportin hallintaan. Normaalisti sarjaliitännöissä on valintaikkuna, joka määrittää sarjaportit, jolloin käyttäjät voivat asettaa parametreja, kuten baudinopeuden, pariteetin ja niin edelleen. Seuraava kaavio kuvaa objekteja, jotka ovat mukana tietojen lukemisessa ja / tai kirjoittamisessa Java-sarjaporttiin.

  • X-, Y- ja Z-modeemiprotokollien tuki. Nämä protokollat ​​tarjoavat tukivirheiden havaitsemisen ja korjaamisen.

Ohjelmoinnin perusteet

Liian usein ohjelmoijat sukeltavat suoraan projektiin ja koodaavat vuorovaikutteisesti näytön API: n kanssa ajattelematta ongelmaa, jota he yrittävät ratkaista. Kerää seuraavat tiedot ennen projektin aloittamista sekaannusten ja mahdollisten ongelmien välttämiseksi. Muista, että laitteiden ohjelmointi vaatii yleensä käyttöoppaan.

  1. Hanki laitteen käyttöopas ja lue kohta RS-232-liitännästä ja RS-232 -protokollasta. Useimmilla laitteilla on käytettävä protokolla. Javax.comm-sovellusliittymä kantaa tätä protokollaa ja toimittaa laitteelle. Laite purkaa protokollan, ja sinun on kiinnitettävä erityistä huomiota tietojen lähettämiseen edestakaisin. Alkuperäisen kokoonpanon virheellisyys voi tarkoittaa, että sovelluksesi ei käynnisty, joten ota aikaa testata asioita yksinkertaisella sovelluksella. Toisin sanoen, luo sovellus, joka voi yksinkertaisesti kirjoittaa tietoja sarjaporttiin ja lukea sitten tietoja sarjaportista javax.comm-sovellusliittymän avulla.

  2. Yritä hankkia joitain koodinäytteitä valmistajalta. Vaikka ne olisivat toisella kielellä, nämä esimerkit voivat olla varsin hyödyllisiä.

  3. Etsi ja koodaa pienin mahdollinen esimerkki varmistaaksesi, että pystyt kommunikoimaan laitteen kanssa. Sarjalaitteiden kohdalla tämä voi olla erittäin tuskallista - lähetät tietoja sarjaporttiin kytkettyyn laitteeseen, eikä mitään tapahdu. Tämä johtuu usein linjan virheellisestä käsittelystä. Laitteen ohjelmoinnin ykkössääntö (ellei kirjoitat laiteohjainta) on varmistaa, että pystyt kommunikoimaan laitteen kanssa. Tee tämä etsimällä yksinkertaisin asia, jonka voit tehdä laitteellasi, ja saada se toimimaan.

  4. Jos protokolla on hyvin monimutkainen, harkitse RS-232-linjaanalysaattoriohjelmiston hankkimista. Tämän ohjelmiston avulla voit tarkastella RS-232-yhteyden kahden laitteen välillä liikkuvia tietoja häiritsemättä lähetystä.

Javax.comm-sovellusliittymän käyttäminen onnistuneesti sovelluksessa vaatii jonkinlaisen käyttöliittymän laiteprotokollalle käyttämällä sarjaliittymää siirtomekanismina. Toisin sanoen, yksinkertaisimpia laitteita lukuun ottamatta, laitteen tietojen muotoilemiseksi tarvitaan yleensä toinen kerros. Tietenkin yksinkertaisin protokolla on "vanilja" - eli protokollaa ei ole. Lähetät ja vastaanotat tietoja ilman tulkintaa.

Yleiskatsaus javax.comm-ohjelman ehdotettuihin vaiheisiin

Protokollan tarjoamisen lisäksi TCP / IP: lle käytetty ISO-kerrostusmalli pätee myös siinä, että meillä on sähköinen kerros, jota seuraa hyvin yksinkertainen tavujen siirtokerros. Tämän tavun siirtokerroksen päälle voit laittaa siirtokerroksen. Esimerkiksi PPP-pino voisi käyttää javax.comm-sovellusliittymää tavujen siirtämiseen edestakaisin modeemiin. Javax.comm-kerroksen rooli on melko pieni, kun sitä tarkastellaan tässä yhteydessä:

  1. Anna javax.comm-sovellusliittymän hallinta joillekin laitteille. Ennen laitteen käyttöä javax.comm-sovellusliittymän on tiedettävä siitä.

  2. Avaa laite ja kunnosta johto. Sinulla voi olla laite, joka vaatii 115 kilobitin siirtonopeuden ilman pariteettia.

  3. Kirjoita joitain tietoja ja / tai lue tietoja minkä tahansa protokollan mukaan, jota laite kommunikoi. Jos esimerkiksi muodostat yhteyden tulostimeen, joudut ehkä lähettämään erityisen koodin tulostimen käynnistämiseksi ja / tai työn lopettamiseksi. Jotkin PostScript-tulostimet edellyttävät työn lopettamista lähettämällä CTRL-D 0x03.

  4. Sulje portti.

Alustetaan javax.comm API -rekisteri sarjaliitäntäportteilla

Javax.comm-sovellusliittymä voi hallita vain sen tuntemia portteja. API: n uusin versio ei vaadi porttien alustamista. Käynnistyksen yhteydessä javax.comm-sovellusliittymä etsii tietyn isännän portteja ja lisää ne automaattisesti.

Voit alustaa sarjaportit, joita javax.comm-sovellusliittymä voi käyttää. Laitteille, jotka eivät noudata tavanomaista nimeämiskäytäntöä, voit lisätä ne nimenomaisesti alla olevan koodisegmentin avulla.

// Rekisteröi laite CommPort ttya = new javax.comm.solaris.SolarisSerial ("ttya", "/ dev / ttya"); CommPortIdentifier.addPort (ttya, CommPortIdentifier.PORT_SERIAL); CommPort ttyb = uusi javax.comm.solaris.SolarisSerial ("ttyb", "/ dev / ttyb"); CommPortIdentifier.addPort (ttyb, CommPortIdentifier.PORT_SERIAL); 

Avaus- ja ilmastointilaitteet

Tämä seuraava koodinäyte osoittaa, kuinka laite lisätään, kunnostetaan ja avataan. Yksityiskohtaiset tiedot tietyistä menetelmäpuheluista ovat javax.comm -sovellusliittymän sivuilla. Tämä esimerkki asettaa XYZSerialDevice-nimisen laitteen käytettäväksi nimellä GenericSerialReader. Tähän linjaan liitetyn laitteen siirtonopeus on 9600, yksi pysäytysbitti, merkki 8 bittiä (kyllä, ne voivat olla pienempiä) eikä pariteettia. Kaiken tämän seurauksena on tarjota kaksi virtaa - yksi lukemista ja toinen kirjoittamista varten.

$config[zx-auto] not found$config[zx-overlay] not found