Erweiterte Schaltmöglichkeiten

Oftmals kommt der Wunsch auf, Weichen und Signale auch in Abhängigkeit von anderen Weichen, Signalen oder auslösenden Fahrzeugen/Zuggruppen zu schalten. Dafür reichen die einfachen Schaltmöglichkeiten der Kontakte nicht aus. Aus diesem Grund bietet VE die Möglichkeit, die Kontaktdefinitionen mit sogenannten logischen Schaltungen zu erweitern.
Das Eintragen dieser Schaltungen ist nur in dem Dialogfenster möglich, welches über den Button "Erweitert" aus den Kontaktdialogen geöffnet wird (siehe Beschreibung der Kontakte).
Diese Schaltungen bestehen aus boolschen Formeln, das bedeutet Weichenstellungen oder Signalwerte werden in diesen Schaltungen berechnet, deshalb spricht man auch von berechneten Weichen und Signalen.
Außerdem bieten diese Schaltungen die Möglichkeit, Schalt- und Haltkontakte in Abhängigkeit von Weichen, Signalen und Zuggruppen zu aktivieren oder zu deaktivieren.

Hinweis:
Beim Einsatz dieser Schaltungen ist zu beachten, dass VE die in einem Kontakt definierten Schaltvorgänge in einer bestimmten Reihenfolge abarbeitet: Aus diesem Grund ist es nicht möglich, Weichen in Abhängigkeit von Signalen zu schalten, die mit dem gleichen Kontakt gestellt werden.
Außerdem ist zu beachten, dass Namen von Signalen, die in diesen Schaltungen benutzt werden sollen, nur aus Buchstaben (inkl. deutscher Umlaute), Zahlen, Leerzeichen und Unterstrich bestehen dürfen.

Schalten von Signalen

Um ein oder mehrere Signale in Abhängigkeit von anderen Signalen, Weichen oder Zuggruppen zu schalten fügt man eine oder mehrere Zeilen in folgender Syntax hinter der eigentlichen Kontaktdefinition ein:

Signal@ Name=...

Name bezeichnet hierbei das zu schaltende Signal.
Hinter dem Gleichheitszeichen können dann boolsche Operationen angegeben werden, deren Ergebnis den Signalwert des zu schaltenden Signals bestimmt.

Folgende Operatoren können benutzt werden:
&
logisches UND
Der kleinste Wert der mit UND verknüpften Werte wird übernommen.
Auf Grund seiner Arbeitsweise wird der &-Operator in VE auch als MIN-Operator bezeichnet.
|
logisches ODER
Der größte Wert der mit ODER verknüpften Werte wird übernommen.
Auf Grund seiner Arbeitsweise wird der |-Operator in VE auch als MAX-Operator bezeichnet.
!
logisches NICHT
Der Wert hinter dem Ausrufezeichen wird negiert, d.h. hat der Operant hinter dem Ausrufezeichen den Wert 0 ergibt dies den Wert +akt, anderenfalls ergibt dies den Wert 0.
Hinweis:
Die Operatoren & und | dürfen nicht kombiniert werden. Der Einsatz von Klammern ist ebenfalls nicht zulässig.
Falls man dennoch eine solche Kombination benötigt, weist man den Wert, den man sonst in Klammern setzen würden, einem logischen (Hilfs-)Signal, einem sogenannten "Relais", zu und benutzt dieses Relais in einer weiteren Operation (Beispiel siehe unten).
Die Verwendung der Schlüsselwerte +akt und -akt ist zulässig, dabei stellen diese Werte in den Formeln immer den höchsten Wert dar.
In den Formeln dürfen auch konkrete numerische Werte verwendet werden.

Nachfolgend einige Beispiele, zum besseren Verständnis wird bei einigen Beispielen auch eine Tabelle eingefügt, die aufzeigt welcher Signalwert sich bei welcher Konstellation ergibt.

Beispiele

Signal@ A=Signal B&Signal C
Das Signal A wird auf den kleinsten Wert von Signal B und C gesetzt.
Signal BSignal CSignalwert für Signal A
000
+akt00
0+akt0
+akt+akt+akt
40+akt40
604040
Signal@ A=Signal B|Signal C|Signal D
Das Signal A wird auf den größten Wert von Signal B, C oder D gesetzt.
Signal BSignal CSignal DSignalwert für Signal A
0000
+akt00+akt
0+akt40+akt
6004060
Signal@ A=!Signal B

Signal A wird auf +akt gesetzt, wenn Signal B den Wert 0 besitzt. Besitzt Signal B jedoch einen Wert ungleich 0 oder +akt, dann wird dem Signal A der Wert 0 zugewiesen.

Signal@ A=Signal B&40
Signal A wird auf den Wert von Signal B gesetzt, wenn dieser kleiner als 40 ist, ansonsten auf den Wert 40.
Signal Bnumerischer WertSignalwert für Signal A
0400
254025
2004040
+akt4040

Das folgende Beispiel zeigt den Einsatz eines Relais. Im "Normalfall" würde man schreiben:

Signal@ A=(Signal B|Signal C)&Signal D

Da aber der Einsatz von Klammern in den logischen Schaltungen nicht zulässig ist, muss man zunächst den Wert, der sich aus dem geklammerten Ausdruck ergibt, einem Relais zuweisen und anschließend dieses Relais in einer zweiten Anweisung verwenden. Das sieht dann wie folgt aus:

Signal@ A hs=Signal B|Signal C
Signal@ A=Signal A hs&Signal D

Der größere Wert von Signal B oder C wird dem als Relais genutzten Signal A hs zugewiesen, und anschließend wird der kleinere Wert von Signal A hs und Signal D dem Signal A zugewiesen.

Abfrage von Weichenstellungen

