PDV
und Robotik / Lehre
/ PMfE im SS
2007 / Aufgabe 3
Aufgabe 3 - Steuerprogramm
Lernziel:
Fehlertolerante Steuerung,
Zeitüberwachung,
Zugbetrieb mit zwei Loks
Unterlagen:
Beschreibung der Ada-Umgebung
Ada Language Reference Manual
Beschreibung der Modelleisenbahn und Ansteuerung
in Aufgabe 2 entwickelte Steuerstrategie
Aufgabenstellung
Es soll ein Steuerungssystem für zwei Lokomotiven auf
unserer Teststrecke entwickelt werden, das einen automatischen
und störungsfreien Zugverkehr anhand eines Fahrplans erlaubt,
ohne dass ein Eingreifen durch eine Person zur Steuerung notwendig
ist. Es darf auch im Störungsfall, z.B. bei falsch gestellten
oder gestörten Weichen, Fehlkontakten oder Verspätungen
der Loks nicht zu einem Zusammenstoß kommen. Sollte die
Steuerung in einen Zustand kommen, bei dem der sichere Fahrbetrieb
nicht mehr gewährleistet ist, muss der Betrieb eingestellt
werden. Es sind in diesem Falle Ausgaben vorzusehen, warum der
Betrieb eingestellt werden musste.
Fahrplan und Startpositionen der zwei Loks wurden bereits in
Aufgabe 1 vorgegeben. Entwickeln Sie
nun ein Programm, dass die Loks entsprechend steuert, und realisieren
Sie dabei Ihre in Aufgabe 2 am Modell
entwickelte Steuerstrategie.
Hinweise zur Aufgabe
- Die Kreuzweiche kann zu Beginn
des Fahrbetriebs einmal in die richtige Stellung - Kreuzung -
gebracht und anschließend nicht mehr verstellt werden.
- Lassen Sie die beiden Loks in
verschiedenen, konstanten sinnvollen Geschwindigkeitsstufen fahren.
- Implementieren Sie die Fahrpläne
und Gleisstrecke möglichst in übersichtlichen Datenstrukturen,
so dass das eigentliche Programm nur relativ unkompliziert und
allgemein gehalten ist. Vermeiden Sie damit, viele Sonderfälle
in Programmcode auszuprogrammieren.
- Das Betriebssystem der Echtzeitrechner
führt einen präemptiven Prozesswechsel nur alle ca
2 Sekunden durch. Um die zwei Loksteuerungen als eigenständige
Prozesse zu realisieren (schöne Lösung), achten Sie
daher darauf, Prozesswechsel explizit durch Einfügen des
Befehls delay 0.0; zu gestatten.
- Die Nummern der Loks sollten von
Hand zu Programmbeginn eingebbar sein.
- Erkannte ausgebliebene oder fehlerhaft
auftretende Kontakte werden auf dem Bildschirm ausgegeben. Prellende
Kontakte werden vom Programm erkannt und ignoriert.
- Treten zwei Fehler nacheinander
auf, ohne dass dazwischen wieder ein korrekter Zustand erkannt
wurde, soll das Programm abbrechen und eine entsprechende Fehlermeldung
ausgeben.
- Implementieren Sie auf jeden Fall
eine Zeitüberwachung für die erwarteten Kontakte. Sonst
ist es unmöglich, ausgebliebene Kontakte zu erkennen und
entsprechend zu reagieren. Eine mögliche elegante Lösung
ist dafür, für jede Lok die letzte Fahrtzeit jedes
Streckenabschnittes zu speichern. Für die Anfangsinitialisierung
können z.B. Messwerte aus Aufgabe 1 verwendet werden. Fährt
nun eine Lok in einen Abschnitt ein, wird der Ausgangskontakt
spätestens nach der dafür gespeicherten Zeit plus einen
Sicherheitswert erwartet. Wird der Kontakt vorher ausgelöst,
kann die Fahrtzeit aktualisiert werden und die Lok fährt
normal weiter. Ist jedoch nach der berechneten Zeit kein Kontakt
ausgelöst worden, muss von einem defekten Kontakt ausgegangen
werden. Das Programm weiss dann trotz ausbleibendem Kontakt,
dass die Lok bereits in den Folgeabschnitt fährt, und kann
entsprechend reagieren (Abschnitt belegen, Lok stoppen etc).
- Der Zustand des gesamten Systems und die aktuellen Maßnahmen
zur Steuerung müssen anhand von Ausgaben an den Terminals
nachvollzogen werden können. Beim Starten der Steuerung
sollen die Loks an den in den Bildern angegebenen Positionen
stehen. Die Bezeichnung der Loks ist dabei zu beachten, da sie
andernfalls in die falsche Richtung fahren.