[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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user