Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  PTC Creo Elements/Direct Modeling
  LISP Datei am Start ausführen - Warten auf Creo

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   LISP Datei am Start ausführen - Warten auf Creo (320 mal gelesen)
constructr
Mitglied


Sehen Sie sich das Profil von constructr an!   Senden Sie eine Private Message an constructr  Schreiben Sie einen Gästebucheintrag für constructr

Beiträge: 4
Registriert: 13.08.2019

PTC Creo Elements Access 18.1

erstellt am: 13. Aug. 2019 08:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich habe folgendes Problem: Ich möchte eine LISP-Datei zum Start von Creo Elements 18.1 Access ausführen. Die LISP funktioniert tadellos, wenn man sie in das Access-Fenster nach Programmstart zieht. Wenn man sie in die sd_3d_access_customize wird sie geladen und auch ausgeführt (Display Befehle werden korrekt wiedergegeben, die Hauptfunktion wird gestartet). Jedoch kommt das Problem in einer Funktion der LISP: Zum Start des Programms soll eine CAD-Datei automatisch geladen werden und mit (sd-inq-curr-part) soll diese referenziert werden. Wenn man das LISP-Programm nach Programmstart manuell einfügt, kein Problem. Wenn man es zu Programmstart aufrufen lässt, wird einfach das Teil nicht geladen (weil wahrscheinlich noch nicht alle Parts von Access fertiggeladen sind?)

Hier ein Ausschnitt aus der aufgerufenen Hauptfunktion:

Code:

(sd-call-cmds (UNIVERSAL_LOAD :FILE (namestring model)))
                (setq cpart (sd-inq-curr-part))
                (if cpart
                    (do_something cpart)
                    (display "Wird bei automatischem Start immer angezeigt"))


Dabei geht das Programm immer zum Display, wenn es automatisch ausgeführt wird. Per drag and drop funktioniert es super.

Ich habe auch schon via (SLEEP x) versucht zu warten, was irgendwie nur den gesamten Start von Creo verlangsamt hat. Gibt es bekannte Ansatzpunkte um abzuwarten, bis das gesamte Programm geladen ist um danach erst zu starten?

Im Handbuch steht noch, dass man etwas in Anführungszeichen ausführen sollte, aber dann wird das Modul ja nicht mehr geladen?! 

[Diese Nachricht wurde von constructr am 13. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

der_Wolfgang
Ehrenmitglied
Tastenhauer


Sehen Sie sich das Profil von der_Wolfgang an!   Senden Sie eine Private Message an der_Wolfgang  Schreiben Sie einen Gästebucheintrag für der_Wolfgang

Beiträge: 1651
Registriert: 3.20.

● PEnix@home
● W10 Pro Build16299
● Drafting V17~V20.2.0
● Modeling V17~V20.2.0
● @Scirotec201804

erstellt am: 13. Aug. 2019 20:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für constructr 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von constructr:
... Jedoch kommt das Problem in einer Funktion der LISP: .... zu Programmstart aufrufen lässt, wird einfach das Teil nicht geladen.

Hier ein Ausschnitt aus der aufgerufenen Hauptfunktion:

Code:
(sd-call-cmds (UNIVERSAL_LOAD :FILE (namestring model)))
(setq cpart (sd-inq-curr-part))
(when cpart
  (do_something cpart)
  (display "Wird bei automatischem Start immer angezeigt"))

Dabei geht das Programm immer zum Display, wenn es automatisch ausgeführt wird. Per drag and drop funktioniert es super.

Also ich bin jetzt auch confused.  Was heisst denn "geht zum display"?   

Bei Modeling wird (standard mäßig) ein Teil "T1" erzeugt was dann auch current ist. Damit man gleich damit arbeiten kann.

3D Access ist kein Modellierer..  nur ein Gucker. Gibt es da ein "T1" ??


  • du schreibst von einem LISP file.  und einer Hautpfunktion schickst aber nur 5 Zeilen.
        reduziere Deine Lisp Datei auf die 5 Zeilen..    nimm einen hardcodierten Dateinamen.
  • mir FEHLT was NICHT funktioniert
  • Was wird denn geladen? Ein PKG file?  'universal_load' ist raten+laden
        -- für programmatische Aufrufe eher suboptimal
        -- nimm lieber load_package  (oder was anderes DIREKT passendes)
  • ein ==>> sd-call-cmds  hat mehr als eine option. Du nutzt die Möglichkeiten nicht aus um den Fehler einzugrenzen
    siehe mal https://ww3.cad.de/foren/ubb/Forum92/HTML/000941.shtml#000001 
    Code:
    :failure (pprint (sd-inq-error-obj :all))
      besser ein pprint als display.. 
  • Tracen... TRACEN!!!!  tracen! .  also (trace UNIVERSAL_LOAD  load_package oli:sd-inq-curr-part)
  • Das Teil wird nicht geladen? Oder ist es nur nicht 'current'?
  • Du schreibst das 'display's ausgeführt werden ..  aber das sind nicht die, die du im obigen Lisp Schnipsel hier offen legst.
  • welchen WERT hat 'model'  -->> (pprint model)

hint: pprint schreibt die Ausgaben in die Console. Starte 3D Access entweder mit -v oder schreibe in dein LISP file ganz oben ein ==>> (oli:sd-show-console-window) rein. -- pprint ist "unverfälschter" als display


------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

constructr
Mitglied


Sehen Sie sich das Profil von constructr an!   Senden Sie eine Private Message an constructr  Schreiben Sie einen Gästebucheintrag für constructr

Beiträge: 4
Registriert: 13.08.2019

PTC Creo Elements Access 18.1

erstellt am: 15. Aug. 2019 10:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Wolfgang,

vielen Dank für Deine Anmerkungen. Ich werde diese Woche leider nicht mehr dazu kommen, das Programm zu bearbeiten, deshalb nur die Anmerkungen der Verständlichkeit halber:

Zitat:
Also ich bin jetzt auch confused.  Was heisst denn "geht zum display"?

Zitat:
Code:
(display "Wird bei automatischem Start immer angezeigt"))


Es wird immer der Teil mit dem display (bei automatischen Start) abgearbeitet, nicht der part (do_something ...)

Zitat:
mir FEHLT was NICHT funktioniert

Zitat:
Dabei geht das Programm immer zum Display, wenn es automatisch ausgeführt wird. Per drag and drop funktioniert es super.

Wie geschrieben. Creo lädt bei automatisch ausgeführtem Skript das Teil nicht! Das funktioniert NICHT! Bei Drag und Drop FUNKTIONIERT es. Das Teil ist auch einfach NICHT da (in Creo).

Zitat:
Was wird denn geladen? Ein PKG file?  'universal_load' ist raten+laden

Zitat:
Zum Start des Programms soll eine CAD-Datei automatisch geladen werden

Die CAD-Datei ist eine .SDEXP Datei. Sie wird auch sauber geladen, WENN das Skript per drag and drop gestartet wird, nur bei automatisiertem Start passiert das nicht!

Zitat:

Du schreibst das 'display's ausgeführt werden ..  aber das sind nicht die, die du im obigen Lisp Schnipsel hier offen legst.



Doch, der relevante Display Befehl ist der dargelegte. Ich hatte noch ein, zwei andere eingefügt gehabt, um zu gucken, ob überhaupt irgendwo irgendwas passiert, das ist jedoch irrelevant.

[Diese Nachricht wurde von constructr am 15. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

clausb
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von clausb an!   Senden Sie eine Private Message an clausb  Schreiben Sie einen Gästebucheintrag für clausb

Beiträge: 2896
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 15. Aug. 2019 10:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für constructr 10 Unities + Antwort hilfreich

Brechen wir das Problem aufs Elementare herunter.

Code:

(if cpart
     (do_something cpart)
     (display "Wird bei automatischem Start immer angezeigt"))

Die (display)-Anweisung ist der else-Zweig des if-Statements. Wenn die Beobachtung ist, dass die (display)-Anweisung immer ausgeführt wird, bedeutet das also, dass es bei der Ausführung des Skripts kein "current part" gibt, was bedeutet, dass der Rückgabewert von (sd-inq-curr-part) offenbar NIL war. In diesem Fall wird (do_something) natürlich auch nicht ausgeführt. Passt also schon mal gut zusammen.

Der Filename, der UNIVERSAL_LOAD übergeben wird, leitet sich direkt aus dem Namen von "model" ab:

Code:

(sd-call-cmds (UNIVERSAL_LOAD :FILE (namestring model)))

Welchen Wert hat "model" denn in einem konkreten Testfall?

Kleiner Hinweis noch zum Debuggen. Mit dem folgenden Befehl sollte man zusätzliches Logging für UNIVERSAL_LOAD im Konsolenfenster sehen:

Code:

(debugaction 2)

------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ - Blog: http://www.clausbrod.de/Blog

[Diese Nachricht wurde von clausb am 15. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

der_Wolfgang
Ehrenmitglied
Tastenhauer


Sehen Sie sich das Profil von der_Wolfgang an!   Senden Sie eine Private Message an der_Wolfgang  Schreiben Sie einen Gästebucheintrag für der_Wolfgang

Beiträge: 1651
Registriert: 3.20.

● PEnix@home
● W10 Pro Build16299
● Drafting V17~V20.2.0
● Modeling V17~V20.2.0
● @Scirotec201804

erstellt am: 15. Aug. 2019 18:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für constructr 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von clausb:
Brechen wir das Problem aufs Elementare herunter.

Lach ..  if then else.

In meinem jugendlichem( :kicher: ) Leichtsinn hatte ich den code semi-zitiert im Sinne des Erfinders - mein Fehler.

Du hast rechts. 

und ein (trace sd-inq-curr-part) wäre auch eine hilfreiche Ergänzung.

und @constructr ..  alles was in dem Bereich dann in der console (oli:sd-show-console-window) sichtbar ist hier zur Verfügung stellen. Ich helfe gerne, aber Rätselraten ist nicht mein Hobby. 

------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

constructr
Mitglied


Sehen Sie sich das Profil von constructr an!   Senden Sie eine Private Message an constructr  Schreiben Sie einen Gästebucheintrag für constructr

Beiträge: 4
Registriert: 13.08.2019

PTC Creo Elements Access 18.1

erstellt am: 19. Aug. 2019 09:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


dbg2.png

 
Hallo Claus und Wolfgang,

vielen Dank für eure Antworten. Ich habe nun das Debugging durchgeführt, leider werde ich nicht schlauer daraus. Ich habe sowohl (debugaction 2) gemacht und das ganze laufen gelassen, als auch mit trace experimentiert. Bei trace gibt es nur "sd-call-cmds is a macro" aus. Des Weiteren geschieht bei :failure (pprint (sd-inq-error-obj :all) im sd-call-cmds Aufruf nichts. Keine Ausgabe.

Zitat:
Welchen Wert hat "model" denn in einem konkreten Testfall?

Einen Dateipfad zum Modell, z.B.: "D:/Modelle/Teil1.sdexp"
Ich habe außerdem eine Lisp angehängt, die ich mit (load "pfad-zur-lisp") in sd_3d_access_customize aufrufe. Wie gesagt, mit der Datei funktioniert das Laden des Modells bei drag and drop, bei direktem Start zeigt er an, dass das Teil nicht geladen wurde(es ist auch nirgends vorhanden).

Der trace bei universal-load macht beim automatischen Start nichts, bei drag and drop Ausführung des Skripts kommt die Fehlermeldung, "A trace spec must have odd length, but ( ... ) does not." 
Vielen Dank für eure Hilfe

 

PS: Kann man die 3 angehängten Dateien sehen? Ich sehe diese beim "Dateien verwalten", im Beitrag wird mir nur die letzte angezeigt 

[Diese Nachricht wurde von constructr am 19. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

clausb
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von clausb an!   Senden Sie eine Private Message an clausb  Schreiben Sie einen Gästebucheintrag für clausb

Beiträge: 2896
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 20. Aug. 2019 15:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für constructr 10 Unities + Antwort hilfreich

Ich sehe im letzten Beitrag nur einen Anhang (Screenshot von der Fehlermeldung).

------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ - Blog: http://www.clausbrod.de/Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

constructr
Mitglied


Sehen Sie sich das Profil von constructr an!   Senden Sie eine Private Message an constructr  Schreiben Sie einen Gästebucheintrag für constructr

Beiträge: 4
Registriert: 13.08.2019

PTC Creo Elements Access 18.1

erstellt am: 20. Aug. 2019 16:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

ok, ich hoffe externes bilderhosting ist i.o., ansonsten bitte entfernen.

https://imgur.com/a/RD5bPg5


die lisp:

Code:
(in-package :Dbgpackage)
(use-package :OLI)

(defun tobedebugged ()
    (let ((mdl)(basedir)(filelist)(cpart))
        (setq basedir "D:/Konstruktionsteile/*.sdexp")
        (setq filelist (directory basedir))
        (loop for mdl in filelist
            do
                (display mdl)
                ;(sd-call-cmds (UNIVERSAL_LOAD :FILE (namestring mdl)))
                (sd-call-cmds (UNIVERSAL_LOAD :FILE (namestring mdl) :failure (pprint (sd-inq-error-obj :all))))
                (setq cpart (sd-inq-curr-part))
                (if cpart
                    (display "Successfully loaded model")
                    (display "No valid part detected!")))))
(tobedebugged)



Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

der_Wolfgang
Ehrenmitglied
Tastenhauer


Sehen Sie sich das Profil von der_Wolfgang an!   Senden Sie eine Private Message an der_Wolfgang  Schreiben Sie einen Gästebucheintrag für der_Wolfgang

Beiträge: 1651
Registriert: 3.20.

● PEnix@home
● W10 Pro Build16299
● Drafting V17~V20.2.0
● Modeling V17~V20.2.0
● @Scirotec201804

erstellt am: 20. Aug. 2019 20:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für constructr 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von constructr:
die lisp:

Prima!!!!!

Das mit dem Anhang hatte irgendwie nicht funktioniert..  aber nun ist auch gut.

wenn du ein sdexp lädts wäre SDEXPLOAD  besser, weil direkter. Für ein einzelnes file wäre dann folgendes richtig

Code:
SDEXPLOAD :DESCFILE "D:/Konstruktionsteile/P4712.sdexp"

Füge OBEN (nach dem (use-package)) folgendes ein:

Code:
(trace universal_load  load_package SDEXPLOAD)

Die eigentlich Lade routine würde ich wie folgt ersetzen
Code:
(sd-call-cmds (SDEXPLOAD :DESCFILE (namestring mdl))
  :success (pprint (sd-inq-curr-part))
  :failure (pprint (sd-inq-error-obj :all))
  ) ;; end sd-call-cmds

Wie du :success und :failure eingebaut hast war von der Idee her richtig. Aber leider war eine Klammer an der falschen Stelle. Hake das als 'Lisp-Erfahrung-machen' ab.

Wenn dein XY.sdexp file eine Baugruppe enthält, hast du kein current-part. Aber Du schriebst ja andererseits das gar nichts geladen würde.

und nun der code,wie ich ihn probieren würde:

Code:
(in-package :Dbgpackage)
(use-package :OLI)

(sd-show-console-window)
(trace universal_load load_package SDEXPLOAD directory)

(defun tobedebugged ()
    (let (mdl
          (basedir "D:/Konstruktionsteile/*.sdexp")
          cpart)
        (dolist (mdl (directory basedir))
          (display mdl)
          (pprint mdl)
          (sd-call-cmds (SDEXPLOAD :DESCFILE (namestring mdl))
              :success (pprint (sd-inq-curr-part))
              :failure (pprint (sd-inq-error-obj :all))
              ) ;; end sd-call-cmds
          (setq cpart (sd-inq-curr-part))
          (if cpart
              (display (format nil "Successfully loaded model ~S" (sd-inq-obj-pathname cpart)))
              (display "No current part detected!")
              )
      ))) ; end loop/let/defun

(trace tobedebugged)
(tobedebugged)  ;; call on load of lisp file


Diser Code ist trocken geschrieben und von mir nie ausgeführt worden.

Die Ausgabe im KonsoleFenster kannst du als TEXT kopieren. Dafür ist kein ScreenShot als Bild nötig.  Das macht es einfacher uns DEIN Ergebnis hier mitzuteilen.

------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

der_Wolfgang
Ehrenmitglied
Tastenhauer


Sehen Sie sich das Profil von der_Wolfgang an!   Senden Sie eine Private Message an der_Wolfgang  Schreiben Sie einen Gästebucheintrag für der_Wolfgang

Beiträge: 1651
Registriert: 3.20.

● PEnix@home
● W10 Pro Build16299
● Drafting V17~V20.2.0
● Modeling V17~V20.2.0
● @Scirotec201804

erstellt am: 20. Aug. 2019 21:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für constructr 10 Unities + Antwort hilfreich

ein 'guter' trace würde mit Deinem code dann so aus sehen:
Code:
  1> (tobedebugged)
    2> (UNIVERSAL_LOAD :FILE "D:/Konstruktionsteile/P4712.sdexp")
        3> (SDEXPLOAD :DESCFILE "D:/Konstruktionsteile/P4712.sdexp")
    Loading C:/Programme/PTC/Creo Elements/Direct Modeling 20.1/binx64/newdm_interface.dll
      Full path: C:/Programme/PTC/Creo Elements/Direct Modeling 20.1/binx64/newdm_interface.dll
    Finished loading C:/Programme/PTC/Creo Elements/Direct Modeling 20.1/binx64/newdm_interface.dll
        <2 (SDEXPLOAD)
      <1 (UNIVERSAL_LOAD)
  <1 (tobedebugged)
Das sind die Ausgaben in der Konsole mit denen man (=Claus, ich und paar andere) was anfangen kann

------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz