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 !!
Situation
Auf digitalen Modelleisenbahnen die mit einem
PC-Steuerungsprogramm betrieben werden, stellt sich die Frage "wie
lassen ich die Zugfahrten dynamisch vom Betriebsgeschehen im
Ablauf beeinflussen".
Jedes PC-Steuerungsprogramm wird hier seine
eigenen Methoden und Verfahren anbieten.
Im folgenden soll hier das Prinzip des
Softwareprogramms TrainController (TC)* vorgestellt werden.
Beispiel 1:
Variable / beliebig
lange Aufenthaltsdauer ("Zugfahrtunterbrechung")
In TC * kann -- in Abhängigkeit von
der Version -- für einen TC-Block, der einen physikalischen
Gleisabschnitt repräsentiert, eine Aufenthaltsdauer innerhalb
einer Gesamtzugfahrt von "S" nach "Z" in
Abhängigkeit von der Zugfahrt selbst und / oder eingesetzter Lok
vorgegeben werden.
Diese Zeitdauer ist dann "fix" eingestellt
und wird immer bei dieser Zugfahrt in diesem Block wirksam.
Jeder Block in dem ein planmäßiger Aufenthalt erfolgen soll, kann
mit einer anderen Zeitdauer belegt werden.
Sollen aber dynamische Vorgänge des
Betriebsgeschehens eine Zugfahrtunterbrechung bewirken, z.B. bei
einer Überholung (Güterzug <> ICE / D-Zug), dann stellt sich die
Frage "wie kann man das nachbilden ??"
allgemeiner Lösungsansatz
Wie bekannt, TC* reserviert -- wie
bei der großen Bahn -- in Abhängigkeit von den jeweiligen
Zugfahrteinstellungen vorausliegende Blöcke und zugehörige
Weichenstraßen (Weichenstraße = Verbindung zwischen
jeweils 2 Blöcken).
Soll nun der Zug in einem bestimmten Block
"außerplanmäßig" warten, dann muß man die Ausfahrt aus diesem
Block temporär sperren.
Die Dauer der Sperre bestimmt die Aufenthaltsdauer.
Nach Aufheben der Block-Ausfahrtsperre
erfolgt die Fortsetzung der unterbrochenen Zugfahrt.
Hinweis zum Einsatz dieser Maßnahme
Die einzelnen Reservierungen und Belegungen erfolgen aufgrund der
objektorientierten Programmstruktur nicht immer zum gleichen
Zeitpunkt.
Daher kann es vorkommen, daß evtl. eine Sperre zu spät gesetzt
wird und der Zug nicht hält.
Sicherer ist es, wenn man die Blockausfahrt grundsätzlich sperrt
und dann in der betrieblichen Situation jeweils frei gibt, wenn
KEIN Aufenthalt "erzwungen" werden soll.
Hat der Zug den Block passiert, wird die Sperre vorsorglich
wieder gesetzt.
Der Nutzer muß also invers denken und handeln.
Fazit
Die Blockausfahrtsperre erlaubt eine
dynamische Zugfahrtunterbrechung in einem Block.
Die Blockausfahrtsperre arbeitet bei jeder
Zugfahrt.
Die zur Aufhebung der Blockausfahrtsperre eingesetzte Logik muß so
ausgeführt werden, daß die Aufhebung immer erfolgt; in Fällen des
Aufenthalts entsprechend zeitverzögert.
Beispiel 2:
Ausführung von
Aktionen VOR Start der Lok / des Zuges
Typische Vertreter sind ....
- das Stellen von Formsignalen mit einem
Servo-Antrieb
- das Stellen von Schranken mit einem
Servo-Antrieb
- das Abspielen von Sounds (Ansagen,
Lokgeräusch, Pfiff, ...)
allgemeiner Lösungsansatz
Wie bekannt, TC* startet eine
Zugfahrt in einem Block durch Reservierung der Strecke (hier
allgemein Weichenstraße genannt) zum nächst folgenden Block -- wie
bei der großen Bahn.
Ist diese Reservierung erfolgreich verlaufen
und sind die zugeordneten Weichen gestellt, dann startet TC die
Zugfahrt.
"Sichtbares Zeichen" ist das Setzen des
internen Blocksignals.
Der Zug setzt sich nach der in der
jeweiligen Zugfahrt eingestellten Verzögerungszeit in Bewegung.
Diese Zeit ist fix und gilt für alle Zugstarts nach einem
Aufenthalt, also auch nach Aufenthalten, seien sie geplant oder
ungeplant -- wie oben dargestellt (Überholung).
Sollen aber vor der Abfahrt des Zuges noch
spezifische Operationen durchgeführt werden, wie z.B.
Bahnhofsansagen, Lok-Pfiff, stellen von Formsignalen und / oder
Schranken, dann muß die physische Abfahrt des Zuges verzögert
werden.
"Wie macht man das ??"
allgemeiner Lösungsansatz
Wie die anderen TC-Objekte auch, hat das
Objekt "Weichenstraße" ein Register "Operationen".
Sind hier Operationen eingetragen, dann
werden die VOR dem Abschluß der Reservierung der Weichenstraße
ausgeführt.
D.h. die Zugfahrt wird erst dann gestartet, wenn alle hier
eingetragenen Operationen ausgeführt worden sind.
Da es für eine Reihe von Operationen
(z.B. Ansagedauer, Formsignal / Schrankenbewegung) keine
Rückmeldung gibt, zumindest keine die hier abgefragt werden
könnte, muß man mit einer Hilfskonstruktion arbeiten.
Diese Hilfskonstruktion besteht darin, daß
man eine "Systemzeit" von X sec setzt; wobei X größer sein muß als
die theoretisch längste reale Operationszeit.
Ist die Zeit abgelaufen, dann erfolgt die in
der Reihenfolge eingetragene nächste Operation; ist keine mehr
vorhanden, dann wird die Zugfahrt gestartet, so nicht weitere
Aktionen "im Wege stehen".
Fazit
Die Zugausfahrt aus einem Block kann
dynamisch dadurch verzögert werden, indem in die Operationen der
sich anschließenden Weichenstraße(n) entsprechende Operationen /
Wartezeiten eingefügt werden.
Diese Einstellungen arbeiten bei jeder
Zugfahrt.
Will man z.B. die Ansagetexte von den
Zugfahrten / Zuggattung / Loks oder sonstigen Bedingungen abhängig
machen, dann muß man z.B. pro Zugfahrt einen Schalter setzen, der
über Bedingungen zu konfigurieren ist, sodaß immer nur einer
anspricht (aktiviert werden aus der Weichenstraße heraus alle).
In den Operationen des jeweiligen Schalters
sind dann die entsprechenden Sound-Funktionen zu starten.
Beispiel 3:
Zugbeschreibungen und
ihre Filterwirkungen
Mit der TC Version 8.0 (Gold) wurde die
Funktion "Zugbeschreibung" eingeführt.
Eine Zugbeschreibung definiert ein Fahrzeug
und kann in allen TC-Objekten die in den Eigenschaften ein
Register "Züge" aufweisen, dort eingefügt werden und wirkt damit
in diesem TC Objekt als Filter.
Eine Filterwirkung kann z.B. darin bestehen,
daß Fahrzeuge, die dieser Zugbeschreibung entsprechen diese Strecke
(Block) benutzen dürfen oder auch nicht.
Die Zugbeschreibung wird
hier gesondert
dargestellt.
Beispiel 4:
Variabler Haltepunkt
bei einer Zugfahrt
Mit der TC Version 8.0 (Gold) wurde diese
Funktion "Längenberechnung" eingeführt.
Die Längenberechnung ermöglicht es Züge
flexibel und genau zu positionieren, so daß Rangierfahrten mit
Fahrzeug - Entkopplungen / Kopplungen an beliebiger Stelle des
Zugverbandes möglich werden.
Diese Funktion ist
hier näher beschrieben.