Software: FEM - Tutorial - Magnetfeld - Kennfeld-Export als C-Code: Unterschied zwischen den Versionen

Aus OptiYummy
Zur Navigation springenZur Suche springen
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(16 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Software:_FEM_-_Tutorial_-_Magnetfeld|&uarr;]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Probabilistik_-_Kennfeld-Identifikation|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Import_in_Systemmodelle|&rarr;]] </div>
[[Software:_FEM_-_Tutorial_-_Magnetfeld|&uarr;]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_C-Kennfeld_Adaptiver_Gauss-Prozess|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_C-Kennfeld-Testmodell|&rarr;]] </div>
<div align="center">''' Kennfeld-Export als C-Code '''</div>
<div align="center">''' Kennfeld-Export als C-Code '''</div>
<div align="center">''''' (Kein Bestandteil der Lehrveranstaltung [http://www.ifte.de/lehre/fem/index.html FEM])'''''</div>


== Modell-Export als C-Code ==


'''''===>>> Hier geht es bald weiter !!!'''''
Unabhängig davon, nach welchem Verfahren die Antwortflächen des Modells approximiert wurden, kann man die identifizierten mathematischen Funktionen als Programm-Code exportieren ('''''Analyse > Antwortflächen > Modell Export'''''):
* Zurzeit kann in OptiY ein Quelltext als ''C-'', ''Modelica-'', ''VisualBasic-Code'' oder als ''m-Matlab'' erzeugt werden.
* C-Code kann man auf praktisch jeder verfügbaren Rechner-Hardware abarbeiten lassen. Damit stellt C-Code zurzeit die universellste Form des Code-Exports für Ersatzmodelle dar.
* Wir speichern unser Ersatzmodell als '''C-Code''' in die Datei '''Magnet_xx.c'''. ('''xx'''=Teilnehmer-Nummer in der Lehrveranstaltung).
* Dieser Quelltext enthält unter Benutzung der gewählten Covariance-Funktion die identifizierten Gauß-Ketten für alle Kriterien/Restriktionen (im Folgenden gekürzt):
       
double Covar_F(double x1[],double x2[],double p[])
{
double Co, W;
W = 0;
for(int i = 0; i<2; i++) {
    W = W + fabs((x1[i]-x2[i])*p[i]);
}
Co = exp(-W);
return Co;
}


double F(double i_, double s_)
{
double p[2];
double x1[2];
double x2[2];
double y = 29.6033584;
p[0] = 0.0953874971;
p[1] = 0.639066599;
x1[0] = i_;
x1[1] = s_;
x2[0] = 5.01;
x2[1] = 2.03;
y = y-3.56544484*Covar_F(x1,x2,p);
x2[0] = 0.01;
x2[1] = 0.03;
y = y-234.552394*Covar_F(x1,x2,p);
x2[0] = 2.01;
x2[1] = 0.03;
y = y+232.803719*Covar_F(x1,x2,p);
    :
    :
x2[0] = 10.01;
x2[1] = 4.03;
y = y-1.36321395*Covar_F(x1,x2,p);
return y;
}


<div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Probabilistik_-_Kennfeld-Identifikation|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Import_in_Systemmodelle|&rarr;]] </div>
double Covar_Psi(double x1[],double x2[],double p[])
{
double Co, W;
W = 0;
for(int i = 0; i<2; i++) {
  W = W + fabs((x1[i]-x2[i])*p[i]);
}
Co = exp(-W);
return Co;
}
 
double Psi(double i_, double s_)
{
double p[2];
double x1[2];
double x2[2];
double y = 0.0426131121;
p[0] = 0.332335577;
p[1] = 0.640793101;
x1[0] = i_;
x1[1] = s_;
x2[0] = 5.01;
x2[1] = 2.03;
y = y+0.0020486711*Covar_Psi(x1,x2,p);
x2[0] = 0.01;
x2[1] = 0.03;
y = y-0.0457279401*Covar_Psi(x1,x2,p);
x2[0] = 2.01;
x2[1] = 0.03;
y = y+0.0346149278*Covar_Psi(x1,x2,p);
    :
    :
x2[0] = 10.01;
x2[1] = 4.03;
y = y+0.0100595855*Covar_Psi(x1,x2,p);
return y;
}
 