Um Signale in Abhängigkeit von Weichenstellungen schalten zu können, müssen diese abgefragt werden.
Die Syntax der Abfrage sieht folgendermaßen aus (für Nummer ist dabei die jeweilige Gleisnummer der Weiche einzusetzen):

Weiche@LNummer
Weiche@RNummer
Weiche@MNummer
Weiche@LNummer Der Ausdruck gibt +akt zurück, wenn die Weiche auf "Links" geschaltet ist, ansonsten 0.
Weiche@RNummer Der Ausdruck gibt +akt zurück, wenn die Weiche auf "Rechts" geschaltet ist, ansonsten 0.
Weiche@MNummer Der Ausdruck gibt +akt zurück, wenn die Weiche auf "Mitte" geschaltet ist, ansonsten 0.
Hinweis:
Diese Abfrage ist nur bei Dreiwege-Weichen sinnvoll, da sonst immer 0 zurück gegeben wird.

Beispiel

Signal@ A=Weiche@R2|40

Signal A wird auf +akt gesetzt, wenn Weiche 2 auf "Rechts" steht, ansonsten auf den Wert 40.

Abfrage von Zuggruppen

Um Signale in Abhängigkeit von den Kontakt auslösenden Zügen bzw. Zuggruppen schalten zu können, müssen diese abgefragt werden.
Die Syntax der Abfrage sieht folgendermaßen aus:

Gruppe Zugname

Für Zugname ist dabei der Name eines bestimmten Zuges oder ein Zuggruppenname einzusetzen. Gehört der den Kontakt auslösende Zug zur angegebenen Gruppe oder entspricht sein Name dem angegebenen Zugnamen, gibt diese Abfrage +akt zurück, anderenfalls 0.
Wie Zuggruppen definiert werden ist im Kapitel »Zugdefinitionen« erklärt.

Beispiele

Signal@ A=Gruppe Personenzug

Signal A wird auf +akt gesetzt, wenn der den Kontakt auslösende Zug zur Gruppe der Personenzüge gehört, ansonsten auf 0.

Signal@ A=Signal B|!Gruppe Personenzug
Signal A wird auf den Wert des Signals B gesetzt, wenn der den Kontakt auslösende Zug zur Gruppe der Personenzüge gehört, ansonsten auf +akt.
Signal BIst auslösender Zug ein Personenzug?Signalwert für Signal A
0Ja (nicht +akt ergibt 0)0
0Nein (nicht 0 ergibt +akt)+akt
40Ja (nicht +akt ergibt 0)40
40Nein (nicht 0 ergibt +akt)+akt
+aktJa (nicht +akt ergibt 0)+akt
+aktNein (nicht 0 ergibt +akt)+akt

Schalten von Weichen

Neben Signalen können auch Weichen in Abhängigkeit von anderen Weichen, Signale oder auslösenden Fahrzeugen/Zuggruppen geschaltet werden. Dafür verwendet man folgende Syntax (für Nummer ist dabei die jeweilige Gleisnummer der Weiche einzusetzen):

Weiche@LNummer=...
Weiche@RNummer=...
Weiche@MNummer=...
Weiche@LNummer=... Die Weiche wird nach links gestellt, wenn die Formel einen Wert ungleich 0 liefert, ansonsten nach rechts.
Weiche@RNummer=... Die Weiche wird nach rechts gestellt, wenn die Formel einen Wert ungleich 0 liefert, ansonsten nach links.
Weiche@MNummer=... Die Weiche wird in die Mitte gestellt, wenn die Formel einen Wert ungleich 0 liefert, ansonsten wird sie nicht gestellt.

Als Formel können alle Operationen verwendet werden, die auch beim Schalten von Signalen zulässig sind.

Aktivieren und Deaktivieren von Kontakten

Kontakte können in Abhängigkeit von Weichen, Signalen oder darüberfahrenden Fahrzeugen/Zuggruppen aktiv oder inaktiv sein. Um dies zu erreichen, ergänzt man die Kontaktdefinition mit einer Zeile nach folgender Syntax:

Aktiv=...

Der Kontakt ist nur dann aktiv, wenn die Formel einen Wert ungleich 0 liefert.
Als Formel können alle Operationen verwendet werden, die auch beim Schalten von Signalen zulässig sind.

Beispiele

Aktiv=!Signal A

Der Kontakt ist nur aktiv, wenn das Signal A auf HALT steht (nicht 0 ergibt +akt).

Aktiv=Weiche@R10

Der Kontakt ist nur aktiv, wenn die Weiche 10 auf rechts gestellt ist.

Aktiv=!Gruppe Güterzug

Der Kontakt ist nur aktiv, wenn der auslösende Zug nicht zur Gruppe der Güterzüge gehört.

Tipp:
Hat man einen Kontakt, über den Fahrzeuge/Züge fahren, die z.B. vier unterschiedlichen Zuggruppen angehören, und der Kontakt soll nur von drei dieser Gruppen ausgelöst werden, so kann man diese drei Gruppen über die Steuerelemente des Kontaktdialoges eintragen, was etwas aufwendig ist, speziell dann wenn dies bei mehreren Kontakten der Fall ist. Viel eleganter ist es, dem Kontakt mitzuteilen, wann er nicht aktiv sein soll. Und dafür kann man eine Anweisung in der Art benutzen, wie sie im letzten Beispiel gezeigt wurde.
Manchmal ist es auch sinnvoll, während des Anlagenbaus oder auch zur Fehlersuche einen Kontakt zeitweise zu deaktivieren. Dies erreicht man, indem man eine Anweisung Aktiv=0 in die Kontaktdefinition einträgt. Will man später den Kontakt wieder aktivieren, entfernt man einfach wieder diese Anweisung aus der Kontaktdefinition.