es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?
Tags:  , ,

Answer

  1. Avatar for 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:

    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(inner ic.x, outer x);
    equation 
      x = 3.14;
    end RC;
    

Comments are closed.