User Tools

Site Tools


xmlscripting:xmldb-de

XML-Script-Beispiele

Befehls-Beispiele

:!: Die Anführungszeichen auf dieser Seite können in XML nicht verwendet werden.
Zu tun: Beispiele im Wiki-Quelltext mit doppelten % -Zeichen beginnen und beenden.
Falsch: <lc id="test"/>
Richtig: <lc id="test"/>
Für Beispiele bis 26.08.2015 21:19 erledigt. RainerK


Lok-Befehle

Innerhalb <foreach>-Tabellen-Schleifen
(Keine Kennung erforderlich, ist für alles mit passenden Bedingungen)
Innerhalb <if> oder als Einzel-Befehl außerhalb von Schleifen
(Kennung ist erforderlich)
Hinweise
<lc cmd="gotoblock" blockid="Sbf"/> <lc id="V200" cmd="gotoblock" blockid="Sbf"/> Setzt den Ziel-Block "Sbf"
<lc cmd="useschedule" scheduleid="Nirvana"/> <lc id="V200" cmd="useschedule" scheduleid="Nirvana"/> Setzt den Fahrplan auf "Nirvana"
<lc cmd="go"/> <lc id="@loco" cmd="stop"/> Lok starten/stoppen
<lc cmd="gotoblock" blockid="@var6"/> <lc id="V200" cmd="gotoblock" blockid="@var6"/> Setzt den Ziel-Block auf den var6-Text
<lc cmd="gotoblock" blockid="$tx1"/> <lc id="V200" cmd="gotoblock" blockid="$tx1"/> Setzt den Ziel-Block auf den tx1-Textfeld-Text
<lc cmd="useschedule" scheduleid="@var6"/> <lc id="V200" cmd="useschedule" scheduleid="@var6"/> Setzt den Fahrplan auf den var6-Text
<lc cmd="useschedule" scheduleid="$tx1"/> <lc id="V200" cmd="useschedule" scheduleid="$tx1"/> Setzt den Fahrplan auf tx1-Textfeld-Text
<lc cmd="go"/> <lc id="@var6" cmd="stop"/> or <lc id="$tx1" cmd="stop"/> Lok @var6 oder Lok $tx1 starten/stoppen
<lc cmd="velocity" V="5"/> <lc id="V200" cmd="velocity" V="5"/> Setzt die Geschwindigkeit auf 5
nicht verfügbar (Es kann nur eine Lok im Block sein) <lc id="loco1" cmd="block" blockid="b1"/> Setzt die Lok mit Kennung loco1 in den Block "b1"
nicht verfügbar (Es kann nur eine Lok im Block sein) <lc bkid="bk1" ... /> oder <lc bkid="@var6" ... /> oder <lc bkid="$tx1" ... /> lcid der Lok in Block bk1 / @var6 (Variablentext) / $tx1 (Textfeldtext)
<fn fnchanged="3" f3="true"/> <fn id="loco1" fnchanged="3" f3="true"/> Funktionen true/false

Befehle: go, stop, velocity, velocity2, percent dispatch, swap, blockside, carcount, min, mid, cruise, max, consist, assigntrain, releasetrain, binstate_on, binstate_off, class, x-go, pomwrite


Variable

Innerhalb <foreach>-Tabellen-Schleifen
(Sub-Kennung erforderlich, ist für alles mit passenden Bedingungen)
Innerhalb <if>
(Kennung ist erforderlich)
Hinweise
<vr id="var2%oid%" text="empty"/> <vr id="var2" text="empty"/> Setzt den Text einer Variablen
<vr id="var2%oid%" value="0"/> <vr id="var2" value="0"/> Setzt den Wert einer Variablen
<vr id="var1%oid%" value="4711" text="empty"/> <vr id="var1" value="4711" text="empty"/> Setzt den Wert und Text von var1
<vr id="var3%oid%" value="#var3 + #var5"/> <vr id="var3" value="#var3 + #var5"/> Addiert den Wert von var5 zu var3
<vr id="var2%oid%" value="#var2%oid% + 4"/> <vr id="var2" value="#var2 + 4"/> Erhöht den Wert einer Variablen um 4
<vr id="var2%oid%" min="10" max="100" cmd="random"/> <vr id="var2" min="10" max="100" cmd="random"/> Setzt den Wert von var2 auf einen Zufallswert zwischen min und max
<vr id="var2%oid%" cmd="start"/> <vr id="var2" cmd="start"/> Startet/stoppt den Zeitgeber von var2
<vr id="var3%oid%" text="$tx1"/> <vr id="var3" text="$tx1"/> Der Text von var3 erhält den Text des Textobjekts tx1




Klassen

Innerhalb <foreach>-Tabellen-Schleifen
(Keine Kennung erforderlich, ist für alles mit passenden Bedingungen)
Innerhalb <if>
(Kennung ist erforderlich)
Hinweise
<lc cmd="classset" class="AB,DD"/> <lc id="loco" cmd="classset" class="AB,DD"/> Setzt die Lok-Klasse auf AB,DD
<lc cmd="classset" class="AB,DD"/> <lc id="@var6" cmd="classset" class="AB,DD"/> Setzt die Lok-Klasse (Variable des var6-Text) auf AB,DD
<bk cmd="classdel" class="AB"/> <bk id="4711" cmd="classdel" class="AB"/> Löscht die Blockklasse AB
<bk cmd="classdel" class="AB"/> <bk id="$tx1" cmd="classdel" class="AB"/> Löscht die Blockklasse AB (Variable des tx1-Textfelds)
<bk cmd="classadd" class="CD,EE1"/> <bk id="4711" cmd="classadd" class="CD,EE1"/> Fügt die Blockklasse hinzu CD,EE1




Blöcke

Innerhalb <foreach>-Tabellen-Schleifen
(Keine Kennung erforderlich, ist für alles mit passenden Bedingungen)
Innerhalb <if>
(Kennung ist erforderlich)
Hinweise
Nicht verfügbar (Ein Block kann nur für eine Lok reserviert werden) <bk id="b2" cmd="reserve" lcid="loco1"/> Reserviert den Block b2 für die Lok loco1




Rückmelder

Innerhalb <foreach>-Tabellen-Schleifen
(Keine Kennung erforderlich, ist für alles mit passenden Bedingungen)
Innerhalb <if>
(Kennung ist erforderlich)
Hinweise
Verfügbarkeit muss noch geklärt werden <fb id="fb1" cmd="on"/> Setzt den Rückmelder-Status




Textfelder

Innerhalb <foreach>-Tabellen-Schleifen
(Keine Kennung erforderlich, ist für alles)
Innerhalb <if>
(Kennung ist erforderlich)
Hinweise
nicht verfügbar (Ändern einers Textfeldes innerhalb einer Schleife ist sinnlos ) <tx id="tx1" format="var1 is #var1 @var1"/> Aktualisiert den Text von tx1 mit dem Wert and Text von var1




Pausenbefehl (Sleep)

Innerhalb <foreach>-Tabellen-Schleifen (Pause erfolgt bei jedem Durchlauf!) Innerhalb <if>
(Kennung ist erforderlich)
Hinweise
<sleep time="10"/> <sleep time="10"/> Das Script pausiert um 10 (max. 100ms erlaubt, Werte größer als 100ms werden auf 100 gesetzt)
<sleep time="#varSleep"/> <sleep time="#varSleep"/> Das Script pausiert um den Wert der Variablen varSleep (max. 100ms)




Bedingungs-Beispiele


Beispiele zur Prüfung mehrerer Bedingungen:

<if condition="@var1 = hallo|#var1 = 4712">                          : Wenn der Text von var1 = hallo UND der Wert var1=4712 - Wenn alltrue nicht gesetzt ist, ist es WAHR         
<if condition="@var1 = hallo|#var1 = 4712" alltrue="true">           : Wenn der Text von var1 = hallo UND der Wert var1=4712     
<if condition="@var1 = hallo|#var1 = 4712" alltrue="false">          : Wenn der Text von var1 = hallo ODER der Wert var1=4712 


Beispiel zur Prüfung mehrerer Bedingungen; Variable, Status and Klassen:

<if condition="#var1 < &time" state="sg sem3 = green" class="bk 4711 = AB" alltrue="true"> : Wenn var1 < serialtimevalue UND der Status des Signals sem3 grün ist UND die Klasse von Block 4711 AB ist



Beispiele zur Prüfung ganzer Tabellen:

<foreach table="lclist" condition="#var2%oid% < &time|#var1 < &time">                      : Für jeden Tabelleneintrag bei dem die Variable var2%lcid% < aktueller serialtime-Wert UND var1 < aktueller serialtime-Wert - Wenn alltrue nicht gesetzt ist, ist es WAHR         
<foreach table="lclist" condition="#var2%oid% < &time|#var1 < &time" alltrue="true">       : Für jeden Tabelleneintrag bei dem die Variable var2%lcid% < aktueller serialtime-Wert UND var1 < aktueller serialtime-Wert    
<foreach table="lclist" condition="#var2%oid% < &time|#var1 < &time" alltrue="false">      : Für jeden Tabelleneintrag bei dem die Variable var2%lcid% < aktueller serialtime-Wert ODER var1 < aktueller serialtime-Wert     




