User Tools

Site Tools


userpages:signalmast88:ortschaft-special-de

Priorisierten Block einer Ortschaft von der Einfahrseite abhängig machen

Ausgangssituation

Am Beispiel eines Bahnbetriebswerks (BW) der Epoche 3 soll eine Lösung für diese Aufgabenstellung demonstiert werden.
Ein BW besaß damals größenabhängig im Allgemeinen ein oder mehrere Einfahr- bzw. Ausfahrgleise zu / von einer Drehscheibe.
In der Regel wurden diese auch wie vorgesehen richtungsgebunden benutzt. In Ausnahmefällen war es jedoch auch möglich über das Gegengleis zu fahren.

Umsetzung in Rocrail

In diesem Demo werden zwecks besserer Übersichtlichkeit folgende Vereinfachungen getroffen:

  • nur 1 Zufahrtsgleis zur Drehscheibe (Block "Einfahrt"); die Standard-Fahrtrichtung ist durch Pfeilsymbole darunter angezeigt
  • nur 1 Ausfahrtsgleis vom BW (Block "Ausfahrt"); die Standard-Fahrtrichtung ist ebenfalls durch Pfeilsymbole darüber angezeigt
  • das Drehscheibensymbol wurde durch einen einfachen Block samt Weiche sw3 ersetzt

Das folgende Verfahren ist natürlich auch bei mehreren Richtungsgleisen analog anwendbar.

Der Bereich der Ein- und Ausfahrblöcke wird in Rocrail in der Ortschaft "BW" zusammengefasst.
Dabei ist für die Priorisierung entscheidend, in welcher Reihenfolge die Blöcke in die Liste eingetragen werden.

Wenn so wie hier der Block "Ausfahrt" an oberster Stelle steht, dann wird immer versucht über diesen Block zu fahren.
Für die Fahrt von der Drehscheibe Richtung Bahnhof ist das ja ok, aber leider würde auch die Einfahrt immer über diesen Block erfolgen, sofern er in Betrieb und frei ist.
Um ein korrektes Einfahrverhalten zu erreichen, ist also etwas Zusatzaufwand nötig.

Schritt 1: Feststellen, ob der Einfahrtsblock verfügbar ist

Verfügbar bedeuted in diesem Zusammenhang, dass er einerseits in Betrieb und andererseits auch frei sein muss.
Dies kann man mit folgendem xml-Einzeiler abfragen:

<if state="bk Einfahrt = open|bk Einfahrt = free" alltrue="true">

Schritt 2: Entsprechendes Setzen eines Fahrstraßenrückmelders

Wenn die Abfrage wahr ist, dann wird ein Fahrstraßenrückmelder auf ON gesetzt.
Ist der Einfahrtsblock besetzt oder außer Betrieb, so erfolgt ein Setzen des Rückmelders auf OFF.

   <then>
      <fb id="Ausfahrtssperre" cmd="on"/>
   </then>
   <else>
      <fb id="Ausfahrtssperre" cmd="off"/>
   </else>
</if>

Schritt 3: Eintragen des Fahrstraßenrückmelders

Der Fahrstraßenrückmelder wird idealerweise im Gleisplan über dem Rückmelder fb8 eingetragen.
Damit hat man auch gleich eine optische Kontrolle ähnlich einer Ampel, ob eine Einfahrt in den Ausfahrtsblock erfolgen wird oder nicht.

  • Ist der Block "Einfahrt" so wie in der linken Abbildung verfügbar,
    wurde der Rückmelder durch das Script auf ON gesetzt und erscheint ROT.
    Die Fahrstraße zum Block "Ausfahrt" ist somit gesperrt und die Einfahrt ins BW kann über das dafür vorgesehene Gleis erfolgen.
  • Wenn der Block "Einfahrt" so wie in der rechten Abbildung nicht verfügbar ist,
    wurde der Rückmelder durch das Script auf OFF gesetzt und erscheint daher GRÜN.
    Die Fahrstraße zum Block "Ausfahrt" ist somit auch für die Einfahrt in Gegenrichtung freigegeben.




Damit die Fahrstraße "[Bahnhof]-[Ausfahrt]" auch tatsächlich gesperrt wird, muß der Rückmelder noch im Tab "Rückmelder" der Fahrstraße eingetragen werden.

Schritt 4: Erstellen einer Aktion, die das xml-Script aufruft

Das xml-Script erhält den aussagekräftigen Namen "Check_Einfahrt.xml" und wird als externes Programm im Aktions-Dialog aufgerufen.
Auch die Aktion selbst erhält den Namen "Check_Einfahrt".

Schritt 5: Aufrufen der Aktion

Die Aktion muss logischerweise noch vor dem Setzen der Fahrstraße ausgeführt werden.
Es bietet sich daher an, den In-Event im Block "Bahnhof" dafür zu verwenden.

Es kann jedoch auch folgende Situation eintreten:

Lok2 wird gerade am Einfahrgleis - auf dem sich auch die Behandlungsanlagen befinden - bekohlt als Lok1 am Bahnhof eintrifft.
Der In-Event von Lok1 schaltet die Einfahrt über das Gegengleis frei, da das Standard-Einfahrgleis noch durch Lok2 besetzt ist.
Während Lok1 noch im Bahnhof steht, wird die Behandlung von Lok2 abgeschlossen und sie fährt weiter auf die Drehscheibe.
Jetzt würde die Lok1 trotzdem Über das Gegengleis fahren, obwohl das Einfahrtsgleis mittlerweile frei geworden ist.
Um auch diesen Fall abzudecken, wird die Aktion auch im Block "Einfahrt" eingetragen und durch den Free-Event ausgelöst.
Die ausgefahrene Lok2 hat dadurch einen erneuten Einfahrts-Check ausgelöst und somit die Situation wieder richtiggestellt. ;-)
Lok1 wird Lok2 daher in den Block "Einfahrt" folgen.


Zur Kontrolle kann man auch noch einen Ausgang anlegen, mit dem man jederzeit manuell den Status des Fahrstraßenrückmelders prüfen kann.
Dazu einfach auch nur die Aktion bei diesem Ausgang mit Status ON eintragen. Hier wurde dafür ein anklickbares Textfeld verwendet.
Da es nur als Schalter und nicht als Taster konfigurierbar ist, muss das Ausschalten des Textfeldes noch im xml-Script ergänzt werden.

<tx id="txCheck_Einfahrt" cmd="off"/>

Hier wurde durch Klicken auf das Textfeld überprüft, ob das Script korrekt funktioniert, wenn man den Einfahrblock außer Betrieb nimmt. Passt natürlich. 8-)

Minimalbeispiel zum Testen

Um die Testfahrten zu erleichtern, wurden noch 2 Schaltflächen zum Starten der Lok(s) in den Blöcken "Strecke" und "Drehscheibe" hinzugefügt.
Das fertige Minimalbeispiel sieht nun folgendermaßen aus:

Die Plan-Datei sowie die 3 erforderlichen kurzen xml-Scripts sind im .zip-Archiv enthalten.

ortschaft-test.zip

userpages/signalmast88/ortschaft-special-de.txt · Last modified: 2024/11/27 10:22 by signalmast88