Handbuch

STS Handbuch

Stellwerksim Handbuch

Webseiten-Werkzeuge


Seitenleiste



JavaScript ist deaktiviert!

stellwerksim:erbauer:tutorials:bauen:zuege:zugscript1

Tutorial: Zugscript (1)

Erbauer bearbeiten also Zugtemplates, aus denen dann Züge erzeugt werden. Aber wie funktioniert diese Erzeugung eigentlich?

Dafür gibt es eine eigene Sprache, das Zugscript. Darüber teilt man dem Server mit, wie und welche Züge er erzeugen soll. Die Erzeugung findet dann im Zugscriptlauf statt. Dort schaut sich der Server die Zugscript von allen vorgemerkten Zugtemplates an und erzeugt anhand dessen Züge, die anschließend in den Stellwerken fahren können.

Im Folgenden soll das anhand einer Strecke von A-Dorf nach B-Hausen erklärt werden.

Ein einzelner Zug

Wir wollen also einen Zug von A-Dorf nach B-Hausen fahren lassen. Er soll um 5:30 Uhr in A-Dorf abfahren und um 6:00 Uhr in B-Hausen ankommen. Unser Fahrplan sieht daher wie folgt aus:

5:30 A-Dorf
6:00 B-Hausen

Da der Zug später alle Stunde fahren soll, bedienen wir uns einer Vereinfachung: Wir merken uns neben dem Fahrplan nur die Stunde, in der er fährt - die Minute bleibt ja immer gleich. Die Aufgabe würde also lauten:

Fahre in A-Dorf zur Stunde 5 ab.

Dies wollen wir nun möglichst direkt auch dem Server sagen. Das passende Zugscript sieht wie folgt aus:

takt(60,ID=123,GLEIS=A-Dorf,STUNDE=5);

GLEIS und STUNDE erkennt man relativ leicht wieder. Die ID bezeichnet die Anlage (das Stellwerk), in dem sich das Gleis A-Dorf befindet. Alle Anlagen haben eine eindeutige Anlagen-ID (AID). Als Beispiel wurde hier 123 genommen. Die Zahl hinter der öffnenden Klammer ist der einzige Wert im Zugscript ohne Name und gibt an, in welchem Takt das Zugtemplate fährt (hier 60 Minute = alle Stunde). Dieser Wert muss immer ganz vorne stehen und immer angegeben werden, auch wenn wie hier nur ein Zug erzeugt werden soll. Bei Einzelzügen ist der Wert natürlich unwichtig und kann prinzipiell frei gewählt werden, typischerweise wird hier aber auf 60 Minuten zurückgegriffen.

takt(<Takt in Minuten>,ID=<AnlagenID>,GLEIS=<Gleisname>,STUNDE=<Abfahrtsstunde>);

ID und GLEIS werden zusammen als Referenzgleis des Zugscript bezeichnet.

Die Stunde könnte übrigens auch mit früher 0 geschrieben werden - das macht keinen Unterschied.

takt(60,ID=123,GLEIS=A-Dorf,STUNDE=05);

Das Zugscript kann natürlich noch viel mehr, für diese Beispiele soll es aber erstmal reichen.

Zugscriptlauf

Im Zugscriptlauf legt der Server nun Fahrplan und Zugscript nebeneinander und sucht das Gleis, das im Zugscript steht, im Fahrplan. Anschließend vergleicht er die Zeiten: 5:30 Uhr im Fahrplan und 5:xx Uhr im Zugscript (die Minuten sind ja unerheblich). Da die Zeiten übereinstimmen, braucht er nicht mehr zu machen, als einen Zug mit den Fahrplan des Zugtemplates zu erzeugen.

Ein zweiter Zug

Nun soll ein weiterer Zug fahren, eine Stunde später (um 6:30 Uhr). Wir belassen den Fahrplan und formulieren nur den Auftrag neu:

Fahre in A-Dorf zur Stunde 6 ab.

