Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  PTC Creo Elements/Programmierung
  Gewinde auf Zylinderfläche

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO
Autor Thema:  Gewinde auf Zylinderfläche (1109 mal gelesen)
Jan Niestroj
Mitglied


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

Beiträge: 4
Registriert: 02.08.2021

Creo Elements/Direct Modeling (x64) 20.1.3.0
mit Power Extensions V20.1
ModelManager 20.1.0.0
mit Power Extensions - Manager V20.1.xx

erstellt am: 02. Aug. 2021 09:36    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 bin ein kompletter Neuling auf dem Gebiet der Lispprogrammierung, doch wurde ich mit der Aufgabe betraut Gewindestangen über eine Lisp zu erstellen. Hierfür erfolgt zunächst die Extrusion eines Zylinders, dessen Mantelfläche darauf hin mit einem metrischen Gewinde versehen werden soll.

Code:
(use-package :OLI)
(use-package :custom)


(defun gewindestange ()

    (create_part :name "Testteil" :model_name "Testteil" complete)
    (set_pers_context :none uic_new_wp_with_cgeo)
    (CIRCLE :CEN_RAD 0,0 10)
    (extrude :testteil :A03 :Distance 100)
   

    ;;Zylinderflaeche bestimmen

    (let (fl fll)
      (setf fll (sd-call-cmds
                            (get_selection
                            :focus_type *sd-cylinder-seltype*
                            :allow_face_part
                            :select
                            :in_part (sd-inq-curr-part))))

    ;;Gewinde anlegen
      (dolist (fl fll)
          (sd-define-thread fl
              :nominal-diameter 20.0
              :core-diameter 18.8
              itch 1.25
              :thread-type :OUTER
              :thread-unit :METRIC
              :thread-color (sd-color-to-rgb 16711680)
              :thread-hand :RIGHT-HAND
              :thread-profile :M
              :include-chamfer T
              :thread-direction :CYL-AXIS
              :thread-name :GEW_NAME
          );;sd-define-thread

      );;dolist
    );;let
)


Wenn ich die Funktion aufrufe erfolgt zwar die Extrusion des Zylinders, aber das Gewinde wird nicht erstellt. Stattdessen wird der Fehler "Unzulässiger Aufruf einer Aktionsroutine" Ausgegeben. Füge ich den Code hingegen nach dem Bestimmen der Zylinderfläche in eine eigene lsp.-Datei ein, so wird das Gewinde erstellt. Daher also die Frage wie die Gewindeerstellung korrekt in die Funktion eingebaut wird?

Viele Grüße,
Jan

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

StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 02. Aug. 2021 14:49    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 Jan Niestroj 10 Unities + Antwort hilfreich

Hallo Jan,

die Gewindeerstellung ist schon korrekt in die Funktion eingebaut!
sd-call-cmds darf halt nicht ohne User-Action (Dialog) aufgerufen werden!!

https://support.ptc.com/help/creo/ced_modeling/r20.1.1.0/en/ced_modeling/baggage/documentation/integration_kit/reference/sd-call-cmds.html
>> This macro can only be used in the context of a user action


Aufgerufen mit GewSt_Test in der Eingabezeile liefs bei mir:

Code:
(use-package :OLI)
(use-package :custom)


(sd-defdialog 'GewSt_TEST
  :Dialog-title "GewSt"
  :Dialog-control :sequential
  :toolbox-button T
  :Ok-action '(Gewindestange)
);;sd-defdialog

(defun gewindestange ()

    (create_part :name "Testteil" :model_name "Testteil")
    (uic_new_wp_with_cgeo)
    (CIRCLE :CEN_RAD 0,0 10)
    (extrude :testteil :A03 :Distance 100)
 

    ;;Zylinderflaeche bestimmen

      (let (fl fll)
        (setf fll (sd-call-cmds
                              (get_selection
                              :focus_type *sd-cylinder-seltype*
                              :allow_face_part
                              :select                           
                              :in_part (sd-inq-curr-part)
                              )
                  )
        );;setf
 
      ;;Gewinde anlegen
        (dolist (fl fll)
            (sd-define-thread fl
                :nominal-diameter 20.0
                :core-diameter 18.8
                :Pitch 1.25
                :thread-type :OUTER
                :thread-unit :METRIC
                :thread-color (sd-color-to-rgb 16711680)
                :thread-hand :RIGHT-HAND
                :thread-profile :M
                :include-chamfer T
                :thread-direction :CYL-AXIS
                :thread-name :GEW_NAME
            );;sd-define-thread
 
        );;dolist
      );;let 
);;defun


------------------
...viele Grüße
Stephan

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

Jan Niestroj
Mitglied


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

Beiträge: 4
Registriert: 02.08.2021

Creo Elements/Direct Modeling (x64) 20.1.3.0
mit Power Extensions V20.1
ModelManager 20.1.0.0
mit Power Extensions - Manager V20.1.xx

erstellt am: 03. Aug. 2021 07:20    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

Vielen Dank Stephan,

