找不到(Modelica内部/外部)的相应内部声明

Jes*_*nos 1 modeling modelica openmodelica

我最近开始使用Modelica(OpenModelica)作为建模工具,并且在使用内部/外部功能时遇到了一个问题。我正在尝试创建一个包含环境温度和压力值的环境模型,以便其他模型可以使用该值。我尝试使用内部关键字和外部关键字来执行此操作,但始终收到以下警告:

找不到组件.Real component.T0声明为“外部”的相应“内部”声明。现有的“内部”组件是:.Real environment.T0; 范围定义:Test.Ambient。检查您是否没有拼错“外部”组件名称。请在顶部范围中声明一个具有相同名称的“内部”组件。仅考虑“外部”组件声明来继续展平。

在这些行下面,您可以看到我正在尝试简化的代码。

这些行下面的三个模型包含在一个名为Test的包中。

环境模型,其中温度T0定义为内部:

within Test;

    model Ambient

        inner Real T0;

        equation
            T0 = 300;

end Ambient;
Run Code Online (Sandbox Code Playgroud)

尝试通过外部运算符调用T0的组件的模型:

within Test;

model Component

    Real T;
    outer Real T0;
    parameter Real k = 2;

    equation
        T = k * time + T0;

end Component;
Run Code Online (Sandbox Code Playgroud)

将环境模型和组件模型都拖放到组合模型中:

within Test;

model System
  Test.Ambient ambient annotation(
    Placement(visible = true, transformation(origin = {-30, 30}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Test.Component component annotation(
    Placement(visible = true, transformation(origin = {30, -10}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation

end System;
Run Code Online (Sandbox Code Playgroud)

运行系统时,我收到上述警告。另外,变量不只是方程式(这很有意义,因为它无法将Component.T0与环境T0连接起来)

Mar*_* A. 5

您的用例似乎与在Modelica.Mechanics.MultiBody和中 完成的用例非常相似Modelica.Fluid。在这两种情况下,都有一个包含系统的所有“全局”属性的类,分别称为worldsystem

因此,您的班级Ambient应定义为inner班级。然后通过一条outer语句访问它,以重新使用其中的值。使用代码时会是什么可能是访问T0从模型 Ambient。从示例代码来看,这不是您想要的...

将MSL中使用的技术应用于您的示例,将导致以下代码:

package Test
model Ambient
    inner Real T0;
  equation
    T0 = 300;
    annotation(defaultComponentPrefixes="inner");
end Ambient;

model Component
    Real T;
    Real T0 = ambient.T0;
    parameter Real k = 2;
  protected
    outer Test.Ambient ambient;
  equation
    T = k * time + T0;
end Component;

model System
  inner Test.Ambient ambient;
  Test.Component component;   
end System;

end Test;
Run Code Online (Sandbox Code Playgroud)

一些评论:

  • 使用外部语句访问变量是在protected模型的一部分中完成的,只是为了防止在结果中多次使用相同的变量。
  • 所述defaultComponentPrefixes注释可以确保,该模型具有前缀inner的情况下,创建的图形实例(因为它是在模型中示出System)。