Files
sps_skel/doc/track.md
T
Michael StanglandClaude Opus 4.8 117cd8914b Materialfluss: VF/GF-Richtung, Stations-Bahn und Eingang/Ausgang-Merge
- _apply_transfers liest die andockende Strecke auch aus dem Merkmal
  "Foerderer"/"Förderer" (nicht nur "Strecke"), damit VF/GF gerichtet
  Kreisel->AS->..->ES->Kreisel gezeichnet werden (Ruecklauf = zwei Pfeile
  auf die beiden Kreisel-Bahnen) statt "unbestimmt".

- _attach_stations haengt BTMT/Eingang/Ausgang an die Kreisel-Bahn, in
  deren TrackIds-Umlauf sie liegen (Bahn aus der Drehrichtung); Nachbarn,
  die keine Flussobjekte sind, werden uebersprungen - keine
  Station<->Station-Kanten mehr.

- Eingang/Ausgang sind die generischen Symbole fuer Beladung/Entladung.
  Liegt ein Symbol deckungsgleich (<= STATION_MERGE_MM = 600 mm) ueber
  einer BTMT-Station gleicher Rolle, wird es verschluckt
  (_merge_station_symbols) - nur ein Knoten, in grobem Graph UND --track
  (dort auch aus den TrackIds gestrichen). Einzelne Symbole bleiben eigener
  gruener/roter Knoten.

- drive_uphill: die Hoehe bestimmt die Richtung NUR bei einer reinen
  Gefaellestrecke (Schwerkraft, bergab). Ein Foerderer/gemischte Strecke
  kann hoch oder runter foerdern - dort zaehlt nur eine eindeutige
  Antriebfahrtrichtung, sonst kommt die Richtung aus AS/ES.

Doku in doc/Python_Scripts.md und doc/track.md nachgezogen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-17 12:54:44 +02:00

5.1 KiB
Raw Blame History

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). Ein generisches Eingang/Ausgang-Symbol, das deckungsgleich über einer konkreten BTMT-Station liegt (≤ STATION_MERGE_MM), wird auch hier verschluckt (_merge_station_symbols) — sowohl aus der Knotenliste als auch aus den TrackIds jedes Containers —, sonst liefe der Kreisel-Umlauf durch zwei nahezu identische Knoten. Wichtig: die Offenheit wird am feinen Graphen gemessen (ein reales Bahnelement ohne Vorgänger/Nachfolger in track.edges), nicht am groben. Der grobe Graph kann eine Bahn als offenes Ende führen, obwohl ihre AS/ES-Enden im Kreisel-Umlauf längst verkettet sind (die Richtung blieb dort nur „unbestimmt") — würde man ihn als Maßstab nehmen, entstünden vereinzelte Falsch-Eingänge an voll verketteten Bahnen (beobachtet an HundM05.csv: Bahn 0001–0004, 0006-R).

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 (Knoten) Weiche
Ellipse (Knoten) Ein-/Ausgang, BTMT Be-/Entladung
gestrichelter Rand (Knoten) Bahn-Platzhalter (Reihenfolge/Position offen)