[ADD] dxf_scan_components.py: Separatoren/Scanner auf einer Kreisel-Kette uebernehmen dessen Anwender-Hoehe (sensor_hoehen_von_kreiseln, bei --kreisel-hoehe) + Tests; [FIX] GF-Winkel aus Kreisel-Hoehen (dematic_arvato:gf-winkel): Modus 1 haelt die horizontale Laenge fest - Abfall = (deltaL - aus-dx - ein-dx) * tan(w) statt asin-Naeherung von gf-winkel-berechnen, ES-Abfall beim aktuellen Winkel gemessen und iteriert (steile GF wie Showroom ~37 Grad endeten sonst weit unter dem Kreisel); [CHANGE] Showroom ILS: Testdaten und Treiber aktualisiert

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-07 15:23:39 +02:00
parent d403c23e5b
commit 8885b5c96a
5 changed files with 267 additions and 153 deletions
+56 -10
View File
@@ -109,16 +109,38 @@
;; Mit der VF-Konvention wurde der feste AS/ES-Abfall addiert statt
;; abgezogen - real gebaut: 3.79 statt ~2.49 Grad, GF endete 258 mm unter
;; dem Kreisel (HOEHE_BIS 1568 statt 1826). Darum hier der Betrag.
;;
;; NICHT gf-winkel-berechnen: dessen asin(dH / L) behandelt die Laenge als
;; SCHRAEGE Laenge (richtig fuer Modus 3). Modus 1 haelt aber die
;; HORIZONTALE Laenge deltaL fest und streckt die Staustrecke um 1/cos(w)
;; (mubea:gf-bauen) - der Abfall der Schraege (Staustrecke + Separator) ist
;; dann genau (deltaL - aus-dx - ein-dx) * tan(w). Bei 2-3 Grad (Dematic)
;; ist das gleich, bei steilen GF nicht: Showroom_ILS_3_0 faellt 1860 mm auf
;; 2405 mm (~37 Grad), asin ergab ~50 Grad und die GF endete weit unter dem
;; unteren Kreisel. Der Abfall des ES haengt von der Einlaufneigung ab - er
;; wird wie in Modus 3 (gf-messe-dz-block) beim aktuellen Winkel gemessen
;; und iteriert; das AS liegt flach, sein Abfall ist fest (aus-dz).
(defun dematic_arvato:gf-winkel (deltaL hz as-seite es-seite as-winkel es-winkel
z-start z-ende / winkel)
z-start z-ende / L dz-as dz-es winkel vorher
iter rad-h rad-v)
(mubea:ensure-gf-init)
(vf-set-as-masse as-winkel as-seite)
(vf-set-es-masse es-winkel es-seite)
(setq aus-dz (abs (float aus-dz)) ein-dz (abs (float ein-dz)))
(setq winkel
(gf-winkel-berechnen
(list (list "Linie" hz (- deltaL (float aus-dx) (float ein-dx) 300.0) 0 "links"))
(- z-start z-ende) 1))
(setq L (- deltaL (float aus-dx) (float ein-dx))
dz-as (abs (float aus-dz))
dz-es (abs (float ein-dz))
rad-h (* hz (/ pi 180.0))
vorher -999.0
iter 0)
(setq winkel (* (atan (- z-start z-ende dz-as dz-es) L) (/ 180.0 pi)))
(while (and (< iter 6) (> (abs (- winkel vorher)) 0.001))
(setq vorher winkel
rad-v (* winkel (/ pi 180.0)))
(setq dz-es (gf-messe-dz-block (strcat "ES_Element_" es-winkel "_" es-seite)
(list (* (cos rad-h) (cos rad-v)) (* (sin rad-h) (cos rad-v))
(- (sin rad-v)))))
(setq winkel (* (atan (- z-start z-ende dz-as dz-es) L) (/ 180.0 pi))
iter (1+ iter)))
(vf-set-as-masse "90" as-seite)
(vf-set-es-masse "90" es-seite)
winkel)
@@ -171,10 +193,34 @@
(strcat " aus Hoehe " (rtos (caddr start) 2 1)
" -> " (rtos z-ende 2 1))
"")))))
(dematic_arvato:rec-block rec
(mubea:gf-bauen tid (mapcar 'float start) (float deltaL) (float hz)
as-seite es-seite as-winkel es-winkel winkel)
"gefaellestrecke-einfuegen lieferte keinen GF-Block"))))
(setq rec
(dematic_arvato:rec-block rec
(mubea:gf-bauen tid (mapcar 'float start) (float deltaL) (float hz)
as-seite es-seite as-winkel es-winkel winkel)
"gefaellestrecke-einfuegen lieferte keinen GF-Block"))
;; Ist-Endhoehe gegen den Kreisel am Ende pruefen
(dematic_arvato:gf-endhoehe-pruefen rec z-ende))))
;; HOEHE_BIS_mm des gebauten GF-Blocks mit der Soll-Endhoehe vergleichen;
;; mehr als 5 mm daneben -> status "warnung" + Meldung (die GF trifft den
;; unteren Kreisel nicht).
(defun dematic_arvato:gf-endhoehe-pruefen (rec z-ende / ist diff)
(setq ist (cdr (assoc "HOEHE_BIS_mm" (ssg-val rec "attribs"))))
(cond
((not (and (numberp z-ende) ist (= (ssg-val rec "status") "executed"))) rec)
(T
(setq diff (- (atof ist) z-ende))
(setq rec (vsp-set rec "meldungen"
(append (ssg-val rec "meldungen")
(list (strcat "HOEHE_BIS " ist " (Soll "
(rtos z-ende 2 0) ", Abweichung "
(rtos diff 2 0) " mm)")))))
(if (> (abs diff) 5.0)
(progn
(princ (strcat "\n WARNUNG: GF endet bei " ist " statt "
(rtos z-ende 2 0)))
(vsp-set rec "status" "warnung"))
rec))))
;; VarioFoerderer "standard"/"etage" - mubea-Schema, Bau ueber
;; mubea:vario-bauen. "motorseite" wirkt wie im Edit-Dialog ueber den