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.