vi er her !!!

02120

DifferentielGPS
home

Serielle enheder

For at finde ud af hvilke porte, der er tilsluttes computeren, skal man bruge CommPortIdentifiers statiske metode getPortIdentifiers, som returnerer en Enumeration med portene. Denne indeholder portene repræsenteret i en CommPortIdentifier. Man skal sørge for at undersøge porttypen er serielport, da printerporte også er med i listen. Det er Server klassen, der sørger for at hente portene. Ud fra dem laves en SerialSettings, som indsættes i en SerialSettingsGUI.
Selve modtagelsen af data, som udsendes via serielporte (RS232 interfacet) sker med følgende klasser:

SerielDevice.java

Denne klasse kan modtage data serielle enheder, som sender signalet i rå RTCM kodning. Vi har erfaret, at nogle serielle enheder koder signalet på anden vis. Disse understøttes ikke af vores program. Klassen implementerer InputDevice interfacet. Vi har modelleret vores enhed over Suns SimpleRead eksempel.
Da nogle serielle enheder kan tænkes at kræve initialitionskommandoer og kommandoer til at stoppe igen, har vi indbygget en mulighed for at specificerer en sådanne kommandoer som tekst. Hvis disse tekstrenge er tomme sendes der ikke noget. Hvis de ikke er, sendes initialitionskommandoen når porten er åbnet og stopkommandoen når enheden bliver stoppet. I tilfælde af, at programmet lukkes hårdt ned med Kontrol-C eller går ned, vil stopkommandoerne ikke blive sendt.
Når en event modtages undersøges det, om det er en "ny data" event. I så fald læses dataen med readLoop fra InputDevice.

SerielSettings.java

Denne klasse opbevarer indstillinger til en SerielDevice. Da porten skal gemmes, skal der bruges en SerielSettings per port der er tilsluttet computeren. Følgende instillinger gemmes:

  • deviceId - (String) det brugervalgte enhedsnavn
  • BAUD - (int) port indstilling: positivt heltal, som angiver portens hastighed. Er som standard sat til 9600
  • Databits - (int) port indstilling: antal bits indeholdende data
  • Stopbits - (int) port indstilling
  • Parity - (int) port indstilling: hvilken paritetsmetode, der bruges
  • portId - CommPortIdentifier ud fra hvilken porten åbnes
  • brug enhed - (booleam) boolesk værdi, som afgør om enheden skal bruges.
  • startText - (String) eventuelt indledende opstartskommandoer, som skal sendes for at starte enheden
  • stopText - (String) eventuelt indledende kommandoer, som skal sendes når enheden skal stoppes

Portindstillingerne kan antage førlgende værdier, hvor standardværdierne er markeret med stjerne:

Databits Databits_5 Databits_6 Databits_7 Databits_8 *  
Stopbits Stopbits_1 Stopbits_1.5 * Stopbits_2    
Parity Parity_None * Parity_Odd Parity_Even Parity_Mark Parity_Space

Alle indstillinger er offentligt tilgængelige. Der er ligesom med GPSNetSetting metoder til at gemme og hente indstillinger. Hvis der mangler indstillinger vil standardindstillingerne blive brugt. Disse er valgt så de passer til DTUs Trimble GPS modtager.

SerielSettingsGUI

Dette er en GUI til at ændre indstillingerne for de serielle enheder. Den består af en række editeringsfelter med tilhørende labels svarende til indstillingerne i SerielSettings samt en Ok- og Annullerknap.
Da valget af indstillinger for Databits, Stopbits og Parity er begrænset er alle mulighederne læst ind i ComboBoxe. Dette gør det besværligt, at gemme indstillingerne, da man skal konverterer det valgte indeks i ComboBoxen til en konstant fra SerielPort. Dette gøres med en række casesætninger. Trykkes Ok gemmes indstillingerne med metoden updateParameters og trykkes Annuller genoprettes de tidligere valg med metoden cancelParameters. Det er en tilfældighed, at vi har valgt at kalde indstillingerne for parametre her og ikke settings, som i GPSNetSettingsGUI.

Der er en dialog til at ændre opstarts og slut kommandoer. På dialogen er to editeringsfelter til opstarts og slut kommandoerne samt en Ok- og Annullerknap.

InvalidValueException.java

I tilfælde af, at brugeren har indtastet en ugyldig talværdi i BAUD feltet, kaster updateParameters denne exception med en beskrivelse af fejlen. Denne beskrivelse vises til brugeren i et popup vindue, og indstillingsdialogen lukkes ikke.

PortScanner.java

Denne klasse skanner en enkel port for aktivitet. Den kunne lige så godt være en del af SerialDevice, men det er den ikke blevet. Dette kan ændres til næste version af programmet.
Der kræves en SerialSetting, som argument i constructoren. Skanningen begynder lige så snart klassen instantieres. Porten åbnes ligesom i SerialDevice. En tråd sættes til at vente i 5000 millisekunder herefter. Når den er kan Server'en, som starter skanningen se, at den er færdig med isFinished metoden. Server'en kører en while løkke mens den venter på, at skanningen bliver færdig. For hver itteration bliver det undersøgt, om alle skanninger er færdige.
Det kunne med fordel være Server'en, som har den ventende tråd, da while løkken kører mange gange uden egentligt at lave noget. Men da vi modellerede PortScanner efter SimpleRead og oprindeligt troede, at det var nødvendigt, at PortScanneren'en havde sin egen tråd, har vi ikke gjort det på denne bedre måde.
I stedet for at køre læseløkken, når der modtages en "Data available" event, ændres den booleske variabel activity til sand. Resultatet kan ses med metoden isActive.


home