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.
Beim Einsatz dieser Schaltungen ist zu beachten, dass VE die in einem Kontakt definierten Schaltvorgänge in einer bestimmten Reihenfolge abarbeitet:
- Stellen aller Weichen, die über die Steuerelemente des Kontaktdialoges eingegeben wurden
- Stellen aller berechneten Weichen
- Stellen aller Signale, die über die Steuerelemente des Kontaktdialoges eingegeben wurden
- Stellen aller berechneten Signale
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.
& 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 .
|
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
Signal B | Signal C | Signalwert für Signal A |
---|---|---|
0 | 0 | 0 |
+akt | 0 | 0 |
0 | +akt | 0 |
+akt | +akt | +akt |
40 | +akt | 40 |
60 | 40 | 40 |
Signal@ A=Signal B|Signal C|Signal D
Signal B | Signal C | Signal D | Signalwert für Signal A |
---|---|---|---|
0 | 0 | 0 | 0 |
+akt | 0 | 0 | +akt |
0 | +akt | 40 | +akt |
60 | 0 | 40 | 60 |
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 B | numerischer Wert | Signalwert für Signal A |
---|---|---|
0 | 40 | 0 |
25 | 40 | 25 |
200 | 40 | 40 |
+akt | 40 | 40 |
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 B | Ist auslösender Zug ein Personenzug? | Signalwert für Signal A |
---|---|---|
0 | Ja (nicht +akt ergibt 0 ) | 0 |
0 | Nein (nicht 0 ergibt +akt ) | +akt |
40 | Ja (nicht +akt ergibt 0 ) | 40 |
40 | Nein (nicht 0 ergibt +akt ) | +akt |
+akt | Ja (nicht +akt ergibt 0 ) | +akt |
+akt | Nein (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.
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.