| |
 | Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE) |
Autor
|
Thema: Report Datei mit Python erstellen (2769 mal gelesen)
|
Harr Mitglied student

 Beiträge: 36 Registriert: 11.08.2011
|
erstellt am: 18. Nov. 2011 14:30 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich habe ein großes Problem, und zwar folgendes: Über ein Python Script hat die Erstellung meines Probekörpers wunderbar funktioniert. Man kann über diverse Variablen die einzelnen Längen und Höhen definieren. Anschliessend wird der Probekörper mit zugehörigen Submodel erstellt, automatisch vermesht und submetiert. Jetzt weiss ich allerdings nicht, wie ich mit Python automatisch eine Report-Datei erstelle. Es muss vom letzten Increment der Steps, bis zu 40 Stück (U1, U2... U40) welche auch Variabel sind, die Reaction Forces (Magnitude) aufsummiert werden. Select by Time/Length. (Ich denke, es ist am einfachsten die RF über Sets zu bestimmen da die Knoten nicht immer die Selben sind) Mein Set heisst "Nodes_Auflager" Das Model heisst "Global" Ich habe diese Woche mehrere Tage damit verbracht mir nützliche Informationen im Netz zu besorgen jedoch ohne Erfolg. Beim Abaqus-Scripting-Reference-Manual und Scripting-Users-Manual blicke ich nicht wirklich durch.
Ich Hoffe hier kann mir Jemand Helfen damit ich dieses Kapitel beenden kann. Viele Grüße und Danke im Vorraus 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: 18. Nov. 2011 21:20 <-- editieren / zitieren --> Unities abgeben:          Nur für Harr
Du kannst ja mal nur das Set einblenden (dürfte nicht viel zu sehen sein, da nur Knoten) und dann mal den Report anfordern. In der .rpy findest du dann ja den dazu passenden Python-Befehl. Das letzte Frame kannst du dir so ermitteln: Code:
# dargestellte ODB ermitteln vps = session.viewports.values()[0] odbName = vps.displayedObject.name odb = session.odbs[odbName]# aktuellen Step ermitteln current_step_number = vps.odbDisplay.fieldFrame[0] current_step_name = odb.steps.keys()[current_step_number] # letzten Frame in diesem Step ermitteln last_frame = odb.steps[current_step_name].frames[-1] last_frame_ID = odb.steps[current_step_name].frames[last_frame.frameId]
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: 18. Nov. 2011 21:43 <-- editieren / zitieren --> Unities abgeben:          Nur für Harr
|
Harr Mitglied student

 Beiträge: 36 Registriert: 11.08.2011
