Rocrail Xml-Scripte

Einleitung

Im Beitrag →Rocrail als Modellbahnsteuerung hast Du schon etwas zur Steuerung einer Modellbahn mit dem PC erfahren. In diesem Artikel geht es darum, wie mal mit Xml eigene, spezielle Steuerungsanweisungen umsetzen kann.

Was ist Xml?

Xml steht für →Extensible Markup Language und ist ein grundsätzlich menschenlesbares →Ascii bzw. →UTF-Dateiformat. Aber genug der Theorie. Eine typische (kleine) Xml-Datei für Rocrail sieht so aus:

In einer solchen Struktur können grundsätzlich beliebige Daten organisiert werden. Typischerweise wird Xml z.B. für Konfigurationsdaten verwendet. Die Vorteile gegenüber reinen Textdateien (ohne die < /> Steuerzeichen) sind die Organisationsmöglichkeiten (hierarchische Struktur) und das relativ “sichere” Format. Sollte z.B. ein Steuerzeichen fehlen, ist die Datei nicht mehr Xml-konform und kann entsprechend als fehlerbehaftet behandelt werden.

Rocrail bietet nun die Möglichkeit, eigene, anspruchsvolle Steuerungslogik mit Hilfe dieser Schreibweise umsetzen zu können. Das Spektrum reicht hier von einfachen “Mache das Licht der Lok in Block xyz an”-Skripten bis hin zur Umsetzung z.B. interaktive Abläufe, sogenannten →Stories. Diese werden dann auch entsprechend lang und aufwendig.

Wie funktioniert das?

Schlüsselwörter und Parameter

Rocrail bietet bestimmte Schlüsselwörter und Parameter (Attribute), die praktisch die Ansteuerung aller Elemente einer Modellbahn ermöglichen. Im obigen Beispiel startet der Befehl mit lc, das ist in Rocrail die Abkürzung für loco, engl. für Lok. Es wird hier also eine Lok angesteuert. Über die definierte id, also der Identifikation, der der Wert “Köf” zugewiesen wird, ist eine bestimmte Lok in Rocrail angesprochen. Der Name “Köf” steht z.B. in Rocrail in der Lokdefinition.

Schließlich ist noch anzugeben, was die Lok “tun” soll. Mit <fn id=”Köf” fnchanged=”2″ f2=”true” /> in Zeile 4 wird die Lokfunktion F2 (Pfeife) aktiviert. Damit die Lok nun nicht ewig lange pfeift (was nervt), wird die Pfeife mit dem ähnlichen Befehl <fn id=”Köf” fnchanged=”2″ f2=”false” /> in Zeile 6 wieder ausgestellt. Dazwischen ist noch ein Wartebefehl sleep. Dieser sorgt mit dem Attribut time mit dem Millisekunden-Wert 200 dafür, dass ca. 200ms zwischen den beiden Pfeifbefehlen verstreichen. Das Ergebnis ist ein kurzer Pfeifton (so wie es sein soll).

Ausführung über Aktion

Jetzt wissen wir schon, was in der Xml-Datei stehen kann. Nun muss die Funktion noch an der passenden Stelle gestartet/ausgeführt werden. Dazu wird in Rocrail eine Aktion erstellt:

In den Optionen der Aktion wählt man “Externes Programm” und als Parameter den Pfad und Dateinamen der Xml-Datei. Fertig!

Führt man die Aktion aus, wird die Xml-Datei eingelesen und die Befehle darin werden sofort ausgeführt.

Die hohe Kunst

Wirklich interessant wird es nun, wenn man bedingte Abfragen, Zufallsvariablen, zeitliche Abfolgen etc mit einbaut. Diese freien Möglichkeiten hat man mit dem “Standard-Rocrail” nämlich nur sehr eingeschränkt. Jetzt können wir beliebig umfangreiche Ereignisse und Abläufe zu unseren Fahrplänen, Lokomotiven, Blöcken usw. programmieren; man kann sich hilfreiche Buttons programmieren, die z.B. den Lieblingszug aus dem Schattenbahnhof holen oder auch ganze Szenerien aus Zügen, Licht, Sound, usw. zusammenstellen. Siehe hierzu auch die weiterführenden Links unter “Anwendung”. Die Möglichkeiten sind hier nahezu unbegrenzt. Eine spezielle Anwendung bei DoktorRail sind die →Stories.

Ein paar Beispiele (siehe auch →das Video)

  • Bedingter Code (If-then):
  • Mehrere Bedingungen (Switch-case)
  • Zufallszahl (Scripte und Rocrail-Aktionen können auch kombiniert werden:
  • Anderes Xml-Script aufrufen (sub):
  • Gruppe von Befehlen in einem Script aufrufen (function):

Unter den →Downloads ist eine Liste der von mir häufig verwendeten Xml-Befehle zu finden. Darunter befinden sich auch die Beispiele →aus dem Video.

Vor- und Nachteile

  • Der Vorteil liegt auf der Hand: Die völlig freie Programmierung (fast) aller Modellbahnfunktionen! Das Realisieren beliebiger Abläufe mit individuellen Bedingungen und Weiterverzweigungen ist möglich. Sonderfunktions-Buttons sind kein Problem mehr.

Aber es gibt wie immer auch ein paar Einschränkungen:

  • Xml-Funktionen dürfen nicht in die Automatik eingreifen (können sie aber!). Schnell hat man mit Xml in eine gerade laufende Fahrstraße eingegriffen und schon geht in der Automatik nichts mehr. Man muss hier genau wissen, was man tut. Beispiel: Die Ausführung einer Lokfunktion “Licht” oder “Pfeife” ist unproblematisch. Nicht gut ist aber, nach Auslösen eines Rückmelders die Lokgeschwindigkeit auf null zu setzen, um irgendwo punktgenau anzuhalten. Jetzt wartet die Automatik lange, bis die Lok im richtigen Block ist… Hierfür wäre eine saubere Fahrstraße der bessere Weg. Als “temporäre Steuerung” beispielsweise für einen Kupplungswalzer ist Xml wiederum sehr gut geeignet. Aufpassen sollte man jedoch, dass der Kupplungswalzer nur mit der richtigen Lok im richtigen Block gestartet wird. Das sind dann Bedingungen, die am Anfang des Scripts abgeprüft werden sollten. So wird der eigentliche Walzer nur ausgeführt, wenn alle Fehlerquellen ausgeschlossen wurden.
  • Die Ausführung der Xml-Scripte kostet Systemzeit. Man sollte sparsam mit Befehlen umgehen. Auch sollten Scripte nicht zu lang werden, da beim Scriptaufruf die Xml-Datei “→ge-parsed” wird, also von Rocrail interpretiert. Auch das kostet Rechenzeit. Insbesondere das zyklische Aufrufen von Script-Aktionen ist mit Vorsicht zu genießen (funktioniert aber i.d.R. gut).
  • Xml-Programmierung ist nicht jedermanns Sache. Wer grundsätzlich ungern programmiert oder sich an den zahlreichen Steuerzeichen stört, wird hiermit nicht glücklich werden.
  • Darüber hinaus ist festzuhalten, das diese Programmierung mit anderen Programmen (Windigipet oder Traincontroller etc) so nicht funktioniert. Der “Stellwerkswärter” bei Windigipet bietet zwar grundsätzlich gleiche Funktionen, lässt sich aber nicht als (Xml-) Textdatei extern parametrieren. Wenn man bei Rocrail mit Xml loslegt, wird man auf absehbare Zeit damit “verheiratet” sein.

Anwendung

Xml-Scripte sind für allgemeine Steuerungsaufgaben da, z.B. “Wenn in dem Fahrplan diese Lok da vorbeikommt, soll sie pfeifen”, oder “wenn ich diesen Button drücke, soll bei Tag der eine Sound kommen, bei Nacht soll ein anderer abgespielt werden”. Die Rocrail-Beschreibung des Xml-Scriptings findet sich:

Bei DoktorRail werden insbesondere die →interaktiven Stories mit Xml umgesetzt.

Fazit

Das Xml-Scripting ist ein sehr mächtiges Werkzeug, welches tolle, nahezu unbegrenzte Möglichkeiten bietet. Die Grundfunktionen von Rocrail sind damit in jede Richtung erweiterbar und können individuell angepasst werden.

Allerdings ist das Scripting nicht ganz einfach in der Anwendung und womöglich nicht jedermanns Sache. Für ambitionierte Nutzer aber ist es das ultimative Werkzeug.




Schreibe einen Kommentar

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