bigrala Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 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
HaNNoveraNer Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 (bearbeitet) 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 29. Januar 2020 von HaNNoveraNer
Timba Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 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.
Andy Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 Hallo Ralf, vor 1 Stunde schrieb bigrala: kann ich nicht einfach über den bekannten Zugnamen das Schlagwort abfragen Ja. Geht auch mit 'Variable existiert', denke ich. Gruß Andy
bigrala Geschrieben 29. Januar 2020 Autor Geschrieben 29. Januar 2020 (bearbeitet) 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 29. Januar 2020 von bigrala
bigrala Geschrieben 29. Januar 2020 Autor Geschrieben 29. Januar 2020 vor 2 Stunden schrieb Andy: Ja. Geht auch mit 'Variable existiert', denke ich. Da habe ich bisher noch nichts gefunden. Wie könnte es in der EV aussehen, ....... Wenn ZUGNAME im Signal SBL14 hat das Schlagwort XXX und das Schlagwort YYY
Roter Brummer Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 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
Andy Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 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
Goetz Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 (bearbeitet) vor 2 Stunden schrieb bigrala: Wie könnte es in der EV aussehen ... Als Bedingung wählst du 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. Bearbeitet 29. Januar 2020 von Goetz Ergänzungen
Goetz Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 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.
Goetz Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 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.)
HaNNoveraNer Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 (bearbeitet) 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 29. Januar 2020 von HaNNoveraNer
Goetz Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 vor 16 Minuten schrieb HaNNoveraNer: Siehe meine Beispielanlage im anderen Thread. Die habe ich schon "studiert"
bigrala Geschrieben 29. Januar 2020 Autor Geschrieben 29. Januar 2020 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 ....
Timba Geschrieben 29. Januar 2020 Geschrieben 29. Januar 2020 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
HaNNoveraNer Geschrieben 30. Januar 2020 Geschrieben 30. Januar 2020 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?
bigrala Geschrieben 30. Januar 2020 Autor Geschrieben 30. Januar 2020 @HaNNoveraNer Hallo, Du scheinst da ja etwas besonderes zu machen. Das mit dem Timer und wie das Funktionieren soll ist mir nicht ganz klar, vielleicht könntest Du zur Verdeutlichung hier mal kleine Beispielanlage mit der Steuerung zeigen ?
HaNNoveraNer Geschrieben 30. Januar 2020 Geschrieben 30. Januar 2020 (bearbeitet) 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 30. Januar 2020 von HaNNoveraNer
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden