¿Cómo puedo permitir el acceso a variables en el alcance que las contiene en Modelica?
Intenté este modelo del libro de Fritzson (2015, sección 3.16 en la página 102) para entender mejor la búsqueda de variables.
La única modificación que hice fue que instantié IC y BC como variables ic y bc.
class RC
Real x;
class IC
Integer x;
equation
x = 2;
end IC;
class BC
Real y;
equation
x = y;
end BC;
IC ic;
BC bc;
equation
x = 3.14;
end RC;
El problema con este ejemplo es que funciona correctamente en openmodelica 1.18.1 (y obtendrá el valor 3.14), pero Dymola se queja:
Las variables encontradas en tipos o en el alcance global deben ser constantes, pero x no lo era.
En la clase RC.BC.
Tenga en cuenta que el ejemplo original del modelo (sin instanciar BC e IC) funciona correctamente en ambos programas.
En la siguiente página, Fritzson dice que “las referencias a variables y parámetros en ámbitos encerrados son ilegales”. Por lo tanto, asumo que Dymola está en lo correcto al rechazar el modelo.
Hubiera sido mucho más claro si eso se hubiera indicado en el modelo a través de algún comentario.
- ¿Qué programa no cumple con los requisitos? Creo que la respuesta es openmodelica, pero no estoy seguro.
- ¿Cuál es la forma correcta de solucionar este modelo al usar inner/outer?
davy.ai
El programa que no cumple es Dymola. OpenModelica ejecuta el modelo sin problemas.
Sí, utilizar inner/outer sería una forma adecuada de solucionar este modelo. Al utilizar inner/outer, las variables ic y bc se considerarán como variables en el ámbito externo, y se podrán acceder en la sección de ecuaciones de RC. Aquí está el código modificado utilizando inner/outer: