| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| |
| SF DRAWING , eine App
|
Autor
|
Thema: check_part hat immer :failure (1016 / mal gelesen)
|
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 27. Jul. 2020 15:49 <-- editieren / zitieren --> Unities abgeben:
hallo, ich würde gerne Teile checken und als Ergebnis bekommen ob die Teile ok, oder nicht ok sind. Dazu gibt es in der Docu auch diese Zeilen, nur bekomme ich immer :failure heraus auch wenn das Teil ok ist. Hat da jemand schon mal einen funktionierenden Code geschrieben. Code:
(oli::sd-call-cmds (k2-ui::check_part bjects "/Teilename" :maximal_check :verbose n ) :success (progn (display *sd-action-result*) (display "Success") ) :failure (progn (when (sd-inq-error-obj bject) (display (sd-inq-error-obj :message)) ) (display "Failure") ) )
------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.0.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 29. Jul. 2020 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Hallo Peter, ... Ich hab mir das Problem mal kurz angesehen und das kleine LISP draus gebastelt. Ich hoffe dass es Dir hilft. Mir fiel auf, dass deine Original Routine immer Success als Rückmeldung lieferte, also wurde vermutlich nur kontrolliert, ob der Befehl sauber durchlaufen wurde, unabhängig vom Ergebnis. Deswegen habe ich das *sd-action-result* ausgewertet und siehe da, mit Fehler steht was drin, ohne Fehler kommt "nil" zurück und das kann man dann auswerten. Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 31. Jul. 2020 10:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang, man vielen Dank, da hast du mir schon mal weiter geholfen. Ich war in Lisp auch schon mal besser, ist leider alles etwas eingeschlafen. Leider möchte ich das nicht über einen Dialog aufrufen, sondern bräuchte das eher als defun. Aber dann kommt der ****** immer mit dem "Unlässiger Aufruf einer Aktionsroutine" was wohl was mit dem "sd-call-cmds" zutun hat. Ich bekomms nicht hin. Ich habe auch immer nur Einzelteile drin, die sind ja dann aktiv, da muss ich dann auch kein Teil auswählen. Code:
(defun Ausfuehren () (sd-call-cmds (k2-ui::check_part :objects :maximal_check :labels :off :minimal_edge :off :voids :off :knife_edges :off :max_number_control_points :off :verbose :off :warnings :off :NO_DISPLAY_BOX :off ) :success (progn (setq Ergebnis *sd-action-result*) ) ) (if (equal Ergebnis nil) (DISPLAY "Das Teil ist OK. Alles Wunderbar") (Display "Das Teil ist Beschädigt, so was machst Du jetzt." ) ) )
------------------ Gruß Peter [Diese Nachricht wurde von Greskamp am 31. Jul. 2020 editiert.] [Diese Nachricht wurde von Greskamp am 31. Jul. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.0.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 31. Jul. 2020 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Hallo Peter, ... hier der Anhang gelöst über ein Defun-Unterprogramm. Dein Fehler war vermutlich, weil du hinter bjects kein Teil angegeben hast. Entweder du lässt "Teil" drin und du übergibst beim Aufruf (sd-call-cmds (SW::SW_Teil_pruefen current_part) ) Oder du gibst innerhalb des Defun als Object current_part an. Schöner finde ich, wenn du es beim Aufruf mit übergibst, dann bleibst du flexibler. Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003
|
erstellt am: 31. Jul. 2020 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Hallo Peter, ... hier der Anhang gelöst über ein Defun-Unterprogramm. Dein Fehler war vermutlich, weil du hinter bjects kein Teil angegeben hast. Entweder du lässt "Teil" drin und du übergibst beim Aufruf (sd-call-cmds (SW::SW_Teil_pruefen current_part) ) Oder du gibst innerhalb des Defun als Object current_part an. Schöner finde ich, wenn du es beim Aufruf mit übergibst, dann bleibst du flexibler. Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.0.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 31. Jul. 2020 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Hallo Peter, ... hier der Anhang gelöst über ein Defun-Unterprogramm. Dein Fehler war vermutlich, weil du hinter bjects kein Teil angegeben hast. Entweder du lässt "Teil" drin und du übergibst beim Aufruf (sd-call-cmds (SW::SW_Teil_pruefen current_part) ) Oder du gibst innerhalb des Defun als Object current_part an. Schöner finde ich, wenn du es beim Aufruf mit übergibst, dann bleibst du flexibler. Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003
|
erstellt am: 31. Jul. 2020 11:19 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Irgendwas ist jetzt falsch gelaufen, hier nochmal der Anhang. ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003 MS: Windows 10 64bit OSD: 20.1 M020 ModelManager: 20.1 M020 NX 1899 TC 12.3
|
erstellt am: 31. Jul. 2020 11:40 <-- editieren / zitieren --> Unities abgeben:
Ich bin dir echt dankbar, aber ohne diesen Fensteraufruf kommt bei mir immer die Fehlermeldung mit dem Aktionsaufruf. Warum kann ich nicht einfach diese defun definieren: Code:
(defun Teil_pruefen (Teil) (sd-call-cmds (k2-ui::check_part :objects Teil :maximal_check :labels :off :minimal_edge :off :voids :off :knife_edges :off :max_number_control_points :off :verbose :off :warnings :off :NO_DISPLAY_BOX :off ) :success (progn (setq Ergebnis *sd-action-result*) ) );Prüfroutine (DISPLAY :clear) (if (equal Ergebnis nil) (DISPLAY "Das Teil ist OK. Alles Wunderbar") (Display "Das Teil ist Beschädigt, so was machst Du jetzt." ) );endif );defun
und dann über Code:
(sd-call-cmds (Teil_pruefen (sd-inq-curr-part)))
aufrufen, das geht bei mir nicht ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003
|
erstellt am: 31. Jul. 2020 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
und dann über Code: (sd-call-cmds (Teil_pruefen (sd-inq-curr-part))) aufrufen, das geht bei mir nicht. Um deine Defun-Routine aufzurufen musst du doch das PKG in welches du es eingelesen hast voranstellen, denke ich. Aufruf sollte ungefähr so aussehen: (sd-call-cmds (SW::SW_Teil_pruefen current_part) ) wobei das voran gestellte "SW::" dem Paket entspricht indem sich deine Defun Routine befindet. Es kommt also darau an, was Du hier definiert hattest, ... (in-package :SW) als Du das Defun geladen hast. Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 01. Aug. 2020 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Zitat: Original erstellt von Seele: also wurde vermutlich nur kontrolliert, ob der Befehl sauber durchlaufen wurde, unabhängig vom Ergebnis. Deswegen habe ich das *sd-action-result* ausgewertet und siehe da, mit Fehler steht was drin
Dafür mal volle PunktZahl! -- hatte die Frage letzte Woche auch noch gelesen aber nix laufen lassen, probiert. Ja, sd-call-cmds ist dafür da Unzulänglichkeiten / Ausnahme Situationen in der DURCHFÜHRUNG programmatisch abfangen zu können. Ob (bei erfolgreicher Ausführung) hinten ein neues Teil dabei rausfällt, oder ein Braugruppe (gewünschter weise) gelöscht wird, oder nur ein Einzeiler in die console geschrieben wird ist dem sd-call-cmds egal. Vergleich: es dient dazu zu checken ob du ohne Unfall von A nach B gekommen bist. Ob du dabei saumäßig aufs Pedal getreten hast oder Sprit-sparent mit 120km/ locker mitgschwommen bist, interessiert sd-call-cmds nicht. Wenn du die C02 Belastung dieser Fahrt erfahren willst, musst du einen 2. Stelle fragen. Theoretisch hat Deinen (angedachte Routine) also DREI Ausgänge:
- Durchführung ok, Teil in Ordnung
- Durchführung ok, Teil nicht in Ordnung
- Durchführung FLASHC
Zusätzlich kann eine action routine auch noch einen return value haben. Den bekommst du dann in die Hand mit dem (setq result (sd-call-cmds ratatata)))
------------------ ● Firefox ESR ● Java 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 Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 01. Aug. 2020 16:54 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Zitat: Original erstellt von Greskamp: und dann über
Code: (sd-call-cmds (Teil_pruefen (sd-inq-curr-part)))
Aufrufen über
Code: (SW-Pruefen-Makro :teil (oli:sd-inq-curr-part))
Du rufst also (in der command line) den Hilfsdialog auf, der intern den sd-call-cmds ausführt. _____________________________________________________________ @Wolfgang: Du hast da 2 mal sd-call-cmd drin .
Code: :after-input (progn (sd-call-cmds (SW::SW_Teil_pruefen Teil) ) (setq Teil nil) )
und dann noch in der funktion Code: (sd-call-cmds (k2-ui::check_part ...
den ersten brauchst du nicht (tut in dem fall aber auch nicht weh) Und noch mehr LISP Senf dazugebend (wolfgang2wolfgang)
- (SW::SW_Teil_pruefen...) -- die extra Angabe des lisp package ist unnötig, wir SIND ja genau in dem Package
- (setq Teil nil) -- ist unnötig.
- ich hätte die Aktion eher in der :Ok-action gemacht und nicht im :after-input
- oderaber du machst nen sequential loop dialog draus, dann ist :after-input natürlich richtig.
- (use-package ':Oli) -- das Quote gehört da nicht wirklich hin. NeNeNeee
------------------ ● Firefox ESR ● Java 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 Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 01. Aug. 2020 17:20 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
|
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003
|
erstellt am: 02. Aug. 2020 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Hallo Wolfgang, .... danke für deine Ratschläge, ich bin halt immer noch der LISP-Laie. Momentan mach ich lieber einen sd-call-cmds mehr rein, als wieder einen Abbruch des Makro zu riskieren. (Schäm mich, ... ) Ich habe mir auch nicht viel Zeit bei meinem LISP-Schnipsel genommen, wollte Peter nur schnell helfen, ... I Ich verstehe momentan auch Peter´s Problem nicht ganz, weil bei mir der LISP-Schnipsel auch mit dem Aufruf der DEFUN-Routine tadellos arbeitet, auch wenn die Programmierung nicht 100%ig sauber ist/sein sollte. Im After-Input habe ich den Befehlsaufruf deswegen reingeschrieben, weil sich dadurch eine Schleife aufmacht und ich ein Teil nach dem anderen auf dem Bildschirm anklicken kann und somit ein Ergebnis nach dem anderen geliefert bekomme ohne ständig den Befehl neu starten zu müssen. Ohne zusätzliche Info´s verstehe ich jedenfalls momentan das Problem nicht, welches ja vermutlich existiert. Gruß Wolfgang -> Wolfgang Gruß Wolfgang -> Peter ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003 MS: Windows 10 64bit OSD: 20.1 M020 ModelManager: 20.1 M020 NX 1899 TC 12.3
|
erstellt am: 03. Aug. 2020 14:04 <-- editieren / zitieren --> Unities abgeben:
Hallo, sorry, aber ich glaube jetzt bin ich immer mehr verwirrt, was jetzt stimmt und was gemacht werden muss. Ich habe ein kleines Programm was eine DAtei durchläuft und diese Teile alle läd und dann als step Datei speichert. Leider gibt es ein paar Teile die nicht ok sind, und dann bricht das Step-Speichern ab, das wäre nicht schlimm, aber das Programm so weiter laufen. Code:
(sd-set-current-working-directory "D:\\Step\\478\\stp") (setq file "D:/Step/478/dateien.txt") (with-open-file (daten1 file :direction :input :external-format :utf-8) (do ((l (read-line daten1) (read-line daten1 nil 'eof))) ((eq l 'eof) "Reached end of file.") (setq getrennt (sd-string-split l ",")) (setq datei (first getrennt)) (setq index (sd-string-replace (second getrennt) "." "" )) (setq elid (sd-string-trim (sd-string-replace (third getrennt) "~%" "" ))) (setq id (third getrennt)) (sd-db-element-load :database-elid (format nil "~A" id) :show-progress :off) cancel (teil_checken) (if (prüfung_positiv) (step_export :select :all_at_top :display-options :assem-struct :off :filename (format nil "~ARev.~A;~A.stp" datei index elid) :overwrite) ) (display (format nil "~ARev.~A;~A.stp" datei index elid)) (delete_3d :all_at_top complete) ) )
Jetzt würde ich halt nach dem sd-db-element-load gerne prüfen ob das Teil ok ist, und dann die step raus schreiben. Aber bekomme es final nicht hin.
------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 03. Aug. 2020 18:04 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
|
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 03. Aug. 2020 18:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang, also die Dateien.txt kann schon 30.000 Zeilen groß sein. Sind immer absolute Pfade, also das step speichern. Das laden ist ja aus dem ModelManager, da wird über die ID geladen. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AlexG Mitglied
Beiträge: 133 Registriert: 05.04.2013 CP/M; 6510@0,985249 MHz; 64KB RAM; 20KB ROM; MOS 6569
|
erstellt am: 27. Aug. 2020 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Schublade auf *kram.wühl*... irgendwo hier muss es doch sein? ...Aaaah ja! Da schau einmal. Der Beitrag ist ja auch schon wieder "zwei" Tage alt, aber vielleicht findet sich doch noch jemand der es brauchen kann. Mit dieser Funktion sollte sich prüfen lassen ob die Teileprüfung für ein Bauteil/Baugruppe einen "Fehler 319" ausgibt. Als Parameter wird das Objekt (Teil/Baugruppe) als Selected-Item übergeben. Das ganze ist aber extremst unschön (*ein.wenig.schäm*) gerade bei großen Baugruppen sehr zäh - die Teileprüfung dauert halt - und beim Durchlaufen einer großen Schleife mit vielen großen Baugruppen wird abhänig von der Hardware der SolidDesigner irgendwann den Dienst verweigern bzw. der Speicher voll laufen. Code: (defun error-319-p (obj) (display :clear) (check_part :objects obj :maximal_check t :voids t :knife_edges t :inexact_geo t :warnings t :check_it) (let ((check-result (sd-get-text-control-value "OUTPUT-BOX-TX"))) (display :clear) (or (sd-string-match-pattern-p "*(Fehler 319)*" check-result) (sd-string-match-pattern-p "*(Error 319)*" check-result))))
Ein exemplarischer Aufruf könnte z.B. so aussehen:
Code: (display (error-319-p (sd-inq-curr-part)))
Der Rückgabewert, solle ein Fehler 319 gefunden werden, ist T ansonsten NIL. *Auf Grund der Tatsache, dass es beim CODE Block die Formatierung zerschießt das ganze noch einmal als Anhang. **Dämlichen Smilies *schnaub* Gruß Alex ------------------ Computer sind unbrauchbar. Sie können nur Fragen beantworten. Pablo Picasso, Maler [Diese Nachricht wurde von AlexG am 27. Aug. 2020 editiert.] [Diese Nachricht wurde von AlexG am 27. Aug. 2020 editiert.] [Diese Nachricht wurde von AlexG am 27. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 21. Feb. 2021 17:54 <-- editieren / zitieren --> Unities abgeben:
Hallo Alex, auch wenn es etwas spät kommt, möchte ich dir noch herzlich für die tolle Hilfe bedanken. Das Tool konnte ich wirklich gut einsetzen und auf diese Zeilen Code wäre ich nie gekommen.
------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |