Kochbuch: Fahrpläne im Script

  • Da die Prozeduren und Funktionen, die rund um das Thema "Fahrpläne und Disposition im Script-System" vorhanden sind, ziemlich umfangreich und speziell sind, präsentieren wir hier einige Beispiele, wie diese anzuwenden sind.

    1 Allgemeines

    Bei den folgenden Prozeduren und Funktionen wird im Sinne der Einfachheit keine Rücksicht auf besondere Effizienz genommen, da in erster Linie am Beispiel erklärt werden soll, wie die Funktionen arbeiten. Es wird daher am Ende der Beispiele jeweils allgemein vorgeschlagen, wie man den Ablauf auch effizienter gestalten kann.

    2 Vorarbeiten

    Für diverse Funktionen wird der Name des RBL-Servers gebraucht, auf den sich das RBL-Bordgerät anmelden soll. Diese Information wird in der Basis-FIS-Datei hinterlegt. Da sie sich fortan nicht mehr verändert, ist es sinnvoll, diese in eine Variable abzulegen. Hierbei sollte es sich um keine "PUBLIC_VARS"-Variable handeln, sondern um eine, die lediglich außerhalb der Prozeduren deklariert wird.


    Geschrieben werden soll die Variable nicht in der Initialize-Prozedur, sondern einmalig beim ersten Durchlauf von SimStep:


    3 Routen (keine Zeiten)

    3.1 Wo befindet sich das Fahrzeug auf einer bestimmten Route?

    Angenommen: Im RBL-Bordgerät wurden vom User Linie und Route eingegeben und es soll nun ermittelt werden, ob und wo sich das Fahrzeug auf der Strecke befindet. Zurück gegeben wird die sogenannte "Sektion". Hierbei wird bei der Starthaltestelle mit Nummer 0 begonnen zu zählen und dann jeweils abwechselnd der Abschnitt zwischen den Stationen und die Stationen selbst gezählt:


    0: an der Abfahrtsstation
    1: zwischen der ersten und zweiten Station
    2: an der zweiten Station
    3: zwischen der zweiten und dritten Station
    ...

    Effizienter ist es, wenn der wayIndex nur neu ermittelt wird, wenn sich linieStr und/oder routeStr ändern bzw. wenn eine Eingabe erfolgt, die potentiell zu einem anderen wayIndex führt.

    3.2 Wie heißt die Station, wo sich Fahrzeug befindet?

    Die folgende Funktion liefert die FIS-ID, die in der Konfiguration der Stationen im MapEditor eingetragen wurde. Falls es eine Angabe für das spezifische Gleis gibt, dann wird diese zurück gegeben. Gibt es dagegen nur eine für die gesamte Station, dann wird diese zurück gegeben, andernfalls der interne Name der Station.


    Übergeben werden müssen der Funktion wieder die ins Gerät eingegebenen Linien- und Routennummern, wie im vorherigen Beispiel. Sofern keine Station gefunden wurde, wird ein leerer String zurück gegeben:

    Auch hier wäre es effizienter, wenn der wayindex nur ermittelt wird, wenn sich etwas an der Linien-/Routen-Kombination ändert. Aber auch die section muss zumindest pro Durchlauf nur einmal aktualisiert werden – falls überhaupt so oft, ein "lockeres" Intervall reicht hier auch.

    3.3 Abstand zwischen zweier Stationen entlang einer Route

    Mit dieser Funktion kann – völlig unabhängig davon, wo sich aktuell das Fahrzeug befindet! – ermittelt werden, wie weit zwei beliebige Stationen voneinander entfernt sind (gemessen entlang der Route).

    Wichtig ist hierbei, dass die Stationen anhand der im MapEditor hinterlegten FIS-ID gesucht werden. Verläuft die Route dabei über ein Gleis, welches eine eigene, gegenüber der Station abweichende FIS-ID hat, dann wird jene ID verwendet. Für den Fall, dass die Route über mehrere Station(sgleise) mit derselben FIS-ID verläuft, wird die jeweils erste Station zugrunde gelegt.

    4 Fahrten (mit Zeiten)

    4.1 Stunden und Minuten in String umwandeln

    4.2 Fahrten eines Umlaufs anzeigen

    Für die folgende Funktion stelle man sich vor, dass man zunächst Linie und Kurs eingibt und dann mittels Pfeiltasten die verfügbaren Fahrten durchschaltet, die dann mit erster Abfahrtszeit, Anfangs- und Endstation in einem Textfeld angezeigt werden. index ist dabei die Zahl, die mit den Pfeiltasten um jeweils 1 erhöht oder verringert wird.


    Für die folgende Funktion werden die System-Variablen TimeOfDay und Date, die beide im Abschnitt "PUBLIC_VARS" deklariert werden müssen.

    Dieses Beispiel strotzt nur so von Ineffizienzen, da hier alle Abfragen in einem "Rutsch" gemacht werden. So muss der Umlauf selbstverständlich nur aufgerufen werden, wenn sich Linie und Kurs ändern. Dementsprechend muss auch die Fahrtenliste nur dann aktualisiert werden und kann die Anzahl der Einträge dieser Liste einmalig in eine globale Variable geschrieben werden anstatt in eine Funktions-Lokale.


    5 to be continued...