User Tools

Site Tools


besra:german:xml

Nutzerseite von Besra

Navigation:


XML-Skriptbeispiele


Ein- und Ausschalten der Block-Option "Warten"

Das folgende kleine Skript dient dazu, die Warte-Option in einem Block mit Hilfe eines Schalters ein- und auszuschalten. Das ist z.B. manchmal praktisch, wenn vor dem Betriebsende schnell aufgeräumt werden soll.

<?xml version="1.0" encoding="UTF-8"?>
<xmlscript>
  <if state="co SCHALTER = on">
    <then>
      <bk id="BLOCK" cmd="waiton"/>
    </then>
    <else>
      <bk id="BLOCK" cmd="waitoff"/>
    </else>
  </if>
</xmlscript>

Hierbei ist SCHALTER durch die Kennung des Ausgangs zu ersetzen, mit dem die Warteoption geschaltet werden soll und mit dem das Skript aufgerufen wird. BLOCK ist mit der Kennung des Blocks zu ersetzen, bei dem die Warteoption geschaltet werden soll. Wie immer bei XML-Skripten ist darauf zu achten, dass Kennungen keine Leerzeichen enthalten dürfen.

Ein optisch passendes Schaltersymbol findet sich auf der Seite Eigene SVG-Symbole unter Schalter-Symbol für Warten.


Tauschen der Blockeinfahrseite mit einem Taster

Wozu das? Nun ja, auf meiner Anlage gibt es einen ausschließlich manuell betriebenen Schattenbahnhof, wo alle die Loks herumstehen, die gerade nicht automatisch fahren sollen.

Die Zufahrt vom Schattenbahnhof zweigt von einem eingleisigen, in beiden Richtungen benutzen Streckenteil ab. Wenn eine Lok auf's Abstellgleis soll, dann bekommt sie von mir im Automatik-Betrieb als Ziel Block A (Bl_A) zugewiesen - das ist der Block vor dem Abzweig. Danach wird sie manuell auf ihren Platz gefahren und die Belegung von Bl_A zurückgenommen. Wenn dieselbe Lok irgendwann einmal wieder das Licht erblicken soll, dann wird die Lokbelegung in Bl_A gesetzt und die Lok von Hand aus dem Schattenbahnhof nach Bl_A gefahren und kann dort gestartet werden.

Nur gibt es dabei ein kleines Problem: Die Lok fuhr in der Automatik in Bl_A ein und zwar auf der Plus-Seite. Von Hand wurde sie dann vorwärts, also auf der Minus-Seite, aus dem Block herausgefahren. Die Blockeinfahrseite war also Plus.
Wenn die Lok irgendwann einmal wieder auf die Anlage gefahren wird - und das kann nach einigen Monaten sein - hat sich Rocrail eines noch immer gemerkt: Blockeinfahrseite ist Plus. Vielleicht kann man es schon ahnen? Richtig, die Lok wird von Hand wieder aus dem Schattenbahnhof auf die Anlage geholt und da sich dort eine Wendeschleife befindet, kommt sie vorwärts in Bl_A an - jetzt aber auf der Minus-Seite. Damit sie in der Automatik wieder richtig starten kann, muss also nach dem Belegen des Blocks gleich noch einmal ins Block-Kontextmenü gegangen werden und die Blockeinfahrseite getauscht werden.

Um dies etwas einfacher zu gestalten und sich den zweiten Weg ins Block-Kontextmenü zu sparen, kommt neben das Blocksymbol ein als Taster konfigurierter Ausgang, mit dessen Hilfe über eine Aktion das folgende Skript aufgerufen wird:

<?xml version="1.0" encoding="UTF-8"?>
<xmlscript>
  <!-- Skript zum Tauschen der Blockeinfahrseite in Bl_A -->
  <foreach table="lclist" state="lc %oid% = Bl_A">
    <if state="lc %lcid% = +">
      <then>
        <!-- Einfahrseite Block tauschen -->
        <lc id="%lcid%" cmd="blockside" />
        <trace text="Lok %lcid% in Block A: Einfahrseite getauscht"/>
      </then>
      <else>
        <trace text="Lok %lcid% in Block A: Einfahrseite OK, nicht getauscht"/>
      </else
    </if>    
  </foreach>
</xmlscript>

In der Zeile [<foreach…] wird nun die Loktabelle [lclist] nach einer Lok abgeklappert, die in Bl_A steht. Welche Lok das ist steht danach in der Variablen [%lcid%]. Mit dem folgenden [<if…] wird geprüft, ob die Blockeinfahrseite dieser Lok Plus ist und wenn ja, sorgt der Befehl [blockside] dafür, dass sie getauscht wird auf Minus. Wenn nicht Plus, dann wird auch nicht getauscht.

besra/german/xml.txt · Last modified: 2018/11/12 08:56 (external edit)