将模型参数定义为变量

时间:2017-03-30 20:58:38

标签: modelica dymola

我试图将模型(块)的参数定义为变量。例如:

Real WallThickness = 0.5;
Real WallConductance = 10*WallThickness;
Modelica.Thermal.HeatTransfer.Components.ThermalConductor TopPanelConductor(G=WallConductance);

我想定义" G"因此它在整个模拟过程中保持不变,但系数在模拟之前根据另一个变量" WallThickness"进行更新。定义ThermalConductor参数" G"作为模型中的变量,正在其他地方计算,我收到错误消息:

The variability of the definition equation:
TopPanelConductor.G = WallConductance;
is higher than the declared variability of the variables.

我想将模型的参数定义为变量。这允许我创建参数定义作为所有更改的几何。有没有办法让这个定义有效?

3 个答案:

答案 0 :(得分:3)

您的意思是模拟过程中的几何变化?如果是这样,您将不得不重写ThermalConductor模型以使用变量 G,因为无法将变量分配给参数。变量可能在模拟过程中发生变化。参数在模拟开始时是固定的,但可以在不重新编译模型的情况下从一次运行更改为运行,这样可以更快地进行迭代/设计工作。

请注意,您还可以根据自己定义的其他参数计算参数,例如:根据给定的壁厚(从模拟运行到模拟运行)计算传热系数。

答案 1 :(得分:3)

重写组件模型的另一种方法是在模拟模型之外进行参数研究/变化。至少有三种方法:

  1. 将您的系统型号导出为FMU(协同仿真)。用Python导入它。 PyFmi并编写for个循环,这些循环会改变每次迭代的参数值。请参阅示例http://www.jmodelica.org/assimulo_home/pyfmi_1.0/pyfmi.examples.html。这并不像听起来那么复杂。
  2. 在Modelica脚本(mos文件)中创建参数变体循环。我对此没有多少经验。
  3. 如果您要更改几何参数以找到某种最佳,您可以使用Dymola附带的优化库(截至2017 FD01版本)。
  4. 使用上述建议之一,您可以重复使用MSL中的所有组件。

    祝你好运, Rene Just Nielsen

答案 2 :(得分:1)

varaibales /参数有一个heirachery限制他们的使用。如您所知,parameters不允许在模拟中变化。因此,您会收到错误消息,指出您正在尝试使用变量值或parameter变量定义input

如果您需要该功能,我建议复制ThermalConductor并更改变量类型:

parameter Modelica.SIunits.ThermalConductance G
    "Constant thermal conductance of material";

input  Modelica.SIunits.ThermalConductance G
"Constant thermal conductance of material" annotation (Dialog(group=”Input Variables”));

这就是它的全部。请注意input变量上的附加注释。默认情况下,inputs不会显示在参数GUI中。注释将允许它们像参数一样被看到(注意尽可能清楚地将它标记为输入变量与参数!)

正在进行的工作已经完全重做了Thermal库,但还没有发布,而且最简单的方法可能会尝试我所讨论的内容。