Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultät Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
AKBP 2
 
 Vorträge
 
 PCMCIA
 Trixbus
 NE2000
 USB-Stack
 Windowmanager
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2003/04  >  AKBP 2  >  Projekte  >  Trixbus

RS232 und Trixbus

Igel Matthias,
Ellner Ralf
Unbenanntes Dokument

JX-Treiber für serielle Schnittstelle, Eisenbahnsteuerung
Bearbeiter: Matthias Igel, Ralf Ellner

1. Aufgabe
Ziel war es, einen Treiber für die serielle Schnittstelle für JX zu programmieren. Darauf aufbauend sollte eine Modelleisenbahn über ein Selectrix ® Interface gesteuert werden. Als Sonderaufgabe sollte ausserdem ein neu entwickelter Besetztmelder für das Selectrix System auf korrekte Funktionalität hin überprüft werden. Ebenso sollten die Daten eines GPS-Empfängers über die serielle Schnittstelle empfangen und ausgewertet werden.

2. Implementierung des Treibers
Grundidee der ersten Version war es, dass die Daten aus dem Sende- und Empfangspuffer (FIFO) von Interrupthandler entnommen bzw. geschrieben werden und anschliessend evtl. gesetzte Blockierungen des Schreibers bzw. Lesers aufgehoben werden. Die Blockierung tritt beispielsweise dann auf wenn der Sendepuffer voll ist und versucht wird, weitere Daten in den Puffer zu schreiben. Beim Empfangspuffer werden die empfangenen Daten bei einem Pufferüberlauf verworfen. Die Interrupts werden bei einem leeren Senderegister bzw. vollem Empfangsregister ausgelöst. Dafür ist es notwendig bei einem leeren Sende-register und -puffer das Byte direkt in das Senderegister zu schreiben, um das oben beschriebene Verhalten auzustossen.
In der ersten Version waren die Registerwerte, wie z.B. Baudrate, noch fest im Quelltext. In der aktuellen Version lassen sich alle Registerwerte bequem über Funktionen stezten bzw. lesen. In der aktuellen Version wird der Interruptbetrieb durch Polling erstetzt. Dies hat folgende Ursachen:
- Probleme mit den Puffern (Interrupt zwischen Abfrage der Blockierungsbedingung und waitForSignal() führte zu Datenverlust)
- Interrupts können bei hohen Baudraten verloren gehen
- Probleme mit dem Monitor
Beim Pollingbetrieb ist es auch möglich einen Timeout für das Lesen bzw. Schreiben einzubauen, was in der jetztigen Implementierung geschehen ist.

3. Implementierung der Eisenbahnsteuerung
Zunächst war eine graphische Oberfläche mit AWT nach dem vorgesehen. Das Programm war bereits unter Windows lauffähig, allerdings gab es unter JX erhebliche Probleme mit dem Windowmanager, so dass wir zu einer textbasierten Steuerung übergingen.Hier kann der Benutzer über eine Konsole mit einer fest vorgegebenen Menge von Befehlen bequem die Steuerung der Züge, aber auch von Weichen, sowie die Abfrage von Besetzmeldern vornehmen.Als Erweierung war eine Wegdurchschaltung und eine Kollisionsüberwachung angedacht, deren Realisierung aus Zeitmangel leider nicht mehr erfolgte. (vielleicht im nächsten AKBP?)

4. Dateien
Interface der seriellen Schnittstelle: libs/serial_if/*
Implementierung der seriellen Schnittstelle: libs/serial_hw/*
Implementierung der Eisenbahnsteuerung: libs/railway/*
Graphische Oberfläche: libs/railway/akbp2/railway/graphic/*
GPS Empfänger: libs/gps/*

5. Probleme/Bugs/Flaws
FIFO Puffer der seriellen Schnittstelle konnte zwar aktiviert werden, aber Interrupts blieben aus. GPS Empfänger sendete keine Daten (Wurde auch mit anderen Betriebssystemen getestet). Vermutlich war der verwendete Adapter ungeeignet. Der zu testende Besetztmelder lieferte meist falsche Adressdaten des Zuges. Ausserdem waren die Daten für Ein- oder Ausfahrt eines Zuges fehlerhaft.

  Impressum   Datenschutz Stand: 2004-03-24 10:43   Wa