2011-09-28 15 views
5

Estoy luchando con el tamaño de los archivos de salida para los grandes modelos de Modelica. Por supuesto, puedo proteger algunos objetos para eliminarlos por completo del archivo de resultados. Sin embargo, lo que da lugar a dos problemas:Buscando un concepto como 'verbosidad' en Modelica

  1. No es posible redeclare objetos protegidos
  2. si quiero probar mi modelo en detalle (por ejemplo, durante un periodo de tiempo corto), tengo que declarar esos objetos públicamente de nuevo para ver sus variables

Me pregunto si hay un truco para establecer la 'verbosidad' de un modelo de Modelica. Tal vez lo que me gustaría es una tercera palabra clave al lado de public, protected, por ej. transparent. Entonces, cuando la creación de una simulación, quiero ser capaz de establecer el nivel de detalle de 1 o 2 con el siguiente efecto:

1 -> Tenga en cuenta todos los elementos transparent como protected

2 -> tener en cuenta todos transparent elementos como public

Este efecto se propagaría a todos los modelos y submodelos.
No creo que esto ya exista. ¿Pero hay una solución fácil?

Gracias, Roel

Respuesta

3

Roel,

Conozco varias personas que luchan con este problema. Por el momento, todo esto depende de la herramienta que se use. No sé cómo otras herramientas manejan el filtrado de resultados, pero en Dymola lo controlas (como dices) al otorgar a las señales calificadores especiales (por ejemplo, protegidos).

Una cosa que he hecho en el pasado es extenderme desde un modelo y luego agregar un montón de señales de salida para las cosas que me interesan. Luego puede seleccionar "Salidas" en Dymola para asegurarse de que entren el archivo de resultados. Esto está lejos de ser perfecto porque a) enumerar todo lo que desea puede ser tedioso yb) no está estrictamente permitido hacer referencia a las variables protegidas (aunque Dymola le permite salirse con la suya, pero emite una advertencia).

En Dassault, estamos discutiendo activamente esta idea y esperamos proporcionar una mejor funcionalidad en esta línea. No está claro si dicha funcionalidad será estrictamente específica de la herramienta o si involucrará el lenguaje de alguna manera. Pero si está relacionado con el lenguaje, (por supuesto) trabajaremos con el grupo de diseño para formular una especificación que otros proveedores de herramientas también puedan admitir.

+0

Gracias por la respuesta. Proteger tanto como sea posible y agregar resultados es lo que hice, de hecho, pero estoy de acuerdo tanto con su a) como con b). Espero que surja una solución estándar de lenguaje, ya que las soluciones específicas de la herramienta están reduciendo la ventaja de herramientas cruzadas que Modelica claramente tiene. – saroele

2

No estoy seguro si esto lo ayuda, pero en Dymola puede ir a Simulation-> Setup-> Output y marcar una casilla de verificación que dice "Almacenar variables protegidas". De esta forma, es posible declarar la mayoría de las variables como protegidas: durante la simulación normal no se almacenan, pero al depurar su modelo, solo marca esa casilla de verificación y se almacenan. Por supuesto que no es lo mismo que su palabra clave sugerida transparente, pero tal vez ayuda un poco ...

+1

Gracias por su respuesta, esto de hecho ayuda porque ahora puedo proteger todo lo que no necesito para una simulación larga, y en 1 clic recupero todo para una ejecución de depuración. Pero hacer que casi todo esté protegido todavía me obliga a romper las reglas (que acepta Dymola) y hacer referencia a las variables protegidas. – saroele

6

Como Michael Tiller escribió anteriormente, esto no se maneja de la misma manera en todas las herramientas de Modelica y no hay una respuesta definitiva . Para dar una respuesta específica de OpenModelica, es posible usar simulate(ModelName,outputFilter="regex"), para almacenar solo las variables que coincidan completamente con la expresión regular dada (el valor predeterminado es .*, que coincide con cualquier variable).

+0

gracias por la propina. Por lo tanto, para usar esta función de manera efectiva tendría que agregar un 'marcador' específico como _o a todas las variables que obtendría en el resultado de una simulación larga. Sería genial si la comunidad de modelica pudiera llegar a una especificación de lenguaje que sea cruzada de herramientas. – saroele

+0

No es necesario etiquetar las variables. Con expresiones regulares puede hacer coincidir 'a | b | c' (ao b o c), o' a \ .b \ .c \ [. * \]. X' (abc [1] .x .. abc [ n] .x). Escribir los patrones es muy molesto, pero son versátiles y fáciles de implementar para las herramientas. Si bien estoy de acuerdo en que sería bueno si se encuentra una solución de herramientas cruzadas, la especificación de Modelica solo toca el tema de las simulaciones en algunos lugares. –

3

En SystemModeler, vaya a la pestaña Configuración en la Nave de exploración de experimentos en el Centro de simulación. Haga clic en Salida en la parte inferior y seleccione qué variables almacenar.

(Las opciones son state variables, derivatives, algebraic variables, parameters, protected variables y si marca el Store simulation log -option, obtendrá algunas estadísticas interesantes sobre los acontecimientos más evaluaciones en tiempo y función, abriendo otra posibilidad de localizar las partes del simulación y modelo que crea más evaluaciones)

0

Un poco tarde, pero en Dymola 2013 FD01 y posterior puede seleccionar qué variables almacenar en función de los nombres (y modelos) utilizando la anotación __Dymola_selections, e incluso filtrar por definido por el usuario etiquetas, por lo que podría crear un nombre de etiqueta "transparente" en el modelo. Consulte "Selecciones coincidentes y variables" en el manual.

Cuestiones relacionadas