====== Variablen im TrainController 11 - ein Versuch einer einfachen Erklärung ====== ===== Variablen in TrainController – Typen und Gültigkeitsbereiche ===== Variablen in TrainController dienen dazu, **Werte dynamisch zur Laufzeit zu speichern und auszuwerten**. Dadurch können Abläufe flexibel auf Betriebssituationen reagieren. Typische Anwendungen: * Zählen von Ereignissen * Steuerung von Geschwindigkeiten * Dynamische Entscheidungen * Auswahl von Objekten * Steuerung von Zugverhalten ====== Variablen in TrainController ====== ===== Überblick ===== Variablen in TrainController dienen dazu, **Werte dynamisch zur Laufzeit zu speichern und auszuwerten**. Typische Anwendungen: * Zählen von Ereignissen * Steuerung von Geschwindigkeiten * Dynamische Entscheidungen * Auswahl von Objekten * Steuerung von Zugverhalten ===== 1. Variablentypen ===== ==== 1.1 Zahl ==== **Beschreibung:** Speichert numerische Werte. **Verwendung:** * Zähler * Geschwindigkeiten * Berechnungen **Beispiel:** Variable ''Zuganzahl_im_Schattenbahnhof'' * Einfahrt: ''+1'' * Ausfahrt: ''-1'' * Bedingung: ''< 5 → Einfahrt erlaubt'' Klassischer Einsatz als Kapazitätssteuerung ==== 1.2 Text ==== **Beschreibung:** Speichert Zeichenketten. **Verwendung:** * Meldungen * Namen * Statusanzeigen **Beispiel:** Variable ''Zugstatus_Text'' Wert: ''Verspätung +5 min'' ==== 1.3 Zeit ==== **Beschreibung:** Speichert Zeitwerte (Millisekunden). **Verwendung:** * Verzögerungen * Zeitsteuerung **Beispiel:** Variable ''Abfahrtsverzoegerung'' Wert: ''30000'' (30 Sekunden) ==== 1.4 Objekt ==== **Beschreibung:** Speichert Verweise auf Objekte (Signal, Weiche, etc.). **Verwendung:** * Universelle Makros * Dynamische Steuerung **Beispiel:** Variable ''Signal_Objekt'' → wird einem Signal zugewiesen Makro setzt dieses Signal auf Grün ===== 2. Gültigkeitsbereiche ===== ==== 2.1 Global ==== **Beschreibung:** Ein Wert für das gesamte System. **Beispiel:** ''Notbetrieb_Aktiv = 1'' **Verwendung:** * Betriebsmodi * globale Schalter ==== 2.2 Privat (pro Objekt) ==== **Beschreibung:** Jedes Objekt hat seinen eigenen Wert. **Beispiel:** Variable ''Taster_Zaehler'' * Taster A → zählt separat * Taster B → eigener Wert ==== 2.3 Zug ==== **Beschreibung:** Jeder Zug besitzt eigene Variablenwerte. **Beispiel:** Variable ''Verspaetung'' * Zug A → +3 Minuten * Zug B → 0 Minuten **Verwendung:** * individuelle Steuerung * Prioritäten ==== 2.4 Block ==== **Beschreibung:** Jeder Block hat eigenen Wert. **Beispiel:** Variable ''Block_Belegtzeit'' **Verwendung:** * Analyse * Steuerung ==== 2.5 Zugfahrt ==== **Beschreibung:** Eigene Werte pro Zugfahrt. **Beispiel:** Variable ''Fahrtmodus'' * Schnellfahrt * Rangierfahrt ==== 2.6 Weichenstraße ==== **Beschreibung:** Eigene Werte pro Fahrstraße. **Beispiel:** Variable ''Fahrstrasse_Prioritaet'' * Hauptstrecke → hoch * Nebenstrecke → niedrig ==== 2.7 Erweitertes Zubehör ==== **Beschreibung:** Variablen für Zubehör-Objekte. **Beispiel:** Variable ''Bahnuebergang_Status'' * offen * geschlossen ==== 2.8 Lokal ==== **Beschreibung:** Nur innerhalb einer Operation gültig. **Eigenschaften:** * temporär * wird automatisch gelöscht **Beispiel:** Variable ''Temp_Wert'' für Zwischenberechnung ===== 3. Kombination von Typ und Gültigkeit ===== Eine Variable besteht immer aus: * Datentyp (z. B. Zahl, Text) * Gültigkeitsbereich (z. B. Zug, global) **Beispiel:** ''Verspaetung'' * Typ: Zahl * Gültigkeit: Zug --> Jeder Zug hat eigene Verspätung ===== 4. Typische Kombinationen ===== ^ Variable ^ Typ ^ Gültigkeit ^ Zweck ^ | Zuganzahl | Zahl | Global | Gesamtverkehr | | Verspaetung | Zahl | Zug | individuelle Steuerung | | Fahrmodus | Text | Zugfahrt | Betriebsart | | Signal | Objekt | Global/Lokal | Steuerung | | Verzoegerung | Zeit | Zugfahrt | Ablaufsteuerung | | Klickzaehler | Zahl | Privat | Bedienlogik | ===== 5. Fazit ===== TrainController kombiniert zwei Prinzipien: * **Datentyp → WAS wird gespeichert** * **Gültigkeit → FÜR WEN** Wichtige Einsatzbereiche: * Global → Systemsteuerung * Zug → individuelle Logik * Zugfahrt → Varianten im Betrieb * Lokal → interne Berechnung → Damit lassen sich **komplexe Automatik-Abläufe flexibel realisieren**.