Globale und lokale Variabeln

Dynamische Aktionen

Variablen können verwendet werden, um Operationen, Bedingungen, Auslöser und viele andere Optionen flexibler einsetzbar zu machen. Durch die Verwendung einer Variablen anstelle eines festen Wertes für eine bestimmte Option ist es möglich, den Wert dieser Option zur Laufzeit und abhängig von der aktuellen betrieblichen Situation zu ändern.


Variablen können verwendet werden, um

  • zu zählen und auszuwerten, wie oft ein bestimmtes Ereignis während des Betriebs eintritt
  • den Namen von Zügen zu ändern, der in Blöcken während der Ausführung von Zugfahrten angezeigt wird
  • Berechnungen durchzuführen und deren Ergebnisse auszuwerten
  • ein Objekt aus einer Vielzahl von identischen Objekten für die Ansteuerung mit einem allgemeingültigen Makro auszuwählen
  • die Verzögerungen oder Wahrscheinlichkeiten von Operationen in einer Liste von Operationen dynamisch zu ändern
  • die Geschwindigkeit von temporären Geschwindigkeitsbeschränkungen während des Betriebs zu anzupassen
  • die Distanzen oder Rampen von Markierungen oder die Entfernungen der Zugoperation «Bewegen» während des Betriebs zu ändern

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.

Gültigkeit von privaten Variablen in TC9G

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 zugeriffen. Und zwar greifen hier alle Züge, weklche 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 Opens external link in new windowhier

HTML-Code in Textelementen

Mit Hilfe von HTML-Code in Textelementen, zusammen mit Variablen, können vielfältige Anwendungsgebiete erschlossen werden - ich habe hier einen Zähler für die Anzahl der gerade aktiven Zugfahrten realisiert.

Es werden fünf Variablen verwendet:

  • iZF_Counter (vom Typ Integer (=ganze Zahlen), hier wird die Anzahl gespeichert)
  • sZF_TextColor (vom Typ String (=Text), hier wird die Schriftfarbe hinterlegt)
  • sZF_BackgroundColor (vom Typ String (=Text), hier wird die Hintergrundfarbe hinterlegt)
  • iZF_ValueMaxGreen (vom Typ Integer (=ganze Zahlen), maximaler Wert für «grünen» Bereich)
  • iZF_ValueMaxYellow (vom Typ Integer (=ganze Zahlen), maximaler Wert für «gelben» Bereich)

Zusätzlich werden in meinem Anwendungsfall 3 Bahnwärter benötigt, welche die folgenden Zustände abfragen:

  • Anzahl Zugfahrten sind im «grünen» Bereich
  • Anzahl Zugfahrten sind im «gelben» Bereich
  • Anzahl Zugfahrten grösser als der «gelbe» Bereich

Mit dem Bahnwärter wird die Variable iZF_Counter abgefragt und je nach Wert der Inhalt der Variablen sZF_TextColor und sZF_BackgroundColor verändert.

Die Variable iZF_Counter wird durch die Operationen «Start» und «Ziel» der Zugfahrten mittels der Operation «Ablaufsteuerung» jeweils um den Wert 1 erhöht oder vermindert. Damit das Vermindern auch klappt, muss die Zugfahrt «regulär» beendet werden (also nicht durch «Zugfahrt beenden» oder «alle Zugfahrten beenden»).

Das Textfeld enthält folgenden Code:

<html>
<table width="300">
<tr><td valign="center">Anzahl aktive Zugfahrten</td><td align="center" bgcolor="%V[sZF_BackgroundColor]"><font color="%V[sZF_TextColor]"><font size="+1"><b>%V[iZF_Counter]</b></font></td></tr>
</table>
</html>

Und aussehen tut es dann so:

 

Die Einstellungen des Bahnwärters für den «grünen» Bereich: