Jump to content

Signal auf Fahrt - wenn ....


bigrala

Empfohlene Beiträge

Hallo,

ich versuche mich gerade an der Bahnhofssteuerung.
Folgende Situation;
Der Bahnhof ist zweispurig ausgelegt, vier Bahnsteige (zwei in jede Richtung) und zwei weitere Gleise ohne Bahnsteig für Güterzüge zum passieren (einer in jede Richtung).
Jeder Zug hat zwei Schlagworte im Gepäck (Personenzug oder Güterzug und Nahverkehr oder Fernverkehr)
An jeder Einfahrt steht ein Signal, welches die Züge stoppt, wenn die Gleise im Bahnhof belegt sind.
- Genauer, wenn die beiden Gleise mit Bahnsteig belegt sind, dann werden alle Personenzüge am Einfahrsignal gestoppt, Güterzüge können durch, wenn deren Gleis frei ist - und natürlich umgekehrt.

Das funktioniert auch soweit sehr gut.

Mein Problem, mit dem ich nicht weiterkomme ist folgendes;

An jedem Ausfahrgleis ist ein Gleiskontakt, der beim verlassen des GK das Gleis frei meldet - Funktioniert auch - aber er soll auch das Einfahrsignal schalten wenn bestimmte Bedingungen erfüllt sind. Mit den Bedingungen habe ich aber mein Problem.

Beispiel: Ein Personenzug verläßt den Bahnhof und der GK wird ausgelöst ..... jestz soll geprüft werden, ob ein Zug am Einfahrsignal steht und wenn es ein Personenzug ist, dann soll das Signal schalten und der Zug soll einfahren. Steht dort ein Güterzug, dann soll das Signal weiterhin auf Halt stehen bleiben.

Ob ein Zug dort steht, kann ich mit "Variable existiert" abfragen, da im Signal der Zugname steht - aber wie frage ich ab, welches Schlagwort der Zug besitzt?
Muss ich das auch in das Signal schreiben oder kann ich nicht einfach über den bekannten Zugnamen das Schlagwort abfragen ?


Wer hat da einen Lösungsansatz für mich ?

Danke euch
Gruß Ralf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du könntest abfragen, ob beim Zug das Schlagwort vehicle.variables["Güterzug"] existiert.  ~=nil
Oder eben alle anderen Schlagwörter.

Ich programmiere auch gerade so eine Logik.
Gehe aber etwas anders vor, so daß der Zug am Einfahrsignal eine oder mehrere Fahrstraßen über einen Endlostimer "anfordert" bis sie frei ist.
Der weiß genau wer er ist und wohin er will/darf.
 

Bearbeitet von HaNNoveraNer
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb bigrala:

Wer hat da einen Lösungsansatz für mich ?

Ich würde das Einfahrsignal standardmäßig geschlossen halten. Beim Eintreffen eines Zugs am Signal kann eine entsprechende Prüfung erfolgen (Gleis frei? Richtiger Zug? etc. pp.) Sind die Bedingungen erfüllt, öffnet das Signal und der Zug fährt ein. Sind die Bedingungen nicht erfüllt, bleibt das Signal geschlossen und der Zug wartet. Jedesmal wenn ein Zug das Gleis verlässt und freigibt, wird dieselbe Prüfung erneut angestoßen. Für diese Prüfung eignet sich ein benutzerdefiniertes Ereignis, weil man das beliebig oft anstoßen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 42 Minuten schrieb Timba:

Ich würde das Einfahrsignal standardmäßig geschlossen halten.

Das Einfahrsinal ist zugleich auch das letze Blockignal der zurückliegenden Strecke.
Ob ein Gleis frei ist wird mit einem GK vor erreichen des Signals abgefragt und wenn Gleise voll sind, das Blocksignal auf Halt gestellt.

Aber das mit dem Benutzerdefinierten Ereignis ist eine Überlegung wert und klingt nicht schlecht - mal ausprobieren

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

entschuldigt bitte, wenn ich das so ausdrücke, aber mir scheint das alles wie ein Schuss durchs Knie direkt ins Auge zu sein.

Wie wäre es denn mit einer Variablen, die nach dem passieren des Einfahrtsignals eins hochzählt und nach dem Verlassen des Bahnhofs eins runterzählt? Wenn das Maximum erreicht ist, wird das Signal nicht geöffnet, wenn der Zähler unter dem Maximum ist, wird es geöffnet.

Die Güterzüge können auf jedem freien Gleis durchfahren und die Personenzüge bekommen noch einen zweiten Zähler, der für Personenzüge beim Erreichen der 2 dicht macht, wenn ein weiterer Personenzug in den Bahnhof will.

Oder verstehe ich nur Bahnhof?

HG

Brummi 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb bigrala:

Wie könnte es in der EV aussehen, .......  Wenn ZUGNAME im Signal SBL14 hat das Schlagwort XXX und das Schlagwort YYY

Ja sicher, für was ist die indirekte (erweiterte) Adressierung denn sonst gut? Geht ein wenig in die Tiefe, na und?
Und sorry Brummi, (in)direkte Zugriffe sind in der Regel ungefährlicher als Zählungen. Da sind mir die an mehrgleisigen Bahnübergängen schon suspekt.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb bigrala:

Wie könnte es in der EV aussehen ...

Als Bedingung wählst du

333185147_Schlagwortprfen1.jpg.220eb601d8133c4747ef33be8f302eac.jpg

 

Und dann gibst du das Schlagwort einfach als Namen der Variablen an, die existieren soll

112582706_Schlagwortprfen2.jpg.cc55335f5981ce418e32847cf8915995.jpg

Hier "einmal über Bande gespielt", weil das Schlagwort in dem Zug steht, den du im Einfahrsignal hinterlegt hast.

Bearbeitet von Goetz
Ergänzungen
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Roter Brummer:

Wie wäre es denn mit einer Variablen, die nach dem passieren des Einfahrtsignals eins hochzählt und nach dem Verlassen des Bahnhofs eins runterzählt? Wenn das Maximum erreicht ist, wird das Signal nicht geöffnet, wenn der Zähler unter dem Maximum ist, wird es geöffnet.

Soweit, so gut, Brummi.
Den Teil kannst du bei bigrala auch als "erledigt" betrachten.

Aber wenn ein Zug nicht einfahren durfte, dann muss der nächste Versuch durch die Ausfahrt eines anderen Zuges angestoßen werden. Und in diesem Augenblick will bigrala ganz vernünftig prüfen, welche Art Zug am Eingang wartet. Weil der ausfahrende Zug nicht zwingend das Gleis freigibt, auf welches der einfahrende Zug wartet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Stunden schrieb HaNNoveraNer:

daß der Zug am Einfahrsignal eine oder mehrere Fahrstraßen über einen Endlostimer "anfordert" bis sie frei ist.

Kannst du machen.
Aber ich denke, es wäre ausreichend die Suche nur jeweils einmal anzustoßen, wenn sich hinter dem Einfahrsignal etwas ändert. Wenn also ein dahinterliegender Abschnitt von jemandem verlassen wird. Denn vorher kann nichts frei werden. (Ausgenommen, du schmeißt händisch Züge runter.)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist ja nur EIN Timer für alle Fahrstraßen bei mir.
Der arbeitet nur, wenn eine Fahrstraße angefordert ist, sonst läuft er ins Leere, damit ihm nicht langweilig wird.
Siehe meine Beispielanlage im anderen Thread.
So funktioniert es auch, wenn man das Fahrzeug von Hand entfernt.

Bearbeitet von HaNNoveraNer
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Goetz:

Und dann gibst du das Schlagwort einfach als Namen der Variablen an, die existieren soll
Hier "einmal über Bande gespielt", weil das Schlagwort in dem Zug steht, den du im Einfahrsignal hinterlegt hast. 

