# ============================================================ # sivas.cfg - Attribut->Sivas-Merkmal-Zuordnung fuer lib/export_sivas.py # # Deckt NUR die "einfachen" Faelle ab: eine Sivas-Merkmalnummer entspricht # genau einem (ggf. per Fallback alternativen) Block-Attribut, optional mit # festem Default und/oder einer benannten Transform-Funktion. Berechnete # Werte, die von der Anzahl vorhandener Segmente abhaengen oder mehrere # Attribute kombinieren (VarioFoerderer-Gefaelle-/Vario-Segmentpaare 4312- # 4392/4353-4386, die ILS-Automation-Summenzeile) bleiben bewusst Python-Code # in export_sivas.py - ein flaches Attribut-Mapping kann bedingte/berechnete # Werte nicht abbilden. # # Format je Zeile (Abschnitt = Elementtyp, Key = Sivas-Merkmalnummer): # merkmal = attribut # merkmal = attribut : default # merkmal = attribut | alt_attribut : default # merkmal = attribut : default | transform # # attribut - Name des Block-Attributs (ssg-attrib-*, siehe jeweiliges # .lsp-Modul). Fehlt es in der Zeichnung, greift default. # | alt_attribut - optionaler Fallback-Attributname (aeltere Zeichnungen mit # abweichendem Attributnamen, z.B. N_SEPARATOREN vor der # Umbenennung zu ANZAHL_SEPARATOR). Wird nur genutzt, wenn # attribut selbst fehlt. # : default - Vorgabewert, falls weder attribut noch alt_attribut in # der Zeichnung gesetzt sind. Fehlt ":", ist default "". # | transform - Name einer Python-Funktion in export_sivas.py # (TRANSFORMS-Dict), die den ermittelten Rohwert # (Attribut- oder Default-Wert) in die Sivas-Anzeige # umwandelt (z.B. "0"/"1" -> "Ja"/"Nein"). Bekannte Namen: # ja_nein, geruest_typ_anzeige, mm_zu_m, as_es_vorhanden, # as_es_winkel, as_seite, es_seite. Ein unbekannter Name # bricht NICHT ab, der Rohwert wird unveraendert # uebernommen (siehe sivas_mapping.anwenden). # Soll ein Merkmal ohne eigenes Attribut nur per Transform # entstehen, braucht die Zeile trotzdem den ":" vor dem # "|" ("WINKEL_AS : | as_es_vorhanden") - sonst gilt der # Transform-Name als Fallback-Attributname. # Transforms, die mit @braucht_attribs markiert sind # (as_seite/es_seite), sehen zusaetzlich alle uebrigen # Attribute des Blocks - noetig, wenn ein Merkmal von # einem ZWEITEN Attribut abhaengt (Seite nur, wenn der # zugehoerige Winkel ueberhaupt ein Element ausweist). # # Abschnittsnamen entsprechen den bisherigen build_*_details-Funktionen in # export_sivas.py: [gefaellestrecke], [kreisel], [eckrad], [geruest]. Die # Anzeige-Tabellen (ASCII-Attributwert -> Sivas-Klartext/Optionswert: # [geruest_typ_anzeige], [as_es_winkel_anzeige]) UND # SEPARATOR_BEARBEITUNG_ANZEIGE bleiben eigene, kleine Abschnitte weiter # unten. # # [gefaellestrecke] und [variofoerderer] fuehren die AS-/ES-Merkmale # (4427-4432) absichtlich DOPPELT: GF_N- und VF_N-Bloecke tragen dieselben # Attribute des gemeinsamen Strecken-Schemas, und jeder Abschnitt soll fuer # sich lesbar bleiben. Aenderungen dort bitte in beiden nachziehen (der Test # tests/test_export_sivas_as_es.py::test_zuordnung_steht_in_der_config wacht # darueber). # ============================================================ [gefaellestrecke] 2950= MONTAGEHOEHE_m : 0 # AS-/ES-Element, Reihenfolge wie die Sivas-Hierarchie (identisch in # [variofoerderer]): 4431/4432 Ja/Nein schalten Winkel und Seite frei. 4431= WINKEL_AS : | as_es_vorhanden 4427= WINKEL_AS : | as_es_winkel 4428= SEITE_AS : | as_seite 4432= WINKEL_ES : | as_es_vorhanden 4429= WINKEL_ES : | as_es_winkel 4430= SEITE_ES : | es_seite 4384= : Gefällestrecke 4318= L_GF_m 4391= GF_WINKEL 4337= ANZAHL_SEPARATOR : 0 4338= : ohne HARTCOAT HRC 50 ± 5 4339= ANZAHL_SCANNER : 0 3992= GERUEST_EINZELMODUL : 0 | ja_nein 3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige # 4300 (Streckengruppe "ein Objekt"/"mehrere Objekte") und 4311 (Anzahl der # gruppierten Bloecke) bleiben Code (streckengruppe_objekt_text, anzahl-Param.). [kreisel] 2952= MONTAGEHOEHE_m : 0 3511= : 1 3515= ANZAHL_SEPARATOR | N_SEPARATOREN : 2 3517= ANZAHL_SCANNER | N_SCANNER : 0 3519= ANZAHL_RAMPEN | N_RAMPEN : 0 3992= GERUEST_EINZELMODUL : 0 | ja_nein 3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige # 3510 (Kreiselart-Anzeigetext) und 3512 (Abstand in m, gerundet) bleiben # Code (bedingte Umbenennung bzw. Umrechnung mm->m). [eckrad] # Am Kreisel ausgerichtet, aber nur Merkmale, fuer die das Eckrad-Objekt ein # Attribut hat (*eckrad-attrib-defs*); Merkmalnummern aus # Merkmalsstamm_in_Sivas.xlsx. Hoehe: beim Eckrad 2950 "Anlagenhoehe in # Meter" (NICHT 2952 "Kreiselhoehe" wie beim Kreisel), Wert aus HOEHE (mm), # da das Eckrad kein MONTAGEHOEHE_m traegt. 3381 "Eckrad - zu # fertigende Menge" steht wie 3511 beim Kreisel fest auf 1 (reale Stueckzahl # in der Anzahl-Spalte). Separatoren (3382/3383) hat das Eckrad nicht. 2950= HOEHE : 0 | mm_zu_m 3381= : 1 3992= GERUEST_EINZELMODUL : 0 | ja_nein 3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige [geruest] Farbe= FARBE [kettenfoerderer] # Kettenfoerderer / Schraegfoerderer Stahl (KF_n, Lisp/KettenFoerderer.lsp). # Merkmalnummern laut Merkmalstamm des Schraegfoerderers. # # 350 kommt aus FOERDERERTYP (Bauart im Klartext). Der Default greift nur # bei Altbestands-Bloecken ohne das Attribut. # 359 kommt aus WINKEL, das den Neigungswinkel als nackte Zahl fuehrt # ("26"/"30"); die Anzeige-Tabelle [kf_typ_anzeige] weiter unten macht # daraus den Sivas-Optionstext mit Gradzeichen. Grund fuer die # Zweiteilung: Block-Attribute bleiben laut Projektkonvention ASCII. # 353 (Anzahl der gleichen KF) steht ABSICHTLICH NICHT hier: der Wert # entsteht erst aus der Gruppierung baugleicher Bloecke # (kettenfoerderer_signature in export_sivas.py) und ist damit kein # flaches Attribut-Mapping - gleiche Bauart wie 3510/3512 beim Kreisel. # 356 und 361 nutzen den vorhandenen Transform ja_nein, die Attribute # fuehren "1"/"0". # 357 "Antriebsart" ist beim Kettenfoerderer FEST (1.1 kW): im Dialog ein # Dropdown mit genau einer, zwingend gewaehlten Option - das Attribut gibt es trotzdem, damit der Wert am # Block steht und nicht nur im Export auftaucht. # 354 "Farbe Foerderer" und 355 "Antriebsmotor Foerderer" sind ZWEI getrennte # Merkmale (nicht ein kombinierter Text) - im Dialog darum auch zwei # Felder, Attribute FARBE und ANTRIEBSMOTOR. # 354/355/391 tragen bereits den vollen Sivas-Optionstext im Attribut (die # Auswahllisten in data/json/kettenfoerderer.json liefern ihn so) - # darum kein Transform. 350= FOERDERERTYP : Schrägförderer Stahl 359= WINKEL : 26 | kf_typ_anzeige 361= STANDARD_STEUERUNG : 0 | ja_nein 354= FARBE : RAL 7035 355= ANTRIEBSMOTOR : Europa 50 Hz 357= ANTRIEBSART : 1.1 kW 356= MOVIMOT : 0 | ja_nein 360= H_EINBAUHOEHE_mm : 0 391= VERBINDUNGSELEMENTE : Nein [variofoerderer] # Nur die von der Segmentanzahl UNABHAENGIGEN Top-Level-Felder einer VF_N- # Streckengruppe (siehe build_variofoerderer_details in export_sivas.py). # Die Gefaelle-/Vario-Segmentpaare (4312-4392, 4353/4354/4386) haengen an der # Listenlaenge von L_GF_m/L_VF_m und bleiben Code. 2950= MONTAGEHOEHE_m : 0 # AS-/ES-Element, Reihenfolge wie die Sivas-Hierarchie (identisch in # [gefaellestrecke]): 4431/4432 Ja/Nein schalten Winkel und Seite frei. 4431= WINKEL_AS : | as_es_vorhanden 4427= WINKEL_AS : | as_es_winkel 4428= SEITE_AS : | as_seite 4432= WINKEL_ES : | as_es_vorhanden 4429= WINKEL_ES : | as_es_winkel 4430= SEITE_ES : | es_seite 4329= GF_Bogen_L_90 : 0 4330= GF_Bogen_L_60 : 0 4331= GF_Bogen_L_30 : 0 4332= GF_Bogen_R_90 : 0 4333= GF_Bogen_R_60 : 0 4334= GF_Bogen_R_30 : 0 4373= VF_Bogen_A_90 : 0 4374= VF_Bogen_A_60 : 0 4375= VF_Bogen_A_30 : 0 4376= VF_Bogen_I_90 : 0 4377= VF_Bogen_I_60 : 0 4378= VF_Bogen_I_30 : 0 4381= ANZAHL_SEPARATOR : 0 4382= : ohne HARTCOAT HRC 50 ± 5 4383= ANZAHL_SCANNER : 0 3992= GERUEST_EINZELMODUL : 0 | ja_nein 3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige [as_es_winkel_anzeige] # Attributwert WINKEL_AS/WINKEL_ES -> Optionswert der Sivas-Auswahlliste zu # Merkmal 4427/4429. Im Merkmalstamm heissen die Optionen "30 °"/"90 °" (mit # Leerzeichen vor dem Gradzeichen) - das Attribut in der Zeichnung bleibt die # nackte Zahl. Gleiche Bauart wie [geruest_typ_anzeige]: steht ein Winkel # hier NICHT drin, wird er unveraendert uebernommen. # # >>> Falls Sivas den Import mit "30 °" ablehnt, ist DIESE Tabelle die # >>> einzige Stelle zum Nachziehen (z.B. auf "30°" ohne Leerzeichen oder # >>> auf die nackte Zahl) - der Code bleibt unberuehrt. 30= 30 ° 90= 90 ° [geruest_typ_anzeige] # ASCII-Attributwert (GERUEST_TYP) -> Sivas-Klartext mit Umlauten/Sonder- # zeichen (Attribute selbst bleiben ASCII, siehe CLAUDE.md-Konvention). Schoenenberger Geruest= Schönenberger-Gerüst [kf_typ_anzeige] # Attributwert WINKEL (Neigungswinkel als nackte Zahl) -> Optionswert der # Sivas-Auswahlliste zu Merkmal 359. Gleiche Bauart wie # [geruest_typ_anzeige]/[as_es_winkel_anzeige]: steht ein Wert hier NICHT # drin, wird er unveraendert uebernommen. # # >>> Lehnt Sivas den Import ab, ist DIESE Tabelle die einzige Stelle zum # >>> Nachziehen (z.B. "26 °" mit Leerzeichen) - der Code bleibt unberuehrt. 26= Schrägförderer Stahl 26° 30= Schrägförderer Stahl 30° [weichen] # ILS 2.0 Weiche (6216): eine Summenzeile, Werte aus den Kreisel-Beruehr- # punkten des LISP-Exports (kreisel_weichen.json). Ein Beruehrpunkt ist eine # Weichenkombination = 1x aktiv + 1x passiv, darum lesen beide Merkmale # dieselbe Zahl ANZAHL_WEICHEN (= Anzahl Beruehrpunkte, siehe export_sivas.py). 3371= ANZAHL_WEICHEN : 0 3372= ANZAHL_WEICHEN : 0