User Tools

Site Tools


variable-de

Benutzer-Variable

Beschreibung

Benutzer-Variable können in Kombination mit Aktionen und Bedingungen verwendet werden.
Siehe dazu für mehr Informationen:


In diesem Kapitel werden vom Anwender zu definierende Variable beschrieben.
Zusätzlich bietet Rocrail noch über 30 "eingebaute" Variable, deren Werte durch den Betriebs-Ablauf bestimmt werden.
Siehe hierzu: Text-Variable


Übersicht




In Rocrail unter dem Menüpunkt Tabellen - Variablen Tabelle wird das Tabellenfenster "Variable" aufgerufen.
Hier können Variablen erstellt werden.
Die Tabelle kann durch Klicken auf die Spaltenüberschriften sortiert werden.
Durch Klick auf NEU wird eine neue Variable erstellt.

Neu

Erzeugt eine neue Variable "New". Diese Kennung muss auf der Registerkarte 'Allgemein' geändert werden.

Löschen

Löscht den markierten Eintrag aus der Liste.

Dokumentation

Siehe: Berichte

Suchen

Filtert mit "Übernehmen" die Übersicht nach Kennungen, die die eingebenen Zeichen enthalten.

Gemeinsame Dialog-Schaltflächen

Allgemein


Kennung

Die Kennung wird überall im Rocrail-Programm als eindeutiger Schlüssel für die Referenzierung dieser Variablen verwendet.

Gruppe

Es kann eine Gruppe angegeben werden. Dies dient der Übersichtlichkeit, da im Tabellen Fenster nach Gruppen sortiert werden kann.

Beschreibung

Es kann eine Beschreibung angegeben werden. Dient nur zur Info, damit man später weiß, für was man diese Variable angelegt hat.

Min/Max

Der Bereich zur Erzeugung einer Zufallszahl.
Max. muss größer als Min. sein.
Bei Variablen, die keine Zufallszahl sein sollen, die Werte auf 0 belassen.

Text

Ein Text der Variablen, mit dem später in Aktionen Stringoperationen (Textvergleiche) durchgeführt werden können.
Der Text kann auch eine Zahl sein.
Text-Werte werden zu Ganzzahlen konvertiert und sind standardmäßig Null, wenn sie nur Text enthalten, um auch mit ihnen rechnen zu können (siehe Parametersyntax unten).
Das Feld kann auch leer gelassen werden.

Wert

Der Wert einer Variablen, eine Zahl

Aktionen-Button

Hier können Aktionen ausgeführt werden, die gestartet werden, wenn die Variable einen bestimmten Wert hat.


Zusatzinfo:

Variablen können nicht nur über das Tabellen-Menü erstellt werden, sondern auch zur Laufzeit mittels Aktionen. Sobald eine Variablen Aktion zum ersten mal aufgerufen wird, wird die Variable automatisch erstellt (falls nicht schon vorhanden) und ist dann automatisch in der Tabellen-Übersicht vorhanden!


Aktionen

Siehe Aktionen für weitere Einzelheiten.

  • Nur der nummerische Wert kann als Aktions-Status verwendet werden.
  • Aktionen werden geprüft, nachdem ein Befehl ausgegeben wurde.
  • Zeitgeber-Variable werden nur geprüft, falls sie durch einen Start-Befehl in den aktiven Zeitgeber-Modus versetzt wurden.


Aktions-Befehle

Befehl Beschreibung Bemerkung
value Setzt einen neuen Zahlen-Wert.
random Erzeugt eine Zufallszahl im Bereich von min./max.
add Addiert einen Wert zum Zahlen-Wert.
subtract Subtrahiert einen Wert vom Zahlen-Wert.
text Setzt einen neuen Text.
reset Setzt eine Timer Variable auf 0 zurück
start Startet den Zeitgeber; Der Wert wird bei jedem Takt erhöht.
Der Start-Wert muss im Parameter-Feld eingestellt werden.
Der Zeitgeber-Takt-Intervall ist abhängig von der Option Aktion Zeiteinheit 60 Sek..
stop Stoppt den Zeitgeber.
min Setzt den min.-Wert.
max Setzt den max.-Wert.


Aktions-Status und -Bedingungen

Bedingung Beschreibung Beispiel
=value Vergleicht den Variablen-Wert mit dem gegebenen Wert. =1030
>value Prüft, ob der Variablen-Wert größer ist, als der gegebene Wert. >4711
<value Prüft, ob der Variablen-Wert kleiner ist, als der gegebene Wert. <23
!value Vergleicht den Variablen-Wert mit dem gegebenen Wert, ob sie ungleich sind. !47
#text Vergleicht den Variablen-Text mit dem gegebenen Text. #nogo
?text Vergleicht den Variablen-Text mit dem gegebenen Text, ob sie ungleich sind. ?gogo
text nicht gesetzt Prüft, ob eine Text-Variable "nicht gesetzt" ist. @var - NULL


Status- und Parameter-Syntax

Prefix Referenz
# Variablen-Kennung
$ Text-Kennung


Operatoren
+ Addieren
- Subtrahieren
/ Dividieren
* Multiplizieren
! Modulo

Die Operationen werden von links nach rechts ohne Berücksichtigung mathematischer Regeln ausgeführt.

Werte, Variablen und Operatoren müssen durch ein Leerzeichen separiert werden.

Beispiel:

#Var1 + 67 - $Txt2
#Var1%lcid% + 67 - $Txt2

Text-Werte werden zu Ganzzahlen konvertiert und sind standardmäßig Null, wenn sie nur Text enthalten.

Aktions-Sub-Kennung

Die Befehls- u. Bedingungs-Sub-Kennung ist optional und kann für folgende Text-Variablen verwendet werden:

Lok
%lcid% Lok-Kennung
%bkid% Block-Kennung

Dies wirkt nur im Automatik-Modus.
Die Variable wird automatisch erzeugt, wenn sie nicht bereits existiert.


Automatisch erzeugte Variablen

Wenn ein Zug / eine Locomotive kein neues Ziel findet, werden die folgenden Variablen automatisch erzeugt:

  • lc4112 → Lok-Kennung
  • bk4112 → Aktueller Block der Lokomotive


Anwendungsbeispiele


Normale Variable

Eine normale Variable kann z. B. als Zähler fungieren (Rundenzähler, Streckenabschnittszähler).
Sobald eine Lok in einen Abschnitt fährt, wird mittels einer Aktion add 1 der Variablenwert um eins erhöht, verlässt eine Lok den Abschnitt wieder, wird mittels einer subtract 1 Aktion der Variablenwert wieder um eins vermindert. Wenn man dann jeweils mit einer weiteren Aktion den Variablenwert in einem Textfeld im Gleisbild updated, hat man einen optischen Zähler, wieviele Loks sich in einem Streckenabschnitt befinden. Der Variablenwert kann auch zur Steuerung hergenommen werden, z. B. kann ab einem bestimmten Wert >x eine Class Aktion ausgeführt werden, die einen Block dann für bestimmte Classes sperrt oder freigibt. So können mit einem Zähler z. B. auch Steuerungsaufgaben übernommen werden.

Timer Variable

