| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
Autor
|
Thema: Beziehung für Gewindelänge in Normteilen (1063 mal gelesen)
|
Elbstrandsitzer Mitglied Techn. Zeich.
Beiträge: 80 Registriert: 12.05.2006 Pro/Engineer Wildfire 5 / Creo M080 Windchill Windows 7
|
erstellt am: 29. Feb. 2016 11:44 <-- editieren / zitieren --> Unities abgeben:
Ich lege für unsere Normteilbibliothek gerade eine Sechskantschraube mit Gewinde an. Das Gewinde geht nicht bis zum Kopf (außer bei sehr kurzen Schrauben), sondern hat je nach (Schaft-)Länge eine festgelegte Gewindelänge b1, b2 oder b3: b1, b2 und b3 habe ich als Parameter B1_GEWINDELÄNGE, B2_GEWINDELÄNGE und B3_GEWINDELÄNGE angelegt. Dann habe ich versucht die wechselnden Gewindelängen über diese Beziehung zu hinterlegen: if (Länge<B1_GEWINDELÄNGE) Gewindelänge=Länge else if (Länge>0 | Länge<125.1) Gewindelänge=B1_GEWINDELÄNGE if (Länge>125 | Länge<200.1) Gewindelänge=B2_GEWINDELÄNGE if (Länge>200) Gewindelänge=B3_GEWINDELÄNGE endif endif endif endif Aber irgendwie funktioniert sie nicht. Wo liegt der Fehler? Ja nach Länge wechselt die Gewindelänge zwar von b3 auf b2 und umgekehrt. Aber bei Längen unter 125 wechselt es nicht auf b1, sondern bleibt auf b2. Und bei Längen<b1 wechselt es nicht auf Gewindelänge=Länge, sondern bleibt ebenfalls auf b2. Irgendeine Idee???
------------------ ... Elbstrandsitzer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EWcadmin Moderator Konstrukteur (Dipl.-Ing. Maschinenbau), CAD-/PDM-Admin.
Beiträge: 3202 Registriert: 27.10.2005
|
erstellt am: 29. Feb. 2016 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
Zitat: Original erstellt von Elbstrandsitzer:
.... if (Länge>125 | Länge<200.1) ....
So auf die Schnelle: if (Länge>125 & Länge<200.1) Ersetze also das ODER durch ein UND. Besser wäre es wenn Du die Verschachtelung der IF-Anweisungen gänzlich auflösen würdest, denn es ist a. nicht erforderlich b. unübersichtlich
------------------ Grüße aus OWL, Thomas ProE macht Spaß - viel ProE macht viel Spaß ! (Zitat, frei nach meinem ProE-Beibringer) Neu auf CAD.de? Diese Infos werden Dir den Einstieg erleichtern: Willkommen auf CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Elbstrandsitzer Mitglied Techn. Zeich.
Beiträge: 80 Registriert: 12.05.2006 Pro/Engineer Wildfire 5 / Creo M080 Windchill Windows 7
|
erstellt am: 29. Feb. 2016 13:02 <-- editieren / zitieren --> Unities abgeben:
|
EWcadmin Moderator Konstrukteur (Dipl.-Ing. Maschinenbau), CAD-/PDM-Admin.
Beiträge: 3202 Registriert: 27.10.2005
|
erstellt am: 29. Feb. 2016 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
man kann es mit nur einer Verschachtelungsebene erreichen (ungetestet): if (Länge < B1_GEWINDELÄNGE) Gewindelänge = Länge else if (Länge <= 125) Gewindelänge = B1_GEWINDELÄNGE endif if (Länge > 125 & Länge <= 200) Gewindelänge = B2_GEWINDELÄNGE endif if (Länge > 200) Gewindelänge = B3_GEWINDELÄNGE endif endif
------------------ Grüße aus OWL, Thomas ProE macht Spaß - viel ProE macht viel Spaß ! (Zitat, frei nach meinem ProE-Beibringer) Neu auf CAD.de? Diese Infos werden Dir den Einstieg erleichtern: Willkommen auf CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EWcadmin Moderator Konstrukteur (Dipl.-Ing. Maschinenbau), CAD-/PDM-Admin.
Beiträge: 3202 Registriert: 27.10.2005 Creo 4.0 Parametric M150 Windchill 12.0.2.3 HP Z4 G4 mit 32GB RAM NVIDIA Quadro P4000 Windows 10 Enterprise
|
erstellt am: 29. Feb. 2016 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
Und so sähe es ohne Verschachtelung aus: if (Länge <= 125) Gewindelänge = B1_GEWINDELÄNGE endif if (Länge > 125 & Länge <= 200) Gewindelänge = B2_GEWINDELÄNGE endif if (Länge > 200) Gewindelänge = B3_GEWINDELÄNGE endif if (Länge < B1_GEWINDELÄNGE) Gewindelänge = Länge endif Dabei kommt es nur auf die richtige Reihenfolge der Abfragen an. ------------------ Grüße aus OWL, Thomas ProE macht Spaß - viel ProE macht viel Spaß ! (Zitat, frei nach meinem ProE-Beibringer) Neu auf CAD.de? Diese Infos werden Dir den Einstieg erleichtern: Willkommen auf CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Elbstrandsitzer Mitglied Techn. Zeich.
Beiträge: 80 Registriert: 12.05.2006 Pro/Engineer Wildfire 5 / Creo M080 Windchill Windows 7
|
erstellt am: 29. Feb. 2016 13:45 <-- editieren / zitieren --> Unities abgeben:
So viel übersichtlicher als vorher find ich das ehrlich gesagt nicht. Die Variante ganz ohne Verschachtelung funktioniert nicht, weil "if (Länge < B1_GEWINDELÄNGE)" (...) und "if (Länge <= 125)" (...) sich überschneiden. Ich brauche also definitiv eine else-Ebene. (Also dein erster Vorschlag.) Und das "<=200" usw. ist natürlich auch besser als mein "<200.1"! Das werde ich auch übernehmen. Vielen Dank für deine Hilfe!
------------------ ... Elbstrandsitzer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PRO-sbehr Mitglied Dipl.-Ing. Konstruktion
Beiträge: 1132 Registriert: 05.07.2002 Lenovo ThinkStation P500 Intel Xeon CPU E5-1620 v3 Grafik: Nvidia Quadro K2200 Windows 10 Enterprise 64-bit Creo Parametric 4.0 (M030) (NX 11)
|
erstellt am: 29. Feb. 2016 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
Zitat: Original erstellt von Elbstrandsitzer: So viel übersichtlicher als vorher find ich das ehrlich gesagt nicht.Die Variante ganz ohne Verschachtelung funktioniert nicht, weil "if (Länge < B1_GEWINDELÄNGE)" (...) und "if (Länge <= 125)" (...) sich überschneiden. Ich brauche also definitiv eine else-Ebene. (Also dein erster Vorschlag.) Und das "<=200" usw. ist natürlich auch besser als mein "<200.1"! Das werde ich auch übernehmen. Vielen Dank für deine Hilfe!
Die bessere Übersichtlichkeit ist dadurch gegeben, daß man sich nicht durch Schachteln durchhangeln muß, sondern einfach der Reihe nach abarbeitet. Ist aber sicherlich Geschmackssache. if (Länge <= 125) Gewindelänge = B1_GEWINDELÄNGE endif ... if (Länge < B1_GEWINDELÄNGE) Gewindelänge = Länge endif sollte funktionieren. Und zwar nach der Methode "setze die Gewindelänge für alle Länge(n) <= 125 auf B1_GEWINDELÄNGE, und korrigiere anschließend, wenn die Länge < B1_GEWINDELÄNGE ist, die Gewindelänge auf Länge". Da die beiden Befehle jeweils sauber abgeschlossen sind, wird jede IF-Schleife durchlaufen und die Korrektur ausgeführt. Es ist also kein ELSE notwendig. Dies liegt übrigens daran, daß die beiden Befehlsfolgen im Gegensatz zu Deiner Befehlsfolge umgekehrt wurden. Gruß Stefan ------------------ Pro/bleme sind endlich in der Unendlichkeit der Hoffnung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
arni1 Ehrenmitglied V.I.P. h.c.
Beiträge: 3875 Registriert: 17.12.2002 Pro/E seit Version 11 Creo6 HP Z210 Intel Xeon 3.3GHz; 20 GB RAM NVIDIA Quadro 2000 HP ZR30w Win10 64bit
|
erstellt am: 29. Feb. 2016 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
|
Elbstrandsitzer Mitglied Techn. Zeich.
Beiträge: 80 Registriert: 12.05.2006 Pro/Engineer Wildfire 5 / Creo M080 Windchill Windows 7
|
erstellt am: 29. Feb. 2016 14:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan. Ich hab es ohne Verschachtelung versucht UND dabei auch die Reihenfolge genau so geändert, wie Thomas das vorgeschlagen hatte. (Hab seinen Vorschlag komplett kopiert!) Und es hat bei mir nicht funktioniert! Bei Länge<B1_GEWINDELÄNGE blieb trotzdem weiterhin b1 stehen und Gewindelänge=Länge wurde nicht ausgeführt. Mit der else-Ebene hingegegen funktioniert es. Viele Grüße, Anja ------------------ ... Elbstrandsitzer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Elbstrandsitzer Mitglied Techn. Zeich.
Beiträge: 80 Registriert: 12.05.2006 Pro/Engineer Wildfire 5 / Creo M080 Windchill Windows 7
|
erstellt am: 29. Feb. 2016 14:32 <-- editieren / zitieren --> Unities abgeben:
Ähm... Ups. Ich nehm alles zurück und behaupte das Gegenteil. Hab es eben nochmal mit Kopieren der unverschachtelten Beziehung versucht. Und diesmal hat es geklappt. Vielleicht hab ich vorhin vor lauter Ungeduld nicht oft genug auf "Regenerieren" geklickt, damit er neue Beziehung auch tatsächlich annimmt. Aber ich werde es trotzdem mit einer else-Ebene im Teil schreiben, denn das finde ich für Beziehungs-ungeübte Nutzer nachvollziehbarer (die nicht von allein darauf kommen, dass bei sich überschneidenden Bedingungen eine Korrektur entsprechend der Reihenfolge stattfindet). Danke an alle!
------------------ ... Elbstrandsitzer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PRO-sbehr Mitglied Dipl.-Ing. Konstruktion
Beiträge: 1132 Registriert: 05.07.2002 Lenovo ThinkStation P500 Intel Xeon CPU E5-1620 v3 Grafik: Nvidia Quadro K2200 Windows 10 Enterprise 64-bit Creo Parametric 4.0 (M030) (NX 11)
|
erstellt am: 29. Feb. 2016 14:39 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
Zitat: Original erstellt von Elbstrandsitzer: Hallo Stefan.Ich hab es ohne Verschachtelung versucht UND dabei auch die Reihenfolge genau so geändert, wie Thomas das vorgeschlagen hatte. (Hab seinen Vorschlag komplett kopiert!) Und es hat bei mir nicht funktioniert! Bei Länge<B1_GEWINDELÄNGE blieb trotzdem weiterhin b1 stehen und Gewindelänge=Länge wurde nicht ausgeführt. Mit der else-Ebene hingegegen funktioniert es. Viele Grüße, Anja
Mit Paste and Copy 1:1 von Thomas übernommen und es funktioniert. Gruß Stefan ------------------ Pro/bleme sind endlich in der Unendlichkeit der Hoffnung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EWcadmin Moderator Konstrukteur (Dipl.-Ing. Maschinenbau), CAD-/PDM-Admin.
Beiträge: 3202 Registriert: 27.10.2005
|
erstellt am: 29. Feb. 2016 14:39 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
Ok, danke für die Rückmeldung ... Hab schon an meinem Verstand gezweifelt und meine verloren gegangene Logik gesucht. Um das mehrmalige Regenerieren bei einer Änderung zu umgehen, würde ich ganz zu Anfang, also vor allen IF-Anweisungen folgende Zeile als Ausgangswert eintragen: Gewindelänge = 5 Damit ist sicher gestellt, das auf jeden Fall der Wert für Gewindelänge geändert wird (beim ersten Regenerieren). Der Wert 5 ist willkürlich gewählt, aber sollte unterhalb der kleinsten Schraubenlänge liegen. @Arni: Jetzt wird es interessant. Wie soll das mit mehren Graphen aussehen? Habe das noch nie so gemacht...... ------------------ Grüße aus OWL, Thomas ProE macht Spaß - viel ProE macht viel Spaß ! (Zitat, frei nach meinem ProE-Beibringer) Neu auf CAD.de? Diese Infos werden Dir den Einstieg erleichtern: Willkommen auf CAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Elbstrandsitzer Mitglied Techn. Zeich.
Beiträge: 80 Registriert: 12.05.2006 Pro/Engineer Wildfire 5 / Creo M080 Windchill Windows 7
|
erstellt am: 29. Feb. 2016 14:43 <-- editieren / zitieren --> Unities abgeben:
|
PRO-sbehr Mitglied Dipl.-Ing. Konstruktion
Beiträge: 1132 Registriert: 05.07.2002 Lenovo ThinkStation P500 Intel Xeon CPU E5-1620 v3 Grafik: Nvidia Quadro K2200 Windows 10 Enterprise 64-bit Creo Parametric 4.0 (M030) (NX 11)
|
erstellt am: 29. Feb. 2016 14:49 <-- editieren / zitieren --> Unities abgeben: Nur für Elbstrandsitzer
Zitat: Original erstellt von Elbstrandsitzer: Vielleicht hab ich vorhin vor lauter Ungeduld nicht oft genug auf "Regenerieren" geklickt, damit er neue Beziehung auch tatsächlich annimmt.
Wenn Du die Beziehungen direkt im Teil und nicht im KE definiert hast, sollten diese im "Ursprünglich"-Bereich und nicht im "Nach Regenerierung"-Bereich stehen. Dann sollte es auch mit einmal Regenerieren funktionieren. Gruß Stefan ------------------ Pro/bleme sind endlich in der Unendlichkeit der Hoffnung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |