Folge 39: Fahrstraßen-Script

Mal wieder ein bißchen Futter zum programmieren: Ein “pfeife in der Fahrstraße”-Script in vier Ausbaustufen:

Das Konzept

Das Script ist aus den folgenden vier Elementen aufgebaut:

  • Warten auf einen Rückmelder
  • 1. Pfiff
  • kurz warten
  • 2. Pfiff
  1. Zunächst soll gewartet werden, bis ein bestimmter Rückmelder auslöst. Das hat den Hintergrund, dass das Script schon beim Stellen bzw. Verschließen der Fahrstraße gestartet wird. Damit die hinterlegten Aktionen nicht sofort ausgelöst werden gibt es die ‘while’-Schleife. So gibt es die Pfiffe erst kurz vor dem Bahnübergang.
  2. Der erste Pfiff wird ausgeführt.
  3. Eine kurze Wartezeit bis zum zweiten Pfiff.
  4. Der zweite Pfiff wird ausgeführt und das Script ist beendet.

Dazu gibt es nun noch einige Verbesserungen.

Verbesserungen 1

Zunächst mal soll das Script nicht nur für eine Lok nutzbar sein, sondern möglichst für alle, die diese Fahrstraße nutzen. Daher gibt es für jeden Pfiff nun einen switch-case-Befehl, der die aktuelle Lok aus dem Caller (%lcid%) abfragt und auf die aktuelle Lok umschaltet.

Im vorliegenden Fall liegt die Pfeife bei allen Loks immer auf der Funktionstaste F2, so dass man das eigentlich noch weiter zusammenfassen könnte (schalte F2 von %lcid% an und aus…). Doch da sicherlich auch einmal eine Lok ohne Sounddecoder dabei sein wird, könnte man dann nicht mehr so schön einen Ersatzsound abspielen.

Verbesserungen 2

Nun wirkt das Warnpfeifen am unbeschrankten BÜ schon ganz gut und funktioniert für verschiedene Loks. Auf Dauer fällt aber auf, dass alle “Lokführer” exakt gleich ‘reagieren’ und die Pfiffe immer genau gleich lang sind. Das ist etwas sehr statisch und kann leicht mit Zufallszahlen aufgelockert werden: Eine zusätzliche kurze Zufalls-Wartezeit wird nach der Rückmelder-while-Schleife implementiert. So fängt der erste Pfiff nicht immer genau beim Überfahren des Rückmelders an. Dann werden sinngemäß auch die Pfiffzeiten und die zwischengeschaltete Wartezeit auf Zufallsbasis ausgeführt; natürlich in sinnvollen Grenzen. Jetzt wirkt das deutlich dynamischer bzw. noch etwas realistischer.

Verbesserungen 3

Schließlich und letztendlich sollten noch zwei potenzielle Problemfälle behandelt werden:

  • Die Fahrstraße dauert zu lange (bzw. Rückmelder löst nicht aus),
  • Die Fahrstraße wird vorzeitig beendet bzw. zurückgenommen.

Bei beiden Fällen kann es zu ungewollten Effekten kommen. Daher ist in dieser letzten Scriptversion sowohl ein Timeout als auch eine Prüfung auf anliegende Fahrstraße (“locked”) integriert. Somit setzen sich auch bei Verzögerungen – z.B. durch schmutzbedingte Liegenbleiber – keine “Script-Leichen” im Speicher fest und Rocrail läuft sauber durch.

Überdies können noch mehr Funktionen realisiert sein: Zum Beispiel das An- und Abschalten der Glocke oder das Quietschen in der Weichenstraße. Alles nur eine Frage der Programmierung: mit Xml relativ schnell gemacht.

Download

Die Scripte gibt es im Paket zum Download:

→Download der Scripte HIER

Fazit

Es ist immer wieder schön, welche Möglichkeiten man mit →Rocrail und dem →Xml-Scripting hat. Praktischerweise lässt sich ein- und dasselbe Script bei →diesem Gleisplan für gleich drei Fahrstrassen nutzen, da alle über den Bahnübergang führen (Bahnhofsgl. n. Ausziehgl., Durchfahrgl. n. Ausziehgl., Ladegl. n. Ausziehgl.).



Eine Antwort zu “Folge 39: Fahrstraßen-Script”

  1. Bernd Edeler sagt:

    Freu mich schon auf die besten Aufzüge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.