Beispiel: Kupplungswalzer mit xmlscript

von Bernd (sambaer1)

* Userpages Bernd (sambaer1)

Situation

Ich habe an mehreren Stellen meiner Anlage die Situation, das ein Entkupper ca. 6cm vor der Grenze zwischen Enter und In Sensor liegt (Ich verwende Stromsensoren). ekw.jpg

xmlscript

Für diese Situation habe ich ein universelles xmlscript entwickelt, was in abgewandelter Form auch für andere Situationen geeignet ist.

<?xml version="1.0" encoding="UTF-8"?>
<xmlscript>
<!-- Entkupplungswalzer -->
 
	<function id="Walzer">
		<trace text="Entkuppeln in @bkID fuer %lcid%"/>
		<!-- fbID und ekID belegen -->
		<switch var="@bkID">
			<case val="BK110">
				<vr id="fbID" text="FB115"/>
				<vr id="ekID" text="EK104_1"/>
			</case>
			<case val="BK120">
				<vr id="fbID" text="FB108"/>
				<vr id="ekID" text="EK104_2"/>
			</case>
			<default>
				<vr id="fbID" text="" value="0"/>
				<vr id="ekID" text="" value="0"/>
				<trace text="@bkID is not valid"/>
				<exit cmt="@bkID is not valid"/>
			</default>
		</switch>
 
		<!-- Alles Walzer -->
		<lc bkid="@bkID" V_hint="min" dir="false"/>
		<while state="fb @fbID = false" max="1000"/>
		<sleep time="650"/>
		<lc bkid="@bkID" V="0"/>
		<sleep time="2000"/>
		<co id="@ekID" cmd="on"/>
		<sleep time="500"/>
		<lc bkid="@bkID" V_hint="min" dir="true"/>
		<while state="fb @fbID = true" max="1000"/>
 
		<vr id="fbID" text="" value="0"/>
		<vr id="ekID" text="" value="0"/>
	</function>
 
	<!-- Unterscheidung nach bk, st, co über %callerid% -->
	<switch var="%callerid%">
		<case val="Entk_110">
			<vr id="bkID" text="BK110"/>
			<call id="Walzer"/>
			<lc bkid="@bkID" V="0"/>
		</case>
		<case val="Entk_120">
			<vr id="bkID" text="BK120"/>
			<call id="Walzer"/>
			<lc bkid="@bkID" V="0"/>
		</case>
		<case val="CO-[BK100+]-[BK110-]">
			<vr id="bkID" text="BK110"/>
			<sleep time="2000"/>
			<call id="Walzer"/>
			<lc bkid="@bkID" V="0"/>
			</case>
		<case val="CO-[BK100+]-[BK120-]">
			<vr id="bkID" text="BK120"/>
			<sleep time="2000"/>
			<call id="Walzer"/>
			<lc bkid="@bkID" V="0"/>
		</case>
		<case val="CO-[BK110+]-[BK111-]">
			<vr id="bkID" text="BK110"/>
			<call id="Walzer"/>
		</case>
		<case val="CO-[BK120+]-[BK111-]">
			<vr id="bkID" text="BK120"/>
			<call id="Walzer"/>
		</case>
		<case val="BK110">
			<vr id="bkID" text="%callerid%"/>
			<call id="Walzer"/>
		</case>
		<case val="BK120">
			<vr id="bkID" text="%callerid%"/>
			<call id="Walzer"/>
		</case>
		<default>
			<trace text="%callerid% is not valid"/>
		</default>
	</switch>
 
	<vr id="bkID" text="" value="0"/>
 
</xmlscript>

Voraussetzungen

Zunächst fährt der Zug ein, bis die Lok vollständig im Bereich des In Sensor steht. Der Enter Sensor muß frei melden.

Die Aktivierung des xmlscript erfolgt über Aktionen an verschiedenen Objekten (In Klammern die entsprechenden Objekte in meinem Beispiel):

  1. Per Schalter Aktion co on (Entk_110, Entk_120)
  2. Am Ende einer Fahrstraße st unlock (CO-[BK100+]-[BK110-], CO-[BK100+]-[BK120-])
  3. Am Beginn einer Fahrstraße st lock (CO-[BK110+]-[BK111-], CO-[BK120+]-[BK111-])
  4. Beim Block verlassen bk depart (BK110, BK120)

Ablauf

Einfahrt bis IN
ENTER ist frei
Rückwärts bis ENTER
über Entkuppler
Vorziehen bis IN
ENTER ist frei
ekw1.jpg ekw2.jpg ekw3.jpg

Abhängig von dem Objekt der Aktivierung (<switch var=”%callerid%”>) wird der Block (bkID) bestimmt und dann die Funktion “Walzer” gestartet.

Die Funktion “Walzer” emittelt abhängig vom Block (<switch var=”@bkID”>) den richtigen Sensor (fbID) und den richtigen Entkuppler (ekID).

Dann wird die Lok mit V_Min rückwärts bewegt, bis der Enter Sensor belegt meldet (Erste WHILE Schleife). Zusätzlich wartet man in meinem Beispiel 650ms um die Kupplung genau über den Entkuppler zu positionieren. Die Lok stoppt. Der Entkuppler wird ausgelöst. Die Lok fährt mit V_Min vorwärts, bis der Enter Sensor frei meldet (Zweite WHILE Schleife).

Abhängig von dem Objekt der Aktivierung wird die Lok gestoppt (bei Möglichkeit 1 und 2). Oder die Lok fährt in den nächsten Block (bei Möglichkeit 3 und 4). Dafür muß im aktuellen Block aber eine Abfahrt-Verzögerung von 5 sec eingetragen werden, damit der Entkupplungswalzer vollständig ablaufen kann und anschließend der Fahrbefehl zum nächsten Block erfolgt.


Personal Tools