Variablen in TrainController RailRoad & Co.

Variablen dienen dazu, Operationen, Bedingungen, Auslöser und viele andere Optionen flexibler gestalten zu können. Wird anstatt eines festen Wertes für eine Option eine Variable verwendet, so kann der Wert dieser Option während des laufenden Betriebs und passend zur aktuellen Situation auf der Modellbahn geändert werden.

Variablen können z.B. genutzt werden,

  • um Ereignisse während des laufenden Betriebs zu zählen und auszuwerten,
  • um den in den Blöcken angezeigte Bezeichnung von Zügen dynamisch zu ändern,
  • um Berechnungen auszuführen und deren Ergebnisse auszuwerten,
  • um ein Objekt aus einer Vielzahl von gleichartigen Objekten für die Steuerung mit einem allgemeinen Macro auszuwählen,
  • um Verzögerungen und Wahrscheinlichkeiten bei der Ausführung von Operationen dynamisch ändern zu können,
  • um die Werte zeitweiliger Geschwindigkeitsbeschränkungen während des Betries ändern zu können,
  • um Entfernungen und Rampen von Markierungen oder die Distanz der Zugoperation Bewegen jederzeit ändern zu können
  • und so weiter…

Die Möglichkeiten sind praktisch unbegrenzt.

Variablen werden üblicherweise durch Bearbeiten der Operationen erstellt, die auf die Variablen zugreifen. Mit Ausnahme von lokalen Variablen können alle anderen Variablen über das Explorer-Fenster angelegt, bearbeitet und gelöscht werden.

Zahlvariablen werden verwendet, um numerische Werte zu speichern. Zahlvariablen können unter anderem als Zähler, für Berechnungen und für Programmoptionen ver-wendet werden, denen numerische Werte zugeordnet sind (z.B. die Zugoperation zeitweilige Geschwindigkeitsbeschränkung mit variablem Wert für die Geschwin-digkeit).

Textvariablen werden verwendet, um Textzeichenfolgen zu speichern. Textvariablen können unter anderem für Meldungen oder für andere Programmoptionen verwendet werden, denen Textzeichenfolgen zugeordnet sind (Namen von Klangdateien, Sprungmarken von Operationen, der in Blöcken angezeigte Name von Zügen usw.).

Zeitvariablen werden verwendet, um Zeitwerte zu speichern. Zeitvariablen können unter anderem für Operationen verwendet werden, die einen Zeitwert verwenden (z.B. die aktuelle Uhrzeit der Bahnhofsuhr, Verzögerungsoperationen usw.). Die Einheit der in Zeitvariablen gespeicherten Werte ist immer Millisekunden.

Objektvariablen werden verwendet, um Verweise auf Objekte zu speichern. Objekt-variablen können verwendet werden, um Operationen mit den darin gespeicherten Objekten durchzuführen. Objektvariablen sind immer an einen bestimmten Objekt-typ gebunden (z.B. zweibegriffige Signale), der bei der Erstellung der Variablen festgelegt wird. Nur Verweise auf Objekte mit diesem Typ können in der Variablen gespeichert werden. Mit Objektvariablen ist es beispielsweise möglich, allgemein-gültige Makros zu erstellen. Nehmen wir zum Beispiel ein Makro an, das eine Operation einer Variablen für zweibegriffige Signale in seiner Liste der Operationen enthält. Diese Operation setze das aktuell in der Variable gespeicherte Signal auf grün. Dieses einzelne Makro kann verwendet werden, um eine Vielzahl von zweibegriffigen Signalen zu betreiben. Wenn der Verweis auf ein bestimmtes Signal der Variablen vor dem Aufruf des Makros zugewiesen wird, dann wird dieses Signal vom Makro angesteuert. Das Zu-weisen eines anderen Signals vor dem nächsten Aufruf des Makros bewirkt, dass das Makro das andere Signal ansteuert.

Wenn in TrainController eine Zugoperation von einer Markierung ausgeführt wird, so wird diese Operation auf denjenigen Zug angewendet, der den Block reserviert, in dem die Markierung liegt. Zum Zeitpunkt der Ausführung der Operation ist dies der Kontext-Zug. Dieses bereits bekannte Prinzip wird im Zusammenhang mit Variablen folgendermaßen erweitert:

Variablen werden hauptsächlich in den Operationen, Auslösern oder Bedingungen von Objekten verwendet. Dies bestimmt auch die Kontext-Objekte, auf die sich ein Zugriff auf eine Variable bezieht. Die folgende Tabelle beschreibt den Zusammenhang zwischen dem Zugriff auf eine Variable und den beim Zugriff gelten Kontext-Objekten für die häufigsten Fälle:

