Hallo allerseits,
ich bearbeite zur Zeit meine Masterarbeit und führe dazu in ANSYS Workbench 19.2 2D Simulationen (rotationssymmetrisch) durch.
Dabei geht es darum, eine Nabe, die auf einen Bolzen mit Absatz geschoben wurde, festzulegen, indem ein Ring in den Zwischnraum zwischen Nabe und Bolzen eingepresst wird.
Das Modell und die ganze Idee funktioniert auch, nun wo ich jedoch versuche den Prozess mehr zu automatisieren (auf Grund eine sehr großen Anzahl von Designpoints für den besagten Zwischenraum), treten neue Probleme auf.
Zu meinem Problem:
In meinem ersten Lastschritt präge ich auf eine Einpressmatrize, die den besagten Ring in die Nut presst eine Verschiebung auf (D-Command). Dabei möchte ich den Ring jedoch nur so weit einpressen, dass eine Reaktionskraft an der Lagerung des Bolzens von 90KN nicht überschritten wird. (Kraftgesteuert kann nicht gerechnet werden, weil das Modell scheinbar nicht robust genug ist und nicht für alle Extreme der möglichen Geometrie konvergiert)
Um dies zu erreichen ist mein Ansatz, zunächst eine Verschiebung aufzuprägen, die der Tiefe der Nut (+ ein Bisschen mehr) entspricht. Dabei werden die 90KN immer überschritten. Um nun die Verschiebung zu ermitteln, die nötig ist, um 90KN zu erreichen wähle ich im /post1 die Nodes der Lagerung aus und addiere die Reaktionskräfte in jedem Substep auf und Vergleiche die Summe jeweils mit 90KN. Dann wähle ich den Substep aus, der 90KN am nähsten liegt und möchte dann von dort aus Weiterrechen (Wie genau ich den Zustand einstelle, weiß ich noch nicht ganz genau (SET/ANTYPE+RESCONTROL).
Hier der Code:
EDIT/ACHTUNG: Der Übersichtlichkeit halber ist eine formatierte Version des Codes aim Anhang in 3 Bilddateien angehängt (eine Formatierung im Editor des Forums ist scheinbar leider nicht möglich und beim Rüberkopieren aus ANSYS werden alle Einrückungen und Leerzeichen entfernt?!
!I) Definition von Bestimmten Nodegruppen (z.B. Alle Nodes, die zusammen die obere Kante der Einpressmatrize ausmachen.)
!Setzen der Auswahltoleranz (Damit bei der Auswahl aller Nodes bei z.B. Y=10 auch nur die entsprechenden Nodes und nicht die in der Reihe daüber oder darunter Ausgewählt werden.)
SELTOL,0.01 !Setzt die Auswahltoleranz auf 0,01mm
!1)
!Definition der oberen Kante der Einpressmatrize (Aufbringung von Verschiebung und Kraft bzw. der Rückfahrbewegung)
CSYS,12 !Wählt das Koordinatensystem, dass auf der oberen linken Ecke der Einpressmatrize liegt aus.
NSEL,S,LOC,Y,0,0 !Auswahl aller Nodes, die in dem aktiven KS bei Y=0 liegen (Repräsentiert die obere Kante d. Einpressmatrize.).
NSEL,R,LOC,X,0,20 !Schränkt die vorherige Auswahl der Nodes auf den X-Koordinatenbereich ein, in dem die Oberkante d. Einpressmatrize liegt, um auch wirklich nur diese auszuwählen.
CM,ETEDGE,NODE !Definiert die Komponente ETEDGE, sodass durch das Aufrufen von TEDGE immer die Nodes selektiert werden, die diese Komponente ausmachen.
CMLIST,ETEDGE,1,NODE !Listet die Nodes auf, die ETEDGE bilden. (Einziger Zweck ist Kontrolle, damit man sieht, was passiert.)
!2)
!Definition der unteren linken Ecke des Rings (Ermittlung des Nutfüllungsgrades durch Y-Verschiebungskomponente)
CSYS,13 !Wählt das Koordinatensystem aus, dass auf der unteren linken Ecke des Rings liegt.
NSEL,S,LOC,Y,0,0 !Auswahl aller Nodes, die in dem aktiven KS bei Y=0 liegen (Repräsentiert die untere Kante d. Rings.).
NSEL,R,LOC,X,0,0 !Schränkt die vorherige Auswahl auf die einzele Node am Eckpunkt ein
CM,RBLCORNER,NODE !Definiert die Komponente RBLCORNER
CMLIST,RBLCORNER,1,NODE !Listet die Nodes auf, die RBLCORNER bilden. (Einziger Zweck ist Kontrolle, damit man sieht, was passiert.)
!3)
!Definition der unteren Kante des Bolzens (Ermittlung der Reaktionskraft, ggf. auch während der Berechnung)
CSYS,0 !Wählt das globale KS aus, das auf der unteren linken Ecke des Bolzens liegt
NSEL,S,LOC,Y,0,0 !Auswahl aller Nodes, die in dem aktiven KS bei Y=0 liegen (Repräsentiert die untere Kante d. Bolzens.).
NSEL,R,LOC,X,0,17.5 !Schränkt die vorherige Auswahl auf die Breite des Bolzens an dieser Position ein
CM,BBEDGE,NODE !Definiert die Komponente BBEDGE
CMLIST,BBEDGE,1,NODE !Listet die Nodes auf, die BBEDGE bilden. (Einziger Zweck ist Kontrolle, damit man sieht, was passiert.)
!4)
!Definition der oberen Kante des Bolzens (Ermittlung der Reaktionskraft)
CSYS,14 !Wählt das KS an der oberen linken Ecke des Bolzens aus.
NSEL,S,LOC,Y,0,0 !Auswahl aller Nodes, die in dem aktiven KS bei Y=0 liegen (Repräsentiert die obere Kante d. Bolzens.).
NSEL,R,LOX,X,0,10 !Schränkt die vorherige Auswahl auf die Breite des Bolzens an dieser Position ein
CM,BTEDGE,NODE !Definiert die Komponente BTEDGE
CMLIST,BTEDGE,1,NODE !Listet die Nodes auf, die BTEDGE bilden. (Einziger Zweck ist Kontrolle, damit man sieht, was passiert.)
!Zurücksetzen des Koordinatensystems
CSYS,0 !Wählt für alle nachfolgenden Handlungen wieder das globale Koordinatensystem aus
!-------------------------------------------------------------
!II) Einlesen von Parametern aus den Designpoints (Macht Parameter aus den Designpoints auch innerhalb der APDL-Snippets zugänglich)
EUYV_=Arg1 !Einlesen der vorläufigen Verschiebung d. Einpressmatrize
!-------------------------------------------------------------
!III) Definition des ersten Lastschrittes, damit dieser seperat über das LSSOLVE-Command ausgeführt werden kann
!NSEL,NONE !Löscht alle aktuellen Auswahlen
CMSEL,S,ETEDGE,NODE !Wählt die Nodes der Komponente ETEDGE aus
D,ETEDGE,UY,EUYV_ !Prägt die im Parameter vorgegebene Verschiebung auf die Nodes, die die obere Kante der Einpressmatrize bilden auf.
T1=EUYV_/(-0.1) !Ermittelt die Zeit, die der Lastschritt benötigt, damit dieser mit einer Verfahrgeschwindigkeit der Einpressmatrize von 0,1mm/s geschieht
TIME,T1 !Legt die Zeit nach dem Lastschritt fest
LSWRITE,1 !Schreibt den gerade definierten Lastschritt in eine Datei, von der aus er später geladen und gelöst werden kann.
DDELE,ETEDGE,UY !Löscht alle UY Constraints für die aktuell ausgewählten Nodes, damit ggf. andere zuerst stattfindende Berechnungen dadurch nicht zunichte gemacht werden.
!-------------------------------------------------------------
!IV) Lösen des ersten Lastschrittes mit der vorläufigen Verschiebung der Einpressmatrize
ALLSEL
LSSOLVE,1,1,1
!FINISH
!-------------------------------------------------------------
!V) Auswerten des vorläufigen ersten Lastschrittes und Bestimmung der finalen Verschiebung des ersten Lastschrittes
/POST1
SET,1
CMSEL,S,BBEDGE,NODE !Wählt Nodes der unteren Kante aus
*GET,BBEDGENODENUMBER_,NODE,0,COUNT !Schreibt Anzahl der ausgwählten Nodes in BEDGENODENUMBER_
*DIM,BBEDGENODES_,ARRAY,BBEDGENODENUMBER_ !Erschafft Array, BEDGENODENUMBER_ Zeilen hat
*VGET,BBEDGENODES_(1),NODE,,NLIST !Füllt das Array mit den Nummern der ausgewählten Nodes
*STATUS,BBEDGENODES_
!*GET,TEST_,NODE
!FYNODE_=0
!*STATUS,FYNODE_
*GET,SUBSTEPNUMBER_,ACTIVE,0,SOLU,NCMSS !Ermittelt die Anzahl der Substeps im aktiven Loadstep
*DIM,REAKTIONSKRAEFTE_,ARRAY,SUBSTEPNUMBER_ !Erzeugt Array mit Größe = Anzahl der Substeps
*DO,j,1,SUBSTEPNUMBER_,1 !Beginn der Schleife über die Substeps (Ermittlung der Reaktionskräfte)
SET,1,j !Legt den Lastschritt und den Substep fest, aus dem die Ergebnisse gelesen werden
FYSUM_=0 !Zurücksetzen der Reaktionskraftsumme
*DO,i,1,BBEDGENODENUMBER_,1 !Beginn der Schleife über die unteren Nodes (Aufaddieren der einzelnen Nodereaktionskräfte zur Gesamtreaktionskraft)
*GET,FYNODE_,Node,BBEDGENODES_(i),RF,FY !Gibt die Kraftreaktion in Y-Richtung der jeweiligen Node aus
FYSUM_=FYSUM_+FYNODE_ !Addiert die Kraftreaktionen der einzelnen Nodes auf
*ENDDO
REAKTIONSKRAEFTE_(j)=FYSUM_ !Schreibt die jeweilige Kraftreaktion in das Array
*ENDDO
*STATUS,REAKTIONSKRAEFTE_
*DO,k,1,SUBSTEPNUMBER_,1 !Beginn der Schleife über die Substeps (Suche des Substeps mit F<90KN)
*IF,REAKTIONSKRAEFTE_(k),LT,90000,THEN !Ist der Eintrag kleiner als 90KN?
ZIELSUBSTEP_=k
*ENDIF
*ENDDO
*STATUS,ZIELSUBSTEP_
*STATUS,REAKTIONSKRAEFTE_,ZIELSUBSTEP_,ZIELSUBSTEP_
Dabei ergibt sich bei mir das Problem, dass wegen eines APDL-Fehlers abgebrochen wird bzw. ich erhalte kein Ergebnis.
*** WARNING *** CP = 8.094 TIME= 15:03:59
Unknown parameter name= FYNODE_. A value of 7.888609052E-31 will be
used.
Dies verwirrt mich sehr, da ich den Parameter FYNODE_ ja in der Do-Schleife definiere.
Durch herumprobieren fand ich heraus, dass wenn ich den Parameter zuvor schon definiere (FYNODE_=0), dass dann der Fehler nicht auftritt, der Wert 0 jedoch auch nie überschrieben wird und ich in allen Einträgen meines Arrays 0 stehen habe.
Weiterhin verblüffend ist, dass in einer anderen Testsimulation, in der ich lediglich einen Zylinder habe (auch 2D), der an der Unterkante gelagert ist und an der Oberkante mit dem selben Code eine Verschiebung aufgeprägt bekommt, ich mit dem selben Code (Coppy+Paste+Anpassung von 2 Variablennamen (die Components der unteren Kante und der Name eines Arrays)) die Tabelle mit den Reaktionskräften erhalte und diese auch mit meinem Algorithmus nach dem Zielsubstep durchsuchen kann O.o
... ich habe jetzt ca. 5 Stunden versucht diesem Problem auf die Spur zu kommen und verstehe nicht, warum das *GET-Command in meinem eigentlichen Anwendungsfall nicht den Wert für mich ermitteln kann.
Da ich momentan echt Ratlos bin und mir kein weiterer Ort einfällt, an dem ich noch nach einer Lösung für mein Problem suchen kann, wäre ich über jede Hilfe sehr erfreut.
Danke schonmal vorweg an alle, die helfen wollen diese Problem zu lösen.
Lg Majan
(Anmerkung: Ich kann heute noch bis kurz vor 5 Antworten lesen, ansonsten erst wieder ab Montag ca. 9 Uhr, da ich ANSYS nur in der Uni nutzen kann und Vorschläge o.Ä. sonst nicht umsetzen kann.)
EDIT/ACHTUNG: Der Code konnte hier im Forum nicht formatiert werden. Daher habe ich den formatierten Code in 3 Bilddateien angehängt!
[Diese Nachricht wurde von Majan91 am 05. Nov. 2018 editiert.]
[Diese Nachricht wurde von Majan91 am 05. Nov. 2018 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP