Modelica
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 sistemas mecánicos, eléctricos, electrónicos, hidráulicos, térmicos, de control, eléctricos. subcomponentes orientados a la potencia o a los procesos. El lenguaje Modelica libre es desarrollado por la Asociación Modelica sin fines de lucro. La Asociación Modelica también desarrolla la biblioteca estándar Modelica gratuita que contiene alrededor de 1400 componentes de modelo genéricos y 1200 funciones en varios dominios, a partir de la versión 4.0.0.
Características
Si bien Modelica se parece a los lenguajes de programación orientados a objetos, como C++ o Java, se diferencia en dos aspectos importantes. Primero, 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 ejercitados por un motor de simulación. El motor de simulación no está especificado en el lenguaje, aunque se describen ciertas capacidades requeridas.
Segundo, aunque las clases pueden contener componentes algorítmicos similares a las declaraciones o bloques en lenguajes de programación, su contenido primario es un conjunto de ecuaciones. En contraste con una declaración de asignación típica, como
x := 2 + y;
donde se asigna el lado izquierdo de la declaración un valor calculado a partir de la expresión en la mano derecha, una ecuación puede tener expresiones tanto en la derecha como en la izquierda, por ejemplo,
x + y = 3 * z;
Las ecuaciones no describen asignación sino 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.
Historia
El esfuerzo de diseño de Modelica fue iniciado en septiembre de 1996 por Hilding Elmqvist. El objetivo era desarrollar un lenguaje orientado a objetos para modelar. de sistemas técnicos para reutilizar e intercambiar modelos de sistemas dinámicos en un formato estandarizado. Modelica 1.0 se basa en el Tesis doctoral de Hilding Elmqvist y sobre la experiencia con los lenguajes de modelado Allan, Dymola, NMF objetosmatemáticas, Omola, SIDOPS+ y Sonrisa. Hilding Elmqvist es el arquitecto clave de Modelica, pero muchas otras personas también han contribuido (consulte el apéndice E en la especificación de Modelica). En septiembre de 1997, se lanzó la versión 1.0 de la especificación Modelica, que fue la base para una implementación prototipo dentro del sistema de software comercial Dymola. En el año 2000, se formó la Asociación Modelica sin fines de lucro para gestionar el lenguaje Modelica en continua evolución y el desarrollo de la Biblioteca Estándar Modelica gratuita. Ese mismo año se inició el uso de Modelica en aplicaciones industriales.
Esta tabla presenta la línea de tiempo del historial de especificaciones de Modelica:
Liberación | Fecha de lanzamiento | Aspectos destacados |
---|---|---|
1.0 | Septiembre de 1997 | Primera versión para modelar sistemas dinámicos continuos. |
1.1 | 1998, diciembre | Elementos de lenguaje para modelar sistemas discretos (pre, cuándo) |
1.2 | 1999, junio | Interfaz a C y Fortran, interior/outer para variables globales, semántica refinada del manejo de eventos |
1.3 | 1999, diciembre | Semántica mejorada para conexiones internas / externas, elementos protegidos, expresiones de array. |
1.4 | 2000, diciembre | Retirada regla de uso previo, refinado concepto de paquete, refinado cuando-clause |
2.0 | 2002, julio | Iniciación de modelos, estandarización de la apariencia gráfica, funciones con argumentos posicionales mixtos y nombrados, constructor de discos, enumeraciones |
2.1 | 2004, marzo | Conector sobredeterminado a sistemas mecánicos modelo 3-dim., redeclaración mejorada de submodelos, índices de array y array de enumeraciones |
2.2 | 2005, febrero | Conexión ampliable a los autobuses modelo de señal, declaraciones de componentes condicionales, arrays con cambios de tamaño dinámico en las funciones |
3.0 | 2007, septiembre | Versión de limpieza: especificación recién escrita, sistema de tipo y aspecto gráfico refinado, defectos de lenguaje fijo, concepto modelo equilibrado para detectar errores de modelo de una manera mucho mejor |
3.1 | 2009, mayo | Conector de corriente para manejar el flujo bidireccional de fluido, sobrecarga del operador, mapeo de piezas modelo a entornos de ejecución (para uso en sistemas integrados) |
3.2 | 2010, marzo | Mejora de la inicialización con método de homotopy, funciona como insumos formales para funciones, soporte Unicode, control de acceso para proteger IP, mejor apoyo a bibliotecas de objetos |
3.3 | 2012, mayo | Elementos de lenguaje añadido para describir controladores sincrónicos periódicos y no experimentales basados en ecuaciones con reloj, así como máquinas de estado sincronizadas. |
3.4 | 2017, abril | Conversión automática de modelos. Muchas mejoras menores |
3.5 | 2021, febrero | Anotaciones para parcelas predefinidas. Cambio de formato de especificación, con muchos cambios editoriales. Aclaraciones a elementos de lenguaje sincronizados y máquinas estatales. Muchas aclaraciones menores a funciones, conversiones modelo y varias otras partes de la especificación. |
3.6 | 2023, marzo | Modificadores de extracción con break y extensiones de modelo selectivas. Apoyo multilingüe para presentar bibliotecas de Modelica en varios idiomas.
|
Implementaciones
Las interfaces comerciales de Modelica incluyen AMESim de la empresa francesa Imagine SA (ahora parte de Siemens Digital Industries Software), Dymola de la empresa sueca Dynasim AB (ahora parte de Dassault Systemes), Wolfram SystemModeler (anteriormente MathModelica ) de la empresa sueca Wolfram MathCore AB (ahora parte de Wolfram Research), SimulationX de la empresa alemana ESI ITI GmbH, MapleSim de la empresa canadiense Maplesoft, JModelica.org (código abierto, descontinuado) y Modelon Impact, de la empresa sueca Modelon AB, y Sistemas CATIA de Dassault Systemes (CATIA es uno de los principales sistemas CAD).
Openmodelica es un entorno de simulación y modelado 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 del esfuerzo de OpenModelica es crear un entorno integral de modelado, compilación y simulación de código abierto de Modelica basado en software gratuito distribuido en formato binario y código fuente para investigación, enseñanza y uso industrial.
El entorno de simulación gratuito Scicos utiliza un subconjunto de Modelica para el modelado de componentes. Actualmente se está desarrollando soporte para una mayor parte del lenguaje Modelica. Sin embargo, todavía existe cierta incompatibilidad e interpretación divergente entre las diferentes herramientas relacionadas con el lenguaje Modelica.
Ejemplos
El siguiente fragmento de código muestra un ejemplo muy simple de un sistema de primer orden ()):
modelo Primera Orden parámetro Real c=1 "Tiempo constante"; Real x ()Empieza=10) "Un desconocido";ecuación der()x) = -c*x "Una ecuación diferencial de primer orden";final Primera Orden;
El siguiente fragmento de código muestra un ejemplo para calcular la segunda derivada de una función trigonométrica, utilizando OMShell, como medio para desarrollar el programa escrito a continuación.
modelo second_derivative Real l; Real z=pecado()w*tiempo); Real m; parámetro Real w = 1;ecuación l=der()z); m=der()l);final second_derivative;

Cosas interesantes a destacar sobre este ejemplo son el calificativo 'parametro', que indica que una variable dada es invariante de tiempo y el operador 'der', que representa (simbólico) el derivado de tiempo de una variable. También vale la pena señalar las cadenas de documentación que pueden estar asociadas con declaraciones y ecuaciones.
La principal área de aplicación de Modelica es el modelado de sistemas físicos. Los conceptos de estructuración más básicos se muestran al alcance de la mano con ejemplos sencillos del ámbito eléctrico:
Tipos integrados y derivados del usuario
Modelica tiene cuatro tipos integrados: Real, Entero, Booleano y Cadena. Normalmente, se derivan tipos definidos por el usuario para asociar cantidades físicas, unidades, valores nominales y otros atributos:
Tipo Voltaje = Real()cantidad="ElectricalPotential", unidad="V");Tipo Corriente = Real()cantidad="ElectricalCurrent", unidad="A"); ...
Conectores que describen la interacción física
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 "Pinche electrónico" Voltaje v "Potential at the pin"; flujo Corriente i "Current fluyendo hacia el componente";final Pin;
Al dibujar líneas de conexión entre puertos, el significado es que las variables del conector correspondiente sin el "flujo" prefijo son idénticos (aquí: "v") y las variables del conector correspondientes con el "flujo" El prefijo (aquí: "i") se define mediante una ecuación de suma cero (la suma de todas las variables de "flujo" correspondientes es cero). La motivación es cumplir automáticamente las ecuaciones de equilibrio relevantes en el punto de conexión infinitamente pequeño.
Componentes básicos del modelo
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 Capacitor parámetro Concitación C; Voltaje u "Baja de tensión 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;final Capacitor;
El objetivo es que un conjunto conectado de componentes modelo conduce a un conjunto de ecuaciones diferenciales, algebraicas y discretas donde el número de desconocidos y el número de ecuaciones es idéntico. En Modelica, esto se logra requiriendo lo llamado Modelos equilibrados.
Las reglas completas para definir modelos equilibrados son bastante complejas y se pueden leer en en la sección 4.7.
Sin embargo, para la mayoría de los casos, se puede emitir una regla simple que cuenta las variables y ecuaciones de la misma manera que lo hacen la mayoría de las herramientas de simulación:
Un modelo es equilibrado cuando el número de sus ecuaciones iguala el número de sus variables.
dado que las variables y ecuaciones deben contarse según la siguiente regla:
- Número de ecuaciones modelo = Número de ecuaciones definidas en el modelo + número de variables de flujo en los conectores externos - 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.
El por qué 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 agregar una ecuación para cada variable de flujo.
Obviamente, el ejemplo se puede extender a otros casos, en los que están involucrados otros tipos de variables de flujo (por ejemplo, fuerzas, pares, etc.).
Cuando nuestro condensador se conecta a otro modelo (equilibrado) 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. Dado que 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 Condensador 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 usando OpenModelica de este modelo da, de hecho
Clase Capacitor tiene 5 ecuaciones y 5 variables. 3 de estos 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:
modelo SignalVoltage "Fuente de voltaje genérico usando la señal de entrada como tensión de fuente" Interfaces.PositivePin p; Interfaces.NegativoPin n; Modelica.Bloqueos.Interfaces.Real Input v()unidad="V") "Voltaje entre pin p y n (= p.v - n.v) como señal de entrada"; SI.Corriente i "Current fluyendo de pin p a pin n";ecuación v = p.v - n.v; 0 = p.i + n.i; i = p.i;final SignalVoltage;
El componente SignalVoltage está equilibrado desde
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, verificar con OpenModelica da
Clase Modelica.Electrical.Analog.Fuentes.Signal El voltaje tiene 5 ecuaciones y 5 variables. 4 de estos son ecuaciones triviales.
Modelos jerárquicos
Un modelo jerárquico se construye a partir de modelos básicos, creando instancias de modelos básicos, proporcionando valores adecuados para los parámetros del modelo y conectando conectores de modelo. Un ejemplo típico es el siguiente circuito eléctrico:
modelo Circuito Capacitor C1()C=1e-4) "Una instancia capacitor del modelo anterior"; Capacitor C2()C=1e-5) "Una instancia capacitor del modelo anterior"; ...ecuación conectar()C1.pin_p, C2.Pin_n); ...final Circuito;
A través del elemento de lenguaje annotation(...), se pueden agregar definiciones a un modelo que no tienen 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 los mismos.
Aplicaciones
Modelica está diseñada para ser neutral en el dominio y, como resultado, se utiliza en una amplia variedad de aplicaciones, como sistemas de fluidos (por ejemplo, generación de energía de vapor, hidráulica, etc.), aplicaciones automotrices (especialmente sistemas de propulsión) 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 de automóviles utilizan Modelica. Estos incluyen Ford, General Motors, Toyota, BMW y Daimler.
Modelica también se utiliza cada vez más para la simulación de sistemas termofluidos y energéticos.
Las características de Modelica (acausal, orientada a objetos, dominio neutral) lo hacen muy adecuado para la simulación a nivel de sistema, un dominio en el que Modelica ahora está bien establecido.