Modelique - Modelica

Modelique
Langage Modelica.png
Paradigme Langage déclaratif
Développeur Projet d'association Modelica (MAP)
Première apparition 1997
Version stable
3.5 / 18 février 2021
Système d'exploitation Multiplateforme
Licence CC-BY-SA
Extensions de nom de fichier .mo
Site Internet www.modelica.org
Les principales mises en œuvre
AMESim , CATIA Systems, Dymola , JModelica.org , MapleSim , Wolfram SystemModeler , OpenModelica , Scicos , SimulationX , Xcos

Modelica est un langage de modélisation orienté objet , déclaratif et multi-domaines pour la modélisation orientée composants de systèmes complexes, par exemple des systèmes contenant des sous-composants mécaniques, électriques, électroniques, hydrauliques, thermiques, de contrôle, d'énergie électrique ou orientés processus. Le langage gratuit Modelica est développé par l'association à but non lucratif Modelica. L'association Modelica développe également la bibliothèque standard Modelica gratuite qui contient environ 1400 composants de modèles génériques et 1200 fonctions dans divers domaines, à partir de la version 4.0.0.

Caractéristiques

Bien que Modelica ressemble aux langages de programmation orientés objet , tels que C++ ou Java , il diffère à deux égards importants. Premièrement, Modelica est un langage de modélisation plutôt qu'un langage de programmation conventionnel . Les classes Modelica ne sont pas compilées au sens habituel, mais elles sont traduites en objets qui sont ensuite exercés par un moteur de simulation. Le moteur de simulation n'est pas spécifié par le langage, bien que certaines capacités requises soient décrites.

Deuxièmement, bien que les classes puissent contenir des composants algorithmiques similaires aux instructions ou aux blocs des langages de programmation, leur contenu principal est un ensemble d' équations . Contrairement à une déclaration d'affectation typique, telle que

x := 2 + y;

où le côté gauche de l'instruction reçoit une valeur calculée à partir de l'expression du côté droit, une équation peut avoir des expressions à la fois sur ses côtés droit et gauche, par exemple,

x + y = 3 * z;

Les équations ne décrivent pas l'affectation mais l' égalité . En termes Modelica, les équations n'ont pas de causalité prédéfinie . Le moteur de simulation peut (et doit généralement) manipuler les équations symboliquement pour déterminer leur ordre d'exécution et quels composants de l'équation sont des entrées et lesquels sont des sorties.

Histoire

L'effort de conception de Modelica a été lancé en septembre 1996 par Hilding Elmqvist. L'objectif était de développer un langage orienté objet pour la modélisation de systèmes techniques afin de réutiliser et d'échanger des modèles de systèmes dynamiques dans un format standardisé. Modelica 1.0 est basée sur la thèse thèse de Hilding Elmqvist et sur l'expérience avec les langages de modélisation Allan, Dymola , NMF ObjectMath, Omola, SIDOPS +, et le sourire. Hilding Elmqvist est l'architecte clé de Modelica, mais de nombreuses autres personnes ont également contribué (voir l'annexe E de la spécification Modelica). En septembre 1997, la version 1.0 de la spécification Modelica a été publiée, laquelle a servi de base à une implémentation de prototype au sein du système logiciel commercial Dymola. En 2000, l'association à but non lucratif Modelica a été formée pour gérer le langage Modelica en constante évolution et le développement de la bibliothèque standard Modelica gratuite. La même année, l'utilisation de Modelica dans des applications industrielles a commencé.

Ce tableau présente la chronologie de l'historique des spécifications Modelica :

