Software: FEM - Tutorial - Magnetfeld - Kennfeld-Export als C-Code: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
[[Software:_FEM_-_Tutorial_-_Magnetfeld|↑]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Probabilistik_-_Kennfeld-Identifikation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Import_in_Systemmodelle|→]] </div> | [[Software:_FEM_-_Tutorial_-_Magnetfeld|↑]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Probabilistik_-_Kennfeld-Identifikation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Import_in_Systemmodelle|→]] </div> | ||
<div align="center">''' Kennfeld-Export als C-Code '''</div> | <div align="center">''' Kennfeld-Export als C-Code '''</div> | ||
== Modell-Export als C-Code == | == Modell-Export als C-Code == | ||
Zeile 85: | Zeile 84: | ||
return y; | return y; | ||
} | } | ||
== Verwendete Software == | == Verwendete Software == |
Version vom 17. September 2010, 12:56 Uhr
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):
- Zur Zeit kann in OptiY ein Quelltext als C-Code, Modelica-Code oder als m-Matlab erzeugt werden.
- 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 Gauss-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 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:
- 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.