是否可以将全局值发送到OpenModelica中的另一个模型?
我正在尝试在OpenModelica中创建一个模型,其中包含几个其他组件(管道、容器)。目前,我正在使用交错网格修改Modelica.Fluid-library中的管道,需要确定整个模型中的最小步长dx 是否可以执行以下操作是否可以将全局值发送到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
这可能吗?你会怎么做呢?是的,有几种可能性 如前所述,如果在全局模型中将变量/参数实例化为
内部
,并在每个管道模型中将其声明为外部
,则管道可以访问数据存储模型中的变量/参数。与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中存在的所有管道的名称添加到向量中。谢谢你的帮助!