|
|
Zeile 1: |
Zeile 1: |
| [[Software:_FEM_-_Tutorial_-_Magnetfeld|↑]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Probabilistik_-_Kennfeld-Identifikation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld|→]] </div> | | [[Software:_FEM_-_Tutorial_-_Magnetfeld|↑]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Import_in_Systemmodelle|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld|→]] </div> |
| <div align="center">''' Kennfeld-Nutzung zur System-Simulation '''</div> | | <div align="center">''' Kennfeld-Nutzung zur System-Simulation '''</div> |
|
| |
|
| |
| == Verwendete Software ==
| |
|
| |
| Es soll am Beispiel des Programms '''SimulationX''' gezeigt werden, wie der exportierte C-Code mit geringem Aufwand zur System-Simulation eines Magnet-Antriebs genutzt werden kann. Dank gebührt Herrn [http://www.tn-home.de/Tobias/home.html Tobias Nähring] (Mitarbeiter der Firma [http://www.iti.de ITI GmbH]) für seine wertvollen Tipps zum Einbinden externer Funktionen in SimulationX-Modelle.
| |
|
| |
| Wir verwenden den freien ''Gnu-C-Compiler'' '''gcc''', der Bestandteil der [http://de.wikipedia.org/wiki/GNU_Compiler_Collection GNU-Compiler Collection] ist. Eine Portierung dieser Compiler Collection für Windows läuft unter [http://de.wikipedia.org/wiki/Cygwin Cygwin]. Von '''http://www.cygwin.com/''' kann man eine aktuelle '''setup.exe''' für die Cygwin-Installation kostenlos herunterladen.
| |
|
| |
| Ausführliche Hinweise zur Installation enthält die [http://www.hs-owl.de/fb5/person/hoffmann/Installation_Cygwin.pdf '''Installation_Cygwin.pdf'''] von Herrn [http://www.hs-owl.de/fb5/person/hoffmann/ Sönke Hoffmann] (Hochschule Ostwestfalen-Lippe). Von den darin angegebenen Komponenten der Development-Umgebung genügt für unsere Zwecke:
| |
| * ''gcc-core'', der C-Compiler,
| |
| * ''make'', ein Hilfsprogramm (dass man sicher benötigt)
| |
| '''''Hinweis:''''' Im Beispiel konnte bei der Benutzung der Download-Seite der TU-Dresden die Installation nicht vollendet werden, weil etwas fehlte. Ein Wechsel auf die Ruhr-Uni-Bochum führte zum Erfolg!
| |
|
| |
| Die Windows-Systemvariable PATH wird, wie in der Anleitung beschrieben, durch den Verweis auf den ''cygwin\bin''-Ordner erweitert. Damit ist gewährleistet, dass man den C-Compiler im Konsolen-Fenster von Windows direkt aufrufen kann.
| |
|
| |
| '''''Hinweis:''''' Man muss in diesem Verzeichnis nachschauen, welche Version des Compilers installiert ist. In der Beispiel-Installation war es '''gcc-3.exe''', deshalb ist dann der Compiler in der Konsole mit '''gcc-3''' aufzurufen!
| |
|
| |
| == Erzeugen einer Windows-DLL ==
| |
|
| |
| SimulationX bietet die Möglichkeit, externe Funktionen einzubinden, welche sich in einer [http://de.wikipedia.org/wiki/Dynamic_Link_Library Windwos-DLL] befinden. Deshalb erzeugen wir aus dem vorliegenden C-Quelltext durch Compilieren mit dem ''gcc'' eine solche DLL-Datei:
| |
| * Das den Kennfeld-Variablen vorangestellte Zeichen '''#''' muss entfernt werden (im Beispiel '''#i''' und '''#s''' durch '''i''' und '''s''' ersetzen). Ansonsten kommt es zu einem Syntax-Fehler im gcc-Compiler!
| |
| * Des Weiteren muss die lokale Definition der loop-Variablen i in den Covar-Funktionen durch eine vorangestellte Defintion ersetzt werden:
| |
| for(int i = 0; i<2; i++) {
| |
| : ersetzen durch
| |
| int i;
| |
| for (i = 0; i<2; i++) {
| |
| * Man startet die Windows-Konsole ('''''Start - Ausführen - cmd''''') und wählt als aktuelles Verzeichnis das, worin sich die C-Quelltext-Datei (hier ''Magnet_xx.c'') befindet.
| |
| * Mittels der Kommandozeile (im Beispiel für die Compiler-Version ''gcc-3''):
| |
| gcc-3 -mno-cygwin -shared -o Magnet_xx.dll Magnet_xx.c
| |
| : sollte ohne Fehlermeldung die Datei '''Magnet_xx.dll''' im gleichen Verzeichnis erzeugt werden.
| |
| Das Verzeichnis, in dem Magnet_xx.dll abgelegt wird, muss in die Liste der Verzeichnisse fuer die externen Funktionen von SimulationX eingetragen werden:
| |
| * Diese Liste findet man in SimulationX unter '''''Extras > Optionen > Verzeichnisse > Externe Funktionen'''''.
| |
| * Entweder man kopiert die .dll-Datei in eines der Standard-Verzeichnisse oder man ergänzt die Liste dieser Verzeichnisse um den aktuell genutzten Ordner.
| |
| * Im Prinzip könnte man in der obigen Kommadozeile die .dll-Datei in eines der Standard-Verzeichnisse von SimulationX lenken.
| |
|
| |
| == Kennfeld-Testmodell ==
| |
| Bevor man die Kennfelder in ein kompliziertes Antriebsmodell einbindet, sollte man unbedingt ein Testmodell aufbauen, um das richtige Funktionieren zu überprüfen:
| |
| * Wir beginnen im SimulationX mit einer neuen Datei, welche wir als '''Kennfeld_xx.ism''' speichern (Teilnehmer-Nr. '''xx=00...99''').
| |
| * Es werden zwei lokale Element-Typen im Modell definiert, welche jeweils eine der Kennfeld-Funktionen bereitstellen. Der Test erfolgt dann durch eine Rastersuche in einem OptiY-Experiment.
| |
| * Wir beginnen im SimX-Modell mit dem Elementtyp '''F_RSM''' für das Kraft-Kennfeld. Im '''''Modellexplorer > Karte Typen > Wurzeleintrag > Kontextmenü''''' wählen wir '''''Neu > Model''''':<div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_neuer_elementtyp.gif| ]] </div>[[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_f-symbol_61x61.gif|right]]
| |
| * Als Symbol wird ein 61x61-Pixel-Bild verwendet (nebenstehende Bild-Datei laden), welches eine modifizierte Kopie des 2D-Kennfeld-Symbols aus der SimX-Bibliothek darstellt ('''''Symbol > Bitmap öffnen'''''):<div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_f-type_allgemein.gif| ]] </div>
| |
| * Zum Testen speisen wir die Funktionsvariablen Strom '''i''' und Luftspalt '''s''' als Parameter in das Element ein und führen den Funktionswert der Kraft '''F''' als Variable nach außen:
| |
| <div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_anschluesse_f-test.gif| ]] </div>
| |
| * '''''Achtung:''''' Für diese Komponenten sollte man die gleiche Einheit für die physikalischen Größen wählen, wie sie im FE-Modell verwendet wurden. Das bedeutet, die Luftspalt-Werte sind in '''mm''' einzuspeisen! Das ist zur Zeit noch erforderlich, wenn man mittels Rastersuche im OptiY die Kennfelder in den gleichen Grenzwerten darstellen möchte, wie die aus der FEM-Simulation gewonnene Antwortfläche. In OptiY erfolgen noch keine Umrechnungen zwischen unterschiedlichen Einheitsdimensionen.
| |
| * Das F-Kennfeld wird im Element-Typ unter ''Lokale Typen'' als externe Funktion definiert:
| |
| <div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_external_f-fct.gif| ]] </div>
| |
| Durch '''Bearbeiten''' der Funktionseigenschaften definiert man die Schnittstelle zwischen dem SimX-Modell und der externen Function innerhalb der .dll-Datei:
| |
| * Für die allgemeinen Einträge genügen die Standard-Vorgaben.
| |
| * Als Argumente der Funktion definieren wir zwei Eingabe- und einen Ausgabeparameter:
| |
| <div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_ext_f-fct-argumente.gif| ]] </div>
| |
| * Dabei berücksichtigen wir ebenfalls die Maßeinheiten der Funktionsargumente (z.B. Luftspalt in mm).
| |
| * Die '''Atrribute''' der Argumente belassen wir auf den Standard-Einträgen.
| |
| * Unter den Aufrufkonventionen ist die Liste der Argumente bereits eingetragen. Wir definieren noch den Namen der benutzten .dll-Datei und den Typ der Schnittstelle:
| |
| <div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_ext_f-fct-aufruf.gif| ]] </div>
| |
| * Beim '''Fertigstellen''' der Funktionsdefinition erfolgt eine Warnung, dass keine grafische Darstellung definiert wurde. Diese Warnung können wir ignorieren.
| |
| * Für das Verhalten des Element-Typs definieren wir abschließend den Funktionsaufruf unter Berücksichtigung der physikalischen Einheiten (Luftspalt in mm):
| |
| <div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_verhalten_f-test.gif| ]] </div>
| |
| * '''''Achtung:''''' Die Umrechnung 'm->mm' ist unbedingt erforderlich, da die Kennfeld-Funktion auf der Einheit '''mm''' basiert. Innerhalb der SimulationX-Modelle wird aber grundsätzlich mit SI-Einheiten gerechnet, auch wenn man für einzelne Komponenten wegen der Anschaulichkeit abweichende Dimensionen definiert.
| |
| * Der lokale Element-Typ '''F_RSM''' wird als Element '''F_Kennfeld''' innerhalb des SimX-Modells verwendet.
| |
| * Für einen ersten Test wurde der Stromeingang i mit der Simulationszeit t belegt, die von 0 bis 10 s läuft.
| |
| * Sowohl für den Luftspalt s=0 mm, als auch für s=4 mm ergeben sich korrekte Funktionsverläufe. Man erkennt hier deutlich die Knicke im Funktionsverlauf an den ursprünglichen Abtastpunkten des Original-FE-Modells:
| |
| <div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_verlaeufe.gif| ]] </div>
| |
| * Die Rastersuche nach Einbindung des Modells in ein OptiY-Experiment zeigt die komplette Funktionsfläche. Dabei wurden die gleichen Bereichsgrenzen verwendet, wie zuvor bei der Ermittlung der Antwortfläche anhand des FE-Modells:
| |
| <div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_rasterfunktion.gif| ]] [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_rastersuche.gif| ]] </div>
| |
|
| |
|
| |
| [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_psi-symbol_61x61.gif|right]]
| |
| Die Einbindung der C-Funktion für das Psi-Kennfeld in das SimulationX-Modell verläuft analog, wie bei dem F-Kennfeld. Es handelt sich praktisch um den gleichen Element-Typ, nur dass die Kraft '''F''' durch den Koppelfluss '''Psi''' ersetzt wird:
| |
| * Man kopiert den lokalen Typ ''F_RSM'' in den Bibliotheksordner ''ExternalTypes'' (mit <Strg>-Taste beim Drag&Drop).
| |
| * Unter ''ExternalTypes'' benennt man ''F_RSM'' in '''''Psi_RSM''''' um. Dazu muss man zusätzlich den external Type im Type-Designer öffnen und unter "Allgemein" auch den Namen ändern.
| |
| * Danach kopiert man den external Type ''Psi_RSM'' zu den lokalen Typen des Modells und ersetzt systematisch die Kraft durch den Koppelfluss.
| |
| * Es kann das nebenstehende Symbol für ''Psi_RSM'' verwendet werden.
| |
| * Beide Kennfeld-Elemente sollen durch die gleichen Werte für Strom und Luftspalt gespeist werden. Damit dies innerhalb des OptiY realisiert werden kann, benutzen wir dafür im SimulationX-Modell zwei '''''Function'''''-Signalglieder:<div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfelder_-_parameter1.gif| ]] </div>
| |
| * In die Parameter '''F''' dieser Funktionsglieder müssen dann im OptiY-Workflow die Werte von Strom und Luftspalt eingespeist werden.
| |
| * Im SimulationX-Modell belegen wir die Parameter der Kennfeld-Elemente mit den Ergebnisgrößen der Funktionselemente:
| |
| '''s = 0.001*s.y'''
| |
| '''i = i.y'''
| |
| * Der Umrechnungsfaktor für den Luftspalt ist erforderlich, damit der Parameterwert s.F in Millimeter eingegeben werden kann.
| |
| * Im OptiY-Workflow ergänzen wir die Größen für den Koppelfluss und verbinden '''i''' und '''s''' mit den Funktionsglieder des SimulationX-Modells:<div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfelder_-_rastersuche.gif| ]] </div>
| |
| * Im Ergebis der Rastersuche erhält man im OptiY damit das Psi-Kennfeld in Form eines 3D-Diagramms:<div align="center"> [[Bild:Software_FEM_-_Tutorial_-_Magnetfeld_-_SimX-Kennfeld_-_psi-feld.gif| ]] </div>
| |
| '''''Achtung:'''''
| |
| * Die Arbeitskopie von ''Psi_RSM'' in der ''ExternalTypes''-Bibliothek sollte man löschen, um eine spätere fehlerhafte Anwendung zu vermeiden!
| |
| * Sind beide lokalen Element-Typen verifiziert, erzeugt man Kopien im Bibliotheksordner ''ExternalTypes''. Damit stehen die verifizierten externen Funktionen auch für die Implementierung in das eigentliche Antriebsmodell zur Verfügung.
| |
|
| |
|
| == Elektromagneto-mechanischer Wandler == | | == Elektromagneto-mechanischer Wandler == |
Zeile 122: |
Zeile 39: |
|
| |
|
|
| |
|
| <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Probabilistik_-_Kennfeld-Identifikation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld|→]] </div> | | <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Import_in_Systemmodelle|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld|→]] </div> |