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

Aus OptiYummy
Zur Navigation springenZur Suche springen
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(10 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Software:_FEM_-_Tutorial_-_Magnetfeld|&uarr;]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|&rarr;]] </div>
[[Software:_FEM_-_Tutorial_-_Magnetfeld|&uarr;]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|&rarr;]] </div>
<div align="center">''' Kennfeld-Export als Modelica-Code '''</div>
<div align="center">''' Kennfeld-Export als Modelica-Code '''</div>
 
<div align="center">''''' (Kein Bestandteil der Lehrveranstaltung [http://www.ifte.de/lehre/fem/index.html FEM] ) '''''</div>
== 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
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'''''):
('''''Analyse - Antwortflächen - Modell Export'''''):
* Wir speichern unser Ersatzmodell als '''Modelica-Code''' in die Datei '''Magnet_xx.mo'''. ('''xx'''=Teilnehmer-Nummer in der Lehrveranstaltung).
* Wir speichern unser Ersatzmodell als '''Modelica-Code''' in die Datei '''Magnet_xx.mo'''. ('''xx'''=Teilnehmer-Nr.).
* Dieser Quelltext enthält unter Benutzung der gewählten Covariance-Funktion die identifizierten Gauss-Ketten für alle Kriterien/Restriktionen (im Folgenden gekürzt):
* 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
  model Magnet_xx
Zeile 14: Zeile 14:
   output SignalBlocks.OutputPin F[*];
   output SignalBlocks.OutputPin F[*];
   output SignalBlocks.OutputPin Psi[*];
   output SignalBlocks.OutputPin Psi[*];
  Real x1[2];
  Real x2[2];
  Real p[4];


   function Covar_F
   function Covar_F
Zeile 46: Zeile 43:
   end Covar_Psi;
   end Covar_Psi;


   algorithm
   function Get_F
  F := 21.9944943;
      input Real #i;
  F := F+27.0736873*#i^1;
      input Real #s;
  F := F-3.34439778*#i^2;
      output Real F;
  F := F-66.7136402*#s^1;
      Real x1[2];
  F := F+28.9861434*#s^2;
      Real x2[2];
  p[1] := 1.46052736;
      Real p[4];
  p[2] := 2.97488334;
      algorithm
  x1[1] := #i;
      F := 36.5588768;
  x1[2] := #s;
      F := F+9.5508415*#i^1;
  x2[1] := 1.51;
      F := F-0.441931596*#i^2;
  x2[2] := 0.53;
      F := F-31.4808944*#s^1;
  F := F-1.21150144*Covar_F(x1,x2,p);
      F := F+4.3459*#s^2;
  x2[1] := 0.01;
      p[1] := 0.449543623;
  x2[2] := 0.03;
      p[2] := 0.859208087;
  F := ...
      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;


   Psi := 0.00826522722;
   function Get_Psi
  Psi := Psi+0.0328575998*#i^1;
      input Real #i;
  Psi := Psi-0.00550887003*#i^2;
      input Real #s;
  Psi := Psi-0.0152615903*#s^1;
      output Real Psi;
  Psi := Psi+0.00398458441*#s^2;
      Real x1[2];
  p[1] := 2.00024016;
      Real x2[2];
  p[2] := 2.61932714;
      Real p[4];
  p[3] := 1.99939022;
      algorithm
  p[4] := 1.99993292;
      Psi := 0.0108811648;
  x1[1] := #i;
      Psi := Psi+0.0136172044*#i^1;
  x1[2] := #s;
      Psi := Psi-0.000727718067*#i^2;
  x2[1] := 1.51;
      Psi := Psi-0.00375705737*#s^1;
  x2[2] := 0.53;
      Psi := Psi+0.000119861715*#s^2;
  Psi := Psi-0.0184546196*Covar_Psi(x1,x2,p);
      p[1] := 0.761312306;
  x2[1] := 0.01;
      p[2] := 0.442871774;
  x2[2] := 0.03;
      p[3] := 1.99989183;
  Psi := ...
      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;


public
   algorithm
   annotation(
       F := Get_F(#i,#s);
       #i(viewinfo[0](
       Psi := Get_Psi(#i,#s);
        dir=1,
        pos(
  public
            x=0,
       annotation(
            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;
  end Magnet_xx;
'''''===>>> Hier geht es bald weiter !!!'''''
<div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|&rarr;]] </div>
<div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|&larr;]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|&rarr;]] </div>

Aktuelle Version vom 16. April 2014, 09:35 Uhr

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;