Zugriff auf Variable von: Kontext-Zug Kontext-Block Kontext- Weichenstraße Kontext- Zugfahrt
Zugoperation Der Zug selbst Aktueller Block des Kontext- Zuges - Momentane Zugfahrt des Kontext-Zuges
Lokfunktion eines Fahrzeugs Zugverband m. Fahrzeug, falls vorh.; sonst Fzg. Aktueller Block des Kontext- Zuges - Momentane Zugfahrt des Kontext-Zuges
Block Der Zug, der den Block gerade reserviert. Der Block selbst - Momentane Zugfahrt des Kontext-Zuges
Markierung oder Melder in Block Der Zug, der den Block gerade reserviert. Der Block, der Markierung/ Melder enthält - Momentane Zugfahrt des Kontext-Zuges
Zubehör mit Zuordnung zu Block Der Zug, der den Block gerade reserviert. Der Block, dem das Zubehör zugeordnet ist - Momentane Zugfahrt des Kontext-Zuges
Weichenstraße Der Zug, der die Weichenstraße z.Zt. reserviert. Aktueller Block des Kontext- Zuges Die Weichenstraße selbst Momentane Zugfahrt des Kontext-Zuges
Zugfahrt Der Zug nach Start der Zug-fahrt Aktueller Block des Kontext- Zuges - Die Zugfahrt selbst
Weiche Der Zug, der die Kontext- Weichenstraße z.Zt. reserviert. - Die gerade aktive Weicheisstraße über diese Weiche Momentane Zugfahrt des Kontext-Zuges
Drehscheibe Der Zug, für den der Kontext-Block gerade reserviert ist. Der Block, der zur Bühne gehört Die z.Zt. aktive Weichenstraße über diese Drehscheibe Momentane Zugfahrt des Kontext-Zuges
Makro/Operationsliste Kontext-Zug des Aufrufers zur Zeit des Aufrufs Kontext-Block des Aufrufers zur Zeit des Aufrufs Kontext-Weichenstr. des Aufrufers zur Zeit d. Aufrufs Kontext- Zugfahrt des Aufrufers zur Zt. des Aufrufs

Darüber hinaus gibt es noch das Kontext- Fahrzeug. Diese existiert nur im Zusammenhang mit der Ausführung von Lokfunktionen. Es ist das Fahrzeug, welches diese Funktionen ausführt. Kontext-Zug und Kontext-Fahrzeug sind nur dann verschieden voneinander, wenn sich das Kontext-Fahrzeug gerade in einem Zugverband befindet.

Weiterhin gibt es noch Kontext-Bahnhöfe und -Booster. Dies ist jeweils der Bahnhof bzw. Booster, in dem der Kontext-Block (siehe oben) liegt.

Die Zuweisung von Werten an Variablen erfolgt durch die Operation für die Ablaufsteuerung Zugriff auf Variable

Unter anderem stehen folgende Arten von Zugriffen zur Verfügung:

  • = (Zuweisung): Diese Operation kann auf alle Typen von Variablen angewendet werden. Sie weist einer Variablen einen festen Wert oder den Inhalt einer anderen Variablen zu. Für Zahlen- und Zeitvariablen ist es auch möglich, das Ergebnis der Berechnung ei-ner Formel zuzuweisen. Es ist weiterhin möglich, systemweite Statuswerte, die momentane Zeit des Compu-ters oder der Bahnhofsuhr oder bestimmte Statuswerte der Kontext-Objekte (z.B. die Geschwindigkeit des Kontext-Zuges oder die Anzahl der im Bereich des Kontext-Boosters befindlichen Züge) einer Variablen zuzuweisen. Weitere Details finden Sie im Hilfemenü von TrainController.
  • + (Addieren): Diese Operation kann auf Zahl-, Text- und Zeitvariablen angewendet werden. Sie erhöht den in der Variablen gespeicherten Wert um einen festen Wert oder den Inhalt einer anderen Variablen. Bei Textvariablen wird der Wert an den bereits in der Variablen gespeicherten Text angehängt. Für Zahlen- und Zeitvariablen ist es auch möglich, den gespeicherten Wert um das Ergebnis der Berechnung einer Formel zu erhöhen.
  • - (Subtrahieren): Diese Operation kann auf Zahl- und Zeitvariablen angewendet werden. Sie verringert den in der Variablen gespeicherten Wert um einen festen Wert, den Inhalt einer anderen Variablen oder das Ergebnis der Berechnung einer Formel.
  • Zufällig: Diese Operation steht für Zahlenvariablen zur Verfügung. Es ordnet einer Variablen eine Zufallszahl zwischen 0 und einem vorgegebenen Wert 457 zu. Dieser Wert kann eine feste Zahl sein, der Inhalt einer anderen Variablen oder das Ergebnis der Berechnung einer Formel. Ist z.B. der angegebene Wert 12, so wird der Variablen eine Zufallszahl zwischen 0 und 11 zugewiesen. Mit einer nachfolgenden + (Hinzufügen) Operation ist es auch möglich, einen zufälligen Wert in einem Bereich mit einer unteren Grenze zu erzeugen, die sich von 0 unterscheidet.
  • ! (Operation): Diese Operation kann nur auf Objektvariablen angewendet werden. Sie führt eine vorgegebene Operation (z.B. setze Signal auf grün) mit dem Objekt aus, das gegenwärtig in der Variablen gespeichert ist.
  • = (Abfragen): Diese Operation kann nur auf Objektvariablen angewendet werden. Es gibt sie in verschiedenen Ausprägungen, darunter zum Beispiel = (Zug Abfragen), = (Block Abfragen), = (Zugfahrt Abfragen). Die Operation kann dazu verwendet werden, um an einem vorgegebenen Objekt (z.B. einem Block) den gerade mit diesem Objekt verknüpften Zug, dessen Zugfahrt oder ein anderes zur Zeit verknüpftes Objekt abzufragen und in einer Variablen zu speichern. Zum Beispiel kann an dem Zug, der gerade in Block „Südstadt 3“ steht, das Licht mit folgenden Operationen eingeschaltet werden: Zunächst wird mit einer Objektvariablen die Operation = (Zug Abfragen) mit Angabe von Block „Südstadt 3“ ausgeführt. Damit wird der Zug, der gerade den Block „Südstadt 3“ reserviert, in dieser Variablen gespeichert. Danach wird mit dieser Variablen die Operation ! (Operation) mit Angabe der Zugoperation „Licht ein“ ausgeführt. Damit wird das Licht an diesem Zug eingeschaltet, also an dem Zug, der gerade in „Südstadt 3“ steht.
  • @ (Referenz): Diese Operation kann auf alle Typen von Variablen angewendet werden. Sie speichert einen Verweis auf eine andere Variable in einer Variablen. Diese Operation sollte nur von sehr erfahrenen Benutzern genutzt werden. Ist in der Variablen Y ein Verweis auf Variable X gespeichert, so wirkt die Variable Y als eine Art „Zeiger“ auf Variable X. Wenn auf die Variable Y zugegriffen oder diese ausgewertet wird, so wird tatsächlich auf die Variable X zugegriffen bzw. diese ausgewertet. Wenn die Referenz auf X in Y gespeichert ist und Y mit der + (Addieren) Operation um 5 erhöht wird, so wird tatsächlich der in X gespeicherte Wert erhöht.

Operand - Zahl:
Wählen Sie diese Option, wenn ein fester Zahlenwert bei dieser Operation verwendet werden soll. Diese Option ist für Zahlvariablen verfügbar.

Operand - Text:
Wählen Sie diese Option, wenn ein fester Text bei dieser Operation verwendet werden soll. Diese Option ist für Textvariablen verfügbar.

Operand - Zeit:
Wählen Sie diese Option, wenn ein fester Zeitwert bei dieser Operation verwendet werden soll. Diese Option ist für Zeitvariablen verfügbar.

Operand - Objekt:
Wählen Sie diese Option, wenn der Bezug auf ein bestimmtes Objekt bei dieser Operation verwendet werden soll. Diese Option ist für Objektvariablen verfügbar.

Operand - Variable:
Wählen Sie diese Option, wenn der Inhalt einer anderen Variablen bei dieser Operation verwendet werden soll. Diese Option ist für alle Variablen verfügbar.

Operand - Formel:
Wählen Sie diese Option, wenn das Ergebnis der Berechnung einer Formel bei dieser Operation verwendet werden soll. Diese Option ist für Zahl- und Zeitvariablen verfügbar.

Operand - Zustand:
Wählen Sie diese Option, wenn eine Operation mit dem in der Variablen gespeicherten Objekt ausgeführt werden soll. Diese Option ist für Objektvariablen verfügbar.

Operand – System:
Wählen Sie diese Option, wenn eine Operation mit einem systemweit vefügbaren Wert (z.B. Anzahl der gerade aktiven Zugfahrten) ausgeführt werden soll. Diese Option ist für Zahlvariablen verfügbar.

Operand – Kontext-Objekt:
Wählen Sie diese Option, wenn ein Wert des Kontext-Objekts (z.B. der Name des Kontext-Objekts) bei dieser Operation verwendet werden soll. Diese Option ist für Textvariablen verfügbar.

Operand – Kontext-Zug, Kontext-Fahrzeug, Kontext-Block, Kontext-Zugfahrt, Kontext-Booster, Kontext-Bahnhof u.ä.:
Wählen Sie diese Option, wenn ein Wert des/der Kontext-Zuges, -Fahrzeugs, -Blocks, -Zugfahrt, -Boosters, -Bahnhofsf u.ä. (z.B. die Geschwindigkeit des Kontext-Zuges oder der Strom des Kontext-Boosters) bei dieser Operation verwendet werden soll.

Operand – Aktuelle Zeit:
Diese Option ist auf Zeit-, Zahl- und Textvariablen anwendbar. Mit ihr wird die aktuelle Zeit der PC-Uhr in der ausgewählten Variablen gespeichert.

Operand – Bahnhofsuhr:
Diese Option ist auf Zeit-, Zahl- und Textvariablen anwendbar. Mit ihr wird die aktuelle Zeit der Bahnhofsuhr in der ausgewählten Variablen gespeichert.

Geben Sie den bei dieser Operation zu verwendenden Wert an.

Wert – System – Aktuelle Blöcke, Aktive Weichenstraßen, Aktive Zugfahrten, Fahrende Züge, Züge in Zugfahrten:
Diese Option ist verfügbar, wenn System als Operand ausgewählt wurde. Mit dieser Option wird die Zahl der aktuellen Blöcke, aktiven Weichenstraßen, aktiven Zugfahrten (d.h. Zugfahrten, die gerade von mehreren verschiedenen Zügen ausgeführt werden, werden nur einmal gezählt), fahrenden Züge oder Züge unter Kontrolle einer Zugfahrt (d.h. Gesamtzahl aller gerade stattfinden Zugfahrten) in einer Variablen gespeichert.

Wert – Kontext-Objekt - Name:
Diese Option ist verfügbar, wenn Kontext-Objekt als Operand ausgewählt wurde. Mit Name wird der Name des Kontext-Objektes (siehe TrainController Gold Programmbeschreibung) in der ausgewählten Variablen gespeichert.

Wert – Kontext- Zug – Name, Geschwindigkeit, Länge, Gewicht, Fahrzeuge im Zug, Fahrtrichtung, Ausrichtung, Zugname, Aktueller Block, Aktuelle Zugfahrt:
Diese Option ist verfügbar, wenn Kontext-Zug als Operand ausgewählt wurde. Mit Name, Geschwindigkeit, Länge, Gewicht oder Fahrzeuge im Zug wird der Name, die aktuelle Geschwindigkeit, die Länge, das Gewicht oder die Anzahl der Fahrzeuge des Kontext-Zuges (siehe TrainController Gold Programmbeschreibung) in der ausgewählten Variablen gespeichert. Fahrtrichtung speichert den Wert 1, wenn der Zug vorwärts fährt, sonst -1. Ausrichtung speichert den Wert 1, wenn der Zug in seinem aktuellen Block nach rechts oder unten ausgerichtet ist, sonst -1. Hat der Zug keinen aktuellen Block, so wird 0 gespeichert. Zugname speichert den momentanen Zugnamen des Zuges in einer Textvariablen. Aktueller Block speichert den aktuellen Block des Zuges in einer Objektvariablen vom Typ Block. Aktuelle Zugfahrt speichert die aktuelle Zugfahrt des Zuges in einer Objektvariablen vom Typ Zugfahrt.

Wert – Kontext-Fahrzeug – Name, Position im Zugverband, Ausrichtung im Zugverband, Adresse:
Diese Option ist verfügbar, wenn Kontext-Fahrzeug als Operand ausgewählt wurde. Name speichert den Namen des Kontext-Fahrzeugs in einer Textvariablen. Mit Position im Zugverband wird die Position des Fahrzeugs (Lok oder Wagen) im momentanen Zugverband in der ausgewählten Variablen gespeichert. Die Zählung beginnt mit 1 für das führende Fahrzeug im Zugverband. Ist das Fahrzeug nicht in einem Zugverband enthalten, so wird der Wert 0 gespeichert. Mit Ausrichtung im Zugverband wird die Ausrichtung des Fahrzeugs (Lok oder Wagen) im momentanen Zugverband in der ausgewählten Variablen gespeichert. Ist die Front des Fahrzeugs zur Vorderseite des Zugverbands hin ausgerichtet, so wird der Wert 1 gespeichert; ansonsten der Wert -1. Ist das Fahrzeug nicht in einem Zugverband enthalten, so wird der Wert 0 gespeichert. Mit Adresse wird die digitale Adresse des Fahrzeugs in einer Variablen gespeichert. Diese Option ist nur für Operationen verfügbar, welche von erweitertem Zubehör ausgeführt werden.

Wert – Kontext-Block - Name, Aktueller Zug, Aktuelle Zugfahrt:
Diese Option ist verfügbar, wenn Kontext-Block als Operand ausgewählt wurde. Name speichert den Namen des Kontext-Blocks in einer Textvariablen. Aktueller Zug speichert den Zug, der sich gerade im Kontext-Block befindet, in einer Objektvariablen vom Typ Zug. Aktuelle Zugfahrt speichert die aktuelle Zugfahrt des Zuges, der sich gerade im Kontext-Block befindet, in einer Objektvariablen vom Typ Zugfahrt.

Wert – Kontext-Zugfahrt - Name, Züge:
Diese Option ist verfügbar, wenn Kontext-Zugfahrt als Operand ausgewählt wurde. Name speichert den Namen der Kontext-Zugfahrt in einer Textvariablen. Züge speichert die Anzahl der Züge, die momentan von der Zugfahrt kontrolliert werden, in einer Variablen.

Wert – Kontext-Booster – Name, Züge insgesamt, Fahrende Züge, Stromstärke, Temperatur, Spannung, Farbe:
Diese Option ist verfügbar, wenn Kontext-Booster als Operand ausgewählt wurde. Name speichert den Namen des Kontext-Boosters in einer Textvariablen. Züge insgesamt bzw. Fahrende Züge speichert die Gesamtzahl bzw. die Zahl der gerade fahrenden Züge im Bereich des Boosters in einer Variablen. Stromstärke, Temperatur oder Spannung speichert den entsprechenden Statuswert des Boosters, sofern verfügbar, in einer Variablen. Farbe speichert die zum momentanen Zustand des Boosters gehörende Farbe (green, yellow, red) in einer Textvariablen. Dieser Wert kann zum Beispiel zur Anzeige in einem HTML-basierten Textelement verwendet werden, um eine grafische Boosteranzeige im Stellwerk zu verwirklichen.

Wert – Kontext-Bahnhof – Name, Züge insgesamt, Aktive Züge:
Diese Option ist verfügbar, wenn Kontext-Bahnhof als Operand ausgewählt wurde. Name speichert den Namen des Kontext-Bahnhofs in einer Textvariablen. Züge insgesamt bzw. Aktive Züge speichert die Gesamtzahl bzw. die Zahl der unter Kontrolle einer Zugfahrt stehenden Züge im Bereich des Bahnhofs in einer Variablen.

Wert – Aktuelle Zeit/Bahnhofsuhr – Zeit, Stunde, Minute, Sekunde, Millisekunde:
Diese Option ist verfügbar, wenn Aktuelle Zeit oder Bahnhofsuhr als Operand ausgewählt wurde. Zeit speichert die aktuelle Zeit der Computer-Uhr oder der Bahnhofsuhr in einer Variablen. Stunde, Minute, Sekunde oder Millisekunde speichert die Stunde (0 bis 23), Minute (0 bis 59), Sekunde (0 bis 59) oder Millisekunde (0 bis 999) der Computer-Uhr oder der Bahnhofsuhr in einer Variablen.

Neu:
Verwenden Sie diese Option, um eine neue Variable zu erzeugen. TrainController öffnet den Dialog Neue Variable.

Viele Operationen unterstützen die Verwendung von Formeln anstelle von festen Werten. Ein Beispiel ist die Operation Verzögerung. Anstatt einen festen Wert für die Verzögerung anzugeben, ist es auch möglich, eine Formel anzugeben. Während der Ausführung dieser Operation bestimmt das Ergebnis der Berechnung dieser Formel Wert dieser Variablen die tatsächliche Zeitdauer der Verzögerung.

Solche Formeln bestehen aus einem Text, welcher wie eine gewöhnliche mathematische Formel Zahlen, Rechenoperatoren +, -, * und / sowie ggf. Klammern enthält. Ferner kann die Formel auch Platzhalter für Variablen (siehe unten) enthalten.

Der Inhalt von Variablen kann in Auslösern oder Bedingungen ausgewertet werden.

  • Zahl-, Zeit- und Textvariablen: Der Wert, der in Zahl-, Zeit- oder Textvariablen gespeichert ist, kann mit den Operatoren = (gleich), <> (ungleich), >= (größer oder gleich), > (größer), ⇐ (kleiner oder gleich), < (kleiner) mit festen Werten oder dem momentan in einer anderen Variablen gespeicherten Wert verglichen werden. Für Zahl- und Zeitvariablen ist es auch möglich, mit dem Ergebnis der Berechnung einer Formel zu vergleichen. Bei Textwerten wird beim Vergleich nicht zwischen Groß- und Kleinschreibung unterschieden.
  • Objektvariablen: Objektvariablen können mit fest vorgegebenen Objekten oder anderen Objektvariablen auf Gleichheit ( = ) oder Ungleichheit (<>) geprüft werden. Es ist auch möglich, den Zustand des gespeicherten Objekts zu bewerten. Bei Objektvariablen mit dem Objekttyp Zug kann darüber hinaus geprüft werden, ob der in der Variablen gespeicherte Zug auf eine vorgegebene Zugbeschreibung passt.

In vielen Optionen des Programms mit Text als Wert ist es möglich, den Inhalt einer Variablen in den Text einzufügen, wenn dieser Text verwendet wird. Dies geschieht mithilfe von Platzhaltern für Variablen. Wenn der Text verwendet wird (z.B. während der Ausführung der Systemoperation Meldung), wird der Platzhalter durch den momentanen Inhalt der Variablen ersetzt. Der Inhalt von Zahl- und Zeitvariablen wird auf geeignete Weise in Text umgewandelt. Der Inhalt von Objektvariablen wird durch leeren Text ersetzt.

Um einen Platzhalter für eine Variable in ein Textfeld einzufügen, geben Sie die zwei Zeichen %V ein. Wenn die zugehörige Option Platzhalter für Variablen unterstützt, so werden diese beiden Zeichen sofort erweitert zu %V[?]. Von jetzt an kann dieser Platzhalter nur noch als Ganzes bearbeitet werden, so wie ein einziges Zeichen. Bei Doppel-klick auf den Platzhalter öffnet sich ein Dialog, in dem die Variable ausgewählt werden kann, deren Inhalt für die Textersetzung verwendet werden soll. Nach Bestätigung der Auswahl wird das ? im Platzhalter durch die Bezeichnung der Variablen ersetzt. Wenn die Zeichen %V eingegeben, aber nicht sofort zu %V[?] erweitert wurden, so unterstützt die zugehörige Option keine Platzhalter für Variablen.

Beispiel:

Angenommen, die folgende Meldung soll während des Betriebs mit der Systemoperation Meldung angezeigt werden:

„Aktuell laufende Zugfahrten X - Aktuell aktivierte Weichenstraßen Y“, wobei X und Y durch die entsprechenden Zahlen ersetzt werden.

Angenommen, die Anzahl der laufenden Zugfahrten wird in der Zahlvariable „Anzahl-Z“ gezählt; die Anzahl der aktiven Weichenstraßen wird in der Variablen „Anzahl-W“ gezählt. Tragen Sie dazu an geeigneter Stelle die Systemoperation Meldung ein und geben Sie den folgenden Text ein:

„Aktuell laufende Zugfahrten %V - Aktuell aktivierte Weichenstraßen %V“

Dieser Text wird automatisch erweitert zu

„Aktuell laufende Zugfahrten %V[?] - Aktuell aktivierte Weichenstraßen %V[?]“

Doppelklicken Sie auf die linke Instanz von %V[?] und wählen Sie die Variable „Anzahl-Z“. Doppelklicken Sie auf die rechte Instanz von %V[?] und wählen Sie die Variable „Anzahl-W“.

Der Text wechselt nun zu

„Aktuell laufende Zugfahrten %V[Anzahl-Z] - Aktuell aktivierte Weichenstraßen %V[Anzahl-W]“.

Angenommen, der in „Anzahl-Z“ gespeicherte Wert ist 5 und der in „Anzahl-W“ gespeicherte Wert ist 11, wenn die Systemoperation ausgeführt wird. Dann wird der folgende Text ausgegeben:

„Aktuell laufende Zugfahrten 5 - Aktuell aktivierte Weichenstraßen 11“.

Platzhalter in Variablen werden von den folgenden Optionen unterstützt (ohne Anspruch auf Vollständigkeit):

  • Systemoperationen mit Text als Wert (z.B. Meldung, Klangdatei, etc.).
  • Inhalt von Textfeldern im Stellwerk.
  • Formeln von Rampen und Abständen von Markierungen in Blöcken.
  • Zuweisungen zu Variablen oder Auswertung von Variablen mit Text oder einer Formel als Operand.

Der Gültigkeitsbereich einer Variablen beschreibt, in welchem Zusammenhang ein Wert einer Variablen ausgewertet werden kann. Variablen können mehr als einen Wert speichern. Der Gültigkeitsbereich einer Variablen gibt an, auf welchen dieser Werte in der momentanen Situation zugegriffen wird.

Es gibt folgende Gültigkeitsbereiche:

  • Global: Variablen mit globalem Gültigkeitsbereich können nur einen einzigen Wert speichern. Dieser Wert kann an allen Orten des Programms abgerufen werden, wo Variablen verwendet werden können. Wenn der Wert einer globalen Variablen an einer Stelle des Programms geändert wird, wird diese Änderung auch an allen anderen Orten wirksam, wo diese Variable aufgerufen wird.
  • Privat: Variablen mit privatem Gültigkeitsbereich können für jedes Objekt im Programm einen individuellen („privaten“) Wert speichern. Dieser Wert kann durch die von diesem Objekt ausgeführten Operationen gesetzt und in Bedingungen oder Auslösern desselben Objekts ausgewertet werden. Dieselbe private Variable kann von verschiedenen Objekten verwendet werden. Der in dieser Variablen gespeicherte private Wert für ein bestimmtes Objekt ist jedoch für ein anderes Objekt nicht sichtbar. Nehmen wir z.B. die Symbole von drei Tastern an. Der erste Taster soll einmal gedrückt werden können, der zweite zweimal und der dritte dreimal. Um dies zu erreichen, kann eine Variable mit privatem Gültigkeitsbereich verwendet werden, deren (privater) Wert in den Operationen jedes Tasters um 1 erhöht wird. Dadurch wird für jeden Taster ein eigener Wert in der Variablen gespeichert. In den Bedingungen je-des Tasters wird die Variable mit der individuellen Grenze (1, 2 bzw. 3) dieses Tasters verglichen. Der für diesen Vergleich verwendete tatsächliche Wert ist der in der Variablen für diesen Taster gespeicherte Wert. Makros bilden eine Ausnahme. Für Makros wird kein privater Wert gespeichert. Wenn eine Variable mit privatem Gültigkeitsbereich in den Operationen oder Bedingungen eines Makros verwendet wird, dann wird der private Wert des Objekts verwendet, welches das Makro aufgerufen hat. Dies ermöglicht beispielsweise die Erhöhung der privaten Zähler der drei oben erwähnten Taster in einem von diesen Drucktasten gemeinsam verwendeten Makro.
  • Zug: Variablen mit diesem Gültigkeitsbereich können für jeden Zug im Programm einen individuellen Wert speichern. Der Wert, der in dieser Variablen für einen bestimmten Zug gespeichert ist, kann in jedem Objekt verwendet werden, das derzeit mit diesem Zug verbunden ist. Beispiele für solche Objekte sind Blöcke oder Weichenstraßen, die von diesem Zug reserviert werden; Melder oder Markierungen, die in Blöcken enthalten sind, die von einem Zug reserviert sind; Weichen in den von diesem Zug reservierten Weicheckstraßen usw. Ist z.B. eine Variable mit dem Gültigkeitsbereich Zug in der Bedingung einer Markierung enthalten, so wird der in dieser Variable für denjenigen Zug gespeicherte Wert verwendet, der momentan den Block reserviert, in dem die Markierung entsandten ist.
  • Block: Variablen mit diesem Gültigkeitsbereich können für jeden Block im Programm einen individuellen Wert speichern. Der Wert, der in dieser Variablen für einen bestimmten Block gespeichert ist, kann in jedem Objekt verwendet werden, das derzeit mit diesem Block verbunden ist. Beispiele für solche Objekte sind der Zug in diesem Block; Melder oder Markierungen, die in diesem Block enthalten sind; Taster, die diesem Block zugeordnet sind usw.
  • Zugfahrt: Variablen mit diesem Gültigkeitsbereich können für jede Zugfahrt im Programm einen individuellen Wert speichern. Der Wert, der in dieser Variablen für eine bestimmte Zugfahrt gespeichert ist, kann in jedem Objekt verwendet werden, das derzeit mit dieser Zugfahrt verbunden ist. Beispiele für solche Objekte sind die Züge, die diese Zugfahrt gerade ausführen; Blöcke, die von einem solchen Zug reserviert werden sowie alle Melder und Markierungen darin; Weichenstraßen, die von einem solchen Zug reserviert werden sowie alle darin enthaltenen Weichen usw.
  • Weichenstraße: Variablen mit diesem Gültigkeitsbereich können für jede Weichenstraße im Programm einen individuellen Wert speichern. Der Wert, der in dieser Variablen für eine bestimmte Weichenstraße gespeichert ist, kann in jedem Objekt verwendet werden, das derzeit mit dieser Weichenstraße verbunden ist. Beispiele für solche Objekte sind die in dieser Weichenstraße enthaltenen Weichen.
  • Erweitertes Zubehör: Variablen mit diesem Gültigkeitsbereich können für jedes Symbol eines erweiterten Zubehörs im Programm einen individuellen Wert speichern. Der Wert, der in dieser Variable für ein bestimmtes Symbol eines erweiterten Zubehör gespeichert ist, kann in jedem Baustein dieses Symbols verwendet werden.
  • Lokal: Variablen mit lokalem Gültigkeitsbereich können nur einen einzigen Wert speichern. Lokale Variablen werden im Zusammenhang mit Operationslisten erstellt. Auf Ihren Wert kann nur durch Operationen in derselben Liste von Operationen zugegriffen werden. Lokale Variablen werden nicht über das Explorer-Fenster verwaltet. Eine lokale Variable wird automatisch gelöscht, wenn sie in keiner Operation mehr verwendet wird.

TrainController 10 Gold versucht, Referenzen auf Variablenwerte immer so weit wie möglich aufzulösen. Wenn z.B. eine Variable mit Zugfahrt als Gültigkeitsbereich in den Operationen eines Makros verwendet wird, das von einer Markierung in einem Block aufgerufen wird, dann versucht die Software herauszufinden, welcher Zug diesen Block reserviert und welche Zugfahrt den Zug gerade kontrolliert. Wenn es eine solche Zugfahrt gibt, wird der für diese Zugfahrt in der Variablen gespeicherte Wert verwendet. Wenn es keine solche Zugfahrt gibt, wird stattdessen ein leerer Wert (0, leerer Text usw.) verwendet.

Name der Variable Operation Operand Wert
Weiche Typ Objekt Objekttyp Weiche global
Zuweisung Objekt Weiche auf der Anlage
Variable Variable
Operation Zustand Weichenstellung
Referenz Variable
Name der Variable Operation Operand Wert
Weiche Typ Objekt Objekttyp Weiche global
Zuweisung Objekt Weiche auf der Anlage
Variable Variable
Operation Zustand Weichenstellung
Referenz Variable

Bei privaten Variablen wird immer das Objekt verwendet, das im engsten Kontext des Zugriffs steht.

Wenn Sie also auf eine private Variable innerhalb der Ausführung einer Lokfunktion zugreifen, so wird auf den bei der Lok gespeicherten Wert zugegriffen. Auch wenn diese Lok gerade eine Zugfahrt ausführt, so ist die Zugfahrt im Kontext dieses speziellen Zugriffes „weiter entfernt“ als die Lok.

Wenn Sie aber direkt in den Startoperationen einer Zugfahrt auf eine private Variable zugreifen, so ist die Zugfahrt im Kontext dieses Zugriffes näher dran als die Lok. Hier wird auf den bei der Zugfahrt gespeicherten Wert zugegriffen. Und zwar greifen hier alle Züge, welche diese Zugfahrt ausführen, auf denselben Wert zu.

Bei privaten Variablen ist in der Regel das Objekt, welches die Operationen gerade ausführt, dasjenige, auf dessen Wert zugegriffen wird (eine Ausnahme bilden Makros. Makros haben keine eigenen privaten Werte, es wird immer auf den Wert des Aufrufers des Makros zugegriffen).

Vorsicht also!

Eindeutiger wird es, wenn Sie Zugfahrt als Gültigkeitsbereich der Variablen festlegen. Dann wird in beiden oben beschriebenen Fällen auf den bei der Zugfahrt gespeicherten Wert zugegriffen.

Aber auch hier wieder Vorsicht!

Wird diese Zugfahrt von mehreren Zügen gleichzeitig ausgeführt, so wird immer auf denselben Wert zugegriffen. Alle aktiven Instanzen derselben Zugfahrt greifen auf denselben Wert einer Variablen mit Zugfahrt als Gültigkeitsbereich zu.

Möchte man für jeden Zug einen eigenen Wert pflegen, so wählt man also besser Zug als Gültigkeitsbereich.

Siehe TC Forum

  • tc/variablen/variablen.txt
  • Zuletzt geändert: 12.11.2024 09:46
  • von Martin Fitzel