Super Goetz, genau so läuft es.
Mit dem "Bandenspiel" tue ich mir noch immer schwer ....

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb HaNNoveraNer:

Ist ja nur EIN Timer für alle Fahrstraßen bei mir.
Der arbeitet nur, wenn eine Fahrstraße angefordert ist, sonst läuft er ins Leere, damit ihm nicht langweilig wird.

Naja, klar funktioniert das auch, aber eigentlich wird kein Timer gebraucht und ist nur unnötiger Ballast. Es ist ja genau so wie Götz sich hier äußert: Die Prüfung muss nur angestoßen werden, wenn sich hinterm Einfahrsignal was ändert. So läuft es bei mir auch. Einfahrende Züge lösen ein Stück vorm Einfahrsignal eine Prüfung aus, die im positiven Fall das Signal öffnet und den Zug einfahren lässt. Ansonsten wartet der Zug und sobald sich im Bahnhof etwas ändert, d.h. ein Zug den Bahnhof verlässt und sein Gleis freigibt, wird dieselbe Prüfung erneut angestoßen. Ganz ohne Timer.

Gruß Timba

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist mir viel zu aufwändig, die ganzen Ausfahrten zu überwachen, besonders, wenn es noch Ausweichgleise oder alternative Möglichkeiten gibt, wo der Zug hinfahren könnte.
Zugrichtungsänderungen, Rangieren u.s.w. müssen dann auch berücksichtigt werden.
Und bei eingleisiger Strecke muß dann auch noch der Gegenverkehr berücksichtigt werden.
Und ich setze gerne mal Züge von Hand ein. Auch das muß dann die Abfrage auslösen.

Dem Timer ist das alles egal. Damit kann ich auch mal eine ganze Zugfahrt mit mehreren Fahrstraßen/Blöcken reservieren bei Gegenverkehr vor, hinter und im Bahnhof u.s.w.

So ein Timer sollte das System auch nicht wirklich belasten.
Vielleicht mache ich mal einen Test mit  100 aktiven Fahrstraßen mit je 20 Gleisen.
Kann man im MBS die Zeit in ms messen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Beispielanlage findest Du hier im Forum :-)

Letzte Version ganz unten auf der Seite

Das mit dem Timer mache ich auch in einem anderen System schon so.
Dort läuft das Lua selber in einer 200ms Schleife praktisch als Timer.

Grob beschrieben gibt es 3 Listen, die ich dazu brauche:
1. Angeforderte Fahrstaßen
2. Aktive Fahrstraßen
3. Timeout (Ausweichroute, wenn Fahrstraße nicht geschaltet werden kann)
Jedesmal wenn ein Zug eine Fahrstraße befahren will, schreibt er eine Anforderung in Tabelle1.
Der Endlostimer fragt diese Tabelle im 200ms Intervall ab.
Findet er eine Anforderung, versucht er, die Fahrstraße zu aktivieren.
Dazu prüft er alle enthaltenen Gleise auf besetzt, oder ob die Gleis schon in einer anderen aktiven FS in Tabelle2 enthalten sind.
Klappt das Aktivieren, löscht er die Anforderung und schreibt sie in Tabelle2.
Timeout habe ich hier noch nicht realisiert.
Also versucht er es so lange, bis die Fahrstraße frei wird.
Am Auflösekontakt hat er ja die Fahrstraße besetzt und löscht den Eintrag aus der Tabelle2!

Die möglichen Ziele (Fahrstraßen) werden am Signal eingetragen.
Man benötigt nur das Startsignal mit den Bremsparametern und 2 Kontakte, denen man eindeutige Nummern gibt, für jeden neuen Block.
Das ist ratzfatz parametriert. Alles andere übernimmt das Lua Programm automatisch.

Mal so ganz grob ohne Details.

Bearbeitet von HaNNoveraNer
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...