unser Zugscript passen wir entsprechend an:

takt(60,ID=123,GLEIS=A-Dorf,STUNDE=6);

Wir haben also nur das Zugscript angepasst, nicht den Fahrplan des Zugtemplates.

Im Zugscriptlauf vergleicht der Server wieder die Zeiten im Fahrplan (5:30) und im Zugscript (6:xx) und bemerkt eine Differenz von 1 Stunde (+1:00, da er ja nur auf die Stunde schaut und die Minuten ignoriert). Daher rechnet er diese Stunde beim Erstellen des Zuges auf den Zugtemplate-Fahrplan auf:

5:30 + 1:00 = 6:30 A-Dorf
6:00 + 1:00 = 7:00 B-Hausen

Damit fährt der Zug um eine Stunde versetzt zum ersten Zug, aber unabhängig von dessen Zugscript. Außerdem ist es für die erzeugten Züge egal, wann der Zugtemplate-Fahrplan liegt - entscheidend ist das Zugscript! Wenn der Zugtemplate-Fahrplan mit einem der erzeugten Zug-Fahrpläne übereinstimmt, ist das aber überichtlicher und vermeidet Fehler.

Weitere Züge

Nach diesem Muster könnten wir nun weitermachen, bis wir für jeden Zug ein Zugscript erstellt haben. Allerdings wäre das ein großer Aufwand und ist sehr unübersichtlich. Kein Mensch würde alle Züge eines Tages aufzählen, wenn sie alle Stunde fahren.

Fahre in A-Dorf zwischen 5 und 21 Uhr alle 60 Minuten ab.

Daher gibt es auch im Zugscript eine zusammenfassende Schreibweise, um in einem Zeitraum Züge zu erzeugen:

takt(60,ID=123,GLEIS=A-Dorf,STUNDE=5..21);

Dabei gibt es 2 Dinge zu beachten:

  • Zwischen den beiden Zahlen sind nur 2 Punkte
  • Die hintere Zahl ist exklusiv - der letzte erzeugte Zug fährt vor 21 Uhr, d.h. 20:30 Uhr

Es werden also 16 Züge erzeugt:

5:30, 6:30, ..., 19:30, 20:30

Im Zweifelsfall ist es immer sinnvoll, die erzeugten Züge nachzuzählen.

Folgende Zugscripte würden also nur einen Zug erzeugen:

takt(60,ID=123,GLEIS=A-Dorf,STUNDE=5..6);
takt(60,ID=123,GLEIS=A-Dorf,STUNDE=5);

Einen Zug ausfallen lassen

Nun soll zur Mittagszeit ein Zug weniger fahren, weil die erforderliche Nachfrage nicht vorhanden ist. Die können wir einfach mit zwei Zugscripten abbilden:

takt(60,ID=123,GLEIS=A-Dorf,STUNDE=5..12);
takt(60,ID=123,GLEIS=A-Dorf,STUNDE=13..21);

Einfacher ist es aber, diese beiden Zeiträume in einem Zugscript darzustellen:

takt(60,ID=123,GLEIS=A-Dorf,STUNDE=5..12,STUNDE=13..21);

In einem Zugscript dürfen beliebig viele STUNDE-Parameter in beliebiger Reihenfolge vorkommen. Apropos Reihenfolge: Auch die anderen Parameter mit Ausnahme des Taktes können nach Wunsch vertauscht werden. ID und GLEIS müssen aber auf jeden Fall vorhanden sein.

takt(60,STUNDE=13..21,GLEIS=A-Dorf,STUNDE=5..12,ID=123);

Der Übersichtlichkeit halber sollte man allerdings einheitlich bleiben.

Und im nächsten Tutorial...

… geht es mit weiteren Parametern für das Zugscript weiter.

stellwerksim/erbauer/tutorials/bauen/zuege/zugscript1.txt · Zuletzt geändert: 2020/05/19 17:56 von fablu97