Bereits 1989 habe ich an einem Fahrplaninformationssystem gearbeitet Dieses habe ich zunächst Fahrplanmanager (1989/90) und später FIS (1991/1992) genannt. Als Testdaten habe ich HVV-Daten benutzt. Wie ich nun in Internet entdeckt habe, gab es zur gleichen Zeit ein von der Hamburger Wirtschaftsbehörde gefördertes Fahrplan-Projekt das ebenfalls mit HVV-Daten arbeitet und ebenfalls FIS heißt.
Später habe ich mit der Entwicklungsumgebung Delphi gearbeitet und auch das Fahrplaninformationssystem damit weiter programmiert. Kurz darauf gab es erneut ein mit viel Geld gefördertes Fahrplan-Projekt mit dem Namen "Delfi". Auch die Ideen beider Projekte sind mit meinen - teils dokumentierten - zum grossen Teil identisch. Dies trifft insbesondere auf die Idee zu, Verbindungen über mehrere Verkehsverbünde bzw. Verkehrsmittel gleichzeitig abzufragen.
Ich habe dann ca. 2007 wieder angefangen an den Projekt zu arbeiten. In den letzten Monaten (2008/2009) war die Weiterentwicklung wegen eines Umzugs und der damit verbundenen Kosten sowie der dadurch nicht mehr verfügbaren Zeit nur beschränkt möglich..
Nachfolgend finden sich die eingescannten Planungs-Unterlagen aus den Zeitraum von 1988 .- 1992 des Fahrplan-Programms. Es handelt sich allerdings teilweise eher um Notizen als um vollständige Plaunungsunterlagen. Ich programmiere vieles ohne vorher umfangreiche Planungen zu betreiben, da sich vieles erst während des Programmierens ergibt. Das kann man natürlich nur machen, wenn man alleine an einem Projekt arbeitet. Teilweise ist leider nicht mehr feststellbar zu welchen Datum einzelne Dokumente gehören. Ich habe versucht die Unterlagen nach der zeitlichen Reihenfolge zu ordnen.
Programmiert habe ich die Software zunächst auf dem Amiga. Das muss im Zeitraum 1988/1989 gewesen sein. Die zugehörigen Disketten kann ich leider (im Moment) nicht lesen. Damals hatte ich eines der 3 benötigten Programme fertig programmiert - den Fahrplan-Editor. Das Programm wurde damals in Amiga-Basic programmiert.
Später habe ich dann wegen der geringen Verbreitung des Amigas versucht das Programm auf dem PC zu konvertieren bzw. neu zu programmieren. Das muss den Unterlagen zufolge 1990 gewesen sein. Programmiert habe ich damals in Modula-2. Da Modula-2 sich nicht durchgesetzt hat bin ich später dann auf Delphi umgestiegen.
Hinweis: In den nachfolgenden Erklärungen zu den eingescannten Unterlagen sind die Begriffe 'Station' und 'Bahnhof' gleichbedeutend.
Dieses Blatt enthält nur kurze Notizen. Ich nehme an dass ich diese und die folgenden Blätter während der Programmierung der Amiga-Version angefertigt habe.
Auch dies sind nur kurze Notizen zu den Funktionen des Programms aus Anwendersicht
Hier werden einige Besonderheit aufgezählt, die teilweise das Programm berücksichtigen sollte.
Diese Seite enthält Infromationen zu den benötigten Dateien für die Fahrplandaten. Hier wird der Aufbau der verschiedenen Dateien in Kurzform dargestellt. Die Bedeutung der einzelnen Daten.
Einige Grenzen des Fahrplanprogramms. Die Werte wurden später jedoch wesentlich erhöht. Zu berücksichtigen ist jedoch, dass damals Speichermedien wesentlich teurer waren. Diese Angaben dürften aus der Absicht entstanden sein, die Daten vollständig auf einer Diskette zu speichern - das waren damals 720 KB beim Amiga.
Die nachfolgenden quadratischen Zettel enthalten Angaben zu den benötigten Dateien. Dieser 1. Zettel enthält den Aufbau der nachfolgenden Dateibeschreibungen.
Ich gehe davon aus, das es beim Amiga damals Einschränkungen bei der Anzahl der möglichen Dateien pro Verzeichnis (Ordner) gegeben hat. Die Farben der Zettel unterscheiden sich, je nachdem welcher Programm-Teil für die Erstellung der Dateien zuständig ist:
Diese relative Datei dürfte die Linien mit den zugehörigen ID-Nummern enthalten. Netz$ enthält dabei den Netz-Namen, z. B. 'HVV'.
Hier wird für alle unterschiedlichen 'Minutenabstände' eine ID gespeichert. Mit 'Minutenabstände' sind hier Einträge wie 'fährt alle 10 Minuten bis 12:30 Uhr' gemeint. Als Beispiel wurden hier die Einträge 10, 5 und 20 für das Netz 'BUXHH' angegeben.
Hier wird je eine ID pro Linie zusammen mit den Liniennamen gespeichert. Im aufgeführten Beispiel kommen die beiden Linien (S11, DB) zweimal vor, da für jede Richtung ein eigener Eintrag erfolgt.
Hier werden die Stationen einer Linie aufgeführt. Im Beispiel werden die Stationen der S3 für eine Richtung aufgeführt.
Diese Datei dürfte die Linien enthalten, die an bestimmten Tagen fahren. Also beispielsweise eine Datei für Linien die werktags fahren, eine weitere für Linien die samstags fahren usw.
Diese Datei enthält für alle Linien die kreuzenden Linien mit dem jeweiligen Bahnhof. Diese Informationen sind für die Verbindungssuche relevant, da bei allen Linien außer der Linie des Start-Bahnhofs und der Linie des Zielbahnhofs nur diese Stationen relevant sind.
Hier sind alle Linien der Bahnhöfe aufgeführt, die in mehreren Linien vorkommen. Auch diese Information ist für die Verbindugnssuche relevant.
Enthält Informationen zu einzelnen Linien die abweichend zu den zuvor festgelegten Tagen oder nur in einer Richtung fahren.
Das hier als Linker bezeichnete Programm verarbeitet und komprimiert die mit dem Editor eingegebenen Fahrplandaten. Anschließend kann mit diesen erzeugten Daten die Verbindungssuche mit dem Fahrplan-Manager durchgeführt werden.
Der Editor dient zur Eingabe aller Fahrplan-Daten (unter anderem Stationen, Linien und Fahrpläne).
Der Fahrplan-Manager ist das Programm mit dem später der Anwender die Verbingungssuche durchführt.
Das Programm Amiga-Basic war damals Bestandteil der Systemsoftware zum Amiga.
Diese Datei dient zur Speicherung von Tastatureingaben als Makros. Beispielsweise könnte man die Verbindungsabfrage für den Weg zur Arbeit unter den Namen 'ZurArbeit' abspeichern und später nach Bedarf beliebig oft ausführen.
In dieser Tabelle befindent sich für die Stationen mit Umsteigemöglichkeit (Station bedient mindestens 2 Linien) die nächst-erreichbaren Stationen die ebenfalls eine Umsteigemöglichkeit bieten. Dabei werden parallel laufende Linien nicht berücksichtigt. Eingetragen wird die minimale Fahrzeit zwischen diesen Stationen. Rechts steht die Anzahl der Verbindungen je Station. Die Werte der Diagonalen dienen nur der besseren Übersicht. Die durchgestrichenen Stationen in der linken Spalte sind keine Stationen mit Umsteigemöglichkeit und werden daher nicht berückisichtigt.
Diese beiden Tabellen enthalten die Stationen (NAM) je Linie (LIN) sowie die Stations-Nummer (NR) und die Mindestfahrzeit (MIN) zwischen 2 aufeinander folgenden Stationen. Die Bedeutung der 5. Spalte kann im Moment nicht nachvollzogen werden.
Diese Tabelle enthält die Stationen an denen sich die einzelnen Linien kreuzen. Dabei werden die bereits zuvor oben definierten Stations-Nummern benutzt.
Beispiel: Die Linien U2 und S4 kreuzen sich an den Stationen 3 und 13. Dies sind die Stations-Nummern für Hauptbahnhof und Berliner Tor.
Diese Daten sind für die Verbindungs-Abfrage nützlich. Da es wesentlich weniger Linien wie Stationen gibt ist es einfacher bei der Verbundgunsabfrage intern nach Linien-Verbingungen zu suchen.
Hier bejinneb die Inhalte der vorigen Linien-Kreuz-Matrix neue Kennzeichnungen. Dabei bekommen gleiche Feldinhalte die gleiche Kennzeichnung. Je nach Anzahl der Stationen werden die Buchstaben A, B, C, D, E und F vergeben sowie eine fortlaufende Nummer.
Beispiel: Wie oben ersichtlich kreuzen sich die Stationen U1 und U2 an den Stationen mit den Stations-Nummern 3, 4, 14 und 16. Diese Kombination bekommt die neue Kennzeichnung 4D.
So sieht nun die Linien-Kreuz-Matrix mit der neuen Kennzeichnung aus:
Diese Grafik gibt für alle Keuzungs-Stationen (Stationen mit Umsteigemöglichkeit) die Mindestfahrzeit in Minuten zu den direkt mit diese Station verbundenen Kreuzungs-Stationen an. Für die spätere Verbingungssuche werden die Verbindungen von der Start- und Ziel-Station zu den nächsten Keuzungsstationen benötigt - anschließend wird für die Suche der besten Verbindung nur noch dieses Netz zugegriffen benötigt.
Hier wurden jeweils 3 Stationen der vorigen Zeichnung zusammengefasst. Mit einer derartigen Zusammenfassung können in mehreren Schritten immer gröbere Netze erstellt werden. Ein ähnlicher Algorithmus wird oft für die 3D-Grafikdarstellung benutzt. Bei sehr umfangreichen ÖPNV-Netzen ist es daruch möglich die Verbindungs-Suche zunächst in einem kleineren, gröberen Netz zu starten und das Ergebnis dann in den detailierten Teil-Netzen weiter zu suchen. Dazu muss dann aber mit den zusammengefassten Stationen noch eine Mindestfahrzeit gespeichert werden.
Beispiel: Aus der oberen Zeichnung wurden die Stationen 8, 10 und 36 im Knoten A4 zusammengefasst. In diesen Knoten müßte noch die Mindestfahrzeit 13 mitgespeichert werden. Die Mindestfahrzeit ist immer die kürzeste Fahrzeit bei den Linien der drei zusammengefassten Stationen.
Eine derartige Komprimierung ist nur sinnvoll wenn die Mindest-Fahrzeiten der 2 oder 3 Verbindungen im 'Dreieck' eine ähnliche Größe haben. Es können auch mehr wie 3 Stationen zusammengefasst werden.
Hier wird die in der vorigen Zeichnung durchgeführte Zusammenfassung (Dreiecksbildung) von Linien in Tabellenform dargestellt. Die Bedeutung der einzelnen Spalten von links nach rechts:
Diese Tabelle enthält noch einmal das Ergebnis der Zusammenfassung in einer anderer Form. Die Bedeutung der einzelnen Spalten:
Auflistung benötigter Funktionen und Prozeduren für den Fahrplan-Editor.
Offensichtlich handelt es sich hier um die Planung der Codierung der Einträge im Fahrplan-Editor. Das Fragezeichen deutet bereits an das hier eventuell ein Fehler vorhanden ist.. Die nächste Zeichnung dürfte den gleichen Zusammenhang besser erklären.
Hier wird definiert wie die Werte im Fahrplan-Editor intern codiert werden bzw. gespeichert werden.Dabei wird ein 16-Bit-Wert benutzt. Die ersten 11 Bits enthalten den Zeitwert der folgendermaßen codiert wird:
Das Bit 15 wird gesetzt wenn der Wert Intervall-wert ('alle x Minuten' ) interpretiert wird. Die Zeit 00:30 bedeutet dann die Bahn fährt alle 30 Minuten.
Diese Seite bezieht sich offensichtlich auf die beiden folgenden Seiten. Dort wird die Komprimierung der Fahrpläne anhand eines Beispiels dokumentiert. Die Notizen zur 'Lin-Zeit-Datei' beziehen sich wohl auf den Aufbau dieser komprimierten Fahrpläne.
Dieser Beispiel-Fahrplan der Linie 174 dient als Grundlage für die beiden nachfolgenden Seiten.
Dieser 'Baum' enthält die Pfade für alle Fahrten des Fahrplans.
Beispiel Die 1. Fahrt des Fahrplans würde mit den Werten der 4. Spalte mit ('-') beginnen. Unten wurde der Pfad sowohl bei den Stationen Sasel-Markt und Halenreie nicht nach rechts verzweigen da in beiden Fällen nur 1 Minute Fahrzeit zu den Stationen benötigt werden.
Mit Hilfe dieses Baums kann der Fahrplan sehr effektiv komprimiert werden. Für die einzelnen Werte des Baums werden weniger Bits benötigt wie bei der normalen Speicherung des Fahrplans, da nur die Minuten-Abstände zwischen den Stationen gespeichert werden. Auch für die Interval-Abstände (alle x Minuten) werden nur wenige Bits benötigt wenn diese in einer Extra-Tabelle mit der Minuten-Anzahl und einer ID-Nummer gespeichert werden (Beispiel: ID=1 für 'alle 10 Minuten', ID=2 für 'alle 20 Minuten' usw.). Für die einzelnen Fahrten wird nun nur noch die Startzeit, Die Spalte im abgebildeten Baum sowie das Verhalten bei Abzweigungen im Baum benötigt (Beispiel für die 1. Fahrt: Startzeit = 04:05 Uhr, Im Baum die 4. Spalte, bei beiden Abzweigungen den linken Weg nehmen).
Die hier abgebildeten Werte ergeben sich bei Verwendung des oben beschriebenen Baums zur Komprimierung. Die oberen rot markierten Felder beinhalten die Startzeiten der einzelnen Fahrten. Die gelb markierten Stations-Namen (abgekürzt) stellen Verzweigungen im Baum dar (siehe vorige Zeichnung).
Die folgenden Seiten gehören offenbar wieder zur Amiga-Version des Fahrplan-Programms. Die Informationen passen aber thematisch besser zu der zuvor besprochenen Komprimierungs-Methode.
Mit Blockbildung ist die Erstellung der Fahrpläne gemeint, die nur noch die Kreuzungs-Stationen (Stationen die zu mehr als einer LInie gehören) enthalten.
Hier wird der Aufbau der Blockdatei beschrieben. Das folgende Beispiel ist wohl leichter zu verstehen.
Hier wird anhand eines Fahplan-Ausschnitts die Komprimierung durch Blockbildung gezeigt.
Im oberen Teil ist der Fahrplanausschnitt mit abgebildet. Dabei wurden die Stationen mit mehreren Linien-Anbindungen aufgeführt (Billstedt, Kirchstraße...) und die sonstigen Stationen in Blöcken zusammengefasst (Z1 bis Z6).
Die Blöcke sind darunter mit den jeweiligen Zeitabständen aufgeführt.
Lesebeispiel: Die 1. Fahrt beginnt um 05:03 in Billstedt. In der Zeile Z1 steht Eintrag B1 zu finden - die Kennung für den 1. Block für Z1. Im unteren Bereich sehen wir neben Z1 die Werte für den ersten Block: 2, 2 und 3. Dies sind die Zeitabstände für die Stationen. Addiert man diese erhält man den Wert 7 (2+2+3). Wie oben zu sehen beträgt die Fahrzeit zwischen Billstedt und Kirchstraße 7 Minuten.
Der Aufbau der Blockdatei ist dann im unteren Bereich noch näher definiert. Auch ohne den Aufbau nachzuvollziehen ist ersichtlich dass mit dieser Methode viel Speicherplatz gespart werden kann. Da lediglich Stationen ohne mehrere Linienverbindungen komprimiert werden wirkt sich die Komprimierung schon alleine deshalb nicht negativ auf die Suchgeschwindigkeit bei der Verbindungssuche aus. Da der Zugriff auf externe Medien immer wesentlich zeitaufwendiger ist wie interne Berechnungen kann auf jeden Fall von einem grossen Geschwindigkeitszuwachs bei der Verbindungssuche ausgegangen werden.
Diese Seite dient der übersichtlicheren Aufteilung der Quelltexte. Dadurch ist es z. B. einfacher in dem sehr umfangreichen Projekt bestimmte Funktionen zu finden.
Hie handelt es sich offensichtlich um Notizen zur Planung de benötigten Dateien. Die Seite wurde lediglich der Vollständigkeit halber mit aufgeführt. Die Informationen dürften an anderer Stelle bereits beschrieben sein.