Software: FEM - Tutorial - Magnetfeld - Kennfeld-Export als Modelica-Code

Aus OptiYummy
Zur Navigation springenZur Suche springen

Kennfeld-Export als Modelica-Code

Modell-Export als Modelica-Code

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-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):
model Magnet_xx
  input SignalBlocks.InputPin #i[*];
  input SignalBlocks.InputPin #s[*];
  output SignalBlocks.OutputPin F[*];
  output SignalBlocks.OutputPin Psi[*];
  Real x1[2];
  Real x2[2];
  Real p[4];
  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;
  algorithm
  F := 21.9944943;
  F := F+27.0736873*#i^1;
  F := F-3.34439778*#i^2;
  F := F-66.7136402*#s^1;
  F := F+28.9861434*#s^2;
  p[1] := 1.46052736;
  p[2] := 2.97488334;
  x1[1] := #i;
  x1[2] := #s;
  x2[1] := 1.51;
  x2[2] := 0.53;
  F := F-1.21150144*Covar_F(x1,x2,p);
  x2[1] := 0.01;
  x2[2] := 0.03;
  F := F-32.1176391*Covar_F(x1,x2,p);
  :
  Psi := 0.00826522722;
  Psi := Psi+0.0328575998*#i^1;
  Psi := Psi-0.00550887003*#i^2;
  Psi := Psi-0.0152615903*#s^1;
  Psi := Psi+0.00398458441*#s^2;
  p[1] := 2.00024016;
  p[2] := 2.61932714;
  p[3] := 1.99939022;
  p[4] := 1.99993292;
  x1[1] := #i;
  x1[2] := #s;
  x2[1] := 1.51;
  x2[2] := 0.53;
  Psi := Psi-0.0184546196*Covar_Psi(x1,x2,p);
  x2[1] := 0.01;
  x2[2] := 0.03;
  Psi := Psi-0.186293544*Covar_Psi(x1,x2,p);
  :
public
  annotation(
     #i(viewinfo[0](
        dir=1,
        pos(
           x=0,
           y=20),
        typename="PinInfo")),
     #s(viewinfo[0](
        dir=1,
        pos(
           x=0,
           y=40),
        typename="PinInfo")),
     F(viewinfo[0](
        dir=0,
        pos(
           x=60,
           y=20),
        typename="PinInfo")),
     Psi(viewinfo[0](
        dir=0,
        pos(
           x=60,
           y=40),
        typename="PinInfo")),
     Icon(
        coordinateSystem(extent={{-100,-100},{100,100}}),
        graphics={
           Rectangle(
              lineColor={130,175,255},
              fillColor={255,255,255},
              extent={{-100,100},{100,-100}}),
           Text(
              textString="OptiY",
              textStyle={TextStyle.Italic},
              lineColor={130,175,255},
              extent={{-100,100},{100,-100}})}));
end Magnet_xx;

Dieser Quelltext kann im Prinzip unverändert in ein SimulationX-Modell eingebunden werden, solange alle Variablen den Namenskonventionen von Modelica genügen:

  • Das den Kennfeld-Variablen vorangestellte Zeichen # muss im Beispiel entfernt werden (#i und #s durch i und s ersetzen). Ansonsten kommt es zu einem Syntax-Fehler im Modelica-Interpreter!