Jens Mohr

Ingenieur  +  Betriebswirt
 

... das (H0) Modellbahnprojekt
St. Margareten 

 



 

Home
 

 Projekt - Idee
 Projekt - Planung
 Projekt-Realisier.
       Anlagenaufbau
       Selectrix
       TrainController
        St.Margareten
        Philosophie
        Blöcke
        Fahrweg
        Signale
        Melder
        Schalter,Taster..
        Drehscheibe
        Lok-Zug-Komb.
        Lokführerstand
        Zugfahrten
        Zugbeschreibung
        Längenberechng
        Makros
        Explorer
        Meldungen
        +SmartHand
        Dig.System Konf.
        Beispiele
        Blöcke-Melder
        Ausleuchtung-WS
        Abstellgleis
        Bahnschranke
        Formsignal-Servo
        Drehscheibe
        Kohle-Wasser-Servo
        Kurswagen
        Lokwechsel
        Zug-Überholung
        Start-Ziel-Taster
        if .. then .. else
        Flip ... Flop
        Zähler-Binärzähler
        Zufallsgenerator
        Zugfahrt-Einfluß
        Texte-Meldungen
        Tipps
       Zentrale<>PC
       PC-Konfig.
       Umrüstungen
       Tipps
       Ausgestaltung
       Elektr.Entw.
       3D Druck
       Paternoster
       Ansichten

 Support & Serv.  Links
 Kontakt - Impres.


Copyright 2022
Jens Mohr
83224 Grassau
(Chiemsee/Achental)

 


TrainController (TC) * - Beispiel  "if..then..else"
(vorgestellt anhand der Variante "Gold" in der Version  8.0)


Vorwort

Wie bereits an anderer Stelle erwähnt, erlaubt TC* aufgrund seines streng objektorientierten Aufbaus, daß es im allgemeinen mehrere Wege gibt eine Aufgabe zu lösen.

Hier wird immer nur EINE Lösung dargestellt, die  für sich nicht in Anspruch nimmt allgemeingültig einsetzbar zu sein oder gar die optimale Lösung zu repräsentieren.

Die Herausforderung für den Leser besteht deshalb gerade darin, die vorgestellte Lösung an seine Belange anzupassen und zu optimieren. Sie soll und kann nur als Anregung dienen.


Hinweis

Die hier angeführten Beispiele basieren zum Teil auf Anregungen bzw. Vorleistungen von Teilnehmern aus dem TC-Forum, die von diesen dort veröffentlicht wurden OHNE eine Angabe auf Einschränkung bei deren Verwendung im PRIVATEN Bereich.
Im Einzelnen läßt sich die jeweilige "Mitwirkung" des / der Teilnehmer(s) an den hier vorgestellten Lösungen nicht mehr klären bzw. darstellen.

Darstellungsform

Zuerst wird bei jedem Beispiel die  jeweilige Aufgabenstellung vorgestellt. Danach erfolgt die Beschreibung eines allgemein gehaltenen Lösungsansatzes. Und als drittes der spezielle Lösungsweg, so wie er von mir mittels TC*-Objekten vorgenommen wurde.
Um Platz zu sparen, wurden die einzelnen Bildschirmabzüge, auf denen die Lösungen erfaßt wurden, in Miniaturansicht eingestellt.
Zur Darstellung der Grafik in lesbarer Form bitte das jeweilige Bild mit der mouse anklicken !!


Aufgabenstellung

Alle höheren Programmiersprachen kennen die Abfrage: if .. then .. else

Dies bedeutet z.B. :

 if (wenn) der Zug ein Güterzug ist, then (dann) stelle die Weiche w auf "rund", else (wenn nicht) dann auf "gerade".

Benötigt man in TC* ein solches Abfragekonstrukt, dann stehen einem solche Möglichkeiten nicht direkt zur Verfügung, d.h. man muß "Umwege" beschreiten um zum Ziel zu gelangen.


allgemeiner Lösungsansatz
(ab und für Version 8.0 Gold > gibt es neue Objekte, siehe unten)

TC* kennt nur die Abfrage; if .. then

Will man das obige Beispiel mit TC* Objekten (Bedingungen) umsetzen, dann benötigt man zwei TC* Objekte hierzu. Im ersten formuliert man wie oben den ersten Teil der Abfrage ...
if (wenn) der Zug ein Güterzug ist, then (dann) stelle die Weiche w auf "rund".
Im zweiten Objekt erfolgt dann der zweite Teil in der Form ...
if (wenn) der Zug KEIN Güterzug ist, then (dann) stelle die Weiche w auf "gerade".

Beide Objekte werden durch ein drittes Objekt "gleichzeitig" aktiviert; das kann dadurch erfolgen, das die beiden Objekte als Teil der Operationen aufgerufen werden oder das beide Objekte einen Auslöser haben, der auf das dritte Objekt eingestellt ist.

Der "Trick" besteht darin, daß innerhalb der Abfragezeit der beiden Objekte sich der Status des Zuges (des abzufragenden Objektes) nicht ändert. Setzt man dies voraus, so kann nur eines der beiden obigen Objekte "wahr" sein und somit wird die Weiche eindeutig bedient.


Lösung mittels TC *

Innerhalb der Beschreibung eines "Zufallsgenerators" wird hierzu ein Beispiel (Anwendung) beschrieben.



allgemeiner Lösungsansatz  ab und für Version 8.0 Gold

In allen TC Objekten die das Register "Operationen" aufweisen besteht in der Gold Variante nunmehr über das links angeordnete Auswahlfeld sich unter "Ablaufsteuerung" die einzelnen Funktionen ....

  • Verzögerung (Zeit == "Wartezeit") > mit fest vorgebbarer Zeitdauer
  • zufällige Verzögerung > ("Zufallszeitdauer") > mit max. vorgebbarer Zeitdauer
  • Vorraussetzung > if .. then .. else -- Abfrage
  • Sprung > Anweisung
  • Marke > Sprungmarke (Ziel)
  • % Wahrscheinlichkeit
  • zufällige Reihenfolge

auszuwählen und nach rechts zu übernehmen.

Diese Funktionen werden in der bekannten Reihenfolge "von oben nach unten" abgearbeitet.
Aus der Kombination dieser Anweisungen können nunmehr komplexe Steueraufgaben gelöst werden.

In Bezug auf die Entscheidung    if .. then .. else
steht die Funktion "Voraussetzung" zur Verfügung. Hier wird die Bedingung formuliert, die für eine bestimmte Situation abzufragen und auszuwerten ist.

Abgefragt werden definierte TC-Objektzustände, die ausgewählt werden können.

Ist die Bedingung erfüllt "then" (dann) wird mit der "Anweisung" fortgefahren, die in der Reihenfolge nach der Voraussetzung steht.
In aller Regel wird hier ein Sprung zu einer korrespondierenden Marke einzutragen sein.
Die Marke kann sich irgendwo in der Reihenfolge befinden.
Alle Operationen, die sich nach der Marke befinden, werden dann im "then" Fall abgearbeitet.
So das Ende der Operationsfolgen für diesen Fall nicht gleichzeitig das Ende der gesamten Operationen darstellt, muß jetzt eine Sprung Anweisung zu einer neuen Marke führen, wo die Operationen weiter geführt werden sollen.

Zurück zur obigen "Voraussetzung", ist die Bedingung nicht erfüllt, so geht es mit der übernächsten Anweisung, die der "Voraussetzung" folgt weiter; also der "else"  Fall.

 


Beispielanwendung im Rahmen einer "Schattenbahnhof - Steuerung"

 


HINWEISE     zu mit  *  markierten Worten

Alle Firmenbezeichnungen / Firmennamen; Produktbezeichnungen / Produktnamen stellen keine Werbung oder Empfehlung dar, sondern beschreiben nur die in diesem Projekt individuell und subjektiv ausgewählten Produkt - Hersteller bzw. Lieferanten als auch deren verwendeten Produkte zur Anschauung, Darstellung und Beschreibung des eigentlichen Projekt - Inhalts.

Analoges gilt auch für die eingetragenen Links (s. hierzu Distanzierung auf der Link-Seite).

Der Leser soll selbst auf dem Markt recherchieren und für seine Bedürfnisse selbst entscheiden welches Produkt er einsetzen will und wo er sich dieses beschaffen möchte.

In dieser Veröffentlichung verwendete Produktnamen / Produktbezeichnungen sind von / durch den einzelnen Hersteller(n) geschützt. Ihre Nutzung dient lediglich zur Kennzeichnung / Beschreibung des Produktes selbst.
Analoges gilt für die erwähnten
Firmenbezeichnungen / Firmennamen.