Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates), hvor bagagen til givne flyafgange samles og lastes på fly. Skranker, sortering og terminaler er forbundne med conveyor-bånd, og en række stregkodelæsere langs linjen følger bagageenhedernes vej gennem systemet. Derudover indeholder systemet en database med passagerlister og flyveplaner. Det hele overvåges af en central server, der modtager data fra systemets enheder og tilbyder en række services til de samme enheder. Til højre ses en skitse af systemet. Skranke #1 Central Server Reservationer Flyveplaner m.v. Terminal #1 I skal realisere en server, der kan varetage ovennævnte opgaver. Indtil videre er der specificeret en række metoder, som er nødvendige for at opretholde den overordnede styring, og som kan indsamle de oplysninger, der registreres undervejs i systemet. Der mangler dog en specifikation af alle de metoder, som er nødvendige for at enhver klient kan overvåge systemet. Dernæst skal I realisere overvågningsdelen på skrankeklienten og på terminal-klienten samt en klient til vedligeholdelse af stamdata. Skranke #2 Skranke #n Sortering Terminal #2 Terminal #m Der stilles følgende krav til server og klienter: Server-siden Den centrale server modtager data fra Reservationssystem 1. Passagernummer (Entydig streng bestående af 5 tegn) 2. Navn 3. Flyafgang Flyveplan 1. Flyafgang 2. Terminal (Nummereret fra 1, 2,..) Skranker (Check-in) 1. Passagernummer 2. Bagagenummer (Entydig streng bestående af 9 tegn) 3. Tidsstempel Sortering 1. Bagagenummer 2. Tidsstempel (ind) 3. Tidsstempel (ud/sorteret) Terminaler (Gates) 1. Bagagenummer 2. Tidsstempel Dernæst forsyner den skranke, sortering og terminaler samt reservationssystemet med de nødvendige oplysninger 26-10-04, Bjørk og Otto side 1
Klient-siden (overvågningsdelen brugergrænseflade til klienterne)) Skranke-klient Oversigt over aktive flyafgange Input: Ingen Output: Liste over aktive flight-numre med tilhørende terminalnumre (gates) Terminal-klient Oversigt over manglende passagerer på aktive flyafgange, som har reserveret plads, men endnu ikke har foretaget check-in Input: Terminal-nummer (gate) Output: Liste med passagernumre og navne Oversigt over manglende bagageenheder, dvs. enheder, som er checket ind, men endnu ikke nået frem til terminalen. Input: Terminal-nummer (gate) Output: Liste over manglende bagageenheder: For hver enhed skal der være flg. oplysninger: Bagagenummer, navn, aktuelt bånd, tidsstempel (check ind) samt tidsstempel for aktuelt bånd Fragtliste ved nedlukning. Input: Terminal-nummer (gate) Output: Liste over bagage som skal fragtes til fly. For hver bagageenhed skal der være flg. oplysninger: Bagagenummer og navn Klient til vedligehold af stamdata Oprettelse, sletning og redigering af Passagerliste og flyafgange. En flyafgang er aktiv, når der er tilknyttet et terminalnummer (gate). Styringsklient (simuleret) - er programmeret Se StyringsInterface Realiseringen Serveren skal realiseres som en RMI-server, som klienterne kan koble sig op i mod. De nødvendige class-filer til at simulere styringen er placeret i pakken vpr3. Her findes et StyringsInterface, hvor de metoder, der er nødvendige for at systemet kan styres, er specificeret. De metoder, I selv efterfølgende specificerer, placeres i et interface, der arver fra StyringsInterface, se følgende kode: package vpr3; import java.rmi.*; interface ServerInterface extends StyringsInterface { // Her angives de metoder, som de øvrige klienter skal anvende 26-10-04, Bjørk og Otto side 2
Opstart af simuleringen Når serveren er realiseret, startes simuleringen ved: Registrering og instantiering af serveren Instantiering af et Projekt-objekt med angivelse af følgende argumenter: Navn på host Portnummer Symbolsk navn på serveren Antal af skranker Antal af terminaler Koden kunne fx have følgende udseende: import java.rmi.*; import java.rmi.registry.*; class Test { public static void main(string args[]) { String host = "nrhxxxxyy.tietgen.dk"; int port = 1099; String servername = "Projekt"; int antalskranker = 2; int antalterminaler = 3; try { // Registrering, instantiering og opstart af server catch (Exception e) { System.out.println(e); System.exit(1); // Opstart af styringsklient vpr3.projekt p = new vpr3.projekt(host, port, servername, antalskranker, antalterminaler); Java-dokumentationen på de to ovennævnte klasser er vedlagt som bilag. Eksempeldata Der er tilgængelige eksempeldata i databasen Projekt.mdb. Her findes to tabeller med henholdsvis passageroplysninger og aktive flyafgange. God fornøjelse Bjørk og Otto 26-10-04, Bjørk og Otto side 3
vpr3 Class Projekt java.lang.object +--vpr3.projekt public class Projekt extends java.lang.object For at starte simuleringen/styringen skabes et objekt af klassen Projekt med de angivne parametre. Herefter vil applikationen på baggrund af de oplysninger, der hentes fra serveren, generere test-data fra skranker, sortering og terminaler Constructor Summary Projekt(java.lang.String host, int port, java.lang.string servername, int antalskranker, int antalterminaler) Methods inherited from class java.lang.object clone, equals, finalize, getclass, hashcode, notify, notifyall, tostring, wait, wait, wait Constructor Detail Projekt public Projekt(java.lang.String host, int port, java.lang.string servername, int antalskranker, int antalterminaler) host - streng. Navnet på host'en port - heltal. Port-nummeret servername - streng. Symbolsk navn på serveren antalskranker - heltal. Antal skranker, som applikationen skal simulere antalterminaler - heltal. Antal terminaler, som applikationen skal simulere 26-10-04, Bjørk og Otto side 4
vpr3 Interface StyringsInterface public abstract interface StyringsInterface extends java.rmi.remote Styringsinterfacet angiver de metoder, der er nødvendige for at styringen/simulationen af systemet kan foregå Method Summary boolean checkreservation(java.lang.string pnr, int id, java.util.date d) Ved henvendelse ved skranken undersøges, om passageren er opført på listen, dvs. at der til et passagernummer er knyttet en aktiv flyafgang. java.lang.string[] getpnr() Metoden getpnr anvendes til at få overblik over de passagerer til aktive flyafgange, der endnu ikke er checket ind int getterminal(java.lang.string bagageid) For at gennemføre sorteringen af bagagen, skal systemet kunne angive til hvilken terminal en given bagageenhed skal sendes. void nybagage(java.lang.string pnr, java.lang.string bagageid, java.util.date d) Når en passager afleverer sin bagage ved skranken, registreres disse enheder én efter én med entydigt bagage-id og sammenhørende passagernummer. void settid(java.lang.string msg, java.lang.string bagageid, java.util.date d) Hver gang en bagageenhed passerer en læser på sin vej fra skranke til terminal registreres sammenhørende værdier af læseren og bagageenhedens id Method Detail checkreservation public boolean checkreservation(java.lang.string pnr, int id, java.util.date d) Ved henvendelse ved skranken undersøges, om passageren er opført på listen, dvs. at der til et passagernummer er knyttet en aktiv flyafgang. Metoden checkreservation checker passageren med det angivne nummer ind, hvis denne er opført på passagerlisten. Ved vellykket check-in returneres true, ellers false pnr - passagernummer. Entydig streng bestående af 5 tegn id - skranke-id. Heltal, skrankerne nummereres 1, 2,.. d - tidsstempel. Tidspunkt for check-in Returns: returnerer true, hvis passageren er blevet checket ind getpnr public java.lang.string[] getpnr() Metoden getpnr anvendes til at få overblik over de passagerer til aktive flyafgange, der endnu ikke er checket ind Returns: liste over numre på samtlige passagerer, der endnu ikke er checket ind. Et passagernummer er en unik streng bestående af 5 tegn 26-10-04, Bjørk og Otto side 5
getterminal public int getterminal(java.lang.string bagageid) For at gennemføre sorteringen af bagagen, skal systemet kunne angive til hvilken terminal en given bagageenhed skal sendes. Metoden getterminal returner et terminalnummer givet et bagage-id bagageid - entydig streng bestående af 9 tegn Returns: returnerer et heltal. Terminalerne er nummereret 1, 2,.. nybagage public void nybagage(java.lang.string pnr, java.lang.string bagageid, java.util.date d) Når en passager afleverer sin bagage ved skranken, registreres disse enheder én efter én med entydigt bagageid og sammenhørende passagernummer. Metoden nybagage kaldes for hver bagageenhed, når passageren med pnr checker ind pnr - passager-nr. Entydig streng bestående af 5 tegn bagageid - entydig streng bestående af 9 tegn d - tidsstempel. Tidspunkt for check-in settid public void settid(java.lang.string msg, java.lang.string bagageid, java.util.date d) Hver gang en bagageenhed passerer en læser på sin vej fra skranke til terminal registreres sammenhørende værdier af læseren og bagageenhedens id msg - streng, der angiver læserens placering. fx "Sortering ud" eller "Terminal2 ind" bagageid - entydig streng bestående af 9 tegn d - tidsstempel. Tidspunkt for registrering 26-10-04, Bjørk og Otto side 6