Der RSG Dialog Builder stellt ein einfaches Mittel zur Erzeugung von Plugins in Abaqus/CAE dar. Diese Werkzeug wird standardmäßig mit jeder Version ausgeliefert. Hierbei besteht der RSG Builder aus zwei Teilen, das GUI und das ausführende Script im Kernel von Abaqus/CAE. Solche Plugins können zur Automatisierung des Arbeitsprozesses verwendet werden. Bereits in Abaqus/CAE: QuickStart Plugin mit RSG Dialog Builder haben wir den RSG Builder verwendet. In diesem Beitrag wollen wir den RSG Builder zur Erstellung von Standardbauteilen, hier Schrauben, verwenden. Wir stellen hierbei die Erstellung des GUI und eines Skriptes zur Ausführung ausführlich dar.
Schrauben werden verwendet, um Bauteile über Kontakt und Vorspannung miteinander zu verbinden.
Gerade bei großen Assemblies, in der viele Komponenten durch unterschiedliche Schraubenverbindungen miteinander verbunden sind, bietet ein solches PlugIn einen wertvollen Beitrag zur effizienten Modellierung unterschiedlicher Schraubengrößen.
Auch wenn dieses Beispiel auf den ersten Blick aufwendig erscheint: Die Erstellung von Standardbauteilen ist auch für Benutzer ohne oder mit geringer Erfahrung im Skripting durchführbar. Auch die im Abschnitt 4 dargestellten Verbesserungen des Skriptes sind mit wenig Python Kenntnissen durchführbar.
Der RSG Dialog Builder befindet sich im Menüpunkt Abaqus Plugins, siehe folgendes Bild. RSG steht für “Really Simple GUI”.
Der RSG Dialog Builder teilt sich in 2 Fenster auf:
Die hier verwendete Vorgehensweise zur Erstellung des Python Scriptes über den Macro Manager kann auch für andere Projekte verwendet werden.
Schritt 1: Starten des Makrorecorders
Schritt 2: Erzeugung der Schraubengeometrie sowie Partitionieren der Schraube und Definition von Material und Section
Schritt 3: Definition des Elementtyps und Vernetzung der Schraube mit einer globalen Elementgröße
Schritt 4: Schließen des Makrorecorders
Der Makrorecorder erzeugt zwei Dateien mit den Namen ABAQUS1.rec und AbaqusMacros.py. Der Inhalt wird akkumuliert, daher wird empfohlen, eine bereits bestehende Datei dieses Namens zu löschen. So enthält die Datei ausschließlich den für das Skript erforderlichen Python Code.
Bevor die Geometrie erzeugt wird, empfiehlt es sich, eine Skizze der Schraube und ihrer Parameter anzufertigen, siehe Bild unten. Diese Skizze kann nachfolgend im PlugIn weiterverwendet werden. Ebenso sollte vorab eine Liste aller verwendeten Parameter erstellt werden. Im vorliegenden Beispiel sind es:
DK = Kopfdurchmesser
KH = Kopfhöhe
LS = Schaftlänge
LG = Gewindelänge
DS = Schaftdurchmesser
Pname = Name des Parts
Matname = Name des Materials
Secname = Name der Section
Module = E-Modul
Dens = Dichte des Materials
NUE= Querkontraktionszahl
msize = Elementgröße (% von DS)
Richtwerte: DK~1.5*DS ; KH~DS
Schritt 1 : Starten des Makrorecorders
Wie im Bild unten gezeigt, startet man über den Reiter Files den Macro Manager. Dort wird ein neues Macro generiert. Es empfiehlt sich, ein neues Makro zuerst nur im Arbeitsverzeichnis (Work) zu speichern.
Schritt 2 : Erzeugung der Schraubengeometrie und Partitionieren der Schraube
Beim Erzeugen der Geometrie und der Datumsebenen ist es sinnvoll und hilfreich, eindeutige Werte zu verwenden, z.B. 7.777 für den Parameter KH (Kopfhöhe der Schraube). So lässt sich der Wert schnell in der Makro-Datei wiederfinden und wird dann durch den entsprechenden Parameter ersetzt (s. weiter unten im Text). Das Part wird Bolt_Skript genannt. Dieser Name ist frei wählbar. Anschließend werden ein Material und eine Section definiert. Die Section wird dem Bauteil zugewiesen.
Rechts im Bild das partitionierte Bauteil mit zugewiesener Section, den 5 Datumsebenen und der Achse „Bolt_Axis“, die zwar nicht zwingend erforderlich, aber für weiterführende Skripte hilfreich ist. Rot markiert sind weitere Partitionierungen, die später näher erklärt werden.
Schritt 3 : Definition des Elementtyps (hier C3D8) und Vernetzung der Schraube mit einer globalen Elementgröße.
Die Elementgröße ist mit 3.333 gewählt. Somit kann dieser Wert im Skript leicht identifiziert und durch einen Parameter ersetzt werden.
Schritt 4 : Schließen des Makrorecorders.
Nun kann die Datei abaqusMacros.py mit dem Editor geöffnet werden. Hier wird der Editor Notepad++ ([5]) zum Editieren und Bearbeiten verwendet.
Das Macro wird als Funktion (‚def‘) in einem Python Script gespeichert. Die Funktion enthält noch keine Parameter und muss nun gefüllt werden. Die Import Definitionen werden übernommen, auch wenn nicht alle Module benötigt werden. Der Name der Funktion darf verändert werden.
Jetzt wird die Funktion um die benötigten Parameter erweitert, indem die Parameter als Übergabewerte in die Klammer hinter dem Funktionsnamen eingetragen werden. Hier erweist sich die zuvor erstellte Liste als hilfreich. Die Reihenfolge ist beliebig, die Liste muss aber vollständig sein.
DK = Kopfdurchmesser
KH = Kopfhöhe
LS = Schaftlänge
LG = Gewindelänge
DS = Schaftdurchmesser
Pname = Name des Parts
Matname = Name des Materials
Secname = Name der Section
Module = E-Modul
Dens = Dichte des Materials
NUE= Querkontraktionszahl
msize = Elementgröße (% von DS)
Es werden die Platzhalter VN und MN erzeugt. Nachfolgend werden im Skript alle Einträge von ‘Viewport: 1‘ durch VN sowie alle Einträge von ‚Model-1‘ durch MN ersetzt. Es wird vorausgesetzt, dass das Part in Viewport 1 erstellt und das Modell nicht umbenannt wurde. Andernfalls müssen die Bezeichnungen entsprechend angepasst werden.
Nun werden in der Skript-Datei sämtliche bei der Erzeugung des Parts verwendeten Maße und Namen durch ihre Parameter ersetzt. Hier zeigt sich, dass es zuvor sinnvoll war, die Maße mit wiedererkennbaren Werten zu versehen.
Alle 5 Maße werden durch die entsprechenden Parameter (KH,DK,LS,LG,DS) ersetzt. Das gleiche gilt für die Datumsebenen, die mit einem Offset von der xy-Ebene erzeugt wurden (s.Bild).
Abschließend werden die verbleibenden im Skript verwendeten Parameter vergeben, hier wird das Part Bolt_Skript durch den Parameter Pname ersetzt ( Die Hochkommata von Bolt_Skript dürfen nicht übernommen werden ). Sind alle Parameter im Skript vergeben, wird es mit der Endung .py (Hier: Bolt_without_Nut.py) abgespeichert und kann nun im RSG-Builder verwendet werden. Es empfiehlt sich, bis hierhin einen leistungsfähigen Editor zu verwenden, da der Editor im Kernel-Modul nur beschränkte Funktionen bietet.
Nun wird der RSG Dialog Builder geöffnet und zuerst ein Titel vergeben
Im vorliegenden Beispiel ist es sinnvoll, die zuvor erstellte Skizze einzubinden
Jetzt werden für die 12 Parameter 12 Textfelder erzeugt
Text: Hier den Text eingeben, der den Parameter näher beschreibt
Type : Es wird unterschieden zwischen String (Zeichenkette),
Float (Zahlenwert) und Integer (Ganzzahliger Wert)
Keyword : Name des Parameters für den Kernel
Default : Voreingestellter Wert
Das fertige GUI rechts im Bild unten.
Laden des Skripts: Über den Reiter ‚Kernel‘ und dem Symbol für ‚Datei öffnen‘ wird das Skript in den Kernel von Abaqus/CAE geladen. Das Script kann in diesem Dialog auch weiter bearbeitet werden.
Über das Symbol ‚Datei speichern‘ wird das Script nun unter einem zu vergebenen Namen gespeichert, vorzugsweise im Arbeitsverzeichnis. Soll das Script bei jedem Aufruf geladen werden, so empfiehlt es sich, das PlugIn danach vom Arbeitsverzeichnis in das Plugin-Verzeichnis der Installation zu verschieben.
Bei Windows- Versionen ist dieses z.B. : C:\Simulia\CAE\plugins\2023
Alternativ kann auch ein zentrales Plugin Verzeichnis verwendet werden. Dieses wird über plugin_central_dir im Environment File definiert, siehe [4].
Das PlugIn sollte nur in einem Verzeichnis gespeichert werden, da Abaqus/CAE zahlreiche Speicherorte nach PlugIns durchsucht und für den Fall, dass ein PlugIn mehfach gefunden wird, beim Starten von CAE eine Warnung ausgegeben wird. Das Speichern als RSG PlugIn stellt sicher, dass es nachfolgend wieder editiert und modifiziert werden kann.
In diesem Beispiel enthält das Verzeichnis ‚Bolt_without_Nut‘ für das Plugin folgende Dateien: bolt_without_Nut_plugin.py, bolt_without_NutDB.py, bolt_without_nut.py und Simple_Bolt.png. Wir kopieren einfach das gesamte Verzeichnis nach C:\Simulia\CAE\plugins\2023.
Starten wir nun Abaqus/CAE so kann man das Plugin aufrufen (links im Bild unten). Man beachte, daß im Plugin die Namen für das neue Part, ein Material und eine Section vereinbart werden, im Bild unten Mitte. Für jede Schraube sollte ein eigener Part-Name verwendet werden. Unterscheiden sich die Materialien verschiedener Schrauben, so sollten neue Namen für das Material und die Section definiert werden. Andernfalls werden vorherige Definitionen ohne Warnung überschrieben.
Die Schraube ist nun fertig erstellt sowie vernetzt, rechts im Bild unten, und kann nun in die Assembly importiert werden.
Die erstellte Schraube nach Aufruf des PlugIns. In Rot dargestellt sind: Datum Achse Bolt_Axis , Fläche BL_Surf für die Schraubenkraft und Fläche „Pname_+_Tie“ für die Verbindung des Gewindeteils mit dem entsprechenden Bauteil.
Nach erfolgreicher Erstellung des PlugIns stehen dem Benutzer wertvolle Werkzeuge zur Verfügung:
- Schnelle Erzeugung beliebig vieler unterschiedlicher Schrauben
- Leichte Aufbringung der Schraubenvorspannung über vordefinierte Fläche ohne interaktiver Selektierung der Instanz
- Leichte Auswahl der Flächen für die Verbindung mit den Komponenten der Assembly
Gerade bei sehr großen Baugruppen ist ein solches PlugIn unverzichtbar.
Auch wenn dieser Beitrag aufwendig erscheint, das Erstellen eines PlugIns mit dem RSG- Builder ist mit ein wenig Übung ein mächtiges und einfaches Mittel, um den Aufwand für wiederkehrende Vorgänge effizient zu reduzieren.
Es ist nicht sichergestellt, dass das PlugIn Versions übergreifend immer funktioniert. Das liegt darin begründet, dass die hier in rot dargestellten Partitionen mit interaktiv angewählten Linien erzeugt wurden. Diese Linien erscheinen im Skript als eine Sequenz von nummerierten Linien, deren Nummerierung nicht zwingend von Version zu Version identisch ist. Genauso verhält es sich mit den inneren Flächen für die Schraubenvorspannkraft sowie die Flächen des Gewindeteils.
In diesem Kapitel wird ein allgemeineres Vorgehen im Skripting vorgestellt, welches das Auftreten solcher möglichen Probleme verhindern soll.
Partition des Schraubenkopfes
Flächen für Schraubenkraft
Beim obigen Vorgehen mit dem Macro Recorder werden die Linien (edges) direkt ausgewählt und das Script verwendet die IDs dieser Edges, im Bild unten dargestellt.
Wir ersetzen diese Definition durch eine Suche nach den 4 Kreisbögen , die für die Partition benötigt werden. Dabei kommt uns zugute, daß wir innerhalb des Parts die Schraube selbst aufbauen und somit die Werte für die Suche zur Verfügung stehen. Der im Bild unten dargestellte Script-Block ersetzt den Code aus dem Makrorecorder.
Durch die Verwendung des Macro Recorders werden IDs für die Flächen verwendet, siehe Bild unten. Diese IDs könnten sich verändern.
Wir verwenden nun ein Script zur Suche der 4 Viertelkreise, die für die Schraubenkraft benötigt werden. Der folgende Block ersetzt den Code aus dem Makrorecorder.
Gleiches gilt für die Flächen für die Verbindung zum Bauteil über einen TIE-Constraint. Wir wollen die vom Macro Recorder erstellte getSequenceFromMask, siehe Bild unten, durch eine allgemeinere Formulierung ersetzen.
Um die Flächen unabhängig von deren Nummerierung zu definieren bedarf es einiger weiterer Schritte, die, wie zuvor, dem Skript im Kernel hinzugefügt werden müssen, und den oben gezeigten Code aus dem Makrorecorder ersetzen. Zuerst werden mit folgendem Befehl alle Flächen der vorderen Partition selektiert.
ACHTUNG: Aufgrund eines Bugs in V2024 muss der Suchbereich des Zylinders um ein geringes Maß erhöht werden (0.00001)
Zusätzlicher Schritt #1
Auswahl der Flächen an den beiden Stirnseiten, Zusätzliche Schritte #2 und #3
Auswahl der inneren vertikalen und horizontalen Flachen, Zusätzliche Schritte #4 und #5
Die erzeugten Flächen finden sich nun im Baum des Parts wieder.
Zusätzlicher Schritt #6: Erzeugen der Fläche Bolt_Tie durch Bool‘sche Operation: Abziehen der Flächen endsurf, intsurf, xsurf und ysurf von Fläche CYL_Surf
(Rechter Mausklick auf die gewählten Surfaces).
Im Skript wird Bolt_Tie zu „Pname+Tie“.
Benötigt man viele Instanzen einer oder verschiedener Schrauben, so lässt sich die Anbindung an die Bauteile oft zusammen fassen.
In diesem Beispiel hat die Schraube den Namen „M24x60“. Die Flächen für die Verbindung von der Gewindefläche der Schraube zum Bauteil, mit standardisiertem Namen „Pname+_Tie“, lassen sich nun leicht zu einer einzigen Fläche zusammenfassen, ohne dass die Instanzen ausgewählt werden müssen. In „Create Display Group“ über den Filter diese Flächen auswählen (*-Filter ist hilfreich) und einzelne Surface speichern, z.B. „M24x60_Tie_Secondary“.
Ebenso leicht lässt sich nun die Schraubenlast aufbringen, ohne dass die Instanz selektiert werden muss.
Hierfür muss nur die Fläche „‘Pname‘+BL_Surf“ angewählt werden und die Kraft oder Verschiebung (je nach Methode) aufgebracht werden. Durch Aktivieren von „ Pre-tension section at part level“ wird die Kraft auf ALLE Schrauben aufgebracht.
.
Gerne stellen wir Ihnen das Plugin zur Verfügung. Wir haben auch eine Variante mit Mutter. Leider können wir noch keinen Download Link zur Verfügung stellen. Verwenden Sie bitte die unten angegebene Kontaktmöglichkeit. Ein Anfrage verpflichtet Sie zu nichts, wie wir auch keine Verantwortung für den Einsatz des Plugins übernehmen können.
Bolt_without_Nut (Schraube ohne Mutter, wie oben beschrieben) (Downloadlink/Berechtigung erforderlich)
Bolt_with_Nut Schraube mit Mutter
(Downloadlink/ /Berechtigung erforderlich)