Mittels einer Timer Variablen können Aktionen nach einer gewissen Zeit (Timer Wert) ausgeführt werden. Man kann eine Timer Variable zum Beispiel auch für Messstrecken benutzen. Eine Lok startet den Timer an einem Melder, und später an einem weiteren stoppt sie den Timer wieder und gibt den Wert in ein Textfeld aus. Eine weitere Lok resettet den Timer am Startmelder wieder, startet ihn wieder und gibt am Ende wieder den Wert aus. So kann zum Beispiel gemessen werden, wie lange eine Lok von A nach B braucht. (Dafür gibt es in RR auch die Geschwindigkeitsmessstrecke, aber es soll nur ein Beispiel sein.)
Oder man misst mit einer Timer Variablen wie lange ein Verbraucher läuft (zum Beispiel Rauchgenerator). Immer wenn der Verbraucher eingeschaltet wird, wird mittels Aktion der Timer gestartet, beim Abschalten des Verbrauchers wird der Timer wieder gestoppt. Bei einem bestimmten Timer-Wert kann eine Warnung in ein Textfeld geschrieben werden, z. B. "Öl nachzufüllen". Nachdem dies gemacht ist, wird mittels eines Tasters "Öl nachgefüllt" per Aktion der Timer resettet, also auf 0 gestellt.

Zufallszahl

Zufallszahlen sind nützlich, wenn Aktionen zufällig ausgeführt werden sollen. Wenn z. B. min 0 ist und max 20, kann man die Aktion ausführen lassen, wenn der Wert z. B. 17 ist. In durchschnittlich einem von 20 Fällen wird die Aktion dann ausgeführt (nämlich dann, wenn die Zufallszahl 17 ist). Oder man lässt die Aktion ausführen, wenn der Wert >17 ist, d. h. die Aktion wird dann bei den Werten 18, 19 und 20 ausgeführt, also in 3 von 20 Fällen. Damit auch zu jeder Zeiteinheit eine neue Zufallszahl bestimmt wird, muss natürlich eine Aktion random der Zufallszahl ausgeführt werden. Zeiteinheit ist die je nach Einstellung in den RocRail Eigenschaften gewählte.
Die min und max Werte können auch zur Laufzeit mittels Aktionen geändert werden. Man kann z. B. 2 Textfelder ins Gleisbild setzen und dort jeweils einen Wert eingeben. Beim Ändern im Textfeld wird eine Textfeld Aktion ausgelöst, die den Textfeldinhalt als min Wert oder max Wert einer Variablen setzt.

Kombinationen von Variablen

Durch Kombination von Timern, Zufallszahlen und normalen Variablen können umfangreiche Dinge umgesetzt werden. Zum Beispiel einen Timer starten, der bei einem bestimmten Wert eine Zufallszahl erzeugt, diese wird zum Wert einer anderen normalen Variablen addiert usw.



Beispiel

Ein Beispielgleisplan enthält:
Einen Block mit der Kennung 'block1', die Rückmelder auf der Plus Seite 'block1+' und auf der Minusseite 'block1-', sowie einen Schalter mit der Kennung 'schalter1'

Variable anlegen:
Unter dem Menüpunkt: Tabelle-Variablentabelle eine Variable anlegen mit der Kennung 'counter', alle anderen Werte belassen.


Aktionen anlegen:
Unter dem Menüpunkt: Tabelle-Aktionen 2 Aktionen anlegen
Die erste Aktion bekommt die Kennung 'Schalter flip' und soll den Schalter umschalten (flip):


Die zweite Aktion mit der Kennung 'counter erhöhen' erhöht den Wert der Variablen 'counter' um 1:


Die 2 angelegten Aktionen:


Bei dem Rückmelder 'block1-' führen wir die Aktion 'counter erhöhen' aus, sobald der Rückmelder den Status 'on' hat:


Wir klicken nun mit der Maus einmal auf den Rückmelder 'block1-'
Jetzt öffnen wir unter dem Menüpunkt: Tabelle-Variablentabelle die Variablenansicht und sehen, daß der Wert der Variablen 'counter' von 0 auf 1 erhöht wurde.


Wir markieren die Variable 'counter' und wechseln zur Tabansicht 'Allgemein'
Dort gibt es einen Button 'Aktionen', hier werden alle Aktionen angelegt, die sich auf diese Variable beziehen.


Dort legen wir fest, daß die Aktion 'Schalter flip' ausgeführt werden soll, wenn der Status (und damit der Wert der Variablen) =5 ist:

(Man könnte hier beim Status zb auch angeben: =#var2 + $var3, dann würde die Aktion ausgeführt, wenn der Wert der Variablen 'counter' gleich wäre wie die Summe aus dem Wert der Variablen' var2' und dem Text der Variablen ' var3'. Dazu müsste im Text der Variablen 'var3' eine Zahl stehen, ansonsten wär $var3=0. Dieses Beispiel wäre also ein Variablenvergleich.)

Wenn wir jetzt im Gleisbild auf den Rückmelder 'block1-' klicken (oder später eine Lok ihn auslöst), wird jedesmal der Wert der Variablen 'counter' um eins erhöht.
Wenn die Variable den Wert 5 hat wird der Schalter umgeschalten.
Der Wert würde nun jedoch bei jedem Auslösen des Rückmelders weiter um eins erhöht (6…7…8) und die Aktion 'Schalter flip' würde nie mehr ausgeführt werden, da der Wert nie mehr =5 sein würde.

Deshalb legen wir nun eine weitere Aktion an:
Diese Aktion bekommt die Kennung 'counter nullen' und setzt den Wert der Variablen 'counter' auf 0



Nun müssen wir diese Aktion ebenfalls ausführen, wenn der Wert der Variablen 'counter' 5 ist.
Also wieder zurück ins Menü: Tabelle/Variablen-Tabelle, die 'Variable' counter wieder markieren, auf den Tab 'Allgemein' wechseln, und dort die Aktion hinzufügen:


Ergebnis:
Jedes mal, wenn der Rückmelder 'block1-' ausgelöst wird, wird der Wert der Variablen 'counter' um eins erhöht.
Wenn der Wert der Variablen 'counter' 5 ist (Rückmelder wurde 5 mal ausgelöst), wird die Aktion 'Schalter flip' ausgeführt (Schalter wird umgeschalten) und der Wert der Variablen 'counter' wird wieder auf 0 gesetzt.
Das bedeutet, jedesmal nach 5 Auslösungen des Rückmelders 'block1-' wird der Schalter 'schalter1' umgestellt.
Wenn man nun will, daß nur bestimmte Loks den Wert der 'counter' Variable erhöhen, wird einfach bei der Aktion 'counter erhöhen' die entsprechende Bedingung mit der Lokkennung eingetragen.

Dies soll nur mal ein kleines, einfaches Beispiel sein, wie man mit Variablen arbeiten kann.
Mit Timer- und Zufallszahlenvariablen funktioniert es genauso, diese haben halt noch weitere Status, die per Aktion geändert werden können.
Beim Timer zum Beispiel 'start' und 'stop', um den Timer zu starten und zu stoppen, außerdem 'reset' um ihn auf 0 zurückzusetzen.
Bei den Zufallszahlen noch 'min' und 'max' um die Unter- und Obergrenze der Zufallszahlenbestimmung festzulegen.
Eine neue Zufallszahl wird dann immer mit der Aktion 'random' erzeugt.

Mit diesem Beispiel und der Syntaxbeschreibung oben, müsste es nun gelingen, eigene Variablenaktionen (auch in Kombination) zu benützen.


Die Aktions Sub-Kennung


Wir legen nun noch eine Aktion an mit der Kennung 'counter pro lok' - Typ: Variable - Kennung: counter - Sub-Kennung: %lcid% - Befehl: add - Parameter: 1


Jetzt klicken wir mit der rechten Maustaste auf den 'block1' und wählen Eigenschaften aus.
Auf dem Tab Allgemein der Blockeigenschaften klicken wir auf den Button Aktionen und wählen die eben angelegte Aktion 'counter pro lok' beim Status 'occupied' aus:


Jetzt ziehen wir vom Lokbedienfeld zum Beispiel die Lok mit der Kennung 'lok1' in den Block 'block'.
Damit hat die lok1 den Status 'occupied' des Blockes 'block' ausgelöst und die eben angelegte Aktion wird ausgeführt.

Wenn wir jetzt in die Variablen-Tabelle schauen sehen wir folgendes:


Ergebnis:
Wir haben zur Laufzeit eine Variable für diese Lok angelegt mit der Kennung counter%lcid%, da es lok1 war, hat die Variable die Kennung 'counterlok1'.
Der Wert ist 1, da wir bei der zuvor angelegten Aktion ja den Befehl add 1 angelegt hatten.

Wir setzen nun noch lok3 in den Block 'block':


Ergebnis:
Wir haben nun für lok1 und für lok3 zur Laufzeit automatisiert eine Variable angelegt und mussten dies nicht erst manuell in der Variablentabelle tun.
Mit diesen sozusagen lokspezifischen Variablen hat nun jede Lok ihre eigene mit der wieder weitergearbeitet werden kann.
Dazu genügt es dann in zukünftigen Aktionen einfach die Variable 'counter' mit der Sub-Kennung '%lcid% zu benutzen um lokspezifische Variablenänderungen mit ein und derselben Aktion zu machen!
ACHTUNG: Aktionen mit der Sub-Kennung %lcid% funktionieren nur bei Objekten, die die lcid auch kennen, wie zb Blöcke, Rückmelder die Blöcken zugeordnet sind etc.


Kooperation Variablen und Textfelder


Wir legen im Gleisbild jetzt noch ein Textfeld an - Kennung:txt1 - Text: Text
Dieses plazieren wir mal unter dem Block 'block1'

Außerdem legen wir noch folgende Aktion an mit der Bezeichnung txt update (Weitere Einstellungen siehe Bild):


Mit dieser Aktion soll also der Text des Textfeldes 'txt1' aktualisiert werden mit dem Wert der Variablen 'counter%lcid%'


Jetzt gehen wir in die Blockeigenschaften des Blocks 'block1' und fügen dort diese Aktion ebenfalls beim Status occupied hinzu:




Wir öffnen nun die Variablentabelle und schauen uns mal die derzeitigen Werte der Variablen an:




Jetzt setzen wir lok3 in den Block 'block1' und sehen, es wird uns im Textfeld der Wert der Variablen 'counter%lcid%', in diesem Fall also 'counterlok3' angezeigt.
Dadurch, daß beim Status 'occupied' des Blocks 'block1' auch noch die Aktion 'counter pro lok' ausgeführt wurde, ist der Wert jetzt gleich noch um eins höher, als er vorher war.
Gleichzeitig wurde durch den 'occupied' des Blockes auch der Wert der 'normalen' Variable 'counter' auf 5 erhöht und sofort wieder auf 0 gesetzt (wir erinnern uns an die weiter oben beschriebenen Aktionen).
Wenn man dies nicht wollen würde, müsste man in dem Beispiel weiter oben eine andere Variablenbezeichnung nehmen oder eben für die %lcid% Variablen eine andere Bezeichnung (zb. 'counterallg' für die normale Variable und counter%lcid% für die %lcid% Variable).




Wenn wir jetzt die Lok wieder aus dem Block entfernen, zeigt uns das Textfeld den Wert der Variablen 'counter%lcid%' aktualisiert wieder an.
Da jetzt aber keine Lok im Block ist, ist die Sub-Kennung '%lcid%' unbekannt. Deswegen wird jetzt der Wert der Variablen 'counter' angezeigt



So kann man Variableninhalte in einem Textfeld ausgeben.
Es geht aber auch andersrum. Dazu muß man eine Aktion anlegen, die den Text eines Textfeldes in einen Variablenwert (- oder Variablentext) schreibt.
Das sollte man jetzt mit etwas Übung und Ausprobieren auch hinbekommen.

Viel Spass beim Testen und Umsetzen der eigenen Ideen mittels Variablen.

variable-de.txt · Last modified: 2022/12/30 01:02 by rainerk