Software: FEM - Tutorial - Magnetfeld - Kennfeld-Nutzung zur System-Simulation

Aus OptiYummy
Zur Navigation springenZur Suche springen

Kennfeld-Nutzung zur System-Simulation


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 Tobias Nähring (Mitarbeiter der Firma 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 GNU-Compiler Collection ist. Eine Portierung dieser Compiler Collection für Windows läuft unter 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 Installation_Cygwin.pdf von Herrn 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 Windwos-DLL befinden. Deshalb erzeugen wir aus dem vorliegenden C-Quelltext durch Compilieren mit dem gcc eine solche DLL-Datei:

  • Der exportierte c-Quelltext der aktuellen OptiY-Version ist noch nicht vollständig kompatibel mit den Anforderungen des gcc und der Schnittstelle zum SimulationX. Das soll sich mit der nächsten OptiY-Version ändern. Bis dahin sind noch folgende Änderungen im Quelltext vorzunehmen:
  • 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!
  • Der Datentyp float muss überall durch double ersetzt werden (Kompatibilitaetsforderung zu SimulationX).
  • Danach hat die Datei Magnet_RSM.c die folgende Form (gekürzt):
double Covariance(double x1[],double x2[],double p[])
{
   double Co, W;
   W = 0;
   for(int i = 0; i<2; i++) {
      W = W + (x1[i]-x2[i])*(x1[i]-x2[i])*p[i]*p[i];
   }
   Co = exp(-W);
   return Co;
}
double F(double i, float s)
{
   double p[2];
   double x1[2];
   double x2[2];
   double y = -46.7372056;
   y = y+10.5264863*pow(i,1);
   y = y+4.62081477*pow(s,1);
   p[0] = 0.161298213;
   p[1] = 0.928373134;
   x1[0] = i;
   x1[1] = s;
   x2[0] = 5.01;
   x2[1] = 2.02;
   y = y-183.986679*Covariance(x1,x2,p);
   x2[0] = 0.01;
   x2[1] = 0.02;
   y = y-8624.5598*Covariance(x1,x2,p);
   x2[0] = 2.01;
   x2[1] = 0.02;
   y = y+27677.7263*Covariance(x1,x2,p);
   :
   :
   x2[0] = 10.01;
   x2[1] = 4.02;
   y = y-1042.30105*Covariance(x1,x2,p);
   return y;
}
double Psi(double i, double s)
{
   double p[2];
   double x1[2];
   double x2[2];
   double y = 0.0189621757;
   y = y+0.00649675907*pow(i,1);
   y = y-0.00349272992*pow(s,1);
   p[0] = 0.590637256;
   p[1] = 0.777378104;
   x1[0] = i;
   x1[1] = s;
   x2[0] = 5.01;
   x2[1] = 2.02;
   y = y-0.000721074847*Covariance(x1,x2,p);
   x2[0] = 0.01;
   x2[1] = 0.02;
   y = y-0.0269366063*Covariance(x1,x2,p);
   x2[0] = 2.01;
   x2[1] = 0.02;
   y = y+0.0298939078*Covariance(x1,x2,p);
   :
   :
   x2[0] = 10.01;
   x2[1] = 4.02;
   y = y-0.00522234634*Covariance(x1,x2,p);
   return y;
}
  • Man startet die Windows-Konsole (Start - Ausführen - cmd) und wählt als aktuelles Verzeichnis das, worin sich die C-Quelltext-Datei (hier Magnet_RSM.c) befindet.
  • Mittels der Kommandozeile (im Beispiel für die Compiler-Version gcc-3):
gcc-3 -mno-cygwin -shared -o Magnet_RSM.dll Magnet_RSM.c
sollte ohne Fehlermeldung die Datei Magnet_RSM.dll im gleichen Verzeichnis erzeugt werden.

Das Verzeichnis, in dem Magnet_RSM.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 Test_Kennfeld.ism speichern.
  • 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:
    Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - neuer elementtyp.gif
    Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - f-symbol 61x61.gif
  • Als Symbol wird ein 61x61-Pixel-Bild verwendet, welches eine modifizierte Kopie des 2D-Kennfeld-Symbols aus der SimX-Bibliothek darstellt:
    Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - f-type allgemein.gif
  • 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:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - anschluesse f-test.gif
  • 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:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - external f-fct.gif

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:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - ext f-fct-argumente.gif
  • 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:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - ext f-fct-aufruf.gif
  • 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):
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - verhalten f-test.gif
  • 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:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - verlaeufe.gif
  • 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:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - rastersuche.gif Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - rasterfunktion.gif


Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - psi-symbol 61x61.gif

Die Einbindung der C-Funktion für das Psi-Kennfeld 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 exportiert (kopiert) den lokalen Typ F_RSM in den Bibliotheksordner ExternalTypes.
  • Dort 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.
  • Auch hier sollte man die Implementierung gründlich verifizieren, bevor man beide Kennfelder in das richtige Antriebsmodell einfügt:
    Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - psi-feld.gif

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, exportiert man Kopien in den Bibliotheksordner ExternalTypes. Damit stehen die externen Funktionen auch für die Implementierung in das eigentliche Antriebsmodell zur Verfügung.

Elektromagneto-mechanischer Wandler

Beide Kennfelder dienen zusammen zur Nachbildung des mittels FE-Modell simulierten konkreten Elektro-Magneten in einem dynamischen Systemmodell des kompletten elektromagnetischen Antriebs.

Zur Demonstration wird dafür im Folgenden das Beispiel des Blindenschrift-Prägers aus dem Tutorial zur System-Simulation verwendet.

  • Wir öffnen das verifizierte SimX-Modells (ab Wintersemester 2010 mit Toleranzen, Wirbelstrom und Magnet-Hysterese) und speichern es unter dem neuen Bezeichner Magnet-RSM.ism:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - basis-netzmodell.gif
  • Der markierte farbige Bereich entspricht dem elektromagneto-mechanischem Wandler (E-Magnet ohne Ankermasse).
  • Nachdem wir für den elektromagneto-mechanischen Wandler einen neuen lokalen Element-Type RSM_Wandler definiert haben, können wir die beiden externen Funktionen mittels Drag&Drop in diesen lokalen Type hinein kopieren (mit gedrückter Strg-Taste):
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - copy ext-fkt.gif
Software SimX - Nadelantrieb - Wirkprinzip - rsm-magnet symbol.gif
  • Als Symbol für den RSM_Wandler kann man nebenstehendes Bild verwenden.
  • Alle Netzwerk-Elemente innerhalb des farbig markierten Wandler-Bereiches können gelöscht werden.
  • An ihre Stelle platzieren wir den RSM_Wandler als Magnet_RSM:
Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - magnet rsm0.gif

Nun bleibt uns nur noch die Aufgabe diesen Element-Typ zum richtigen Verhalten zu führen. Die mechanische Seite des Wandlers realisert man durch die Definition zweier mechanischer translatorischer Anschlüsse (ctr1 und ctr2):

Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - wandler mech.gif
  • Da am mechanischen Anschluss die Potentialgrößen der Bewegung (x, v, a) als Werte eingespeist werden, können wir in einem Algorithmus den Luftspalt s als Differenz der Anschluss-Positionen berechnen.
  • Die aus der externen Funktion berechnete Kraft F=f(s,i) muss als Wert an beide Anschlüsse übergeben werden.
  • Der Wert des Stromes i entstammt der elektrischen Seite des Wandlers.

Die elektrische Seite des Wandlers realisiert man durch die Definition zweier elektrischer Anschlüsse. Diese erhielten standardmäßig die Bezeichnung ctr3 und ctr4 und wurden wegen der Übersichtlichkeit in pin1 und pin2 umbenannt:

Software FEM - Tutorial - Magnetfeld - SimX-Kennfeld - wandler elektr.gif
  • Der Spannungsabfall u zwischen den beiden Anschlüssen ergibt sich aus der Summe von Induktionsspannung u_ind und dem Spannungsabfall uR über dem ohmschen Widerstand R_Spule des Spulendrahtes. Das kann man nur durch eine Gleichung erzwingen.
  • Der Strom i ist ebenfalls algorithmisch innerhalb des Element-Typs nicht berechenbar. Auch dafür benöigen wir eine Gleichung.
  • Deshalb wurde wegen der Übersichtlichkeit der komplette elektrische Teil des Wandlers in einem Gleichungsabschnitt definiert. Der Wert des Luftspalts s entstammt dem mechanischen Teil des Wandlers.


===>>> Hier geht es bald weiter!!!