xmlscripting-de
Differences
This shows you the differences between two versions of the page.
Previous revision | |||
— | xmlscripting-de [2025/06/28 00:13] (current) – [foreach] rainerk | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== XMLScript ====== | ||
+ | [[: | ||
+ | [[german|Inhalt]] -> [[german# | ||
+ | * [[actions-de|Aktionen definieren]] | [[actionctrl-de|Aktions-Steuerung]] | [[actionctrl-de# | ||
+ | * [[: | ||
+ | * [[: | ||
+ | * [[: | ||
+ | |||
+ | | [[: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ^ NICHT FÜR UNERFAHRENE ANWENDER ! ! ! ^ | ||
+ | \\ | ||
+ | |||
+ | =====Warnung===== | ||
+ | - Standard-Rocrail-Funktionen nicht durch XMLScript ersetzen. | ||
+ | - Nicht versuchen, die Rocrail-Automatik //durch den Wolf zu drehen//. | ||
+ | - Die Scripte werden asynchron augeführt und erfordern Kenntnisse in Multithreading-Programmierung. | ||
+ | - Wenn unerwartetes Verhalten auftritt: Die XMLScript-Aktionen deaktivieren. | ||
+ | - Wenn Unsicherheit besteht, kein XMLScript verwenden oder im __**[[https:// | ||
+ | - Nicht die gleichen Variablen in mehreren XMLScripten verwenden, denn die Werte könnten neu gesetzt werden, \\ was zu unerwarteten Ergebnissen, | ||
+ | __**[[start-de# | ||
+ | |||
+ | |||
+ | \\ | ||
+ | ===== Einführung ===== | ||
+ | | :!: Es sollten immer erst die grundlegenden Rocrail-Funktionen bekannt sein, __//bevor mit XMLScript das Rad neu erfunden wird.//__ | | ||
+ | |||
+ | XML-Skripte können in Kombination mit der Aktion __**[[: | ||
+ | Das primäre Ziel von XML-Skripten ist die Vereinfachung und die Reduzierung der Anzahl von Aktionen und Bedingungen.\\ | ||
+ | Das für Skripting verwendete XML ist das gleiche, wie im __**[[https:// | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== Voraussetzungen ===== | ||
+ | * __**[[https:// | ||
+ | * Der Windows-Notepad-Editor wird __**nicht unterstützt**__. | ||
+ | * Einige Programmier- und XML-Kenntnisse | ||
+ | |||
+ | \\ | ||
+ | |||
+ | =====Empfehlung===== | ||
+ | * Die XmlScripte kurz sowie ohne lange Pausen (sleep) und lange Schleifen (loop) halten. \\ Sonst blockiert es das aufrufende Objekt bei der Bearbeitung von Ereignissen und Befehlen, wenn es nicht als __**[[: | ||
+ | * Nicht versuchen, den Automatik-Modus zu überlisten; | ||
+ | * Objekt-Kennungen mit Leerzeichen werden nicht unterstützt; | ||
+ | * Variablen-/ | ||
+ | \\ | ||
+ | |||
+ | =====Einstellung===== | ||
+ | // | ||
+ | - XmlScript erzeugen und in einer Datei speichern. (Siehe: __**[[# | ||
+ | - Erzeugen einer "Ext. Programm starten" | ||
+ | - Die XmlScript-Datei auswählen. (Wenn sich die Script-Datei im Arbeitsbereich-Ordner befindet, ist die Pfadangabe | ||
+ | - Bereit, diese Aktion bei jedem Rocrail-Objekt zu verwenden. | ||
+ | {{: | ||
+ | |||
+ | ====Einfaches Beispiel==== | ||
+ | Schaltet die Gleisspannung ein und startet den Automatik-Modus: | ||
+ | <code xml> | ||
+ | < | ||
+ | <sys cmd=" | ||
+ | <auto cmd=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | =====Auf dem Server editieren===== | ||
+ | Das Erzeugen und Editieren von XMlScripten auf dem Server kann über den Aktionsdialog erfolgen:\\ | ||
+ | | {{: | ||
+ | | Öffnen des XmlScript-Editors. \\ Alternativ kann der Editor auch in der Übersicht \\ durch Doppelklick auf eine Aktion geöffnet werden. | ||
+ | |||
+ | Wenn das XMlScript auf dem Server noch nicht existiert, wird ein XMlScript-Skelett erzeugt: | ||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | < | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | Wird zu "< | ||
+ | Also z.B: | ||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | < | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | =====XMLScript-Editor===== | ||
+ | {{: | ||
+ | |||
+ | ====Finden==== | ||
+ | Im linken Feld eingegebener Text wird im Script gesucht und markiert. | ||
+ | === Suchen und ersetzen === | ||
+ | Bei aktivierter Option wird der gefundene Text durch den im rechten Feld eingegeben Text ersetzt. | ||
+ | ====Prüfen==== | ||
+ | Prüft, ob das XML-Skript "Well Formed" | ||
+ | ====Einfügen==== | ||
+ | Fügt ausgewählte Anweisungen oder Befehle an der Cursor-Position ein.\\ | ||
+ | Die [**\n**]-Optionen steuern die Line-Feeds (Zeilenvorschub-Zeichen) vor und nach der Anweisung.\\ | ||
+ | \\ | ||
+ | |||
+ | ====macOS==== | ||
+ | :!: Um diesen Editor zu verwenden, muss die Option " | ||
+ | {{: | ||
+ | **Systemeinstellungen -> Sprache & Region -> Systemeinstellung " | ||
+ | |||
+ | %% | ||
+ | Mit dieser voreingestellten Option, werden doppelte Bindestriche (--), die in XML-Kommentaren verwendet werden, in einfache lange Bindestriche (—), | ||
+ | sowie (" | ||
+ | %% | ||
+ | \\ | ||
+ | __** Das macht das XMlScript ungültig. **__ | ||
+ | \\ | ||
+ | \\ | ||
+ | =====Aufruf-Parameter===== | ||
+ | Auf Aufruf-Parameter kann durch Variablen mit der Benamung " | ||
+ | Siehe: __**[[: | ||
+ | Beispiel-Schnipsel: | ||
+ | <code xml> | ||
+ | < | ||
+ | <if condition=" | ||
+ | < | ||
+ | </ | ||
+ | </if> | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | =====Anweisungen===== | ||
+ | ====foreach==== | ||
+ | Die **foreach**-Schleife wird für "tu dieses mit allem in dieser Tabelle" | ||
+ | Die Schleife kann mit einer **break**- oder **exit**-Anweisung gestoppt werden.\\ | ||
+ | Wenn die Bedingung und/oder der Status nicht passt, wird zum nächsten Objekt in der Tabelle gesprungen.\\ | ||
+ | <code xml> | ||
+ | < | ||
+ | <foreach table=" | ||
+ | <fn fnchanged=" | ||
+ | <vr id=" | ||
+ | <vr id=" | ||
+ | <lc cmd=" | ||
+ | <sleep time=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | Dieses Skript wird die Lok-Tabelle iterieren((den gleichen Vorgang für jede in der Lok-Tabelle gefundene Lok wiederholen)), | ||
+ | Die **oid**, die Kennung des aktuellen Objekts in der Liste, wird in der foreach-Schleife automatisch generiert.\\ | ||
+ | Falls die Tabelle **lclist** ist, kann auch die Kurzkennung verwendet werden: %soid%" | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | <foreach table=" | ||
+ | <lc cmd=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | Diese foreach-Schleife startet alle Loks mit der Klasse BA.\\ | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | <foreach table=" | ||
+ | <if state=" | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | Startet jede Lok, die sich in Block ' | ||
+ | |||
+ | ===Hinweise=== | ||
+ | * Alle objektbezogenen Variablen werden in der Schleife mit den tatsächlichen Objektwerten gefüllt. (Beispiel: %lcid% wird in einem foreach für jede Lok in der lclist gesetzt.) | ||
+ | \\ | ||
+ | ====while==== | ||
+ | Die **while**-Anweisung ist eine Schleife und kann Bedingungen, | ||
+ | Solange die Anweisung __wahr__ ist, werden die Befhle im **while** ausgeführt.\\ | ||
+ | <code xml> | ||
+ | < | ||
+ | <vr id=" | ||
+ | <while condition="# | ||
+ | <vr id=" | ||
+ | < | ||
+ | <sys cmd=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | Wenn die while-Schleife endlos ist, wird sie gestoppt, wenn das max-Attribut erreicht wird, das auf 10 voreingestellt ist.\\ | ||
+ | Höhere Werte als 100 werden auf 100 begrenzt, um Serverblockierungen und Unfälle automatisch fahrender Lokomotiven zu vermeiden.\\ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== if ==== | ||
+ | Die **if**-Anweisung wird für die Ablauf-Steuerung verwendet und kann Bedingungen, | ||
+ | Wenn die Anweisung __wahr__ ist, werden die Befehle im **then** ausgeführt, | ||
+ | Das **else** ist optional.\\ | ||
+ | <code xml> | ||
+ | < | ||
+ | <if condition="# | ||
+ | < | ||
+ | <lc id=" | ||
+ | <tx id=" | ||
+ | </ | ||
+ | < | ||
+ | <lc id=" | ||
+ | <lc id=" | ||
+ | <bk id=" | ||
+ | <bk id=" | ||
+ | </ | ||
+ | </if> | ||
+ | </ | ||
+ | </ | ||
+ | Der Text-Inhalt der Variable **loco** enthält die Lok-Kennung.\\ | ||
+ | Wenn die Lok-Kennung nicht existiert, wird nach einem Block mit dieser Kennung gesucht und im Falle das dieser existiert, wird die Lok-Kennung in dem Block verwendet.\\ | ||
+ | Sowohl **condition** als auch **state** können in der **if**-Bedingung verwendet werden. Mindestens eines von beiden muss angegeben werden.\\ | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | <if state=" | ||
+ | < | ||
+ | <tx id=" | ||
+ | </ | ||
+ | < | ||
+ | <tx id=" | ||
+ | </ | ||
+ | </if> | ||
+ | </ | ||
+ | </ | ||
+ | Text **tx1** zeigt " | ||
+ | Ist keine der Routen im Status **locked**, zeigt **tx1** " | ||
+ | \\ | ||
+ | |||
+ | ====switch==== | ||
+ | Der Ganzzahlwert der Variablen wird verwendet, um den Fall mit dem gleichen Wert auszuwählen.\\ | ||
+ | Wenn nichts passendes gefunden wird, wird der voreingestellte Wert verwendet, falls er definiert ist.\\ | ||
+ | |||
+ | ===Zahlen-Beispiel=== | ||
+ | <code xml> | ||
+ | < | ||
+ | <switch var="# | ||
+ | <case val=" | ||
+ | <sys cmd=" | ||
+ | </ | ||
+ | <case val=" | ||
+ | <auto cmd=" | ||
+ | </ | ||
+ | < | ||
+ | <sys cmd=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Eine case-Anweisung kann mehrere Ganzzahlwerte in folgendem Format enthalten: | ||
+ | <code xml> | ||
+ | <case val=" | ||
+ | </ | ||
+ | Einer der Werte muss passen.\\ | ||
+ | |||
+ | ===Zeichenketten-Beispiel=== | ||
+ | <code xml> | ||
+ | < | ||
+ | <switch var=" | ||
+ | <case val=" | ||
+ | <sys cmd=" | ||
+ | </ | ||
+ | <case val=" | ||
+ | <sys cmd=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | Hinweis: //Eine switch-Anweisung hat nichts mit einem Rocrail-Weichen-Objekt zu tun. Es entspricht z.B. ''" | ||
+ | \\ | ||
+ | |||
+ | ====call==== | ||
+ | Funktionen müssen auf der ersten Ebene des XMLScripts deklariert werden und eine Kennung (ID) haben.\\ | ||
+ | Aufruf (call) mit der gewünschten ID: ''< | ||
+ | Mehrere Funktionen sind erlaubt.\\ | ||
+ | Auf Parameter kann durch '' | ||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | <tx id=" | ||
+ | </ | ||
+ | |||
+ | <switch var="# | ||
+ | <case val=" | ||
+ | <sys cmd=" | ||
+ | </ | ||
+ | < | ||
+ | <sys cmd=" | ||
+ | <call id=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | ===Einschränkungen=== | ||
+ | * Calls in Funktionen werden nicht unterstützt. | ||
+ | * Max. Aufruf Tiefe ist 5. | ||
+ | \\ | ||
+ | |||
+ | ==== exit ==== | ||
+ | Zum Verlassen des XML-Skrips. cmt=“reason” kann für die Ablaufverfolgung (Tracing) angegeben werden. \\ | ||
+ | <code xml> | ||
+ | < | ||
+ | <if condition=""> | ||
+ | < | ||
+ | <exit cmt=" | ||
+ | </ | ||
+ | </if> | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | ==== break ==== | ||
+ | Beendet eine foreach- und while-Schleife mit oder ohne Bedingung. cmt=“reason” kann für die Ablaufverfolgung (Tracing) angegeben werden. \\ | ||
+ | Diese Anweisung hat keinen Effekt, wenn sie nicht innerhalb einer foreach-Schleife erfolgt. \\ | ||
+ | <code xml> | ||
+ | < | ||
+ | <foreach table=" | ||
+ | <if condition=""> | ||
+ | < | ||
+ | <break cmt=" | ||
+ | </ | ||
+ | </if> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | ====trace==== | ||
+ | XmlScript-Traces werden in Rocview in grüner Farbe angezeigt. | ||
+ | <code xml> | ||
+ | < | ||
+ | <trace text=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ====sleep==== | ||
+ | Eine Pausen-Zeit in ms. | ||
+ | <code xml> | ||
+ | < | ||
+ | <foreach table=" | ||
+ | <if condition=""> | ||
+ | < | ||
+ | <sleep time=" | ||
+ | </ | ||
+ | </if> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== sub ==== | ||
+ | Ruft ein anderes XML-Skript mit '' | ||
+ | <code xml> | ||
+ | < | ||
+ | <sub file=" | ||
+ | </ | ||
+ | </ | ||
+ | Wenn die Funktions-ID auf Unterstrich, | ||
+ | Wenn keine Funktions-ID eingestellt ist, wird die %oid% verwendet, um eine passende Funktion zu finden.\\ | ||
+ | Auf Parameter kann durch '' | ||
+ | \\ | ||
+ | Bibliotheks-Beispiel **lib1.xml**: | ||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | <sys cmd=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | Die Funktions-ID muss zum Aufruf von Funktionen aus einer XMlScript-Bibliotheks-Datei verwendet werden.\\ | ||
+ | Sehr hilfreich, wenn mehrere XMlScripte sich gemeinsam Funktionen teilen.\\ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ====query==== | ||
+ | Mit der **query**-Anweisung (Abfrage) kann eine Variable verwendet werden, um das Attribut Text oder Integer-Wert eines bestimmten Objekts zu erhalten.\\ | ||
+ | Ein **query** bietet nur Objekt-Eigenschaften, | ||
+ | <code xml> | ||
+ | <query vr=" | ||
+ | </ | ||
+ | Nach dem **query** kann die Variable für Vergleiche von Text und/oder Zahlen verwendet werden. Normaler Text hat einen Null-Wert als Ergebnis.\\ | ||
+ | |||
+ | \\ | ||
+ | Um einen Wert von einem Sub-Knoten zu erhalten: | ||
+ | <code xml> | ||
+ | <query vr=" | ||
+ | </ | ||
+ | Anstelle von '' | ||
+ | \\ | ||
+ | | Query-Variable müssen XMLScript-eindeutig sein, um unerwartete Ergebnisse zu vermeiden. :!: | | ||
+ | |||
+ | ===Funktions-Beispiel=== | ||
+ | Die Lok-Kennung, | ||
+ | Der Funktions-Befehl erfordert eine Lok-Kennung, | ||
+ | <code xml> | ||
+ | < | ||
+ | <query vr=" | ||
+ | <fn id=" | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | ====set==== | ||
+ | Mit der **set**-Anweisung (Einstellen)kann eine Variable verwendet werden, um das Attribut Text oder Integer-Wert eines bestimmten Objekts, abhängig von '' | ||
+ | <code xml> | ||
+ | <set vr=" | ||
+ | </ | ||
+ | Um einen Wert eines Sub-Knotens einzustellen: | ||
+ | <code xml> | ||
+ | <set vr=" | ||
+ | </ | ||
+ | Anstelle von '' | ||
+ | |||
+ | \\ | ||
+ | ====clock==== | ||
+ | |< >| | ||
+ | | 15401+ | | ||
+ | Mit dem "clock get" | ||
+ | <code xml> | ||
+ | <clock cmd=" | ||
+ | </ | ||
+ | werden drei Variable aktualisiert. | ||
+ | |< >| | ||
+ | ^ Variablen-Name ^ Wert ^ Text ^ | ||
+ | | modeltime | Stunde * 3600 + Minute * 60 + Sekunden | hh:mm.ss | | ||
+ | | realtime | Stunde * 3600 + Minute * 60 + Sekunden | hh:mm.ss | | ||
+ | | systemtick | Anzahl von 10ms seit Rocrail-Server-Start | - | | ||
+ | Der systemtick läuft bei 4294967295 (119,3 Stunden) auf 32bit und 18446744073709551615 auf 64bit-Systemen über.\\ | ||
+ | |||
+ | \\ | ||
+ | ===== Format von Bedingungen ===== | ||
+ | |< >| | ||
+ | | Wert | Komparator | Wert |\\ | ||
+ | Weitere Bedingungen müssen mit einem // | ||
+ | < | ||
+ | condition="# | ||
+ | </ | ||
+ | Für mögliche Variable siehe: __**[[: | ||
+ | \\ | ||
+ | |< >| | ||
+ | ^ System-Variablen ^^ | ||
+ | | &time | Modell-Zeit in Sekunden | | ||
+ | |||
+ | \\ | ||
+ | |< >| | ||
+ | ^ Komparatoren ^^ | ||
+ | | = | gleich; Zahlen | | ||
+ | | ! | nicht gleich; Zahlen | | ||
+ | | # | gleich; Text | | ||
+ | | - | nicht gleich; Text | | ||
+ | | > | größer als; Zahlen | | ||
+ | | < | kleiner als; Zahlen | | ||
+ | | ~ | enthält; Text (@var_1 ~ @var_2 ist wahr, wenn der Text in @var_2 im Text von @var_1 enthalten ist.) ab rocrail 2.1.1010 | ||
+ | |||
+ | |||
+ | ====alltrue==== | ||
+ | //Alltrue// ist standardmäßig '// | ||
+ | Wenn //alltrue// auf ' | ||
+ | |||
+ | \\ | ||
+ | ==== connect ==== | ||
+ | Falls die if-Anweisungen " | ||
+ | Wenn nur einer der Werte wahr sein muss, kann das " | ||
+ | |||
+ | |||
+ | ===== Format von Status/ | ||
+ | |< >| | ||
+ | | Objekt-Typ | | Objekt-Kennung ohne Leerzeichen | | Komparator | | Status-/ | ||
+ | Die Werte müssen mit Leerzeichen getrennt werden.\\ | ||
+ | < | ||
+ | state=" | ||
+ | </ | ||
+ | |||
+ | :!: Objekt-Kennungen dürfen __keine Leerzeichen__ enthalten! Stattdessen z.B. Unterstriche oder Punkte verwenden.\\ | ||
+ | \\ | ||
+ | |< >| | ||
+ | ^ Komparatoren ^^ | ||
+ | | = | Status: gleich | | ||
+ | | ! | Status: nicht gleich | | ||
+ | \\ | ||
+ | |||
+ | ==== Status-Objekte ==== | ||
+ | |< >| | ||
+ | ^ Objekt-Name ^ Objekt-Typ ^ Status-Werte ^ Hinweis ^ | ||
+ | | Signal | sg | red, green, yellow, white, blank, aspect number | | | ||
+ | | Weiche | sw | left, right, straight, turnout, locked, free, unlocked, open, closed | | | ||
+ | | Rückmelder | fb | true, false, on, off | **on** und **off** sind alternativ: **true** = **on**; **false** = **off** | | ||
+ | | Ausgang | co | on, off, active | | | ||
+ | | Ortschaft | location | free | Der ' | ||
+ | | Block | bk | free, !free, occupied, closed, open, reserved | | | ||
+ | | Drehsscheibe | tt | free, occupied, closed, open, reserved, #, pending | Das Zeichen **#** steht für die aktuelle Brückenposition. \\ Der Status **pending** ist wahr, während sich die Brücke bewegt. | | ||
+ | | Fahrstraße | st | free, locked, unlocked, closed | | | ||
+ | | System | sys | go, stop | | | ||
+ | | Automode | auto | on, off | | | ||
+ | | Lokomotive | lc | fwd, rev, +, -, min, mid, cruise, max, block, "// | ||
+ | | Wagen | car | empty, loaded, maintenance, | ||
+ | | Frachtschein | waybill | waiting, shipping, delivered, "// | ||
+ | | Text | tx | on, off | Falls der Typ " | ||
+ | \\ | ||
+ | |||
+ | ==== Klassen-Objekte ==== | ||
+ | |< >| | ||
+ | ^ Objekt-Name ^ Objekt-Typ ^ | ||
+ | | Block | bk | | ||
+ | | Lok | lc | | ||
+ | | Fahrstraße | st | | ||
+ | \\ | ||
+ | |||
+ | ===== Befehle ===== | ||
+ | |< >| | ||
+ | ^ Objekt-Name ^ Objekt-Typ ^ Befehle ^ Status ^ Hinweise ^ Beispiel ^ | ||
+ | | Lok | lc | Alle https:// | ||
+ | | Funktion | fn | Alle und fndesc, fncmd, group 1..7 | | Das Funktionsänderungs-Attribut (fnchanged) oder die Funktions-Beschreibung (fndesc) signalisieren, | ||
+ | | Weiche | sw | Alle | | | <sw id=" | ||
+ | | Signal | sg | Alle | | | ||
+ | | Zubehör-Gruppe | accgroup | on, off, flip | | | ||
+ | | Ausgang | co | Alle | | | <co id=" | ||
+ | | Gleisspannung | powercmd | on, off | | Die ID ist die Booster-Kennung. Wenn leer, gilt der Befehl für alle Booster | | ||
+ | | Block | bk | Alle, reservieren | open, closed | Im Fall des Reservieren-Befehl Lok-Kennung (lcid) verwenden. | %%<bk id=" | ||
+ | | Rückmelder | fb | Alle, on, off, flip | | | <fb id=" | ||
+ | | Fahrstraße | st | go, lock, free, classset, classadd, classdel | | Die Befehle " | ||
+ | | Text | tx | showon, showoff, blink, on, off, click | | Update-Ereignis durch Format-Attribut. \\ Die optionalen **bkid** und **lcid** können auch im Befehl verwendet werden. | %%<tx id=" | ||
+ | | Variable | vr | random, start, stop \\ start, length (for substring) | | Setzen durch Attribute: value=" | ||
+ | | Aktionskontrolle | actionctrl | | |Die Kennung in der Aktionskontrolle ist eine Referenz auf ein existierendes Objekt. Bedingungs-Kind-Knoten können hinzugefügt werden. | | ||
+ | | Fahrdienstleiter | operator | emptycar, loadcar, addcar, leavecar. | |Im Wagen-Kennungs-Attribut (carids) muss eine kommaseparierte Liste von Wagen-Kennungen spezifiziert werden. | | ||
+ | | System | sys | Alle https:// | ||
+ | | Automat | auto | Alle https:// | ||
+ | | Wagen | car | empty, loaded, maintenance, | ||
+ | | Aufstellblock | sb | Alle https:// | ||
+ | | Fiddle Yard | seltab | Alle https:// | ||
+ | | Ortschaft | location | Alle https:// | ||
+ | | Uhr | clock | Alle https:// | ||
+ | | Drehscheibe | tt | Alle https:// | ||
+ | | Extern | ext | Alle https:// | ||
+ | | Wetter | weather | setweather, weathertheme, | ||
+ | | Licht | light | flip, enable, disable | | Aktiviert ein Licht von LightControl. | | ||
+ | | Licht-Steuerung | lightctrl | go, stop | |Aktiviert / deaktiviert die Licht-Steuerung (LightControl). | %%< | ||
+ | | Model | model | Alle https:// | ||
+ | | Geschwindigkeits-\\ Messstrecke | mv | reset, sets1, sets2, setdistance, | ||
+ | \\ | ||
+ | |||
+ | ====Attribut-Werte==== | ||
+ | Wenn ein Befehls-Attribut-Wert mit einem Fragezeichen '?' | ||
+ | Beispiel: | ||
+ | <code xml> | ||
+ | <lc id=" | ||
+ | </ | ||
+ | Der Wert %%"? | ||
+ | < | ||
+ | 20160422.085709.015 r9999I tid0x8BA OXmlScri 0571 execute [lc] id[loco1] cmd[useschedule] oid[] callerid[wefiu] | ||
+ | 20160422.085709.016 r9999I tid0x8BA OXmlScri 0521 replaced attribute value: scheduleid="? | ||
+ | 20160422.085709.017 r9999a tid0x8BA OLoc 3644 <lc id=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | |||
+ | ====Objekt-Kennungen==== | ||
+ | Die Objekt-Kennungen können Variable enthalten.\\ | ||
+ | Siehe für mögliche Variable: __**[[: | ||
+ | |||
+ | ===Beispiel=== | ||
+ | <code xml> | ||
+ | < | ||
+ | <tx id=" | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | =====System-Variablen===== | ||
+ | siehe: [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | =====Variablen-Formatierung===== | ||
+ | Mit dem Format-Attribut ist es möglich, Variablen-Inhalt auf die gleiche Art zu formatieren, | ||
+ | ====Beispiel==== | ||
+ | <code xml> | ||
+ | < | ||
+ | <vr id=" | ||
+ | <vr id=" | ||
+ | <vr id=" | ||
+ | <trace text=" | ||
+ | </ | ||
+ | </ | ||
+ | Ausgabe __mit__ dem Format-Attribut sieht so aus: | ||
+ | < | ||
+ | Hello03: | ||
+ | </ | ||
+ | Ausgabe __ohne__ das Format-Attribut sieht so aus: | ||
+ | < | ||
+ | Hello 3 5 RocrailFans | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | =====Variablen-Namen===== | ||
+ | Innerhalb oben beschriebener Grenzen können Variablen-Namen frei gewählt werden; aber es kann vorkommen, daß zwei gleichnamige Variablen in zwei unterschiedlichen Skripten, die zur gleichen Zeit aufgerufen werden, Konflikte hervorrufen, | ||
+ | * der ursprüngliche Variablen-Name " | ||
+ | * wird im Script " | ||
+ | * wird im Script " | ||
+ | \\ | ||
+ | =====Temporäre Variablen===== | ||
+ | Um eine Variable | ||
+ | |||
+ | ====Beispiel==== | ||
+ | <code xml> | ||
+ | < | ||
+ | <vr id=" | ||
+ | <vr id=" | ||
+ | </ | ||
+ | </ | ||
+ | Die Variable " | ||
+ | Die Variable " | ||
+ | \\ | ||
+ | |||
+ | =====Tipps===== | ||
+ | ====Regelkonformes XML ==== | ||
+ | Um das XML-Skript auf Konformität zu überprüfen, | ||
+ | Einige Zeichen müssen dafür durch Escape-Codes ersetzt werden: | ||
+ | |< >| | ||
+ | ^ Zeichen ^ Code ^ | ||
+ | | < | < | | ||
+ | | & | & | | ||
+ | | > | > | | ||
+ | |||
+ | === Beispiel === | ||
+ | Folgendes ist nicht regelkonform, | ||
+ | < | ||
+ | condition="# | ||
+ | </ | ||
+ | Um dieses Beispiel mit einem Web-Browser zu überprüfen muss es wie folgt abgeändert werden: | ||
+ | < | ||
+ | condition="# | ||
+ | </ | ||
+ | Das geänderte Beispiel ist für den Rocrail-XML-Parser ebenfalls gültig.\\ | ||
+ | \\ | ||