Modelica es un lenguaje de modelado multidominio , declarativo y orientado a objetos para el modelado orientado a componentes de sistemas complejos, por ejemplo, sistemas que contienen subcomponentes mecánicos, eléctricos, electrónicos, hidráulicos, térmicos, de control, de energía eléctrica o orientados a procesos. El lenguaje gratuito Modelica [2] es desarrollado por la Asociación Modelica sin fines de lucro. [3] La Asociación Modelica también desarrolla la Biblioteca estándar gratuita Modelica [4] que contiene alrededor de 1400 componentes de modelos genéricos y 1200 funciones en varios dominios, a partir de la versión 4.0.0.
Aunque Modelica se parece a los lenguajes de programación orientados a objetos , como C++ o Java , se diferencia en dos aspectos importantes. En primer lugar, Modelica es un lenguaje de modelado en lugar de un lenguaje de programación convencional . Las clases de Modelica no se compilan en el sentido habitual, sino que se traducen en objetos que luego son utilizados por un motor de simulación. El motor de simulación no está especificado por el lenguaje, aunque se describen ciertas capacidades requeridas.
En segundo lugar, aunque las clases pueden contener componentes algorítmicos similares a las declaraciones o bloques en los lenguajes de programación, su contenido principal es un conjunto de ecuaciones . A diferencia de una declaración de asignación típica, como
x := 2 + y;
donde al lado izquierdo de la declaración se le asigna un valor calculado a partir de la expresión del lado derecho, una ecuación puede tener expresiones tanto en su lado derecho como en su lado izquierdo, por ejemplo,
x + y = 3 * z;
Las ecuaciones no describen una asignación sino una igualdad . En términos de Modelica, las ecuaciones no tienen una causalidad predefinida . El motor de simulación puede (y normalmente debe) manipular las ecuaciones simbólicamente para determinar su orden de ejecución y qué componentes de la ecuación son entradas y cuáles son salidas.
El diseño de Modelica fue iniciado en septiembre de 1996 por Hilding Elmqvist. El objetivo era desarrollar un lenguaje orientado a objetos para el modelado de sistemas técnicos con el fin de reutilizar e intercambiar modelos de sistemas dinámicos en un formato estandarizado. Modelica 1.0 se basa en la tesis doctoral [5] de Hilding Elmqvist y en la experiencia con los lenguajes de modelado Allan, [6] Dymola , NMF [7] ObjectMath, [8] Omola, [9] SIDOPS+, [10] y Smile. [11] Hilding Elmqvist es el arquitecto clave de Modelica, pero muchas otras personas también han contribuido (véase el apéndice E en la especificación de Modelica [2] ). En septiembre de 1997, se publicó la versión 1.0 de la especificación de Modelica, que fue la base para una implementación de prototipo dentro del sistema de software comercial Dymola. En el año 2000 se formó la asociación sin fines de lucro Modelica Association para gestionar el lenguaje Modelica, que evolucionaba continuamente, y el desarrollo de la biblioteca estándar gratuita Modelica. Ese mismo año se empezó a utilizar Modelica en aplicaciones industriales.
Esta tabla presenta la cronología del historial de especificaciones de Modelica: [12]
Los front-end comerciales para Modelica incluyen AMESim de la compañía francesa Imagine SA (ahora parte de Siemens Digital Industries Software ), Dymola de la compañía sueca Dynasim AB (ahora parte de Dassault Systemes ), Wolfram SystemModeler (anteriormente MathModelica ) de la compañía sueca Wolfram MathCore AB (ahora parte de Wolfram Research ), SimulationX de la compañía alemana ESI ITI GmbH , MapleSim de la compañía canadiense Maplesoft , [13] JModelica.org (código abierto, descontinuado) y Modelon Impact, [14] de la compañía sueca Modelon AB, y CATIA Systems [15] [16] de Dassault Systemes ( CATIA es uno de los principales sistemas CAD ).
Openmodelica [17] es un entorno de modelado y simulación basado en Modelica de código abierto destinado a uso industrial y académico. Su desarrollo a largo plazo cuenta con el apoyo de una organización sin fines de lucro: el Open Source Modelica Consortium (OSMC). El objetivo de la iniciativa OpenModelica es crear un entorno integral de modelado, compilación y simulación de Modelica de código abierto basado en software libre distribuido en forma binaria y de código fuente para investigación [19] [20] , enseñanza [21] y uso industrial.
El entorno de simulación libre Scicos utiliza un subconjunto de Modelica para el modelado de componentes. Actualmente se está desarrollando la compatibilidad con una parte mayor del lenguaje Modelica. No obstante, todavía existen algunas incompatibilidades e interpretaciones divergentes entre las distintas herramientas relacionadas con el lenguaje Modelica. [22]
El siguiente fragmento de código muestra un ejemplo muy simple de un sistema de primer orden ( ):
modelo FirstOrder parámetro Real c = 1 "Constante de tiempo" ; Real x ( inicio = 10 ) "Una desconocida" ; ecuación der ( x ) = - c * x "Una ecuación diferencial de primer orden" ; fin FirstOrder ;
El siguiente fragmento de código muestra un ejemplo para calcular la segunda derivada [23] de una función trigonométrica, utilizando OMShell, como medio para desarrollar el programa escrito a continuación.
modelo segunda_derivada Real l ; Real z = sin ( w * tiempo ); Real m ; parámetro Real w = 1 ; ecuación l = der ( z ); m = der ( l ); fin segunda_derivada ;
Algunos aspectos interesantes de este ejemplo son el calificador 'parameter', que indica que una variable dada es invariante en el tiempo, y el operador 'der', que representa (simbólicamente) la derivada temporal de una variable. También vale la pena destacar las cadenas de documentación que se pueden asociar con declaraciones y ecuaciones.
El principal campo de aplicación de Modelica es el modelado de sistemas físicos. Los conceptos de estructuración más básicos se muestran a través de ejemplos sencillos del ámbito eléctrico:
Modelica tiene cuatro tipos integrados: Real, Integer, Boolean y String. Normalmente, se derivan tipos definidos por el usuario para asociar cantidades físicas, unidades, valores nominales y otros atributos:
tipo Voltaje = Real ( cantidad = "PotencialEléctrico" , unidad = "V" ); tipo Corriente = Real ( cantidad = "CorrienteEléctrica" , unidad = "A" ); ...
La interacción de un componente con otros componentes se define mediante puertos físicos, llamados conectores , por ejemplo, un pin eléctrico se define como
conector Pin "Pin eléctrico" Voltaje v "Potencial en el pin" ; flujo Corriente i "Corriente que fluye hacia el componente" ; final Pin ;
Al trazar líneas de conexión entre puertos, el significado es que las variables de conexión correspondientes sin el prefijo "flow" son idénticas (aquí: "v") y que las variables de conexión correspondientes con el prefijo "flow" (aquí: "i") se definen mediante una ecuación de suma cero (la suma de todas las variables de "flow" correspondientes es cero). La motivación es cumplir automáticamente las ecuaciones de equilibrio relevantes en el punto de conexión infinitesimalmente pequeño.
Un componente de modelo básico está definido por un modelo y contiene ecuaciones que describen la relación entre las variables del conector en forma declarativa (es decir, sin especificar el orden de cálculo):
modelo Parámetro del condensador Capacitancia C ; Voltaje u "Caída de voltaje entre pin_p y pin_n" ; Pin pin_p , pin_n ; ecuación 0 = pin_p . i + pin_n . i ; u = pin_p . v - pin_n . v ; C * der ( u ) = pin_p . i ; fin Condensador ;
El objetivo es que un conjunto conectado de componentes del modelo conduzca a un conjunto de ecuaciones diferenciales, algebraicas y discretas donde el número de incógnitas y el número de ecuaciones sean idénticos. En Modelica, esto se logra al requerir los llamados modelos balanceados .
Las reglas completas para definir modelos equilibrados son bastante complejas y se pueden leer en [2] en la sección 4.7.
Sin embargo, para la mayoría de los casos, se puede emitir una regla simple que cuente las variables y ecuaciones de la misma manera que lo hacen la mayoría de las herramientas de simulación:
Un modelo está equilibrado cuando el número de sus ecuacioneses igual al número de sus variables.
dado que las variables y ecuaciones deben contarse de acuerdo con la siguiente regla:
->Número de ecuaciones del modelo = Número de ecuaciones definidas en el modelo + Número de variables de flujo en los conectores externos. ->Número de variables del modelo = Número de variables definidas en el modelo (incluyendo las variables en los conectores físicos)
Tenga en cuenta que los conectores de entrada estándar (como RealInput o IntegerInput) no contribuyen al recuento de variables ya que no se definen nuevas variables dentro de ellos.
La razón de esta regla se puede entender pensando en el condensador definido anteriormente. Sus pines contienen una variable de flujo, es decir, una corriente, cada uno. Cuando lo comprobamos, no está conectado a nada. Esto corresponde a establecer una ecuación pin.i=0 para cada pin. Por eso debemos añadir una ecuación para cada variable de flujo.
Obviamente el ejemplo puede extenderse a otros casos, en los que intervienen otros tipos de variables de flujo (por ejemplo, fuerzas, pares, etc.).
Cuando nuestro capacitor se conecta a otro modelo (balanceado) a través de uno de sus pines, se generará una ecuación de conexión que sustituirá las dos ecuaciones i=0 de los pines que se están conectando. Como la ecuación de conexión corresponde a dos ecuaciones escalares, la operación de conexión dejará el modelo mayor balanceado (constituido por nuestro capacitor y el modelo al que está conectado).
El modelo de condensador anterior está equilibrado , ya que
número de ecuaciones = 3+2=5 (variables de flujo: pin_p.i, pin_n.i, u)número de variables = 5 (u, pin_p.u, pin_p.i, pin_n.u, pi_n.i)
La verificación mediante OpenModelica [17] de este modelo da, de hecho,
La clase Capacitor tiene 5 ecuación(es) y 5 variable(s).3 de estas son ecuaciones triviales.
Otro ejemplo, que contiene conectores de entrada y conectores físicos, es el siguiente componente de la biblioteca estándar de Modelica:
model SignalVoltage "Fuente de voltaje genérica que utiliza la señal de entrada como voltaje de fuente" Interfaces . PositivePin p ; Interfaces . NegativePin n ; Modelica . Blocks . Interfaces . RealInput v ( unit = "V" ) "Voltaje entre el pin p y n (= pv - nv) como señal de entrada" ; SI . Current i "Corriente que fluye del pin p al pin n" ; ecuación v = p . v - n . v ; 0 = p . i + n . i ; i = p . i ; fin SignalVoltage ;
El componente SignalVoltage está equilibrado ya que
número de ecuaciones = 3+2=5 (variables de flujo: pin_p.i, pin_n.i, u)número de variables = 5 (i, pin_p.u, pin_p.i, pin_n.u, pi_n.i)
Nuevamente, al verificar con OpenModelica [17] se obtiene
La clase Modelica.Electrical.Analog.Sources.SignalVoltage tiene 5 ecuación(es) y 5 variable(s).4 de estas son ecuaciones triviales.
Un modelo jerárquico se construye a partir de modelos básicos, instanciando modelos básicos, proporcionando valores adecuados para los parámetros del modelo y conectando conectores de modelos. Un ejemplo típico es el siguiente circuito eléctrico:
modelo Circuito Condensador C1 ( C = 1e-4 ) "Una instancia de Condensador del modelo anterior" ; Condensador C2 ( C = 1e-5 ) "Una instancia de Condensador del modelo anterior" ; ... ecuación conectar ( C1 . pin_p , C2 . pin_n ); ... fin Circuito ;
Mediante el elemento de lenguaje annotation(...), se pueden agregar definiciones a un modelo que no tengan influencia en una simulación. Las anotaciones se utilizan para definir el diseño gráfico, la documentación y la información de la versión. Se estandariza un conjunto básico de anotaciones gráficas para garantizar que la apariencia gráfica y el diseño de los modelos en diferentes herramientas de Modelica sean iguales.
Modelica está diseñado para ser neutral en cuanto al dominio y, como resultado, se utiliza en una amplia variedad de aplicaciones, como sistemas de fluidos (por ejemplo, generación de energía a vapor, hidráulica, etc.), aplicaciones automotrices (especialmente tren motriz) [24] y sistemas mecánicos (por ejemplo, sistemas multicuerpo, mecatrónica, etc.).
En el sector de la automoción, muchos de los principales fabricantes de equipos originales (OEM) de automóviles utilizan Modelica, entre ellos Ford [25] [26] [27] General Motors [28] Toyota [29] BMW [30] y Daimler [31] .
Modelica también se utiliza cada vez más para la simulación de sistemas termofluídicos y energéticos. [32]
Las características de Modelica (acausal, orientado a objetos, neutral en cuanto al dominio) lo hacen muy adecuado para la simulación a nivel de sistema , un dominio en el que Modelica está ahora bien establecido. [33]
{{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite web}}
: CS1 maint: nombres numéricos: lista de autores ( enlace )El lenguaje Modelica está bien establecido para tareas de modelado a nivel de sistema en muchos dominios de la ingeniería, como la automotriz, la robótica, la mecatrónica, la energía y la industria aeroespacial, en particular cuando se requiere modelado de múltiples dominios.
{{cite book}}
: Falta o está vacío |title=
( ayuda )