Files
sps_skel/cfg/parameter.ini
s.ayadi 9ec1022fb1 tro_annotate: Lagebezug ueber die TeileId, Ablaufbeschreibung CSV/DXF -> SCL
dxf_registration.derive_from_ids: Zeichnungen aus dxfmakros tragen an jedem
Layout-Block das Attribut ID = TeileId des CSV. tro_annotate paart CSV-
Separatoren mit den Separator-Bloecken gleicher ID (sonst Scanner) und nimmt
den Median-Versatz - eindeutig statt Abstimmung, bei jedem Lauf neu, gilt
auch fuer eine verschobene Kopie der Zeichnung. Vorrang vor abgelegtem und
abgestimmtem Bezug; --offset bleibt. Parameter id_spread_mm, id_min_share in
cfg/parameter.ini [dxf_registration].

Dematic: gemeinsame Zeichnung 0/0, Mechanik-Zeichnung dematic.dxf
+466,1/-163549,3 mm. Die Abstimmung rastete vorher auf den Scanner-Bloecken
ein (Einfuegepunkt 360 mm neben der CSV-Position) und lag 360 mm daneben.

Gesperrte Ausgabedatei (in BricsCAD geoeffnet) gibt eine Meldung statt
Traceback. Neu: doc/Workflow_CSV_DXF_to_SCL.md - der ganze Ablauf vom
CSV-Export und der Zeichnung bis zur SCL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 14:59:16 +02:00

220 lines
8.5 KiB
INI

