Programovanie

Java získava sériovú podporu s novým balíkom javax.comm

API Java Communications (tiež známe ako javax.comm) je navrhované štandardné rozšírenie, ktoré umožňuje autorom komunikačných aplikácií písať softvér Java, ktorý pristupuje ku komunikačným portom spôsobom nezávislým na platforme. Toto API sa môže použiť na zápis softvéru na emuláciu terminálu, faxu, softvéru na čítanie čipových kariet atď.

Vývoj dobrého softvéru zvyčajne znamená mať nejaké jasne definované rozhrania. Diagram vysokej úrovne vrstiev rozhrania API je zobrazený na tomto obrázku.

V tomto článku si ukážeme, ako používať javax.comm na komunikáciu so sériovým zariadením založeným na RS-232. Rozoberieme si tiež to, čo poskytuje rozhranie javax.comm API a čo neposkytuje. Predstavíme si malý ukážkový program, ktorý vám ukáže, ako komunikovať na sériový port pomocou tohto API. Na konci článku si v krátkosti popíšeme, ako bude toto rozhranie javax.comm API fungovať s ostatnými ovládačmi zariadení, a prejdeme si požiadavky na vykonávanie natívneho portu tohto API pre konkrétny OS.

Na rozdiel od klasických ovládačov, ktoré prichádzajú s vlastnými modelmi komunikácie asynchrónnych udalostí, poskytuje rozhranie javax.comm API rozhranie v štýle udalostí založené na modeli udalostí Java (balík java.awt.event). Povedzme, že chceme vedieť, či na vstupnej vyrovnávacej pamäti nie sú nejaké nové údaje. Môžeme to zistiť dvoma spôsobmi - a volebné urny alebo počúvanie. Pri dotazovaní procesor pravidelne kontroluje vyrovnávaciu pamäť, aby zistil, či sú vo vyrovnávacej pamäti nejaké nové údaje. Pri počúvaní procesor čaká na výskyt udalosti vo forme nových údajov vo vstupnej vyrovnávacej pamäti. Hneď ako do vyrovnávacej pamäte dorazia nové údaje, odošlú procesor alebo procesor oznámenie alebo udalosť.

Medzi rôznymi dostupnými sériovými rozhraniami sú dva z najpopulárnejších štandardov RS-232C a RS-422, ktoré definujú úrovne elektrického signálu a význam rôznych signálnych vedení. Nízkorychlostné sériové rozhrania typicky taktujú dáta ako štvorcové vlny, s koordináciou hodín pomocou štartovacích a stop bitov.

RS-232 znamená Odporučte štandard 232; the C. jednoducho odkazuje na najnovšiu revíziu normy. Sériové porty na väčšine počítačov využívajú podmnožinu štandardu RS-232C. Celý štandard RS-232C špecifikuje 25-pólový konektor „D“, z ktorého je použitých 22 pinov. Väčšina z týchto pinov nie je potrebná pre normálnu komunikáciu s počítačom a väčšina nových počítačov je skutočne vybavená konektormi typu D, ktoré majú iba 9 pinov. Viac informácií o RS-232 nájdete v časti Zdroje.

Poznámka: Pre pochopenie toho, čo v minulosti robili iné ovládače, sa pozrite na Unix termio manuálna stránka alebo OpenBSD Unix, variácia zdroja ovládača BSD Unix. Je k dispozícii zadarmo na internete. Ďalšie informácie nájdete v časti Zdroje.

Rozhranie javax.comm API: Čo je poskytované

Rozhranie javax.comm API poskytuje vývojárom nasledujúce funkcie:

  • Kompletná špecifikácia API pre sériové a paralelné komunikačné porty. (V tomto článku uvažujeme iba o sériových portoch.) Bez spoločného API vo vašom vývojovom úsilí sa pracovné zaťaženie zvýši, pretože budete musieť poskytnúť podporu sériovým zariadeniam.

  • Plná kontrola nad všetkými parametrami sériového rámovania (baud stop bity, parita, bity / rámec), ako aj manuálne alebo automatické riadenie riadiacich tokov. Normálne sú v RS-232 dve signálne linky a zvyšok je určený pre riadiace linky. V závislosti od typu komunikácie (synchrónnej alebo asynchrónnej) sa môže počet zvolených riadiacich liniek líšiť. Toto API poskytuje prístup k základným riadiacim signálom.

    Krátke odbočenie tu vám môže pomôcť pochopiť niečo o parite a bitoch štart a stop. Parita bola pridaná k RS-232, pretože komunikačné linky môžu byť hlučné. Povedzme, že pošleme ASCII 0, čo sa v šestnástke rovná 0x30 (alebo 00110000 v binárnom formáte), ale niekto cestou prejde podržaním magnetu, čo spôsobí zmenu jedného z bitov. Výsledkom je, že namiesto odoslania 8 bitov podľa určenia sa k prvému reťazcu odoslaných bitov pridá ďalší bit, čím sa celkový súčet odoslaných bitov stane párnym alebo nepárnym. voilà! Máte paritu.

    Do sériového komunikačného protokolu boli pridané počiatočné a koncové bity, aby sa umožnilo synchronizáciu prijímačov s odosielanými znakmi. Jednobitová parita neumožňuje korekciu chýb - iba detekciu. Riešenia tohto problému pochádzajú z protokolov, ktoré sú vrstvené nad sériovými API. Väčšina sériovej komunikácie v dnešnej dobe používa blokové protokoly s kontrolnými súčtami (matematická funkcia, ktorá sa dá vygenerovať na prijímači a porovnať s preneseným kontrolným súčtom), ktoré umožňujú detegovať chyby na väčších skupinách bitov. Keď komunikujete so svojím ISP cez PPP, pakety môžu byť s kontrolným súčtom 128 bajtov na paket. Ak sa zhodujú, ste si na 99,999% istí, že údaje sú v poriadku.

    Existujú prípady, kedy táto schéma nefunguje. Napríklad pri odosielaní kritických príkazov do zariadení, ktoré sú veľmi ďaleko v slnečnej sústave, protokoly o korekcii vpred môže byť použité. Potrebné sú protokoly prednej korekcie, pretože na retransmisiu nemusí byť čas a priestor obsahuje veľa elektromagnetického šumu.

    Dobre, späť na zoznam funkcií, ktoré poskytuje API javax.comm!

  • Základné I / O prostredníctvom podtriedy tokov Java IO. Na vstup a výstup používa rozhranie API javax.comm prúdy; koncept streamov by mali poznať všetci programátori v Jave. Pri vytváraní nových funkcií je dôležité znova používať koncepty Java, inak sa API nestanú ťažkými.

  • Streamy, ktoré je možné rozšíriť, aby poskytovali riadenie toku a prahové hodnoty klienta. Môžete napríklad chcieť upozornenie, keď je vo vyrovnávacej pamäti 10 znakov alebo keď znakom zostáva iba 10 pozícií. Regulácia prietoku je dôležitá, keď dve zariadenia pripojené prostredníctvom rozhrania nemôžu navzájom držať krok. Bez riadenia prietoku môžete mať prekročenie alebo podbehy. V stave prekročenia ste prijali údaje skôr, ako boli spracované, takže sa stratili; v podbehu ste boli pripravení na údaje, ale neboli k dispozícii. Zvyčajne sa tieto podmienky vyskytujú na USART (Universal Synchronous Asynchronous Receiver Transmitter), čo je hardvér, ktorý prevádza bajty na formu sériovej vlny s načasovaním tak, aby zodpovedala prenosovej rýchlosti.

    Rozhranie javax.comm API používa model udalostí Java na poskytovanie upozornení na rôzne zmeny signálneho vedenia, ako aj na stav vyrovnávacej pamäte. Zmeny stavu sa týkajú presne definovaných signálov špecifikovaných v štandarde RS-232. Napríklad detekcia nosiča je používaná modemom na signalizáciu nadviazania spojenia s iným modemom alebo detekovania nosného tónu. Nadviazanie spojenia alebo zistenie nosného tónu je udalosť. Detekcia udalostí a oznamovanie zmien je implementovaná v tomto API.

