User Tools

Site Tools


micha68:extkeyboardscript-de

Steuern von Rocrail durch externe Taster und LEDs mit xml-scripting

Aufgabenstellung

Um Rocrail ohne Rocview zu nutzen - zB wenn man nur einen RasPi oder ähnliches als Server betreibt - muss man Taster zur Befehlseingabe (über Rückmelder) und LEDs zur Statusanzeige (über Ausgänge) installieren.

Ich habe das an meiner Anlage über einen IO-Baustein (OneControl aus dem BiDiB-System) mit einigen Aktionen realisiert.
6 Taster mit eingebauten LEDs dienen zum Ein- und Ausschalten der Booster, zum Aktivieren und Deaktivieren des Auto-Mode und zum Starten und Stoppen der Loks.
Die LEDs in den Tasten zeigen den jeweiligen Zustand an.

Auch hier bieten die xml-Scripte eine wesentliche Vereinfachung der Aufgabe.
Es genügen zwei Aktionen die jeweils ein Script auslösen:
Ein Script, welches bei Systemstart (Systemaktion / Init) aufgerufen wird und die Ausgänge (LEDs) in einen definierten Zustand bringt.
Ein weiteres Script, welches auf allen Tastern als Aktion liegt und je nach gedrückter Taste entsprechende System-Aktionen auslöst.

Im Plan werden die Rückmelder für die Tasten und die Ausgänge für die LEDs angelegt.

Scripte

Hier das Script zur Auswertung der Taster:

<xmlscript>
<!-- Steuerung von Rocrail über externe Taster mit LEDs zur Statusanzeige -->
<!-- Taster 1, ID=T1, Funktion= Power On     -->
<!-- Taster 2, ID=T2, Funktion= Power Off    -->
<!-- Taster 3, ID=T3, Funktion= Auto On      -->
<!-- Taster 4, ID=T4, Funktion= Auto Off     -->
<!-- Taster 5, ID=T5, Funktion= Loks starten -->
<!-- Taster 6, ID=T6, Funktion= Loks stoppen -->
 
<!-- LED 1, ID=L1, Anzeige= Power On         -->
<!-- LED 2, ID=L2, Anzeige= Power Off        -->
<!-- LED 3, ID=L3, Anzeige= Auto On          -->
<!-- LED 4, ID=L4, Anzeige= Auto Off         -->
<!-- LED 5, ID=L5, Anzeige= Loks gestartet   -->
<!-- LED 6, ID=L6, Anzeige= Loks gestoppt    -->
 
<!-- Taste 1 = Power ON -->
<if state="fb T1 = true">
	<then>
		<!-- Ist Power AUS? -->
		<if state="co L2 = on">
			<then>
			<co id="L1" cmd="on"/>
			<co id="L2" cmd="off"/>
			<sys cmd="go"/>
			<exit/>
			</then>
		</if>	
	</then>
</if>
 
<!-- Taste 2 = Power OFF -->
<if state="fb T2 = true">
	<then>
		<!-- Ist Power AN? -->
		<if state="co L1 = on">
			<then>
			<co id="L2" cmd="on"/>
			<co id="L1" cmd="off"/>
			<sys cmd="stop"/>
			<exit/>
			</then>
		</if>	
	</then>
</if>
 
<!-- Taste 3 = AutoMode ON -->
<if state="fb T3 = true">
	<then>
		<!-- Ist AutoModes AUS? -->
		<if state="co L4 = on">
			<then>
			<co id="L3" cmd="on"/>
			<co id="L4" cmd="off"/>
			<auto cmd="on"/>
			<exit/>
			</then>
		</if>	
	</then>
</if>
 
<!-- Taste 4 = AutoMode OFF -->
<if state="fb T4 = true">
	<then>
		<!-- Ist AutoMode AN? -->	
		<if state="co L3 = on">
			<then>
			<co id="L4" cmd="on"/>
			<co id="L3" cmd="off"/>
			<!-- LED für Lok Start/Stop zurück setzen -->
			<co id="L5" cmd="off"/>
			<co id="L6" cmd="on"/>
			<auto cmd="off"/>
			<exit/>
			</then>
		</if>	
	</then>
</if>
 
<!-- Taste 5 = Loks starten -->
<if state="fb T5 = true">
	<then>
		<!-- Ist AutoMode AN? -->
		<if state="co L3 = on">
			<then>	
			<!-- Loks gestoppt? -->	
			<if state="co L6 = on">
				<then>
				<co id="L5" cmd="on"/>
				<co id="L6" cmd="off"/>
				<auto cmd="start"/>
				<exit/>
				</then>
			</if>
			</then>
		</if>	
	</then>
</if>
 
<!-- Taste 6 = Loks stoppen -->
<if state="fb T6 = true">
	<then>
		<!-- Loks gestartet? -->	
		<if state="co L5 = on">
			<then>
			<co id="L5" cmd="off"/>
			<co id="L6" cmd="on"/>
			<auto cmd="stop"/>
			<exit/>
			</then>
		</if>
	</then>
</if>
 
</xmlscript>


Bevor eine Aktion ausgeführt wird, wird überprüft, ob der gewünschte Zustand nicht bereits eingestellt ist.
“Alle Loks starten” ist auch nur möglich, wenn zuvor der AutoMode auf On gestellt wurde.

Hier das Script zum initialisieren der LEDs bei Systemstart:

<xmlscript>
<!-- Steuerung von Rocrail über externe Taster mit LEDs zur Statusanzeige. INIT -->
 
<co id="L1" cmd="off"/>
<co id="L2" cmd="on"/>
<co id="L3" cmd="off"/>
<co id="L4" cmd="on"/>
<co id="L5" cmd="off"/>
<co id="L6" cmd="on"/>
 
</xmlscript>


Konfiguration

Es werden zwei Aktionen zum Starten der Scripte konfiguriert:

Aktion “InitScript” bei Systemstart zum initialisieren der LEDs und “StartScript” zur Auswertung der Tastendrücke.

“InitScript” liegt auf der Systemaktion “init” und “StartScript” liegt als Aktion auf allen Tastern.

Download

Plan und Scripte:
extkeyboardscript.zip

micha68/extkeyboardscript-de.txt · Last modified: 2018/11/12 07:56 (external edit)