Sortie Date de sortie Points forts
1,0 1997, septembre Première version pour modéliser des systèmes dynamiques continus.
1.1 1998, décembre Éléments de langage pour modéliser des systèmes discrets (pré, quand)
1.2 1999, juin Interface vers C et Fortran, interne/externe pour les variables globales, sémantique affinée de la gestion des événements
1.3 1999, décembre Sémantique améliorée pour les connexions internes/externes, les éléments protégés, les expressions de tableau.
1.4 2000, décembre Suppression de la règle de déclaration avant utilisation, concept de package affiné, clause when affinée
2.0 2002, juillet Initialisation de modèles, standardisation de l'apparence graphique, fonctions avec arguments positionnels et nommés mixtes, constructeur d'enregistrements, énumérations
2.1 2004, mars Connecteur surdéterminé au modèle 3-dim. systèmes mécaniques, redéclaration améliorée des sous-modèles, tableaux et indices de tableaux d'énumérations
2.2 2005, février Connecteur extensible pour modéliser les bus de signaux, les déclarations de composants conditionnels, les tableaux avec des changements de taille dynamiques dans les fonctions
3.0 2007, septembre Version de nettoyage : spécification nouvellement écrite, système de type et apparence graphique affinés, défauts de langage corrigés, concept de modèle équilibré pour détecter les erreurs de modèle de manière bien meilleure
3.1 2009, mai Connecteur de flux pour gérer le flux bidirectionnel de fluide, la surcharge de l'opérateur, mapper les pièces du modèle aux environnements d'exécution (pour une utilisation dans les systèmes embarqués )
3.2 2010, mars Initialisation améliorée avec la méthode d'homotopie, fonctions comme entrées formelles des fonctions, prise en charge Unicode , contrôle d'accès pour protéger IP , prise en charge améliorée des bibliothèques d'objets
3.3 2012, mai Ajout d'éléments de langage pour décrire les contrôleurs synchrones périodiques et non périodiques basés sur des équations cadencées, ainsi que les machines à états synchrones.
3.4 2017, avril Conversion automatique des modèles. De nombreuses améliorations mineures
3.5 2021, février Annotations pour les tracés prédéfinis. Changement de format de spécification, avec de nombreuses modifications rédactionnelles. Clarifications des éléments de langage synchrones et des machines à états. De nombreuses clarifications mineures sur les fonctions, les conversions de modèles et plusieurs autres parties de la spécification.

Implémentations

