# Modelica

Modelica es un lenguaje orientado a objetos desarrollado para describir de manera sencilla modelos de sistemas dinámicos que podrían llegar a ser muy complejos. Además de las características básicas de todo lenguaje orientado a objetos. Modelica contiene herramientas específicas que permiten describir las relaciones constitutivas de los distintos componentes de cada modelo y las relaciones estructurales que definen la interacción entre dichos componentes. De esta manera, el lenguaje permite asociar cada componente de un sistema a una instancia de una clase de Modelica. Adicionalmente, los componentes típicos de los sistemas de distintos dominios de la física como la termodinámica, sistemas hidráulicos, de los procesos químicos como reacciones químicas, disolución de gases, difusión, transportes de membrana, flujos osmóticos, celdas electroquímicas, electrodos y de la ingeniería, que pueden agruparse en librerías de clases para ser reutilizados. De hecho, existe una librería estándar de clases de Modelica, que contiene los principales componentes básicos de sistemas eléctricos, mecánicos(traslacionales, rotacionales y multi cuerpos), térmicos, y diagramas de bloques. Otras librerías, disponibles en Internet, contienen componentes. La investigación del comportamiento de los sistemas dinámicos, es parte importante de todas las ramas de la ingeniería. Esto incluye su modelado matemático y la simulación de este. Para los sistemas complejos, el modelado y su simulación, son las herramientas utilizadas para su análisis y diseño.
Aunque Modelica se parece a los lenguajes de programación orientados a objetos, como C++ o Java, difiere en dos aspectos importantes. En primer lugar, Modelica es un lenguaje de modelado más que 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 sí lo están ciertas capacidades necesarias.
En segundo lugar, aunque las clases pueden contener componentes algorítmicos similares a las sentencias o bloques de los lenguajes de programación, su contenido principal es un conjunto de ecuaciones. A diferencia de una sentencia de asignación típica, como
x := 2 + y;
en la que al lado izquierdo de la sentencia se le asigna un valor calculado a partir de la expresión del lado derecho, una ecuación puede tener expresiones tanto en el lado derecho como en el izquierdo, por ejemplo
x + y = 3 * z;
Las ecuaciones no describen asignaciones sino igualdades. 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.

## Ejemplos de utilización.

Utilizando OMShell, como un medio para desarrollar el programa escrito a continuacion. Péndulo simple.
"The simulation finished successfully."
El programa escrito con el lenguaje Modelica, denominado "pendulo", resulta en un grafico de la variable del angulo "theta" en función del tiempo.

## Modelica y c++

Ejecución de Modelica. El proceso de traducción y ejecución de un modelo en Modelica, se representa en el siguiente dibujo,
La sintaxis como concepto es la parte de la gramática que estudia la forma en que se combinan y relacionan las palabras y también tiene como función principal analizar el orden correcto de las palabras a fin de que las frases oraciones textos e ideas sean utilizadas correctamente.
Compilación y Simulación de modelos Modelica.
Compilar.
Compilar es el desarrollo de modificar un programa de computación, escrito en un determinado lenguaje en un conjunto de instrucciones en otro formato o lenguaje. Un compilador es un programa de computadora que realiza dicho trabajo. El compilador transforma código escrito en un lenguaje de alto nivel como C++, en código ejecutable , denominado código binario o código máquina.
La compilación de un programa consiste en trasladar las instrucciones a un lenguaje intermedio. Una vez codificado el algoritmo, es decir, una vez que se obtiene el programa fuente, es necesario poder introducirlo en la memoria de la máquina y guardarlo en el disco, lo que se hace con un programa denominado editor. Posteriormente el programa fuente debe ser traducido al lenguaje de máquina. Este trabajo se lleva a cabo por un compilador, si no hay errores en la compilación se crea el ejecutable. El compilador recibe el archivo de texto con las instrucciones en lenguaje como C++ y las traduce a un lenguaje intermedio. Un algoritmo informático son un conjunto de instrucciones definidas, ordenadas y delimitadas , con los cuales se resuelve un problema, hacer un cálculo o una tarea. El algoritmo es un procedimiento paso a paso para conseguir un fin. A partir de un estado e información iniciales, se siguen una serie de pasos ordenados se puede llegar a la solución de una situación.
Obteniendo el ejecutable.
Por ejemplo, los archivos fuente de C llevan la extensión .C y los archivos que realiza el compilador, se llaman archivos objeto, llevan la extensión .OBJ. Luego, el archivo objeto debe ser enlazado ,proceso conocido como link, en inglés, con otro programa llamado linker o enlazador. El proceso de montaje da al archivo su forma de programa final y ya está listo para ser utilizado, si el programa se realizó en varios archivos de texto, el proceso de montaje tomará los distintos archivos de texto y hará un único archivo ejecutable, dependiendo del sistema operativo con el que se use, los programas pueden tener distintas extensiones como .EXE en Windows y DOS.
El primer paso del proceso de compilación consisten en un análisis sintáctico del código fuente Modelica del cual se obtiene un árbol sintáctico abstracto. Un analizador sintáctico o parser, que viene del inglés parse o analizar una cadena o texto en componentes sintácticos lógicos, se asegura de que el código se traduce correctamente a un lenguaje ejecutable y es un programa que normalmente es parte de un compilador. El compilador se asegura de que el código se traduce correctamente a un lenguaje ejecutable. El trabajo del analizador es, en este caso, la descomposición y transformación de las entradas en un formato que se pueda utilizar para su posterior procesamiento. Analiza una cadena de instrucciones en un lenguaje de programación y luego la descompone en sus componentes individuales.
A continuación de esta representación se analiza gramaticalmente, se hace la verificación de tipos, las clases que se heredan y expanden, se realizan las modificaciones e instanciaciones correspondientes, las ecuaciones “connect” se transforman en ecuaciones comunes. Este proceso de análisis y traducción es un conjunto plano de ecuaciones, constantes, variables y funciones.
Variables y Tipos Predefinidos Este ejemplo muestra un modelo algo más complicado, que describe un oscilador de Van der Pol, la palabra clave model en lugar de class , tienen el mismo significado. La declaración de dos variables dinámicas ,que son también variables de estado: x e y. Ambas son del tipo Real y toman el valor 1 al comienzo de la simulación, que se produce normalmente en el instante de tiempo 0. En la siguiente línea, se encuentra la declaración del parámetro constante lambda, que es un parámetro del modelo.

## 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 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 de Hilding Elmqvist y en la experiencia con los lenguajes de modelado Allan, Dymola, NMF ObjectMath, Omola, SIDOPS+, y Smile. En septiembre de 1997 se publicó la versión 1.0 de la especificación de Modelica, que sirvió de base para una implementación prototipo dentro del sistema de software comercial Dymola. En el año 2000, se creó la Asociación Modelica, sin ánimo de lucro, para gestionar el lenguaje Modelica, en continua evolución, y el desarrollo de la biblioteca estándar gratuita Modelica. Ese mismo año comenzó el uso de Modelica en aplicaciones industriales.