Priorisierung an der Ampel
Voraussetzungen:
- Anleitung “Ampelkreuzung automatisch steuern” - fange hier an, um zu erfahren, was Kreuzung, Schaltung und Fahrspur bedeuten.
Beispielanlage öffnen
- Lade und installiere Dir die Beispielanlagen für die Ampeln “Installer-AK-Tutorial-Ampelkreuzung.zip”
- Öffne die Beispielanlage “Andreas_Kreuz_Tutorial_Ampelkreuzung-2.anl3” in EEP
- Öffne die Datei
Andreas_Kreuz-Tutorial-Ampelkreuzung-2-main.lua
in einem Editor - Du findest sie unterC:\Trend\EEP\LUA\ak\demo-anlagen\tutorial-ampel\
.
So funktioniert Priorisierung
… innerhalb einer Fahrspur
Es gibt 4 Arten von Priorisierungen für Fahrspuren. Nur eine davon kann gleichzeitig verwendet werden:
-
Priorisierung nach Wartezeit
Werden die Fahrzeuge nicht anhand von unten stehenden Mechanismen erkannt, so erfolgt die Priorisierung dieser Fahrspur anhand der Wartezeit. Die Wartezeit wird immer um eins hochgezählt, wenn diese Fahrspur beim Ändern der Ampelschaltung rot bekommt. Sie wird auf 0 zurükgesetzt, wenn die Ampel grün bekommt.
Wenn Du keine Priorisierung einrichtest, dann werden die Fahrspuren anhand ihrer Wartezeit geschaltet. -
Zählen von Fahrzeugen
Wenn Du die Anzahl der Fahrzeuge einer Fahrspur mit Kontaktpunkten zählst, bekommst Du die bestmögliche Erkennung für mehrere Fahrzeuge.
Setze für jeder Fahrspur zwei Kontaktpunkte: Den ersten vor der Ampel, der der Fahrspur sagt, dass sich ein weiteres Fahrzeug vor der Ampel befindet. Den zweiten nach der Ampel, der der Fahrspur sagt, dass sich ein Fahrzeug weniger an der Ampel befindet. -
Erkennen von Fahrzeugen am roten Signal (nicht empfohlen)
Du kannst den Verkehr einer Fahrspur erkennen, wenn sie an einer roten Ampel stehen. Die Funktion erkennt Fahrzeuge, die zwischen dem Vor- und Hauptsignal einer roten Ampel stehen - intern wird regelmäßigEEPGetSignalTrainsCount
abgefragt.
Diese Variante wird nicht empfohlen, weil die Fahrzeuge nur zwischen Vor- und Hauptsignal gezählt werden. Ist dieser Abstand zu kurz, werden nicht genügend Fahrzeuge gezählt, ist er zu lang, fahren zu viele Fahrzeuge nach dem Schalten auf rot durch. -
Erkennen von Fahrzeugen auf Straße (nicht empfohlen)
Du kannst die Ampelschaltung einer Fahrspur priorisieren, indem Du prüfst, ob auf dem Straßenstück vor der Ampel ein Fahrzeug steht - intern wird dazuEEPRegisterRoadTrack
verwendet.
Diese Variante wird nicht empfohlen, weil sie nicht mehrere Fahrzeuge auf einem Straßenstück erkennt und daher die anstehende Fahrzeugschlange nicht korrekt ist.
⭐ Bitte beachte: Pro Fahrspur kann nur ein Mechanismus verwendet werden. Bei mehreren Mechanismen, gewinnt der erste in der folgenden Liste:
- Erkennen von Fahrzeugen auf Straßen
- Erkennen von Fahrzeugen an Signalen
- Zählen mit Kontaktpunkten
- Automatisch anhand der Wartezeit
… innerhalb einer Kreuzung
Die nächste Schaltung wird immer durch die höchsten Durchschnittspriorität aller Fahrspuren bestimmt.
Durch das Einbeziehen der Wartezeit wird sichergestellt, dass jede Fahrspur berücksichtigt wird.
⭐ Am besten verwendest Du die Priorisierung für alle Fahrspuren einer Kreuzung - oder für gar keine.
Erkennung mit Strassen (nicht empfohlen)

-
Verwende dazu folgenden Code (
lane
ist eine Fahrspur):local laneSignal1 = TrafficLight:new("LANE WS", 15, TrafficLightModel.Unsichtbar_2er) lane = Lane:new("WS", 108, laneSignal1) lane:useTrackForQueue(2) -- Erfasst Anforderungen, wenn ein Fahrzeug auf Strasse 2 steht
-
Die Code-Zeile
ws:zaehleAnStrasseAlle(xx)
sorgt dafür, dass die Fahrspur priorisiert wird, wenn das Straßenstück mit der IDxx
belegt ist. Dies erfolgt jedoch immer nur für ein Fahrzeug pro Straßenstück. -
Es können auch mehrere Straßenstücke gleichzeitig beobachtet werden, z.B. für mehrspurige Straßen.
ws:useTrackForQueue(2) ws:useTrackForQueue(3)
-
Insgesamt werden alle belegten Straßenstück der Fahrspur als ein Fahrzeug gezählt.
Erkennung mit Signalen (nicht empfohlen)

Die Erkennung erfolgt ähnlich wie bei der Straße (Details siehe oben).
lane:useSignalForQueue()
⭐ Die Erkennung funktioniert nur, wenn die Ampel rot ist.
Erkennung mit Kontaktpunkten (empfohlen)

Setze für jeder Fahrspur zwei Kontaktpunkte:
-
Vor dem Signal der Fahrspur
Dieser Kontaktpunkt muss die Funktion
lane:vehicleEntered(vehicleName)
aufrufen - in der Demo-Anlage wird in den KontaktpunktenenterLane(Zugname, lane)
verwendet.⭐ Achte darauf, dass nur Fahrzeuge den Kontaktpunkt aufrufen, die diese Fahrspur betreten.
⭐ Achte darauf, dass der Kontaktpunkt nicht vor einer Verzweigungen liegt, die die Fahrzeuge auf andere Fahrspuren verteilt. -
Hinter dem Signal der Fahrspur
Dieser Kontaktpunkt muss die Funktion
lane:vehicleLeft(vehicleName)
aufrufen - in der Demo-Anlage wird in den KontaktpunktenleaveLane(Zugname, lane)
verwendet.⭐ Achte darauf, dass nur Fahrzeuge den Kontaktpunkt aufrufen, die die korrekte Fahrspur verlassen.
⭐ Achte darauf, dass der Kontaktpunkt hinter der Haltelinie liegt.
Es ist notwendig, dass der Zugname in den Funktionen genutzt wird
------------------------------------------------
-- Damit kommt wird die Variable "Zugname" automatisch durch EEP belegt
-- http://emaps-eep.de/lua/code-schnipsel
------------------------------------------------
setmetatable(_ENV, {
__index = function(_, k)
local p = load(k)
if p then
local f = function(z)
local s = Zugname
Zugname = z
p()
Zugname = s
end
_ENV[k] = f
return f
end
return nil
end
})