4 votes

Modelica définit plusieurs paramètres avec un enregistrement

Pour remplacer plusieurs paramètres d'une machine à courant continu à aimant permanent par le contenu d'un enregistrement DcPermanentMagnetData, j'utilise cette construction :

Modelica.Electrical.Machines.Utilities.ParameterRecords.DcPermanentMagnetData dcpmData(
    IaNominal = 1, 
    VaNominal = 2, 
    wNominal = 3);

Modelica.Electrical.Machines.BasicMachines.DCMachines.DC_PermanentMagnet dcpm(
    IaNominal = dcpmData.IaNominal,
    VaNominal = dcpmData.VaNominal,
    wNominal = dcpmData.wNominal);

Est-il possible de définir plusieurs valeurs de paramètres d'un modèle avec une seule commande ?

MWE :

model MWE

  record Rec
    parameter Real x_init;
    parameter Real y_init;
  end Rec;

  model HelloWorld
    parameter Real x_init;
    parameter Real y_init;
    Real x;
    Real y;
    initial equation
      x = x_init;
      y = y_init;
    equation
      der(x)=-x;
      der(y)=-y;
  end HelloWorld;

  Rec r (x_init = 1, y_init = 2);
  HelloWorld hi (x_init = r.x_init, y_init = r.y_init);  // this works
  //HelloWorld hi ( allValuesFrom(r) );  // <--- something like this

end MWE;

2voto

marco Points 1579

Vous pouvez passer l'enregistrement entier au modèle. Pour cela, vous devez remplacer vos paramètres par une instance de l'enregistrement :

model MWE
      record Rec
        parameter Real x_init;
        parameter Real y_init;
      end Rec;

      model HelloWorld
        input Rec r;
        Real x;
        Real y;
      initial equation 
          x = r.x_init;
          y = r.y_init;
      equation 
          der(x)=-x;
          der(y)=-y;
      end HelloWorld;

      Rec r( x_init = 1, y_init = 2);
      HelloWorld hi(r=r);
end MWE;

0 votes

Cela fonctionne, mais la bibliothèque système Modelica est en lecture seule. Le fait d'envelopper le modèle de moteur pour accepter un enregistrement en tant qu'entrée est certes utile en cas d'utilisation répétée, mais ne fait que repousser le problème dans un autre modèle qui doit être défini pour chaque nouveau modèle de système (par exemple, différents types de moteurs).

2 votes

Dans ce cas, je pense que la réponse est que vous ne pouvez pas. Ce dont vous avez besoin, c'est d'un concept comme les kwargs et l'unpacking des dictionnaires en Python, qui n'existe pas dans Modelica. Mais je serais heureux si quelqu'un savait mieux et fournissait une solution à ce problème.

1 votes

J'écrirais "parameter Rec r ;" au lieu de "input Rec r ;" L'avantage est que r apparaît alors dans le dialogue des paramètres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X