Software: FEM - Tutorial - Magnetfeld - Kennfeld-Export als Modelica-Code
Kennfeld-Export als Modelica-Code
(Kein Bestandteil der Lehrveranstaltung FEM )
Nachdem gezeigt wurde, wie man Antwortflächen als C-Code exportieren und in ein SimulationX-Modell einbinden kann, soll der gleiche Prozess nun beispielhaft mit Modelica-Code durchgeführt werden (Analyse - Antwortflächen - Modell Export):
- Wir speichern unser Ersatzmodell als Modelica-Code in die Datei Magnet_xx.mo. (xx=Teilnehmer-Nr.).
- Dieser Quelltext kann im Prinzip unverändert in ein SimulationX-Modell eingebunden werden, solange alle Variablen den Namenskonventionen von Modelica genügen. Im Beispiel muss das den Kennfeld-Variablen vorangestellte Zeichen # entfernt werden (#i und #s durch i und s ersetzen). Ansonsten kommt es zu einem Syntax-Fehler im Modelica-Interpreter!
- Der Quelltext enthält unter Benutzung der gewählten Covariance-Funktion die identifizierten Gauss-Ketten für alle Kriterien/Restriktionen (im Folgenden gekürzt):
model Magnet_xx input SignalBlocks.InputPin #i[*]; input SignalBlocks.InputPin #s[*]; output SignalBlocks.OutputPin F[*]; output SignalBlocks.OutputPin Psi[*];
function Covar_F
input Real x1[2];
input Real x2[2];
input Real p[4];
output Real Co;
Real W,v;
algorithm
W := 0;
for i in 1:2 loop
W := W + abs((x1[i]-x2[i])*p[i]);
end for;
Co := exp(-W);
end Covar_F;
function Covar_Psi
input Real x1[2];
input Real x2[2];
input Real p[4];
output Real Co;
Real W,v;
algorithm
W := 0;
for i in 1:2 loop
W := W + (abs((x1[i]-x2[i])*p[i]))^p[i+2];
end for;
Co := exp(-W);
end Covar_Psi;
function Get_F
input Real #i;
input Real #s;
output Real F;
Real x1[2];
Real x2[2];
Real p[4];
algorithm
F := 36.5588768;
F := F+9.5508415*#i^1;
F := F-0.441931596*#i^2;
F := F-31.4808944*#s^1;
F := F+4.3459*#s^2;
p[1] := 0.449543623;
p[2] := 0.859208087;
x1[1] := #i;
x1[2] := #s;
x2[1] := 5.01;
x2[2] := 2.03;
F := F-1.49775068*Covar_F(x1,x2,p);
:
x2[1] := 3.59319074;
x2[2] := 3.04127299;
F := F-0.408926484*Covar_F(x1,x2,p);
end Get_F;
function Get_Psi
input Real #i;
input Real #s;
output Real Psi;
Real x1[2];
Real x2[2];
Real p[4];
algorithm
Psi := 0.0108811648;
Psi := Psi+0.0136172044*#i^1;
Psi := Psi-0.000727718067*#i^2;
Psi := Psi-0.00375705737*#s^1;
Psi := Psi+0.000119861715*#s^2;
p[1] := 0.761312306;
p[2] := 0.442871774;
p[3] := 1.99989183;
p[4] := 1.99877146;
x1[1] := #i;
x1[2] := #s;
x2[1] := 5.01;
x2[2] := 2.03;
Psi := Psi-0.0830217167*Covar_Psi(x1,x2,p);
:
x2[1] := 3.59319074;
x2[2] := 3.04127299;
Psi := Psi+0.224830021*Covar_Psi(x1,x2,p);
end Get_Psi;
algorithm
F := Get_F(#i,#s);
Psi := Get_Psi(#i,#s);
public
annotation(
:
end Magnet_xx;