hw_import + merge_hw_layout: Hardwareplanung einlesen und mit dem Layout zusammenfuehren

Stufen 2 und 3 aus doc/Konzept_Layout_Hardware_SCL.md:

- lib/hw_import.py: TIA-Import (*_TIA.xlsx, ohne openpyxl gelesen) +
  Positionsdatei (*_positionsconv.json) -> <projekt>_hw.json: je BMK
  Adresse, Index-Konstante, VERW, Station, Lage, Foerderer (K0102, #106 ->
  K0106); Antriebe MA/FC/GF; Gegenpruefung beider Quellen.
- lib/merge_hw_layout.py: <csv>_tro.json + <projekt>_hw.json ->
  <csv>_anlage.json (model.AnlageDocument): bindings je TRO-ID + Slot +
  Rolle mit Konstante und Adresse, Foerderer per Mehrheit (Mubea: K0102 =
  Kreisel3, K0104 = Kreisel2, K0105 = Kreisel1), Handkorrekturen
  cfg/hw_overrides.ini. Zuordnungslogik aus e_planning.py hierher
  verschoben; e_planning re-exportiert sie, Ergebnis unveraendert.
- TRO-JSON traegt optional `parts` (Lage/Huellbox, tro_flow --json),
  PinStore bekommt Slots line<n>.
- Gespeicherter Lagebezug mit SHA-256 der Positionsdatei; Unterordner in
  Eingabenamen relativ zu SKEL_DATA.
- Doku: Python_Scripts.md 5d/5e, Konzept, E-Planung_Bruecke (Abgleich
  mubea_layout.dxf / CSV / E-Planung).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Samer Ayadi
2026-10-15 16:16:10 +02:00
co-authored by Claude Opus 5.5
parent c4122b4497
commit df24cf5adb
21 changed files with 3226 additions and 442 deletions
+16 -2
View File
@@ -172,7 +172,21 @@ default_text = 220.0
default_max_residual = 600.0
[e_planning]
[merge_hw_layout]
; Zulaessige Abweichung vom Sollabstand (soll_mm), wenn eine Regel in
; e_planning.ini kein toleranz_mm angibt.
; 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