so funktioniert es.

Viele Grüße,
Jan

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

der_Wolfgang
Ehrenmitglied V.I.P. h.c.
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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 03. Aug. 2021 17:53    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 Jan Niestroj 10 Unities + Antwort hilfreich

Hi Jan,

man kann ja mal davon ausgehen das du nicht immer nur 100mm lange M20 Gewindestangen basteln willst.  ;-) .. Also kommen solche Wert EH aus einem Dialog und dann kannst Du Deine Funktion mit 3 ..4 Parametern rufen.


Wenn Du deine Funktion, wie von Stephan geschrieben aufrufst hast du auch nur EINEN Undo Step.

Wenn der get_selection funktioniert hätte, hättest du schon mal 4 Undo steps alleine um den zylinder zu erzeugen. ;-)


Ich würde dir nicht empfehlen uic_new...  funktionen für programmatische Dinge zu verwenden. Back-to-the-roots : (CREATE_WORKPLANE :new) ;oder so ähnlich

Und beim recordern immer brav links auf die Buttons drücken und dann den Wert dazu eingeben/bestimmen; so wie bei ':distance 100' 


Der Extrude sieht mir komisch aus  :testteil ??  und ein :keep_wp :no wäre vielleicht nützlich.

Code:
    (extrude :auto_direction :yes :keep_wp :no
              :sel_part (sd-inq-curr-part)
              :type :DISTANCE_TYPE
              :Distance 42
              :Direction :+W)

------------------
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

Jan Niestroj
Mitglied


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

Beiträge: 4
Registriert: 02.08.2021

Creo Elements/Direct Modeling (x64) 20.1.3.0
mit Power Extensions V20.1
ModelManager 20.1.0.0
mit Power Extensions - Manager V20.1.xx

erstellt am: 04. Aug. 2021 11: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,

da liegst Du richtig  der Hintergrund meiner Frage ist tatsächlich der, dass die genaue Ausführung meiner Gewindestange nach DIN 976-1 Form B variabel sein soll. Ähnlich wie in https://ww3.cad.de/foren/ubb/Forum92/HTML/000405.shtml#000034 soll auch bei mir das Teil über den Solid Power Normteilkatalog und eine Familientabelle aufgerufen werden. Daher benötige ich die Dialogfunktion für Nutzereingaben eigentlich nicht.

Führe ich den Code über die CAD-Aktion aus, kann mit einem Undo Step das Teil gesamt entfernt werden. So sieht mein Code aktuell aus, wo ich ihn jetzt noch um die Erstellung zweier Fasen auf den Kanten ergänzt habe:

Code:
(use-package :OLI)
(use-package :TS-STRINGS)
(use-package :TS-CATALOG-LADEN)
(use-package :TS-CATALOG-MODUL)

(export '(Gewindestange))


(sd-defdialog 'GewSt_TEST
  :Dialog-title "GewSt"
  :Dialog-control :sequential
  :toolbox-button T
  :Ok-action '(gewindestange)
);;sd-defdialog

(defun gewindestange ()

    (create_part :name "Testteil" :model_name "Testteil")
    (create_workplane :new :name "Gewindestangenebene")
    (CIRCLE :CEN_RAD 0,0 10)
    (sd-call-cmds (extrude :auto_direction :yes :keep_wp :no
              :sel_part (sd-inq-curr-part)
              :type :DISTANCE_TYPE
              :Distance 42
              :Direction :+W))
   

    ;;Zylinderflaeche bestimmen
      (let (fl fll)
        (setf fll (sd-call-cmds
                              (get_selection
                              :focus_type *sd-cylinder-seltype*
                              :allow_face_part
                              :select                         
                              :in_part (sd-inq-curr-part)
                              )
                  )
        );;setf

      ;;Gewinde anlegen
        (dolist (fl fll)
            (sd-define-thread fl
                :nominal-diameter 20.0
                :core-diameter 18.8
                :Pitch 1.25
                :thread-type :OUTER
                :thread-unit :METRIC
                :thread-color (sd-color-to-rgb 16711680)
                :thread-hand :RIGHT-HAND
                :thread-profile :M
                :include-chamfer T
                :thread-direction :CYL-AXIS
                :thread-name :GEW_NAME
            );;sd-define-thread

        );;dolist
      );;let
   

      ;;Kanten fuer Fase bestimmen
      (let (Kante Kant)
        (setf Kant (sd-call-cmds
                              (get_selection
                              :focus_type *sd-edge-3d-seltype*
                              :select                         
                              :in_part (sd-inq-curr-part)
                              )
                  )
        );;setf

      ;;Fase anlegen
        (dolist (Kante Kant)
            (chamfer Kante :DIST_ANGLE :new_angle_dist 3 45 :check)
        );;dolist
      );;let

);;defun


Deine Anregungen zur Arbeitsebene und dem Extrude habe ich ebenfalls eingefügt. Danke sehr! Das funktioniert bei mir soweit.

Jetzt muss ich noch schauen wie ich die Werte meiner Parametertabelle an die Funktion in Form von Variablen übergeben kann.

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

vobu
Mitglied
Techniker


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

Beiträge: 258
Registriert: 26.09.2008

Windows 10
Enterprie 64 Bit
SP 1
HP Z440 Workstation
Intel(R) Xeon(R) CPU
E5-1630 @3.70GHz
3.700GHz,32,00GB Ram<P>
Creo Elements/Direct Modeling SolidPower Release 20.0.4.26

erstellt am: 04. Aug. 2021 15: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 Jan Niestroj 10 Unities + Antwort hilfreich

Hallo Jan,
vielleicht hilft dir das weiter.
http://osd.cad.de/lisp_3d_01.htm
gdm_m1_gewindebolzen
Gruß
Volker

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

der_Wolfgang
Ehrenmitglied V.I.P. h.c.
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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 08. Aug. 2021 11:42    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 Jan Niestroj 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Jan Niestroj:
da liegst Du richtig   der Hintergrund meiner Frage ist tatsächlich der, ...über den Solid Power Normteilkatalog und eine Familientabelle aufgerufen werden...

Dann hätte ich wohl der Funktion von vornherein 2 Parameter spendiert und aus Stephan's Testdialog dann ein
Code:
:Ok-action '(Gewindestange 20 100)
gerufen.


---- undo

Aus meiner Sicht hast du immer noch 4 Undos wenn du den mini test dialog nutzt.

mach aus:

Code:
    (create_part :name "Testteil" :model_name "Testteil")
    (create_workplane :new :name "Gewindestangenebene")
    (CIRCLE :CEN_RAD 0,0 10)
    (sd-call-cmds (extrude :auto_direction :yes :keep_wp :no...))

besser
Code:
(sd-call-cmds
      (create_part :name "Testteil" :model_name "Testteil")
      (create_workplane :new :name "Gewindestangenebene")
      (CIRCLE :CEN_RAD 0,0 10)
      (extrude :auto_direction :yes :keep_wp :no...)
)
Also die komplette Zylindererzeugung in einem sd-call-cmds.  Das mal eher wegen der Lernkurve.

--- chamfer erzeugen ..

Da brauchst du keine Dolist und den Chamfer X mal aufrufen (ok. X ist nur 2  , aber wehret den Anfängen!)

Der Chamfer verkraftet beim Aufruf mehrere Kanten auf einmal!

Aber du könntest das auch alles dem Chamfer überlassen. Dein Zylinder hat nur 2 Kreisrunde Kanten .  also:

Code:
(chamfer :select :in_part (sd-inq-curr-part) :all :DIST_ANGLE :new_angle_dist 3 45 :check)

Also keine Loop und gar kein get_selection.

die genaue syntax musst du selber (via recorder) raussuchen .  Ich schreibe hier nur. 

----

Ich würde es etwas rumdrehen. Erst die Geometrie komplett erzeugen und zum Schluss die Gewindefläche markieren. Ich denke das wäre etwas sicherer.  Das ist aber ein bischen Bauchgefühl von mir, gebe ich zu.

------------------
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 V.I.P. h.c.
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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 08. Aug. 2021 11:59    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 Jan Niestroj 10 Unities + Antwort hilfreich

Die komplette Syntax und Keywords und Möglichkeiten der ganzen eingebauten Funktionen ("Dialoge") erhält man übrigens via:

===>>> der Online Reference

Ist natürlich in englisch und man muss es lesen können.

Auf die durch die o.g. Funktion in %TEMP%  erzeugte HTML Datei kann man dann im normalen Browser ein Bookmark setzen. So ist es schnell(er) wieder zur Hand.

@Matthias ..  habe momentan 2..3 Sachen für unser osd.cad.de in der 'queue' ..  (u.a. obiges)

------------------
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

Jan Niestroj
Mitglied


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

Beiträge: 4
Registriert: 02.08.2021

Creo Elements/Direct Modeling (x64) 20.1.3.0
mit Power Extensions V20.1
ModelManager 20.1.0.0
mit Power Extensions - Manager V20.1.xx

erstellt am: 11. Aug. 2021 09:29    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


Gewindestangen.txt


ladebefehl.JPG

 
Hallo zusammen,

der parametrische Aufruf funktioniert nun wie es soll über den Normteilkatalog. Vielen Dank für die weiteren Tipps und Hinweise. Die habe ich mit in das Programm im Anhang eingepflegt. Den Aspekt mit der Gewindeerzeugung ohne Loop jedoch nicht, da ich keine Möglichkeit mehr habe es zu testen (Praktikum abgeschlossen -> kein Zugang mehr zu Creo).

Wurde das Programm vorher hineingeladen, ruft die CAD-Aktion "gewindestange Name Gewindegroesse Laenge" dann bei entsprechend gestalteter Parametertabelle das Programm auf, wie auch auf dem Bild zu sehen.

Beste Grüße,
Jan

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)2023 CAD.de | Impressum | Datenschutz