Autor
|
Thema: Paths erzeugen (1264 / mal gelesen)
|
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 04. Feb. 2021 17:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich schreibe gerade an meinem Python Script und versuche derzeit ein Path über eine bestimmte Länge zu erzeugen. Meine Netzfeinheit habe ich parametrisiert und kann so die Feinheit einstellen. Mein Problem ist, ich weiß nicht genau wie ich es in Python realisieren soll, da ja je nach Netzfeinheit mehr oder weniger Knoten erstellt werden. Ich hatte es zuerst mithilfe eines Sets für die entsprechenden Nodes versucht. Dieses hab ich mit Node_list zu einem Path gemacht jedoch bräuchte ich dafür die Knotenindexe, wo ich nicht weiß woher ich die bekomme. Die entsprechenden Nodes habe ich mithilfe von getbyBounding Box ermittelt. Kann mir da jemand weiterhelfen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 05. Feb. 2021 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
Kannst du dort partitionieren wo du den Pfad haben möchtest? Wenn ja, dann kannst du diese Kante in ein Set legen. Außerdem den Startpunkt des Pfades in ein weiteres Set. Ich habe ein Skript, welches diese beiden Sets verwendet um den Pfad dann automatisch zu generieren. Vom Startpunkt wird immer den nächste Knoten gesucht, so dass die Anzahl der Knoten und deren Nummern egal sind. Wenn das für dich auch passen würde, kann ich das Skript posten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 05. Feb. 2021 11:33 <-- editieren / zitieren --> Unities abgeben:
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 05. Feb. 2021 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
|
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 05. Feb. 2021 14:52 <-- editieren / zitieren --> Unities abgeben:
Danke für das Skript. Ich habe es versucht auszuführen. Jedoch kommt bei mir "AttributeError: 'MeshSequence' object has no attribute 'upper' . Liegt es daran das mein Set_nodes aus Nodes besteht und nicht aus den edges wo die Nodes drauf liegen? Habe dir als Hilfe mal ein Auszug aus meinen Skript im Anhang verpackt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 05. Feb. 2021 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
Nein, es liegt daran, dass mein Skript bei diesen beiden Python-Variablen (set_nodes, set_startnode) die Namen der Sets bekommen. Namen sind vom Typ string und man kann sie mit upper() in Großbuchstaben umwandeln. Du hingegen hast irgendwas anderes mit den Variablen verknüpft und das Ergebnis ist kein string und somit funktioniert upper() nicht. Mein Skript arbeitet rein im Postprocessing und sucht sich in der Ergebnisdatei die zwei Sets über die Namen. Du kannst die Sets also erzeugen wie du magst, du musst nur darauf achten, dass die Namen zusammenpassen oder die Namen intern zwischen den Variablen übergeben werden. [Diese Nachricht wurde von Mustaine am 05. Feb. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 05. Feb. 2021 18:42 <-- editieren / zitieren --> Unities abgeben:
Oke habe das jetzt geändert. Muss man die Sets für die Nodes an der Baugruppe Definieren? Ich habe es an den Einzelteil gemacht und er bringt mir KeyError: bei der Zeile: odb = session.odbs[odbName].
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 06. Feb. 2021 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
Im Anhang ist eine neue Variante meines Skripts, bei dem die Sets auf Part-level angelegt werden können. Damit musst du aber auch in dem Skript eintragen, wie die Instanz heißt die letztendlich verwendet werden soll, da diese Sets jetzt an jeder Instanz des Bauteils existieren. Man könnte natürlich noch eine Schleife einbauen, dass jede Instanz des Parts verwendet wird und somit mehrere Pfade erstellt werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 06. Feb. 2021 14:06 <-- editieren / zitieren --> Unities abgeben:
Ich hab versucht dein Skript bei mir einzubauen, jedoch bringt er mir immer noch die Fehler Meldung siehe Anhang. Für was steht überhaupt diese Zeile? Oder weißt du wo der Fehler liegt? Habe dir den Skript teil mit hochgeladen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 08. Feb. 2021 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
|
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 08. Feb. 2021 15:56 <-- editieren / zitieren --> Unities abgeben:
Oke also bräuchte ich nach dem Rechnen des Jobs noch einen Befehl der das Skript erst weiterlaufen lässt wenn der Job berechnet ist? Oder brauche ich nur einen Befehl der mir die zugehörige ODB-Datei öffnet? Entschuldige die Fragen bin aber noch sehr unerfahren was Python und Abaqus angeht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 08. Feb. 2021 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
Ja, es gibt einen Befehl waitForCompletion() welcher das Skript warten lässt bis die Simulation fertig ist. Also z.B. myJob.waitForCompletion() Danach kannst du dann mit Python die odb öffnen und das Postprocessing durchführen. Das ist dann wie im Preprocessing - verwende die GUI und schaue dann in die .rpy nach den Befehlen. Mein Skript kann dabei dann den Teil übernehmen, wo der Pfad erstellt werden soll. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 08. Feb. 2021 16:47 <-- editieren / zitieren --> Unities abgeben:
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 08. Feb. 2021 16:53 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
Ja, ansonsten gibt es diese Sets nicht in der odb. Nein, weder wenn man in der GUI arbeitet, noch mit Python. Man muss entweder über einen Button oder ein Python-Kommando die odb in A/CAE öffnen. [Diese Nachricht wurde von Mustaine am 08. Feb. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 09. Feb. 2021 21:43 <-- editieren / zitieren --> Unities abgeben:
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 10. Feb. 2021 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
|
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 10. Feb. 2021 17:17 <-- editieren / zitieren --> Unities abgeben:
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 11. Feb. 2021 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
Ich habe dein Skript in A/CAE laufen lassen und konnte danach sehen, dass die beiden Sets im Preprocessing nicht korrekt angelegt wurden. Man sieht rote Ausrufezeichen, wenn man im Baum den Assembly-Container und dann den Set-Container öffnet. Das solltest du prüfen und korrigieren. Edit: Typo
[Diese Nachricht wurde von Mustaine am 11. Feb. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 11. Feb. 2021 21:47 <-- editieren / zitieren --> Unities abgeben:
|
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 26. Feb. 2021 08:56 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich hätte zu diesem Thema noch eine Frage. Ich wollte in einem anderen Skript die Paths wieder genauso erzeugen, wie in der anderen Variante. Jedoch bringt er mir immer einen KeyERROR in der Zeile: coordpoint... Weiß jemand woran dies liegen kann? Habe das Skript im Anhang. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 08. Mrz. 2021 22:31 <-- editieren / zitieren --> Unities abgeben: Nur für Klalanger
Ich kann dein Skript nicht bis dahin laufen lassen, da du Absolutpfade verwendest und das Skript somit nicht auf den meisten anderen Rechnern läuft. Wenn das Problem in Zeile 2122 ist: coord_point = odb.rootAssembly.instances[instancename].nodeSets[set_startnode].nodes[0].coordinates Nutze print und prüfe die Daten. Was sind die Werte der Variablen odb, instancename und set_startnode? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klalanger Mitglied
Beiträge: 15 Registriert: 04.02.2021
|
erstellt am: 10. Mrz. 2021 09:13 <-- editieren / zitieren --> Unities abgeben:
|