Zweifellos würde selbst eine minimalistischer und sehr effiziente Erweiterungsschnittstelle BAHN ausbremsen, und es müssten sich auch erst noch Programmierer finden, die eine Erweiterung programmieren würden. Allerdings wurde ja bisher in BAHN die steigende Leistungsfähigkeit der PCs auch immer ganz gut mit neuer/erweiterer Funktionalität ausgeglichen

- vielleicht ist ja in ein paar Jahren auch mal die Zeit für Erweiterungen gekommen. Also habe ich mir in einem Anfall von Langeweile mal etwas ausführliche Gedanken darüber gemacht, wie so eine Schnittstelle denn nun aussehen könnte:
BAHN bekommt ein neues Element "Aktionselement", ähnlich einem Schaltkontakt (Gültig für eine oder beide Richtungen, nur für bestimmte Linien, zug- oder fahrzeugweise Auslösung usw.), bei Passieren durch einen Zug/Fahrzeug wird die Funktion "Aktion" (siehe unten) der Erweiterung aufgerufen. (Natürlich nicht direkt bei Passieren, sondern gessammelt für alle passierten Aktionspunkt nach ansonsten vollständig durchgeführtem Simulationsschritt.) Der Funktion wird eine Aktionsnummer übergeben, die im "Aktionselement" einzugeben ist (statt einer Schaltwirkung bei Signalanlagen), aktuelle Uhrzeit und Datum der Simulation sowie ein Identifikator für den passierenden Zug und ggf. die Nummer des passierenden Fahrzeugs (fortlaufend gezählte Position im Zug).
Auf diese Weise dürfte der Geschwindigkeitsverlust auch eher gering sein, wenn diese Funktion in BAHN nicht genutzt wird?
Die Erweiterungen hat folgende zwei Funktionen als Fest definierte Schnittstelle, die von BAHN aufgerufen werden können:
"Initialisierung" - wird direkt nach dem Laden des Netzes aufgerufen um ggf. Erweiterungs-intern irgendwas zu initialisieren, zudem irgendwo in BAHN die Möglichkeit, per Button diese Initialisierung später nochmal anzustoßen
"Aktion" - wird bei passieren eines Aktionselements aufgerufen
BAHN bietet folgende Funktionen, die durch die Erweiterung aufgerufen werden können:
"SignalanlageFinden" - die Erweiterung übergibt einen Signalanlagennamen als Zeichenkette und bekommt, wenn es eine solche Signalanlage gibt, einen Identifikator für diese Signalanlage
"SignalanlageLesen" - Erweiterung übergibt Signalanlagen-Identifikator und kann die drei Zählerwerte lesen
"SignalanlageZaehlerSetzen" - die Erweiterung setzt über den Signalanlagen-Identifikator für die entsprechende Signalanlage einen neuen Zählerwert
"ZugLesen" - Erweiterung kann anhand eines Zug-Identifikators Eigenschaften des Zugs lesen (Linienname, Nummer, Zugtyp, Höchstgeschwindigkeiten, Länge, ...)
"ZugSchreiben" - Erweiterung kann anhand eines Zug-Identifikators Eigenschaften des Zugs setzen (im Prinzip alles das, was man an einem Datenwechselpunkt ändern kann zzgl. alle 4 einzelnen Geschwindigkeits-Werte)
"ZugRangieren" - Erweiterung kann anhand eines Zug-Identifikators den Zug wenden/trennen/in den Kuppelzustand versetzen (mit zu übergebenden Parametern wie bei einem Rangierpunkt) oder den Zug eine angegebene Zeit lang halten lassen
"Fehler" - Erweiterung setzt einen Text als benutzerdefinierte Dispatcher-Nachricht ab und stoppt ggf. die Simulation.
"Timer" - Erweiterung übergibt (Simulations-)Wochentag und Uhrzeit und einen Aktionsnummer an BAHN. BAHN ruft dann einmalig zur angegebenen Zeit die Funktion "Aktion" der Erweiterung auf und übergibt die Aktionsnummer.
"FahrzeugLesen" - Erweiterung kann über Zug-Identifikator und Position des Fahrzeugs im Zug (1., 2., 3. ...) auslesen, um welches Fahrzeug es sich handelt (Fahrzeugsatz-Nummer, Nummer im Fahrzeugsatz und Fahrzeug-Länge) *1
Wem das jetzt alles zu kompliziert war, der sollte nicht weiter von einer Erweiterung träumen. Prinzipiell ist das trotzdem nur ein grobes Konzept, programmieren kann man das so noch lange nicht...
Was wahrscheinlich damit nicht geht:
Verbindung zu anderen parallelen Simulationen. Also z.B. ein zweites BAHN, in dem ein anderes Netz synchron läuft und z.B. Züge vom einen ins andere Netz fahren. Dafür müsste man mehrere Simulationen synchronisieren. Das geht sicher auch irgendwie, aber ich habe keine Ahnung, ob und wie man so etwas effizient umsetzen kann.
Was man mit so einer Schnittstelle anfangen könnte:
Von den bisher mal gewünschten Funktionen könnte man z.B. signalanlagenabhänge Rangierpunkte/Datenwechsel/Langsamfahrstellen, Abwarten von Anschlüssen mit definierter Übergangszeit umsetzen, ebenso eine Signalisierung mit richtigen Fahrstraßen, verschiedenen Einfahrgeschwindigkeiten (siehe hier:
http://www.das-bahn-forum.de/bahnforum/ ... f=3&t=3435) usw.
Natürlich müsste dann noch jemand ein allgemeines Fahrstraßen-Plugin schreiben,
der Nutzer müsste alle erfolrderlichen Aktionspunkt, Schaltkontakte, Signalanlagen anlegen und
(in einem noch zu erfindenden Dateiformat) sehr detailliert die Fahrstraßen-Struktur des Netzes aufschreiben ((Teil-)Fahrstraßen topologisch oder tabellarisch mit all ihren Eigenschaften, sowie die Verknüpfung zu den BAHN-Daten, d.h. z.B. die Belegung von Gleis-Abschnitt 123 wird durch die Signalanlage XY_G123 repräsentiert, das Hauptsignal N123 kann durch die Signalanlage XY_N123 gesteuert werden, Zuglenkpunkt XY_A hat die Aktionsnummer 0815 usw.).
Noch komplizierter könnte man natürlich auf dieser Basis sogar eine automatische Disposition entwickeln, in dem die Erweiterung über die Aktionspunkte quasi mitschreibt, welcher Zug gerade wo ist und daraus automatisch irgendwelche Entscheidungen ableitet (wenn ein Zug der Linie G13 den Bahnhof XY erreicht, soll die Fahrstraße ins Überholungsgleis 3 eingestellt werden und der Zug dort so lange stehen, bis ein Zug der Linie ICE25 den Bahnhof passiert hat).
Ebenso könnte man vielleicht sogar mehr oder minder asynchron eine Stellwerkssimulation anbinden - d.h., Belegungsinformationen/Zugmeldungen werden über die Aktionspunkte nur mitgelesen, und ab und zu werden die eingestellten Fahrstraßen usw. durch Ändern von Signalanlagenzähler in BAHN übertragen. (Das muss sicher nicht in jedem Simulationsschritt geschehen - mehr als ein Zug, der vom Halt erwarten zeigenden Vorsignal ausgebremst wird, kann ja nicht passieren). Im Gegensatz zu reinen Stellwerkssimulations-Programmen hat man aber das Problem, dass man nicht irgendeinen Startzeitpunkt vorgeben kann, bei dem man beginnt - sondern man muss dann eben wirklich immer den ganzen Tag bzw. die ganze Woche durchspielen!
*1 Wenn man noch, wie schonmal diskutiert, einführt, dass jedes Fahrzeug eines Zugs eine Eigenschaft bekommt, die auch beim Rangieren erhalten bleibt, könnte man auch sehr ausgefeilte Ablaufsteuerungen entwickeln.
Und grundsätzlich gilt für alle denkbaren Anwendungsfälle: Entweder, man schreibt für einen ganz bestimmten Fall ein spezielles Plugin - dann muss dieses bei jeder Änderung am Netz auch geändert und neu kompiliert werden. Oder es werden mit deutlich mehr Aufwand allgemeine Plugins geschrieben - dann müssen mit dem Netz stets noch zusätzliche Datendateien (eben z.B. die Fahrstraßen) mitgeführt werden, die auch immer aktuell gehalten werden müssen!
Ebenso würde sich die Plugin-Schnittstelle sich sicherlich auch alle paar Versionen ändern - alle Plugins müssen dann angepasst werden, sonst laufen die entsprechenden Netze mit der neuen BAHN-Version nicht. Ebenso müssten die Plugin-Programmierer immer darauf achten, dass das Plugin auf allen Systemen läuft, auf denen BAHN auch läuft - ich fürchte fast schon, dass das nicht passieren wird...
Einfach und Benutzerfreundlich wird das ganze also in keinem Fall, selbst, wenn man selber nicht programmieren muss.
Fazit: Wäre also schon eine sehr mächtige "Waffe", die meiner naiven Vorstellung nach keine allzugroßen Änderungen an BAHN erfordern würde. Aber es müsste eben jemand bereit sein, solche Plugins zu entwickeln, und es müssten sich genügend Nutzer finden, die mit den komplexen Möglichkeiten dieser Plugins auch arbeiten können...