Čo nie je poskytnuté

Rozhranie javax.comm API neposkytuje:

  • Spracovanie typu linkovej disciplíny, správa dialeru alebo správa modemu. Linková disciplína označuje ďalšie spracovanie vstupných alebo výstupných znakov. Napríklad jednou spoločnou možnosťou následného spracovania je konverzia CR na CR LF. Tieto pojmy majú svoj pôvod v počiatkoch teletypov. CR (návrat vozíka) znamená jednoduché vrátenie vozíka na ľavý okraj; v arabskom svete by to bola správna rezerva. LF (line feed) posúva oblasť tlače o jednu nahor. Keď prišli bitmapové obrazovky a laserové tlačiarne, tieto pojmy sa stali menej dôležitými.

    Správa číselníka a správa modemu sú ďalšie aplikácie, ktoré je možné zapísať pomocou rozhrania API javax.comm. Správa číselníkov zvyčajne poskytuje rozhranie s príkazovým rozhraním AT správy modemu. Takmer všetky modemy majú príkazové rozhranie AT. Toto rozhranie je zdokumentované v príručkách k modemu.

    Možno tento príklad objasní malý príklad. Predpokladajme, že máme modem na COM1 a chceme vytočiť telefónne číslo. Aplikácia pre správu Java dialer požiada o telefónne číslo a interoguje modem. Tieto príkazy vykonáva server javax.comm, ktorý nevykonáva žiadnu interpretáciu. Napríklad na vytočenie čísla 918003210288 správa dialeru pravdepodobne pošle „AT“, v nádeji, že získa späť „OK“, za ktorým nasleduje ATDT918003210288. Jednou z najdôležitejších úloh správy číselníkov a správy modemov je riešenie chýb a časových limitov.

  • GUI pre správu sériového portu. Sériové porty majú zvyčajne dialógové okno, ktoré konfiguruje sériové porty a umožňuje používateľom nastavovať parametre, ako je prenosová rýchlosť, parita atď. Nasledujúca schéma zobrazuje objekty zapojené do čítania a / alebo zápisu údajov na sériový port z Javy.

  • Podpora protokolov X, Y a Z modemu. Tieto protokoly poskytujú podporu pri detekcii a korekcii chýb.

Základy programovania

Programátori sa príliš často vrhajú priamo do projektu a interaktívne kódujú pomocou API na obrazovke bez toho, aby uvažovali o probléme, ktorý sa snažia vyriešiť. Aby ste predišli nedorozumeniam a potenciálnym problémom, zhromaždte pred začatím projektu nasledujúce informácie. Pamätajte, že programovanie zariadení zvyčajne vyžaduje konzultáciu s manuálom.

  1. Získajte príručku k zariadeniu a prečítajte si časť venovanú rozhraniu RS-232 a protokolu RS-232. Väčšina zariadení má protokol, ktorý je potrebné dodržiavať. Tento protokol bude prenášaný rozhraním javax.comm API a doručený do zariadenia. Zariadenie dekóduje protokol a budete musieť venovať zvýšenú pozornosť odosielaniu údajov tam a späť. Ak nebudete mať počiatočné nastavenie správne, môže to znamenať, že sa vaša aplikácia nespustí, takže si nájdite čas a vyskúšajte veci pomocou jednoduchej aplikácie. Inými slovami, vytvorte aplikáciu, ktorá môže jednoducho zapisovať údaje na sériový port a potom načítať údaje zo sériového portu pomocou rozhrania API javax.comm.

  2. Pokúste sa získať nejaké ukážky kódu od výrobcu. Aj keď sú v inom jazyku, tieto príklady môžu byť veľmi užitočné.

  3. Nájdite a kódujte najmenší príklad, ktorý môžete overiť, že môžete komunikovať so zariadením. V prípade sériových zariadení to môže byť veľmi bolestivé - dáta odosielate do zariadenia pripojeného k sériovému portu a nič sa nedeje. Často je to dôsledok nesprávneho kondicionovania linky. Pravidlom číslo jedna v programovaní zariadenia (pokiaľ nepíšete ovládač zariadenia) je zabezpečiť komunikáciu so zariadením. Urobte to tak, že nájdete to najjednoduchšie, čo môžete so svojím zariadením robiť, a uvediete to do práce.

  4. Ak je protokol veľmi komplikovaný, zvážte zaobstaranie softvéru pre linkový analyzátor RS-232. Tento softvér vám umožňuje sledovať údaje pohybujúce sa medzi dvoma zariadeniami na rozhraní RS-232 bez toho, aby došlo k narušeniu prenosu.

Úspešné použitie API javax.comm v aplikácii vyžaduje, aby ste poskytli určitý typ rozhrania protokolu zariadenia pomocou sériového API ako transportného mechanizmu. Inými slovami, s výnimkou najjednoduchších zariadení zvyčajne existuje iná vrstva potrebná na formátovanie údajov pre zariadenie. Najjednoduchší protokol je samozrejme „vanilkový“ - to znamená, že neexistuje žiadny protokol. Odosielate a prijímate údaje bez výkladu.

Prehľad navrhovaných krokov na používanie javax.comm

Okrem poskytnutia protokolu tu platí aj ISO vrstvový model používaný pre TCP / IP v tom, že máme elektrickú vrstvu, po ktorej nasleduje veľmi jednoduchá vrstva na prenos bajtov. Na túto vrstvu prenosu bajtov môžete umiestniť svoju vrstvu prenosu. Napríklad váš zásobník PPP môže používať API javax.comm na prenos bajtov tam a späť do modemu. Úloha vrstvy javax.comm je v tomto kontexte pomerne malá:

  1. Poskytnite rozhraniu javax.comm API niektoré zo zariadení. Pred použitím zariadenia musí o tom vedieť rozhranie javax.comm API.

  2. Otvorte zariadenie a upravte vedenie. Môžete mať zariadenie, ktoré vyžaduje prenosovú rýchlosť 115 kilobitov bez parity.

  3. Napíšte nejaké údaje alebo prečítajte údaje podľa protokolu, ktorý vyžaduje zariadenie, s ktorým komunikujete. Napríklad ak sa pripájate k tlačiarni, možno budete musieť poslať špeciálny kód na spustenie tlačiarne alebo ukončenie úlohy. Niektoré tlačiarne PostScript vyžadujú, aby ste úlohu ukončili odoslaním CTRL-D 0x03.

  4. Zatvorte port.

Inicializuje sa register API javax.comm so sériovými portami rozhrania

Rozhranie javax.comm API môže spravovať iba porty, o ktorých vie. Najnovšia verzia API nevyžaduje inicializáciu žiadnych portov. Pri spustení rozhranie API rozhrania javax.comm vyhľadá porty na konkrétnom hostiteľovi a automaticky ich pridá.

Môžete inicializovať sériové porty, ktoré môže vaše rozhranie API javax.comm používať. Pre zariadenia, ktoré nedodržiavajú štandardnú konvenciu pomenovania, ich môžete pridať výslovne pomocou segmentu kódu uvedeného nižšie.

// Zaregistrujte zariadenie CommPort ttya = new javax.comm.solaris.SolarisSerial ("ttya", "/ dev / ttya"); CommPortIdentifier.addPort (ttya, CommPortIdentifier.PORT_SERIAL); CommPort ttyb = nový javax.comm.solaris.SolarisSerial ("ttyb", "/ dev / ttyb"); CommPortIdentifier.addPort (ttyb, CommPortIdentifier.PORT_SERIAL); 

Otváracie a klimatizačné zariadenia

Táto ďalšia ukážka kódu ukazuje, ako pridať, upraviť a otvoriť zariadenie. Podrobnosti o konkrétnych volaniach metód sú na stránkach API pre javax.comm. V tomto príklade je zariadenie s názvom XYZSerialDevice prístupné pomocou názvu GenericSerialReader. Zariadenie pripojené na tejto linke má prenosovú rýchlosť 9600, 1 stop bit, znak 8 bitov (áno, môžu byť menšie) a žiadnu paritu. Výsledkom tohto všetkého je poskytnúť dva prúdy - jeden na čítanie a druhý na zápis.

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