; ================================================================
; parameter.ini - Zahlenwerte der Bibliotheken in lib/
; ================================================================
; Gelesen von lib/parameter.py. Ein Abschnitt je Modul, der Schluessel ist
; der Name der Konstanten im Modul in Kleinbuchstaben:
; [kreisel_junctions] contact_tolerance -> CONTACT_TOLERANCE
;
; Diese Datei ist die versionierte Grunddatei und muss vollstaendig sein -
; fehlt ein Schluessel, bricht das Programm ab (kein Ersatzwert im Code).
; Eine weitere parameter.ini in %SKEL_CFG% (falls SKEL_CFG woanders hin
; zeigt) ueberschreibt einzelne Werte fuer eine Anlage.
;
; Laengen in mm, Winkel in Grad, sofern nicht anders angegeben.
; Werte, die das Ergebnis der Ableitung aendern (Toleranzen, Schwellen),
; nur mit Begruendung und Vergleich der Ausgaben aller Anlagen aendern.
; ================================================================
[kreisel_junctions]
; Hoechster Abstand zweier Kreisel-Umlaeufe, der noch als Beruehrung gilt.
contact_tolerance = 50.0
; Hoechster Abstand eines Separators vom Umlauf, damit er auf ihm liegt.
; Auch die Grenze fuer "liegt auf Kreisel" im Mouseover von
; material_flow.py --track.
separator_tolerance = 100.0
; Hoechster Abstand einer exportierten ILS Weiche von ihrem Beruehrpunkt.
weiche_tolerance = 300.0
; Abtastschritt beim Suchen des Beruehrpunkts.
sample_step = 10.0
; Mindestanzahl Abtastpunkte je Umlauf, auch bei sehr kleinen Kreiseln.
min_samples = 8
; Bei tangentialer Beruehrung sind viele Abtastpunkte fast gleich nah: alle
; bis zu diesem Mehrabstand ueber dem naechsten gehen in den Mittelpunkt ein.
contact_tie = 1.0
; Ein Beruehrbereich, der laenger ist, liegt nicht an einem Punkt an (zwei
; parallele Bahnen nebeneinander) - Hinweis statt Weiche.
max_contact_length = 500.0
; Ein Punkt bis zu diesem Abstand vor dem Ende der Geraden zaehlt schon zur
; Umlenkung. Zwei Kreisel, deren Umlenkungen sich beruehren, tun das oft genau
; am Uebergang Gerade/Halbkreis (export.csv: Kreisel 5 an Kreisel 6 und 4).
end_tolerance = 100.0
; Radius, wenn die Boundingbox ihn nicht liefert (schraeg liegender Kreisel).
default_radius = 400.0
; Halbe Schrittweite fuer die Laufrichtung an einer Stelle des Umlaufs
; (Differenz zweier Punkte davor und dahinter).
direction_step = 1.0
; Gleichlauf am Beruehrpunkt: Mindest-Kosinus des Winkels zwischen beiden
; Laufrichtungen (0.5 = hoechstens 60 Grad). Darunter "gegenlaeufig".
gleichlauf_min_cos = 0.5
[tro_flow]
; Ab dieser Anzahl zusammenhaengender Schwerkraftlinien (Gefaellestrecke mit
; je einem Separator) wird ein Speicherblock (PinStore_Auto) angenommen.
min_store_lanes = 2
; Mindest-Hoehenverlust auf dem vorangehenden TrackIds-Segment, damit ein
; Separator auf einer "Strecke" trotzdem als 1Sep statt Vario gilt (siehe
; _incoming_drop). Muss nur "horizontal" gefuehrte, aber tatsaechlich
; Gefaelle-Segmente erwischen (HundM05 Separator 0035: -104mm auf 3,8m), nicht
; das Rauschen eines echten flachen VF-Laufs (HundM05 Separator 0036: +26mm
; auf 0,5m). 30mm liegt bewusst weit unter dem Befund und ueber dem Rauschen.
gefaelle_drop_mm = 30.0
; Steuernder Separator einer ILS Weiche (_find_weiche_separators): der letzte
; Separator in Laufrichtung vor der Weiche, auf dem Kreisel-Umlauf gemessen
; (Lage + Drehrichtung, nicht TrackIds). Liegt er weiter davor, steuert er die
; Weiche nicht. Mubea 0036 -> Weiche: ~1300mm; die naechste Alternative bei
; falscher Drehrichtung von Kreisel1 (0040) laege ~5200mm davor.
weiche_vorlauf_max = 3000.0
; Zeichnungsmassstab fuer --use-cords in pt/mm: Graphviz rechnet in Punkt, die
; Anlage in Millimeter. Seit die Symbole eine feste Groesse haben, reichen
; 0.1 pt/mm: ~11 x 20 m Anlage ergeben etwa 1100 x 2000 pt. Vorher 0.25
; (riesige Zeichnung, Symbole und Schrift verschwanden; Review 2026-10-01).
coord_scale = 0.1
; Zu-/Ablaufpfeil einer Station in der lagerichtigen Zeichnung: feste Laenge
; ab dem angehaengten TRO (siehe _station_positionen).
coord_pfeil_laenge = 1300
; Groesste Luecke zwischen zwei benachbarten Knotenkoordinaten je Achse in der
; lagerichtigen Zeichnung; groessere Leerstrecken werden auf diesen Wert
; gekuerzt (Review 2026-10-01). --true-scale schaltet das ab.
coord_max_luecke = 1500
; Abstand der Legende rechts neben der Anlage.
legend_margin = 3000
; Oberkante der Legende so weit unter der Anlagenoberkante.
legend_drop = 1000
[tro_ids]
; Abstand zwischen Eintrag der ID-Datei und Separator, bis zu dem ein TRO als
; wiedergefunden gilt (Standard fuer --id-tolerance). Separatoren derselben
; Bahn liegen deutlich weiter auseinander; ein verschobenes Bauteil faellt so
; als "neu" auf.
default_tolerance = 100.0
[material_flow]
; Max. Abstand, ab dem ein generisches Eingang/Ausgang-Symbol als
; "deckungsgleich" mit einer BTMT-Station gilt und verschluckt wird. Die
; beobachteten Paare liegen bei 256-431 mm, echte getrennte Stationen >1000 mm.
station_merge_mm = 600.0
; Ab dieser Anzahl paralleler Gefaellestrecken zwischen denselben zwei
; Kreisel-Bahnen werden sie im Materialfluss-Diagramm zu einem Block
; zusammengefasst - sonst wird eine grosse Linienbank unlesbar breit.
min_gefaelle_group = 2
; Zeichnungsmassstab fuer --use-cords in pt/mm. Achtung: tro_flow nutzt seit
; Review 2026-10-01 0.1 - beide Graphen haben damit verschiedene Massstaebe.
coord_scale = 0.25
; Die beiden Bahnen (L/R) eines Kreisels teilen sich eine Position; im
; lagerichtigen Layout so weit versetzen, damit sie nicht uebereinander liegen.
lane_nudge_mm = 350.0
; Legende im lagerichtigen Layout so weit unterhalb der Anlage.
legend_offset_mm = 3000.0
; Legende (--show-bbs): Kaestchen- und Schriftgroesse.
bbs_legend_box_mm = 250.0
bbs_legend_font_mm = 180.0
; --show-bbs: Rand um die Anlage herum und minimale Schriftgroesse.
bbs_margin_mm = 500.0
bbs_min_font_mm = 40.0
; Anschlusspunkte K1-K4 (--show-kx): Groesse des Kreuzes und der Beschriftung.
kx_cross_mm = 120.0
kx_font_mm = 90.0
; --chain-graph: Hoechstgroesse der Zeichenflaeche, Rand und Titelhoehe (px).
chain_max_w = 1400.0
chain_max_h = 850.0
chain_margin = 70.0
chain_title_h = 60.0
[dxf_registration]
; Rastergroesse der Abstimmung.
vote_grid = 100.0
; So viele Kandidaten der Abstimmung werden ausgeglichen und bewertet.
vote_candidates = 6
; Nur Paare bis zu diesem Abstand gehen in den Ausgleich ein (exakte Treffer).
fit_tol = 50.0
; Punkte gelten als zugeordnet, wenn sie nach der Verschiebung so nah liegen.
default_match_tol = 600.0
; So viele exakte Treffer muessen es mindestens sein.
min_inliers = 5
; Ab dieser Drehung (Grad) wird gewarnt.
rotation_warn_deg = 0.05
; Lagebezug ueber die TeileId (derive_from_ids): ein Paar CSV-Objekt/Block
; gleicher ID passt, wenn sein Versatz hoechstens so weit vom Median aller
; Paare der Rolle abweicht (Separator-Bloecke je nach Drehung +-60 mm) ...
id_spread_mm = 150.0
; ... und so ein Anteil der Paare muss passen (0..1), sonst gilt die Rolle nicht.
id_min_share = 0.8
[tro_annotate]
; Zeichnungsgroessen, wenn nicht per --marker-size/--text-height angegeben.
default_marker = 300.0
default_text = 220.0
; Restfehler des Lagebezugs, ab dem er abgelehnt wird.
default_max_residual = 600.0
; Staubereich (--anlage): das Rechteck sitzt so weit vor seinem Separator,
; Richtung Vorgaenger-TRO (gegen den Fluss) - er ist die Strecke, auf der
; die Traeger vor dem Separator warten.
jam_versatz = 700.0
[merge_hw_layout]
; Zulaessige Abweichung vom Sollabstand (soll_mm), wenn eine Regel in
; e_planning.ini kein toleranz_mm angibt (die Regeln liest merge_hw_layout, auch
; fuer e_planning).
toleranz_mm = 150.0
; Foerderer der E-Planung (K0102) -> Layout-Foerderer (Kreisel3) per Mehrheit:
; ein Feldgeraet, dessen Klartext den Foerderer nennt, stimmt fuer den
; Layout-Foerderer, dessen Huellbox ihm am naechsten liegt - hoechstens so
; weit entfernt (mm, nach dem Lagebezug).
conveyor_max_mm = 1500.0
; Zugeordnet wird erst ab so vielen Stimmen ...
conveyor_min_votes = 2
; ... und diesem Anteil an allen Geraeten, die den Foerderer nennen (0..1).
conveyor_min_share = 0.6
; Warnung, wenn der Lagebezug fuer weniger als diesen Anteil der
; Layout-Separatoren einen Partner findet (0..1) - Hinweis auf verschiedene
; Planungsstaende von Layout und E-Zeichnung.
registration_min_share = 0.8
[scl_context]
; Staubereichs-Namen "DB_JamArea<NNNN>".stJam<NNNN>_<k>: ein Staubereich liegt
; auf einem Kreisel, wenn sein Separator hoechstens so weit von dessen
; Huellbox entfernt ist (die Separatoren sitzen auf den Bahnen am Rand der
; Box; Dematic 0048/0040: 0 mm, naechster Separator einer Strecke >500 mm).
staubereich_kreisel_max_mm = 300.0