feat: Eingang/Ausgang-Symbole als eigene CSV-Zeile + in TrackIds
Die Materialfluss-Ein-/Ausgangssymbole (Bloecke Eingang_<DIM>/Ausgang_<DIM>,
eingefuegt ueber ils-insert-station) erscheinen jetzt NUR im CSV-Export als
eigene TeileArt-Zeile ("Eingang"/"Ausgang", Merkmale wie BTMT). Wie
Separator/AS/ES nehmen sie als freie Umlauf-Punkte (KREISEL_UMLAUF_TEILEARTEN)
an der TrackIds-Spalte teil und tauchen so auch auf Kreiseln auf, auf deren
Bahn sie liegen. Der Sivas-Export schliesst sie bewusst aus.
- cfg/export.cfg: pattern_eingang/pattern_ausgang
- Lisp/export.lsp: csv:collect-export-blocks sammelt beide Muster
- Lisp/ssg_id.lsp: ssg-id-collect-blocks erfasst sie (ssg-id-check-all fuellt
das nachgetragene ID-ATTDEF, dokumentiert in data/ils/allocations.json)
- lib/export_csv.py: Klassifikations-Zweige Eingang/Ausgang
- lib/export_neighbors.py: KREISEL_UMLAUF_TEILEARTEN um Eingang/Ausgang erweitert
- lib/export_sivas.py: Eingang/Ausgang uebersprungen (kein Sivas-Eintrag)
- Tests: test_export_eingang_ausgang.py + Kreisel-Umlauf-Test
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
52b0699862
commit
1d082ccde7
@@ -886,6 +886,8 @@ def process_blocks(blocks, lookup, dbg=None):
|
||||
scanner_count = 0
|
||||
btmt_beladung_count = 0
|
||||
btmt_entladung_count = 0
|
||||
eingang_count = 0
|
||||
ausgang_count = 0
|
||||
geruest_count = 0
|
||||
|
||||
# Zaehlung fuer die Omniflo-Sum-Zeile (nur Bogen/Weiche/Gerade)
|
||||
@@ -1159,6 +1161,44 @@ def process_blocks(blocks, lookup, dbg=None):
|
||||
})
|
||||
continue
|
||||
|
||||
# Eingangssymbol (Materialfluss-Eingang der Anlage) - eigene
|
||||
# TeileArt-Zeile, analog zu BTMT. Wie BTMT von keinem Carrier-Attribut
|
||||
# mitgezaehlt; anders als BTMT NUR im CSV-Export (export_sivas.py
|
||||
# ueberspringt Eingang/Ausgang). Die TeileId kommt aus dem ID-Attribut
|
||||
# (ssg-id-check-all fuellt es vor jedem Export, ID-ATTDEF seit dem
|
||||
# allocations.json-Nachtrag) - dieselbe TeileId, die die
|
||||
# "TrackIds"-Spalte an Kreisel/Strecke referenziert (KREISEL_UMLAUF_
|
||||
# TEILEARTEN in export_neighbors.py). Fallback-Nummer wie bei BTMT.
|
||||
if matches_any(bname, BLOCKPATTERNS.get("pattern_eingang", [])):
|
||||
elem_nr += 1
|
||||
eingang_count += 1
|
||||
items.append({
|
||||
"nr": elem_nr,
|
||||
"teileart": "Eingang",
|
||||
"teileid": block.get("attribs", {}).get("ID") or format_sensor_id("EIN", eingang_count),
|
||||
"bezeichnung": f"Eingang :{eingang_count}",
|
||||
"planquadrat": planquadrat_column(block, planquadrat_cfg),
|
||||
"merkmale": build_btmt_merkmale(block),
|
||||
**bbox_columns(block),
|
||||
})
|
||||
continue
|
||||
|
||||
# Ausgangssymbol (Materialfluss-Ausgang der Anlage) - analog zum
|
||||
# Eingangssymbol oben.
|
||||
if matches_any(bname, BLOCKPATTERNS.get("pattern_ausgang", [])):
|
||||
elem_nr += 1
|
||||
ausgang_count += 1
|
||||
items.append({
|
||||
"nr": elem_nr,
|
||||
"teileart": "Ausgang",
|
||||
"teileid": block.get("attribs", {}).get("ID") or format_sensor_id("AUS", ausgang_count),
|
||||
"bezeichnung": f"Ausgang :{ausgang_count}",
|
||||
"planquadrat": planquadrat_column(block, planquadrat_cfg),
|
||||
"merkmale": build_btmt_merkmale(block),
|
||||
**bbox_columns(block),
|
||||
})
|
||||
continue
|
||||
|
||||
# Geruest-Baugruppe (GR_<id>_<timestamp>) - eigene TeileArt-Zeile,
|
||||
# analog zu BTMT: kein ANZAHL_*-Attribut an einem Carrier zaehlt sie
|
||||
# mit. TeileId ist das echte ID-Attribut (ssg-id-check-all fuellt es
|
||||
|
||||
@@ -84,8 +84,15 @@ SENSOR_TEILEARTEN = {"ILS 2.0 Separator", "ILS 2.0 Scanner"}
|
||||
# Sensoren - eigene Konstante statt Erweiterung von SENSOR_TEILEARTEN, damit
|
||||
# deren Sensor-spezifische Weiterverarbeitung (z.B. compute_scanner_nearest_
|
||||
# separator) unberuehrt bleibt.
|
||||
# Eingang/Ausgang (Materialfluss-Ein-/Ausgangssymbole, siehe pattern_eingang/
|
||||
# pattern_ausgang in cfg/export.cfg) werden hier wie BTMT als frei platzierte
|
||||
# Umlauf-Punkte gefuehrt - so tauchen sie, wenn sie auf einer Kreiselbahn
|
||||
# liegen, in dessen "TrackIds"-Spalte auf (Nutzeranforderung: wie
|
||||
# Separator/AS/ES behandeln). Die TeileArt-Strings sind bewusst OHNE "ILS 2.0"-
|
||||
# Praefix (siehe export_csv.py) - dieselben Strings muessen hier stehen.
|
||||
KREISEL_UMLAUF_TEILEARTEN = {
|
||||
"ILS 2.0 Separator", "ILS 2.0 BTMT Beladung", "ILS 2.0 BTMT Entladung", "ILS Weiche",
|
||||
"Eingang", "Ausgang",
|
||||
}
|
||||
|
||||
# Nur "ILS 2.0 Kreisel" (echte Kreisel-Bloecke mit AN8/Antrieb + SP8/Spann-
|
||||
|
||||
@@ -504,6 +504,16 @@ def process_blocks(blocks, lookup):
|
||||
counters["anzahl_abwurfstationen"] += 1
|
||||
continue
|
||||
|
||||
# --- Eingangs-/Ausgangssymbol (Materialfluss-Ein-/Ausgang) ---
|
||||
# Bewusst NUR im CSV-Export als eigene Zeile (siehe export_csv.py) -
|
||||
# hier ohne Sivas-Zeile und ohne eigenen Zaehler ueberspringen. Ein
|
||||
# Eingangs-/Ausgangssymbol ist eine reine Fluss-Markierung ohne Sivas-
|
||||
# Artikel; ein eigener Sivas-Eintrag wuerde die Stueckliste verfaelschen
|
||||
# (Nutzeranforderung: Eingang/Ausgang nur im CSV-Export).
|
||||
if matches_any(bname, BLOCKPATTERNS.get("pattern_eingang", [])) or \
|
||||
matches_any(bname, BLOCKPATTERNS.get("pattern_ausgang", [])):
|
||||
continue
|
||||
|
||||
# --- Geruest-Baugruppe ---
|
||||
# Anders als BTMT/Separator je Block eine EIGENE Zeile statt gruppiert:
|
||||
# ARTINR (Sivas-IDs) und Laenge/Farbe koennen von Block zu Block
|
||||
|
||||
Reference in New Issue
Block a user