Handbuch

STS Handbuch

Stellwerksim Handbuch

Webseiten-Werkzeuge


Seitenleiste



JavaScript ist deaktiviert!

stellwerksim:editor:themascript:grundbefehl

Dies ist eine alte Version des Dokuments!


Umgekehrt polnische Notation

Alle Zeilen eines Scriptes werden in UPN geschrieben. Dabei werden zuerst die Werte eingegeben und anschliessend die Operatoren, bzw. Befehle. Die Werte werden beim auslesen in den Speicher geladen, die Operatoren dagegen direkt auf die letzten beiden dem Speicher zugeführten Werte angewendet. Das Ergebnis ersetzt dann den Befehl samt seiner Parameter, so daß der nächste Befehl nur noch das Ergebnis sieht. Das folgende animierte Bild zeigt den Rechenablauf.

Grundbefehle

Grundbefehle sind in der Mehrheit Rechenbefehle. Rechenbefehle berechnen etwas aus 2 oder mehr Werten (theoretisch auch nur aus einem Wert, aber da gibts im Moment keinen Befehl). In eckigen Klammern finden sich Beispiele zu den einzelnen Befehlen, sowie nach dem Semikol das Ergebnis.

Die Befehle:

Mathematische

  • rnd 2 Parameter: Zufallszahl zwischen Parametern inklusive Parametern, größerer Wert muß näher am Befehl stehen. [Blockkopf(1,5,rnd); eine Zahl zwischen 1 und 5]
  • oneof mindestens 1 Parameter: Zufallswert aus Liste von Werten, der Parameter, der sich am nächsten beim Befehl befindet zeigt die Anzahl der zu verwendenden Werten. [Blockkopf(1,3,4,3,oneof); 1, 3 oder 4]
  • + 2 Parameter: Addition [Blockkopf(6,2,+); 8]
  • - 2 Parameter: Subtraktion [Blockkopf(6,2,-); 4]
  • * 2 Parameter: Multiplikation [Blockkopf(6,2,*); 12]
  • / 2 Parameter: Division [Blockkopf(6,2,/); 3]

Kommentare

  • # Mit dem Rautenzeichen können Kommentare eingegeben werden. Dies sollte möglichst oft gemacht werden und möglichst alle eingebauten Funktionen beschreiben, zum eigenen Verständnis und für andere Erbauer. [# Dies ist ein Kommentar]

Programmfluß

  • sub 1 Parameter: Ein anderes Themascript wird übernommen und kann durch nachfolgende Zeilen angepasst werden - Unterprogramm [*(1,sub); Script No. 1 wird übernommen]
  • tsub 2 Parameter: Gleich wie sub, allerdings werden nur die Werte eines Themas übernommen (übernommene Zeile wird bei jedem Thema ausgeführt) - Unterprogramm [*(1,winter,tsub); Zeilen zum Thema Winter werden aus Script No. 1 übernommen]
  • hook 1 Parameter: Gleich wie sub, allerdings wird dabei in der nach einem Script gesucht, der aus „ZH-“, dem Nameskürzel der Zugregion und dem Prefix aus dem letzte Parameter am Befehl [*:start(starthook,hook); Gehört das Template zu Merxferri wird das Script mit dem Namen „ZH-MF-starthook“ übernommen]
  • thook 2 Parameter: Gleich wie hook, allerdings werden nur die Werte eines Themas übernommen (übernommene Zeile wird bei jedem Thema ausgeführt) - Unterprogramm [*:start(starthook,winter,thook); Gehört das Template zu Merxferri, werden die Zeilen zum Thema Winter aus „ZH-MF-starthook“ übernommen]
  • regionhook 1 Parameter: Gleich wie hook, allerdinga wird das Zug der Region zu welchem das aktuelle Stellwerk gehört übernommen. Der Name des gesuchten Scripts ist zusammengesetzt aus „RH-“, dem Kürzel der Stellwerksregion, sowie dem Prefix aus dem letzte Parameter am Befehl [*:bahnhof(starthook,regionhook); Befindet sich der Zug aktuell in Merxferri wird das Script „RH-MF-starthook“ übernommen]
  • tregionhook 2 Parameter: Gleich wie regionhook, allerdings werden nur die Werte eines Themas übernommen (übernommene Zeile wird bei jedem Thema ausgeführt) - Unterprogramm [*:start(starthook,winter,tregionhook); Befindet sich der Zug in Merxferri, werden die Zeilen zum Thema Winter aus „RH-MF-starthook“ übernommen]

Wichtig: in einem regionhook und tregionhook darf kein sub verweisend auf ein Script, welches seinerseits ein regionhook/tregionhook besitzt verweisen, insbesondere das –Standard-ThemaScript (1) oder ein anderes Themascript, welches auf das –Standard-ThemaScript (1) verweist, eingebunden werden.

  • if 3 Parameter: Gibt der erste Parameter TRUE zurück, wird der zweite ausgeführt, sonst der dritte [Blockkopf(Ein Wert,1,=,(Ausgabe 1),(Ausgabe 2),if); Ist der Wert 1, wird die Ausgabe 1 ausgegeben, sonst die Ausgabe 2]
  • nop kein Parameter: tut nichts, nötig für leere IF-Subcodes

Ausgabe/Debug

Wird eine nicht nachvollziehbare Ausgabe erzeugt, kann dies am Befehl liegen. Dann wird der entsprechende Befehl durch einen der beiden Debugbefehle ersetzt. Wird nun im TS-Test wieder der richtige Wert ausgegeben, sie ist der ersetzte Befehl gestört. Diese Befehle werden nur selten benötigt.

  • print 1 Parameter: gibt den Wert aus - für Testzwecke
  • spy 1 Parameter: gibt den Wert aus und macht ihn für den nächsten Befehl wieder verfügbar - für Testzwecke

Boolsche Operationen (Ausgabe immer 1 für Wahr und 0 bzw. leerer Wert)

  • = 2 Parameter: vergleichen [Blockkopf(1,1,= ); 1]
  • < 2 Parameter: kleiner als, größerer Wert muß näher am Befehl stehen [Blockkopf(1,3,<); 1]
  • > 2 Parameter: größer als [Blockkopf(3,1,>); 1]
  • <= 2 Parameter: kleiner oder gleich [Blockkopf(1,3,<=); Blockkopf(1,1,<=); gibt beides 1 aus]
  • >= 2 Parameter: größer oder gleich [Blockkopf(3,1,>= ); Blockkopf(1,1,>= ); gibt beides 1 aus]
  • and 2 Parameter: logisches Und (beide Werte grösser 0) [Blockkopf(1,1,and); 1; Blockkopf(1,2,and); 1; Blockkopf(2,0,and ); 0;]
  • or 2 Parameter: logisches Oder (min. ein Wert grösser 0) [Blockkopf(1,1,or,1,= ); 1; Blockkopf(1,2,or,1,= ); 1; Blockkopf(0,0,or,1,= ); 0;]
  • not 1 Parameter: logisches Nicht (letzter Wert wird „gedreht“) [Blockkopf(1,not); 0; Blockkopf(2,not); 0; Blockkopf(0,not); 1;]
stellwerksim/editor/themascript/grundbefehl.1457866715.txt.gz · Zuletzt geändert: 2016/03/13 11:58 von 127.0.0.1