|
erstellt am: 19. Nov. 2011 17:40 <-- editieren / zitieren --> Unities abgeben:         
Hi Mustaine, Vielen Dank für Deine Antwort und den Code, ich bin auch nochmal durch andere Posts von Dir gerutscht und habe mir da volgenden Code rausgesucht um die Werte direkt auszulesen: Code: odb = openOdb('Global.odb') numFrame=odb.steps['U1'].frames[-1] RForce=numFrame.fieldOutputs['RF'] regS1 = odb.rootAssembly.instances['GLOBAL-1'].nodeSets['NODES_AUFLAGER'] FX = RForce.getSubset(region=regS1).values[0].data[0]
also dort bekomme ich dann die Korrekten Werte für die ersten beiden Nodes und verschiedene Steps raus, jedoch weichen weitere Werte für folgende Nodes ab... keine Ahnung warum da ich auch noch sehr unbeholfen auf dem Gebiet bin... Meine Güte ist das alles kompliziert Oo Könntest du oder jmd anders mir evt noch einen Anhaltspunkt geben, mit welchen Befehlen ich an die Werte komme?!
[Diese Nachricht wurde von Harr am 19. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Harr Mitglied student

 Beiträge: 36 Registriert: 11.08.2011
|
erstellt am: 21. Nov. 2011 11:15 <-- editieren / zitieren --> Unities abgeben:         
Aaaalso bis gestern hat noch alles funktioniert, Ich konnte eine Liste erstellen mit allen Nodes aus einem bestimmten Set und habe jetzt auch endlich die korrekten Befehle um die RF-Magnitude der Knoten aus dem Set zu bekommen. fogenden Code habe ich mir erstellt Code: 0 from odbAccess import * 1 Stepzahl = 9 2 values = [ ] 3 nodes = [ ] 4 5 odb = openOdb('D:/Abaqus/Temp/Global.odb') 6 7 ###Liste der Nodes aus dem Set erstellen 8 lastFrame = odb.steps['U1'].frames[-1] 9 reaction = lastFrame.fieldOutputs['RF'] 10 center = odb.rootAssembly.instances['GLOBAL-1'].nodeSets['NODES_AUFLAGER'] 11 centerReaction = reaction.getSubset(region=center) 12 for v in centerReaction.values: 13 nodes.append(v.nodeLabel) 14 15 ### Liste der RF-Magnitude für alle Steps 16 for l in xrange(1,Stepzahl+2): 17 v = 'U%s' % (l) 18 lastFrame = odb.steps[v].frames[-1] 19 for d in centerReaction.values: 20 values.append(d.magnitude) 21 22 #### 23 p = len(nodes) #anzahl an Werten Pro Step 24 ###Summe der Reaction-Forces 25 total = 0 26 for x in xrange(0,p): 27 total += value[x]
nur Stürzt Abaqus jetzt nach Eingabe von Zeile 15 bis 20 ohne Warnmeldung direkt ab... Gestern hats wunderbar funktioniert. Wäre für jeden Ratschlag dankbar!!
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: 21. Nov. 2011 11:27 <-- editieren / zitieren --> Unities abgeben:          Nur für Harr
|
Harr Mitglied student

 Beiträge: 36 Registriert: 11.08.2011
|
erstellt am: 21. Nov. 2011 11:50 <-- editieren / zitieren --> Unities abgeben:         
Vielen vielen Dank für die schnelle Antwort Mustaine, Ich schaue es mir direkt an!!! Funktioniert natürlich Wunderbar!! Danke nochmal [Diese Nachricht wurde von Harr am 21. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Harr Mitglied student

 Beiträge: 36 Registriert: 11.08.2011
|
erstellt am: 21. Nov. 2011 22:17 <-- editieren / zitieren --> Unities abgeben:         
Ich bin gerade dabei mein Script noch so zu erweitern, dass es für mehrer Steps ausgeführt wird... Klappt auch soweit, jedoch hänge ich jetzt an der Auswertung der Mises  Folgender Code gibt mir ein Error bei der 2. Ausführung der Schleife wenn ich den Code wiederholt mit einem anderen NodeLabel im KernelCommand eingebe... Für mich unverständlich, da ich nur einer Variablen: "knoten" einen anderen Wert zuweise.
Code: medians = 0.0 midmis = 0.0 p=0 odb = session.odbs['D:/Abaqus/Temp/Global.odb'] knoten = odb.rootAssembly.instances['GLOBAL-1'].NodeSetFromNodeLabels(name='GLOBAL-1.NODES_SYMM', nodeLabels=(53,)) a = odb.steps['U1'].frames[-1].fieldOutputs['S'].getSubset(position=ELEMENT_NODAL,region=knoten) for x in a.values: p = p + 1 medians = medians + x.mises midmis = medians / p print x.misesprint midmis
OdbError: Duplicate set or surface name GLOBAL-1.NODES_SYMM Es sollen alle Knoten aus dem Set "GLOBAL-1.NODES_SYMM" ausgegeben werden, was in diesem Code noch nicht ausgeführt wird, da dort genau der Haken liegt  Nachtrag: Ok. der Befehl scheint ein neues Set zu erstellen... Meine Frage wäre jetzt: Was spricht dagegen für jeden Knoten quasi ein Variablen NodeSetNamen zu vergeben Es sind um die 1000 Knoten Test wird morgen gestartet
[Diese Nachricht wurde von Harr am 22. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |