Dies ist eine Aufgabe zum Ada-Kurs Nebenläufige Prozesse, Folie 139.
Als Beispiel sind drei Ampelmodelle gegeben.
Die Modell_Kreuzung ist eine einfache Kreuzung mit Ampeln ohne
Richtungsanzeige, aber mit Fußgängerampeln.
Die grüne (A) und die rote (B) Richtung werden abwechselnd freigegeben.
Linksabbieger müssen auf Gegenverkehr achten, Links- und Rechtsabbieger
auf die kreuzenden Fußgänger.
Die Fußgängerampeln sind mit AF bzw. BF gekennzeichnet.
Die Fußgängerphase ist etwas kürzer als die Fahrzeugphase,
damit Abbieger nicht zu kurz kommen.
Das Modell Inning ist eine komplexere Kreuzung mit Richtungsampeln auf Straßen 1 und 3, Ampeln ohne Richtungspfeile auf Straßen 2 und 4, und zwei einzelnen grünen Lampen mit Linkspfeilen für die Linksabbiegerspuren der Straßen 2 und 4, die anzeigen, dass der Gegenverkehr durch Rotlicht angehalten ist.
Das Modell Gilching ist eine Kreuzung mit Fußgängerampeln und einer einzelnen gelb blinkenden Lampe mit Linkspfeil für die Linksabbiegerspur der Straße 1, die anzeigt, dass der Gegenverkehr zu beachten ist.
Neben den dreifarbigen (dreilampigen) Ampeln sind hier also noch zwei einfarbige (einlampige) Formen implementiert.
Zwei der grünen Hilfslampen sind im Modell Inning.
Sie haben einen grünen Richtungspfeil und bedeuten generell bei Ampeln ohne
Richtungsangaben, dass die Fahrt für Linksabbieger frei ist, da der
Gegenverkehr rot hat.
Das genaue Gegenteil ist die optionale gelb blinkende Hilfslampe (in der
Abbildung der Kodierungen die unterste, siehe unten).
(Sie ist im Modell Gilching enthalten.)
Sie steht an der entsprechenden Stelle wie die grüne Hilfslampe, aber in
diesem Fall hat der kreuzende Gegenverkehr ebenfalls grün.
Sie hat einen Richtungspfeil auf gelbem Hintergrund und warnt (ebenfalls nur bei
Ampeln ohne Richtungsangaben), dass Linksabbieger auf den Gegenverkehr achten
müssen.
(Die Schaltzeiten der drei Modellkreuzungen sind ziemlich willkürlich festgelegt.)
Die zyklische Ampelsteuerung ist farbkodiert in Excel-Dateien.
Daraus wird durch Kodegenerierung der Ada-Kode erzeugt.
Dazu sind im Verzeichnis Farbkodierung die Abbildungen der Kreuzungen
im png
-Format abgelegt zur Veranschaulichung;
die einzelnen Ampeln beziehungsweise Spuren können beliebig benannt werden.
Die zugehörigen Steuerungen sind farbig im Excel-Format xlsx
beschrieben;
die exportieren Sie bitte als csv
-Datei (in dasselbe Verzeichnis).
Da die Hintergrundfarbe der Zellen nicht mitexportiert wird, sind die Farben mit
einzelnen Buchstaben kodiert; ebenso die Richtungen.
Verwendete Kodierungs-Konventionen:
r(rot) y(gelb) g(grün) d(dunkel)
g(geradeaus) l(links) r(rechts)
für die Spuren
ohne Richtungsampeln; in Großbuchstaben bei Richtungsampelnh
F
Da die Ablaufsteuerung farbkodiert ist, heißt der Compiler passend Mondrian. Er erzeugt aus den Farbkodierungen den Ada-Kode für die zyklische Ablaufsteuerung der Ampel.
Sein Quellkode liegt im Verzeichnis Mondrian_Quellkode.
Gehen Sie daher in dieses Verzeichnis und öffnen Sie das GNAT-Projekt
mondrian.gpr
; starten Sie Build Main mondrian.adb
.
Das Executable mondrian.exe
, der Kode-Generator, wird im
Verzeichnis Farbkodierung abgelegt.
Danach können Sie das automatisch erzeugte Verzeichnis GnatLib, das die vom Übersetzer erzeugten Dateien enthält, löschen.
Wenn Sie nicht schon, wie eingangs beschrieben, aus den Excel-Dateien die csv-Dateien exportiert haben, tun Sie das jetzt.
Öffnen Sie danach das GNAT-Projekt
mondrian_compiler.gpr
im
Hauptverzeichnis Ampel und starten Sie Build target Build All
.
Der Mondrian-Compiler liest alle im vorigen Schritt exportierten Dateien
Name_x.csv
im Verzeichnis Farbkodierung und erzeugt daraus
im Verzeichnis Generierter_Kode die Ada-Pakete mit passendem Namen in den
Dateien ampel-name_x.ads
beziehungsweise
ampel-name_x.adb
.
Alle anderen vom Compiler erzeugten Dateien in diesem Verzeichnis können
gelöscht werden.
Aber heben Sie den Kodegenerator mondrian.exe
auf.
Öffnen Sie das GNAT-Projekt ampel.gpr
im Hauptverzeichnis
Ampel.
In GNAT Studio, öffnen Sie die Datei
ampel-kreuzung.ads
und
wählen Sie in der Kontext-Klausel die zu übersetzende Kreuzung aus den
erzeugten Modellen aus.
Rufen Sie Build & Run
auf, das Executable
polizist.exe
wird ausgeführt – fertig.
Viel Spaß.
(Nota bene: Mir ist nicht bekannt, was die StVO vorschreibt beim Einschalten einer Ampel oder ob es überhaupt dazu Vorschriften gibt. Die implementierte Vorgehensweise scheint mir einfach sinnvoll. Diese Einschaltphase ist nicht farbkodiert in den Excel-Dateien, die enthalten nur den danach folgenden zyklischen Anteil.)
Die hier behandelte Aufgabe ist eine Erweiterung der Aufgabe von Folie 49
des Kurses.
Es fehlt jedoch die Behandlung von Hardwareproblemen, Folie 132.
Wenn Sie Lust haben, erweitern Sie den Prozessor um die Ausnahmebehandlung und
ändern Sie die Prozedur Set_Ampel
so, dass Sie eine Ausnahme
induzieren können.
Wenn Sie mögen, senden Sie mir die Erweiterung – ich würde mich
freuen.
Zum Abschluss des Kurses möchte ich Sie aufrufen, diese Ampel-Software einer kritischen Analyse zu unterziehen.
Genügt das Design den Anforderungen von Hoare (Folie 6)?
Ist die Software genügend kommentiert (Folie 4 des Kurses)? Ist die Spezifikation der Pakete ausreichend zum Verständnis oder ist es notwendig, in den Rumpf zu spicken? Sind die Abläufe in den Rümpfen klar?
Bilden Sie sich Ihre Meinung!
© CKW Grein 2023
christ-usch.grein@t-online.de