是否可以将全局值发送到OpenModelica中的另一个模型?

是否可以将全局值发送到OpenModelica中的另一个模型?,modelica,openmodelica,Modelica,Openmodelica,我正在尝试在OpenModelica中创建一个模型,其中包含几个其他组件(管道、容器)。目前,我正在使用交错网格修改Modelica.Fluid-library中的管道,需要确定整个模型中的最小步长dx 是否可以执行以下操作 计算管道1中的dx_1和管道2中的dx_2 将dx_1和dx_2发送到全局模型中的数组(类似于Modelica.Fluid.System) 确定最小的dx=min(dx_1,dx_2),并发送回管道1和管道2 我计算了管道1中的dx_1和管道2中的dx_2,并在类似于Flu

我正在尝试在OpenModelica中创建一个模型,其中包含几个其他组件(管道、容器)。目前,我正在使用交错网格修改Modelica.Fluid-library中的管道,需要确定整个模型中的最小步长dx

是否可以执行以下操作

  • 计算管道1中的dx_1和管道2中的dx_2
  • 将dx_1和dx_2发送到全局模型中的数组(类似于Modelica.Fluid.System)
  • 确定最小的dx=min(dx_1,dx_2),并发送回管道1和管道2
  • 我计算了管道1中的dx_1和管道2中的dx_2,并在类似于Fluid.System的数据存储模型中创建了一个数组。然而,我正在努力将步长发送到数据存储模型,并在确定最小的dx后再次发送回去


    这可能吗?你会怎么做呢?

    是的,有几种可能性

    如前所述,如果在全局模型中将变量/参数实例化为
    内部
    ,并在每个管道模型中将其声明为
    外部
    ,则管道可以访问数据存储模型中的变量/参数。与
    Modelica.Fluid
    模型(参考
    Fluid.System
    )一样,管道可以访问数据存储模型中的
    dx\u min

    这是一个代码示例,大致基于您的问题:

    model Pipe
      outer DataStorage dataStorage;
    
      Real dx_min = dataStorage.dx_min;
      Real dx "calculated in this model";
      ...
    end Pipe;
    
    model DataStorage
      parameter Integer nPipes;
      input Real dx_array[nPipes];
      Real dx_min=min(dx_array);
      ...
    end DataStorage;
    
    model GlobalModel
      Pipe pipe1;
      Pipe pipe2;
      inner DataStorage dataStorage(nPipes=2, dx_array={pipe1.dx, pipe2.dx});
    
      ...
    end GlobalModel;
    
    您应该注意不同“dx”的可变性,因为您不能将时变“dx”分配给声明为
    参数的“dx”

    如果
    数据存储
    模型的唯一目的是获取数组中的最小项,那么您还可以将其三行代码放入
    全局模型
    ,将代码减少到:

    model Pipe
      input Real dx_min;
      Real dx "calculated in this model";
      ...
    end Pipe;
    
    model GlobalModel
      parameter Integer nPipes=2;
      Real dx_array[nPipes]={pipe1.dx, pipe2.dx};
      Real dx_min=min(dx_array);
    
      Pipe pipe1(dx_min=dx_min);
      Pipe pipe2(dx_min=dx_min);
    
      ...
    end GlobalModel;
    

    非常感谢。您发送的代码非常有用。我看到的唯一问题是,我正在尝试在OMEdit中创建一个完全用户友好的GUI,因此,我试图避免篡改GlobalModel。我希望用户能够只使用图表视图并将管道拖到画布上。现在,用户必须计算管道数量,并将其手动输入为NPPIPE。出于同样的原因,我创建了数据存储模型。有没有什么方法可以像Python一样将每个管道“附加”到一个向量并对它们进行计数?我不知道有任何Modelica命令可以计算特定类型的实例数(不是说没有)。如果您只想使用GUI,那么您可以制作一个连接器,将“dx”从管道传播到
    数据存储
    。但是你必须在你的主模型周围画连接线(可以是浅灰色,虚线表示离散的外观)好的。我将尽量避免将管道连接到数据存储。希望我能找到一种在DataStorage中创建向量的方法,也许还能创建一个for循环,将GlobalModel中存在的所有管道的名称添加到向量中。谢谢你的帮助!