Sub-Scripte und Script verlassen


Ein Sub-Script aufrufen oder das aktuelle Script verlassen:

XML Remarks
<sub file="reset.xml"/> Startet das Script reset.xml
<exit cmt="Raus hier!"/> Verlässt dieses Script hier (im Trace findet sich "Raus hier!")

cmt=“reason” kann für Tracing verwendet werden.


Schleife unterbrechen


Eine Schleife verlassen, wenn eine Bedingung passt:

XML Remarks
<break cmt="Its enough." condition="#var1 = 4712"/> Verlässt die Schleife, wenn der Wert von var1 = 4712 ist.

cmt=“reason” kann für Tracing verwendet werden.


Aktions-Steuerung


Eine existierende Aktion aufrufen, wenn eine Bedingung WAHR ist.

<actionctrl id="test">
    <actioncond id="sw1" subid="" state="straight" type="sw"/>
</actionctrl>

Aktion "test" wird aufgerufen, wenn Weiche sw1 den Status "straight" hat.
Um eine existierende Aktion von Scripten mehrmals mit verschiedenen Bedingungen aufzurufen.


Fahrdienstleiter- und Wagen-Befehle


<car id="car1" cmd="loaded"/>
<actionctrl id="test">
    <operator id="op1" cmd="emptycar" carids="DB1"/>
</actionctrl>

emptycar, loadcar, addcar, leavecar. Im Attribut Wagenkennungen (carids) muss eine kommaseparierte Liste won Wagen spezifiziert sein.
Wagen-Befehle:empty, loaded, maintenance
Fahrdienstleiter-Befehle:addcar, removecar, loadcar, emptycar, class


System-Befehle


<sys cmd="go"/>

Befehle: stoplocs, stop, go, shutdown, resume, on, off, ebreak, resetfx, time, v0locos, shortcut(short circuit)


Beispiel-Code


<xmlscript>
  <sys cmd="go"/>
  <vr id="var1" value="4712" text="hallo"/>
  <tx id="tx1" format="var1 is #var1 @var1"/>
  <bk id="b1" cmd="classadd" class="ZZ"/>
  <vr id="varX" text="loco1"/>
  <lc id="@varX" cmd="classadd" class="ZZ"/>
  <car id="car1" cmd="loaded"/>
  <actionctrl id="test">
    <actioncond id="sw1" subid="" state="straight" type="sw"/>
  </actionctrl>
  <operator id="op1" cmd="emptycar" carids="DB1"/>
  <if condition="@var1 = hallo|#var1 = 4712">
    <then>
      <tx id="tx1" format="var1 is #var1 @var1 OK!!"/>
      <lc id="loco1" cmd="block" blockid="b1"/>
      <vr id="var2" min="10" max="100" cmd="random"/>
      <tx id="tx1" format="var1 is #var1 @var1 OK!! #var2"/>
      <vr id="var2" cmd="start"/>
      <vr id="var3" text="$tx1"/>
    </then>
    <else>
      <sub file="reset.xml"/>
      <exit cmt="Raus hier!"/>
    </else>
  </if>
  <foreach table="lclist">
    <vr id="var4%oid%" value="4711" text="empty"/>
    <break cmt="Its enough." condition="#var1 = 4712"/>
  </foreach>
</xmlscript>

Skriptcode, von Usern zur Verfügung gestellt

User jpultar

Generisches Script für eine individuelle Sound-Sequenz auf DEPART in einem Block getriggert

<?xml version="1.0" encoding="UTF-8"?>
<xmlscript>
 
 <!-- Generisches Script für eine individuelle Sound-Sequenz auf DEPART in einem Block getriggert -->
 
  <switch var="%lcid%">
    <case val="491.001">
	<fn id="491.001" group="1" fndesc="Ansage" fncmd="flip"/>
	<sleep time="8000"/>
	<fn id="491.001" group="1" fndesc="Horn" fncmd="flip"/>      
    </case>
    <case val="2043.28">
	<fn id="2043.28" group="1" fndesc="Motor" fncmd="on"/>
	<sleep time="100"/>
	<fn id="2043.28" group="3" fndesc="Ansage" fncmd="flip"/>
	<sleep time="5000"/>
	<fn id="2043.28" group="1" fndesc="Schaffner" fncmd="flip"/>    
    </case>
    <case val="110.328">
	<fn id="110.328" group="2" fndesc="Ansage" fncmd="flip"/>
	<sleep time="5000"/>
	<fn id="110.328" group="1" fndesc="Schaffner" fncmd="flip"/>
	<sleep time="1000"/>
	<fn id="110.328" group="2" fndesc="Sanden" fncmd="flip"/>  	
    </case>
    <case val="1010.13">
	<fn id="1010.13" group="5" fndesc="Schaffner" fncmd="flip"/>
	<sleep time="2000"/>
	<fn id="1010.13" group="3" fndesc="Lüfter" fncmd="flip"/>
	<sleep time="1000"/>
	<fn id="1010.13" group="6" fndesc="Sanden" fncmd="flip"/> 	
    </case>
    <case val="1020.41">
	<fn id="1020.41" group="3" fndesc="Ansage2" fncmd="flip"/>	
	<sleep time="5000"/>	
	<fn id="1020.41" group="2" fndesc="Schaffner" fncmd="flip"/>	
    </case>
    <case val="5042.08">
	<fn id="5042.08" group="4" fndesc="Ansage1" fncmd="flip"/>
	<sleep time="6000"/>
	<fn id="5042.08" group="3" fndesc="Schaffner" fncmd="flip"/>
	<sleep time="2000"/>
	<fn id="5042.08" group="1" fndesc="Horn tief" fncmd="flip"/> 	
    </case>	
  </switch>
</xmlscript>



Script zum Starten bzw. zur Rückfahrt in einen Heimatbahnhof einer Lok oder einer Lokgruppe unter Verwendung der Lok-Klasse in der Tabelle der Loks. Dieses frei definierbare Textfeld eignet sich sehr gut, um Gruppen zu bilden ⇒ hier im Beispiel Klasse CARGO für z. B. alle Güterzüge. Start bzw. Stopp (= gehe zu Heimatbahnhof) erfolgt über einen Schalter auf dem Gleisplan mit der entsprechenden Bezeichnung. Von diesen Schaltern gibt es mehrere für unterschiedliche Gruppen - so werden Güter-, Regional- und Fernzüge - ist ja frei definierbar - gestartet bzw. gestoppt. Über zwei Taster als Art "Hauptschalter" können alle zugeordneten Schalter ein- bzw. ausgeschaltet werden - damit startet/stoppt man alle Züge nach Bedarf. (Voraussetzung: Rocrail-Version 13629.)

<?xml version="1.0" encoding="UTF-8"?>

<!-- Alle Start -->

<xmlscript>
	<sleep time="300"/>
	<co id="Regionalverkehr" cmd="on"/>
	<sleep time="300"/>
	<co id="Cargoverkehr" cmd="on"/>
	<sleep time="300"/>
	<co id="Fernverkehr" cmd="on"/>
	<sleep time="300"/>
	<co id="BR491" cmd="on"/>
</xmlscript>


<?xml version="1.0" encoding="UTF-8"?>
 
<!-- Alle Stop -->
 
<xmlscript>
	<sleep time="300"/>
	<co id="Regionalverkehr" cmd="off"/>
	<sleep time="300"/>
	<co id="Cargoverkehr" cmd="off"/>
	<sleep time="300"/>
	<co id="Fernverkehr" cmd="off"/>
	<sleep time="300"/>
	<co id="BR491" cmd="off"/>
</xmlscript>


<?xml version="1.0" encoding="UTF-8"?>
<xmlscript>
 
 <!-- Script zum Starten bzw. Rückfahrt in den Heimatbahnhof unter Verwendung einer Lok-Klasse -->
 <!-- Start / Stopp über einen Schalter mit der entsprechenden Bezeichnung -->
 
<auto cmd="on"/>
 
<if state="co Cargoverkehr = on">
	<then>
		<foreach table="lclist" condition="%lcclass% # CARGO">
		<lc id="%lcid%" cmd="go"/>
		<trace text="%oid% => Abfahrt"/>
		</foreach>
                <exit/>
	</then>
</if>
 
<if state="co Cargoverkehr = off">
    <then>	
		<foreach table="lclist" condition="%lcclass% # CARGO">	
 
			<if	state="lc %oid% = home|lc %oid% ! auto" connect="and">
				<then>			
				<lc id="%lcid%" cmd="stop"/>
				<trace text="%oid% => ist im Heimatbahnhof %lccur%"/>
				</then>	
				<else>
				<lc id="%lcid%" cmd="gotoblock" blockid="%lchome%"/>
				<lc id="%lcid%" cmd="go"/>
				<trace text="%oid% => unterwegs zum Heimatbahnhof"/>
				</else>
			</if>
 
	</foreach>
	</then>
</if>
</xmlscript>
xmlscripting/xmldb-de.txt · Last modified: 2018/11/12 08:56 (external edit)