Files
sps_skel/doc/track.md
T

4.2 KiB

Bahnzusammenhang-Graph (--track)

material_flow.py --track erzeugt neben dem groben Materialfluss-Graphen einen feineren Bahnzusammenhang-Graphen (<name>_track.dot, mit --tosvg auch <name>_track.svg). Dort ist jedes einzelne Bahnelement ein eigener Knoten — Separator, Ausschleuselement, Einschleuselement, Weiche sowie die Ein-/ Ausgangspunkte (BTMT Be-/Entladung, Eingang/Ausgang) —, während sie im groben Graphen nur Kanten bzw. Zuordnungen an Kreisel/Strecke/Gefällestrecke liefern.

Datenquelle: die CSV-Spalte TrackIds

Die Reihenfolge der Elemente entlang einer Bahn wird nicht mehr aus der Nachbarn-Spalte rekonstruiert, sondern direkt aus der Spalte TrackIds gelesen (Element.track_ids, parse_track_ids). Jeder Container trägt dort die geordnete Liste der auf ihm liegenden Bahnelemente; der dxfmakros-Export berechnet sie bereits (siehe dxfmakros/doc/csv-export.md, Abschnitt „Die Spalte TrackIds"):

Container TrackIds-Inhalt Reihenfolge
Kreisel alle freien Punkte (Separator, BTMT, Eingang/Ausgang), AS/ES-Enden andockender Strecken, Kreisel-Kreisel-Weichen zirkulär, nach Winkel in Drehrichtung (UZS/GUZ), Start bei 0°
Strecke / Gefällestrecke AS → SEP… → ES lineare Baureihenfolge der Kette

Beispiel (mubea_export.csv):

Gefällestrecke 0016  trackIds = [0118(AS), 0059(SEP), 0119(ES)]
Strecke        0013  trackIds = [0124(AS), 0054, 0053, 0125(ES)]
Kreisel        0001  trackIds = [0040(Sep@0001-R), 0079(Weiche), 0036(Sep@0014)]

Aufbau des Graphen (build_track_graph)

  1. Strecke/Gefällestrecke — lineare Kette entlang track_ids. Die Richtung kommt aus den Kettenenden: Ausschleuselement = Anfang (Material verlässt den Kreisel), Einschleuselement = Ende. Steht das Einschleuselement vorn bzw. das Ausschleuselement hinten, wird die Liste umgedreht. Kanten-Notiz "Bahn".
  2. Kreisel — zirkulärer Umlauf entlang track_ids (bereits in Drehrichtung sortiert). Aufeinanderfolgende Einträge werden verbunden; bei bekannter Drehrichtung schließt das letzte Element zurück auf das erste (geschlossener Umlauf). Kanten-Notiz "Umlauf".
  3. Verwaiste Elemente — ein Bahnelement, das in keiner TrackIds-Liste steht (z. B. ein frei platzierter Separator ohne Kette, oder wenn die CSV gar keine TrackIds-Spalte hat), wird an einen gestrichelten Platzhalter für seine Zuordnung gehängt ("unbestimmt") und als Warnung gemeldet.
  4. Systemgrenzen — BTMT Be-/Entladung werden über den bereits im groben Graphen aufgelösten Anschluss angebunden (_attach_track_stations); offene Bahnenden ohne Station bekommen ein generisches Symbol Eingang/Ausgang (_attach_track_symbols).

Warum das die Nachbarn-Heuristik ersetzt

Der entscheidende Punkt: ein Element, das in zwei Containern gelistet ist, ist derselbe Knoten und verkettet die Container automatisch.

  • Ein Ausschleus-/Einschleuselement steht sowohl in der TrackIds seiner Strecke als auch im Umlauf des angedockten Kreisels → Kreisel und Strecke sind über diesen gemeinsamen Knoten verbunden.
  • Eine Kreisel-Kreisel-Weiche steht in den TrackIds beider Kreisel → beide Umläufe treffen sich an diesem gemeinsamen Knoten.

Beispiel: 0118(AS) steht in Gefällestrecke 0016 und im Umlauf von Kreisel 0010; 0119(ES) steht in 0016 und in Kreisel 0002. Der Fluss Kreisel 0010 → 0118 → 0059 → 0119 → Kreisel 0002 ergibt sich damit von selbst.

Die frühere Rekonstruktion aus der Nachbarn-Spalte (Rückmeldungs-/Rollen- Heuristik, Separator-Separator-Orientierung, Höhen-Fallback) entfällt dadurch komplett — mit ihr die zahlreichen zugehörigen Warnungen.

Legende der Kanten-/Knotendarstellung

Darstellung Bedeutung
blau ("Bahn") Weiterfahrt auf derselben Strecke/Gefälle-Kette
hellblau ("Umlauf") Kreisel-Umlauf (Reihenfolge in Drehrichtung)
grün ("Station") Anbindung BTMT Be-/Entladung
gepunktet ("Symbol") offenes Bahnende ohne BTMT-Station
gestrichelt gelb ("unbestimmt") Element nicht in einer TrackIds-Kette
Raute Weiche