Inhaltsverzeichnis

Tutorial: Anwendung von ThemaScripts

Im weiteren soll auf die praktische Anwendung von ThemaScripts eingegangen werden. Um sich selbst mit diesen Scripten vertraut zu machen, empfiehlt es sich bereits vorhandene aus der ThemaScript-Liste zu studieren und zu verstehen, was dort gemacht wird.

Grundsätzlich kann man sich in der Library alle Scripte ansehen. Die Scripte gehören jedoch einem Benutzer und in der Regel kann natürlich auch nur dieser Benutzer das Script bearbeiten. Man kann jedoch auch ein vorhandenes Script kopieren und dieses dann für eigene Zwecke benutzen.

Beispiel 1: Verspätung und Tempo

Betrachten wir das Standardbeispiel (schon recht komplex), das auch im Script-Editor angeführt wird: winter:start(5,20,rnd,verspätung,5,6,7,3,oneof,tempo); Pflücken wir es auseinander. Zunächst haben wir einen Blockkopf winter:start();. Das Script wirkt also nur beim Thema „Winter“. Die Angabe „start“ bedeutet, dass das Script auf den ganzen Zuglauf wirkt.

Betrachten wir nun das eigentliche Script zwischen den runden Klammern. Bei der umgekehrten polnischen Notation bietet es sich häufig an von rechts nach links zu lesen. Beeinflußt werden soll das tempo eines Zuges, es wird auf einen (oneof) der Werte 3, 5, 6 oder 7 gesetzt. Gesetzt wird ebenfalls die Eigenschaft Verspätung auf einen Wert der zufällig (rnd) zwischen 5 und 20 liegt. In jedem Stellwerk wird also das Tempo und die Verspätung neu gesetzt.

Übrigens, das Standardthemascript, das tatsächlich im Sim eingesetzt wird, ist deutlich aufwendiger und umfangreicher als dieses Beispiel. Kann man sich gerne unter der ID 1 anschauen.

Beispiel 2: Mehrere Zeilen

Das Script darf natürlich aus mehreren Zeilen bestehen, die nacheinander abgearbeitet werden. Ein sehr einfaches Beispiel sind die Themenscripte, mit denen man Zugtemplates themenabhängig steuern kann, z.B.: *(1,sub); Winter:Start(N,aktiv); schwerer_Winter:Start(N,aktiv); Dieses Script besteht aus drei Zeilen. Die erste Zeile gilt immer. Es wird mit dem Befehl sub ein anderes Themenscript mit eingebunden, nämlich das Standardthemenscript ID 1, das üblicherweise für alle Züge aktiv ist. Die zweite Zeile gilt beim Thema „Winter“ und schaltet für das Zugtemplate den Wert aktiv auf N, also nein. Damit ist also dieses Zugtemplate beim Thema „Winter“ nicht aktiv und der Sim schickt diese Züge gar nicht erst los. Analog die dritte Zeile bei „schwerem Winter“.

Beispiel 3: Abfragen

Es wird komplizierter. Nun wollen wir Änderungen auf ein Zugtemplate in Abhängigkeit von bestimmten Voraussetzungen wirken lassen. Hierfür gibt es die if-Abfrage. Wir wollen es wieder anhand eines Beispiels aufzeigen: *:bahnhof($altaid,412,=,(7,laenge),(nop),if); Was passiert hier? Wir lesen wieder zunächst den Kopf: Das Script gilt für jeden Bahnhof. Das Script selbst ist etwas schwieriger zu lesen. Von rechts gelesen wissen wir zunächst, dass es sich um eine Abfrage (if) handelt. Das Ergebnis der Abfrage bestimmt sich aus einer booleschen Operation, also einem Operation die „wahr“ oder „falsch“ als Ergebnis hat. Dementsprechend gibt es auch genau zwei mögliche Aktionen, die ausgeführt werden - nämlich den Befehl der bei „falsch“ ausgeführt wird und den Befehl der bei „wahr“ ausgeführt wird. In unserem Beispiel ist der „Falsch Befehl“ der Befehl nop, d.h. tue gar nichts. Der „Wahr Befehl“ ist (7,laenge), d.h. setze die Länge auf den Wert 7. Was uns nun noch fehlt ist die boolesche Operation, die uns überhaupt erst auf den einen oder anderen Befehl führt. Diese findet sich in den (von rechts gelesen) letzten drei Feldern: $altaid,412,=. Die zwei Werte $altaid und 412 müssen = also gleich sein. $altaid ist dabei die Anlagen-ID des vorherigen Stellwerks, das durchfahren wurde. Setzen wir die Informationen zusammen: Wenn $altaid gleich 412 ist, setze die Länge des Zuges auf 7. oder auch Wenn Augsburg durchfahren wurde, erhält der Zug Länge 7. Für Abfragen gibt es vielfältige Möglichkeiten. Allerdings sind solche Abfragen programmier- und laufzeittechnisch gesehen in der Regel sehr langsam. Sie sollten nur eingesetzt werden, wenn eine andere Lösung nicht möglich ist.

Beispiel 4: Verwendung von simparam

Kommen wir zur hohen Kunst der ThemaScript-Erstellung - die Verwendung von simparam. Die Syntax ist dabei eigentlich sogar leichter als bei den Abfragen, es lassen sich aber komplexe Beeinflussungen eines Zugtemplates realisieren.

Wir stellen uns mal ein Stellwerk vor, in dem ein Übergang auf eine Schnellfahrstrecke ab dem Bahnsteig „NBS“ simuliert wird. Im Stellwerk (ID=10) ist das maximale Tempo auf 5 gesetzt. Bestimmte Züge sollen mit Anfang der Schnellfahrstrecke auf Tempo 7 gesetzt werden. Das gleiche soll auch im Stellwerk mit ID=11 passieren. Für das Zugtemplates dieser Züge könnte man nun folgendes ThemaScript setzen: *:Bahnhof:10,11(7,soll_tempo,NBS,simparam); Dieses Script gilt also für das Stellwerk mit ID 10 und 11, mit Befahren des Bahnsteigs „NBS“ wird in diesen Stellwerken das Tempo auf 7 gesetzt (solange bis das Stellwerk verlassen wird oder ein anderer Bahnsteig in diesem Stellwerk erreicht wird).