Erzeugung eines Ampelmodells

Christoph Grein

Inhalt

Dies ist eine Aufgabe zum Ada-Kurs Nebenläufige Prozesse, Folie 139.

Die Ampelmodelle

Als Beispiel sind drei Ampelmodelle gegeben. Modellkreuzung

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. Gruen_Links 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). Gelb_Links (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:

Der Mondrian-Compiler

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. Mondrian 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.

Kode-Generierung

Wenn Sie nicht schon, wie eingangs beschrieben, aus den Excel-Dateien die csv-Dateien exportiert haben, tun Sie das jetzt.

Mondrian_Compiler Ö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.

Übersetzung des Ampelmodells

Öffnen Sie das GNAT-Projekt ampel.gpr im Hauptverzeichnis Ampel. 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.)

Vorschlag zur Erweiterung

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.

Kritische Analyse

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
Schreib mir
christ-usch.grein@t-online.de


Valid HTML 4.01 Transitional