Les frontaux commerciaux de Modelica incluent AMESim de la société française Imagine SA (maintenant partie de Siemens PLM Software ), Dymola de la société suédoise Dynasim AB (maintenant partie de Dassault Systèmes ), Wolfram SystemModeler (anciennement MathModelica ) de la société suédoise Wolfram MathCore AB (maintenant partie de Wolfram Research ), SimulationX de la société allemande ESI ITI GmbH , MapleSim de la société canadienne Maplesoft , JModelica.org (open source, discontinué) et Modelon Impact, de la société suédoise Modelon AB, et CATIA Systems de Dassault Systèmes ( CATIA est l'un des principaux systèmes de CAO ).

Openmodelica est un environnement de modélisation et de simulation open source basé sur Modelica destiné à un usage industriel et académique. Son développement à long terme est soutenu par une organisation à but non lucratif – l'Open Source Modelica Consortium (OSMC). L'objectif de l'effort OpenModelica est de créer un environnement complet de modélisation, de compilation et de simulation Open Source Modelica basé sur des logiciels libres distribués sous forme de code binaire et source pour la recherche, l'enseignement et l'utilisation industrielle.

L'environnement de simulation gratuit Scicos utilise un sous-ensemble de Modelica pour la modélisation des composants. La prise en charge d'une plus grande partie du langage Modelica est actuellement en cours de développement. Néanmoins, il existe encore des incompatibilités et des divergences d'interprétation entre tous les différents outils concernant le langage Modelica.

Exemples

Le fragment de code suivant montre un exemple très simple d'un système de premier ordre ( ) :

model FirstOrder
  parameter Real c=1 "Time constant";
  Real x (start=10) "An unknown";
equation
  der(x) = -c*x "A first order differential equation";
end FirstOrder;

Les choses intéressantes à noter à propos de cet exemple sont le qualificateur « paramètre », qui indique qu'une variable donnée est invariante dans le temps et l'opérateur « der », qui représente (symboliquement) la dérivée temporelle d'une variable. Il convient également de noter les chaînes de documentation qui peuvent être associées aux déclarations et aux équations.

Le principal domaine d'application de Modelica est la modélisation de systèmes physiques. Les concepts structurants les plus élémentaires sont illustrés à l'aide d'exemples simples du domaine électrique :

Types intégrés et dérivés de l'utilisateur

Modelica a les quatre types intégrés Real, Integer, Boolean, String. En règle générale, des types définis par l'utilisateur sont dérivés pour associer une quantité physique, une unité, des valeurs nominales et d'autres attributs :

type Voltage = Real(quantity="ElectricalPotential", unit="V");
type Current = Real(quantity="ElectricalCurrent", unit="A");
  ...

Connecteurs décrivant l'interaction physique

L'interaction d'un composant avec d'autres composants est définie par des ports physiques, appelés connecteurs , par exemple, une broche électrique est définie comme

connector Pin "Electrical pin"
   Voltage      v "Potential at the pin";
   flow Current i "Current flowing into the component";
end Pin;

Lors du tracé des lignes de connexion entre les ports, cela signifie que les variables de connecteur correspondantes sans le préfixe "flow" sont identiques (ici : "v") et que les variables de connecteur correspondantes avec le préfixe "flow" (ici : "i") sont définies par une équation à somme nulle (la somme de toutes les variables de "débit" correspondantes est nulle). La motivation est de remplir automatiquement les équations d'équilibre pertinentes au point de connexion infiniment petit.

Composants du modèle de base

Un composant de modèle de base est défini par un modèle et contient des équations qui décrivent la relation entre les variables du connecteur sous une forme déclarative (c'est-à-dire sans spécifier l'ordre de calcul) :

model Capacitor
  parameter Capacitance C;
  Voltage u "Voltage drop between pin_p and pin_n";
  Pin pin_p, pin_n;
equation
  0 = pin_p.i + pin_n.i;
  u = pin_p.v - pin_n.v;
  C * der(u) = pin_p.i;
end Capacitor;

L'objectif est qu'un ensemble connecté de composants de modèle conduise à un ensemble d'équations différentielles, algébriques et discrètes où le nombre d'inconnues et le nombre d'équations sont identiques. Dans Modelica, cela est réalisé en exigeant des modèles dits équilibrés .

Les règles complètes de définition des modèles équilibrés sont assez complexes et peuvent être lues à la section 4.7.

Cependant, dans la plupart des cas, une règle simple peut être émise, qui compte les variables et les équations de la même manière que la plupart des outils de simulation :

A model is balanced when the number of its equations
equals the number of its variables.

étant donné que les variables et les équations doivent être comptées selon la règle suivante :

->Number of model equations                            = 
  Number of equations defined in the model             + 
  number of flow variables in the outside connectors
 
->Number of model variables = Number of variables defined in the model
  (including the variables in the physical connectors) 

Notez que les connecteurs d'entrée standard (tels que RealInput ou IntegerInput) ne contribuent pas au nombre de variables car aucune nouvelle variable n'est définie à l'intérieur.

La raison de cette règle peut être comprise en pensant au condensateur défini ci-dessus. Ses broches contiennent chacune une variable de débit, c'est-à-dire un courant. Lorsque nous le vérifions, il n'est connecté à rien. Cela correspond à définir une équation pin.i=0 pour chaque pin. C'est pourquoi nous devons ajouter une équation pour chaque variable de débit.

Évidemment, l'exemple peut être étendu à d'autres cas, dans lesquels d'autres types de variables d'écoulement sont impliqués (par exemple des forces, des couples, etc.).

Lorsque notre condensateur est connecté à un autre modèle (équilibré) via l'une de ses broches, une équation de connexion sera générée qui remplacera les deux équations i=0 des broches connectées. Puisque l'équation de connexion correspond à deux équations scalaires, l'opération de connexion laissera le modèle plus grand équilibré (constitué par notre condensateur et le modèle auquel il est connecté).

Le modèle de condensateur ci-dessus est équilibré , puisque

number of equations =   3+2=5   (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5   (u, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

La vérification à l'aide d'OpenModelica de ce modèle donne en effet

Class Capacitor has 5 equation(s) and 5 variable(s).
3 of these are trivial equation(s).

Un autre exemple, contenant à la fois des connecteurs d'entrée et des connecteurs physiques, est le composant suivant de la bibliothèque standard de Modelica :

model SignalVoltage 
  "Generic voltage source using the input signal as source voltage"
  Interfaces.PositivePin p;
  Interfaces.NegativePin n;
  Modelica.Blocks.Interfaces.RealInput v(unit="V") 
    "Voltage between pin p and n (= p.v - n.v) as input signal";
  SI.Current i "Current flowing from pin p to pin n";
equation 
  v = p.v - n.v;
  0 = p.i + n.i;
  i = p.i;
end SignalVoltage;

Le composant SignalVoltage est équilibré car

number of equations =   3+2=5  (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5  (i, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

Encore une fois, vérifier avec OpenModelica donne

Class Modelica.Electrical.Analog.Sources.SignalVoltage has 5 equation(s) and 5 variable(s).
4 of these are trivial equation(s).

Modèles hiérarchiques

Un modèle hiérarchique est construit à partir de modèles de base, en instanciant des modèles de base, en fournissant des valeurs appropriées pour les paramètres du modèle et en connectant des connecteurs de modèle. Un exemple typique est le circuit électrique suivant :

model Circuit
   Capacitor C1(C=1e-4) "A Capacitor instance from the model above";
   Capacitor C2(C=1e-5) "A Capacitor instance from the model above";
     ...
equation
   connect(C1.pin_p, C2.pin_n);
   ...
end Circuit;

Via l'élément de langage annotation(...), des définitions peuvent être ajoutées à un modèle qui n'ont pas d'influence sur une simulation. Les annotations sont utilisées pour définir la mise en page graphique, la documentation et les informations de version. Un ensemble de base d'annotations graphiques est standardisé pour garantir que l'apparence graphique et la disposition des modèles dans les différents outils Modelica sont identiques.

Applications

Modelica est conçu pour être neutre dans le domaine et, par conséquent, est utilisé dans une grande variété d'applications, telles que les systèmes de fluides (par exemple, la production d'énergie à vapeur, l'hydraulique, etc.), les applications automobiles (en particulier le groupe motopropulseur) et les systèmes mécaniques ( par exemple, systèmes multicorps, mécatronique, etc.).

Dans le secteur automobile, bon nombre des principaux équipementiers automobiles utilisent Modelica. Il s'agit notamment de Ford, General Motors, Toyota, BMW et Daimler.

Modelica est également de plus en plus utilisé pour la simulation de systèmes thermo-fluides et énergétiques.

Modelica a récemment été envisagé pour la modélisation et la simulation des transitoires électromagnétiques (EMT) de circuits électriques de puissance à grande échelle. MSEMT (Modelica Simulator of Electromagnetic Transients) est la première bibliothèque dans le domaine EMT développée avec Modelica et contient des modèles avancés détaillés EMT tels que machine synchrone avec saturation, lignes de transmission (modèles à large bande et à paramètres constants), modèles de composants non linéaires tels que transformateur, parafoudre, inducteur non linéaire y compris hystérésis, modèles d'arc, modèles de charge, commandes de machine (excitateurs, régulateurs, stabilisateurs de système d'alimentation). La librairie a été validée avec le logiciel de référence EMTP .

Les caractéristiques de Modelica (acausal, orienté objet, domaine neutre) le rendent bien adapté à la simulation au niveau système , un domaine où Modelica est désormais bien implanté.

Voir également

Remarques

Liens externes