== Verwendete Compiler-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 Zawada] (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 Windows-DLL] befinden. Deshalb erzeugen wir aus dem vorliegenden C-Quelltext durch Kompilieren mit dem ''gcc'' eine solche DLL-Datei:
* 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 Kommandozeile die .dll-Datei in eines der Standard-Verzeichnisse von SimulationX lenken.
 
<div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_C-Kennfeld_Adaptiver_Gauss-Prozess|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_C-Kennfeld-Testmodell|&rarr;]] </div>

Aktuelle Version vom 15. Juni 2016, 12:58 Uhr

Kennfeld-Export als C-Code
(Kein Bestandteil der Lehrveranstaltung FEM)

Modell-Export als C-Code

Unabhängig davon, nach welchem Verfahren die Antwortflächen des Modells approximiert wurden, kann man die identifizierten mathematischen Funktionen als Programm-Code exportieren (Analyse > Antwortflächen > Modell Export):

  • Zurzeit kann in OptiY ein Quelltext als C-, Modelica-, VisualBasic-Code oder als m-Matlab erzeugt werden.
  • C-Code kann man auf praktisch jeder verfügbaren Rechner-Hardware abarbeiten lassen. Damit stellt C-Code zurzeit die universellste Form des Code-Exports für Ersatzmodelle dar.
  • Wir speichern unser Ersatzmodell als C-Code in die Datei Magnet_xx.c. (xx=Teilnehmer-Nummer in der Lehrveranstaltung).
  • Dieser Quelltext enthält unter Benutzung der gewählten Covariance-Funktion die identifizierten Gauß-Ketten für alle Kriterien/Restriktionen (im Folgenden gekürzt):
double Covar_F(double x1[],double x2[],double p[])
{
double Co, W;
W = 0;
for(int i = 0; i<2; i++) {
   W = W + fabs((x1[i]-x2[i])*p[i]);
}
Co = exp(-W);
return Co;
}
double F(double i_, double s_)
{
double p[2];
double x1[2];
double x2[2];
double y = 29.6033584;
p[0] = 0.0953874971;
p[1] = 0.639066599;
x1[0] = i_;
x1[1] = s_;
x2[0] = 5.01;
x2[1] = 2.03;
y = y-3.56544484*Covar_F(x1,x2,p);
x2[0] = 0.01;
x2[1] = 0.03;
y = y-234.552394*Covar_F(x1,x2,p);
x2[0] = 2.01;
x2[1] = 0.03;
y = y+232.803719*Covar_F(x1,x2,p);
   :
   :
x2[0] = 10.01;
x2[1] = 4.03;
y = y-1.36321395*Covar_F(x1,x2,p);
return y;
}
double Covar_Psi(double x1[],double x2[],double p[])
{
double Co, W;
W = 0;
for(int i = 0; i<2; i++) {
  W = W + fabs((x1[i]-x2[i])*p[i]);
}
Co = exp(-W);
return Co;
}
double Psi(double i_, double s_)
{
double p[2];
double x1[2];
double x2[2];
double y = 0.0426131121;
p[0] = 0.332335577;
p[1] = 0.640793101;
x1[0] = i_;
x1[1] = s_;
x2[0] = 5.01;
x2[1] = 2.03;
y = y+0.0020486711*Covar_Psi(x1,x2,p);
x2[0] = 0.01;
x2[1] = 0.03;
y = y-0.0457279401*Covar_Psi(x1,x2,p);
x2[0] = 2.01;
x2[1] = 0.03;
y = y+0.0346149278*Covar_Psi(x1,x2,p);
   :
   :
x2[0] = 10.01;
x2[1] = 4.03;
y = y+0.0100595855*Covar_Psi(x1,x2,p);
return y;
}

Verwendete Compiler-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 Zawada (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 Windows-DLL befinden. Deshalb erzeugen wir aus dem vorliegenden C-Quelltext durch Kompilieren mit dem gcc eine solche DLL-Datei:

  • 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 Kommandozeile die .dll-Datei in eines der Standard-Verzeichnisse von SimulationX lenken.