将模型参数定义为变量
Define Model Parameter as Variable
我正在尝试将模型(块)的参数定义为变量。例如:
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.
我想将模型的参数定义为变量。这允许我创建参数定义作为所有变化的几何形状。有没有办法让这个定义生效?
你的意思是在模拟过程中几何形状发生变化?如果是这样,您将不得不重写 ThermalConductor 模型以使用 变量 G
,因为无法将变量分配给参数。变量在模拟过程中可能会发生变化。参数在仿真开始时是固定的,但可以在不重新编译模型的情况下从 运行 运行 更改,这样可以更快地 iteration/design 工作。
请注意,您还可以根据您定义的其他参数计算参数,例如从给定的壁厚计算传热系数(你从模拟 运行 模拟 运行 不同)。
重写组件模型的另一种方法是在仿真模型之外创建参数 study/variation。至少有三种方法:
- 将您的系统模型导出为 FMU(联合仿真)。将其导入 Python w。 PyFmi and write
for
loops that vary the parameter value for each iteration. See for example http://www.jmodelica.org/assimulo_home/pyfmi_1.0/pyfmi.examples.html。这并不像听起来那么复杂。
- 在 Modelica 脚本(
mos
文件)中制作参数变化循环。不过我对此没有太多经验。
- 如果您改变几何参数以找到某种优化,您可以使用 Dymola 附带的优化库(从 2017 FD01 版本开始)。
使用上述建议之一,您可以开箱即用地重用 MSL 中的所有组件。
此致,
雷内·贾斯特·尼尔森
varaibales/parameters 的继承权限制了它们的使用。如您所知,parameters
不允许在模拟中变化。因此,您会收到错误消息,指出您正在尝试使用变量值或 input
变量定义 parameter
。
如果您需要该功能,我建议复制 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 库,但尚未发布,最直接的方法可能会尝试我所讨论的方法。
我正在尝试将模型(块)的参数定义为变量。例如:
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.
我想将模型的参数定义为变量。这允许我创建参数定义作为所有变化的几何形状。有没有办法让这个定义生效?
你的意思是在模拟过程中几何形状发生变化?如果是这样,您将不得不重写 ThermalConductor 模型以使用 变量 G
,因为无法将变量分配给参数。变量在模拟过程中可能会发生变化。参数在仿真开始时是固定的,但可以在不重新编译模型的情况下从 运行 运行 更改,这样可以更快地 iteration/design 工作。
请注意,您还可以根据您定义的其他参数计算参数,例如从给定的壁厚计算传热系数(你从模拟 运行 模拟 运行 不同)。
重写组件模型的另一种方法是在仿真模型之外创建参数 study/variation。至少有三种方法:
- 将您的系统模型导出为 FMU(联合仿真)。将其导入 Python w。 PyFmi and write
for
loops that vary the parameter value for each iteration. See for example http://www.jmodelica.org/assimulo_home/pyfmi_1.0/pyfmi.examples.html。这并不像听起来那么复杂。 - 在 Modelica 脚本(
mos
文件)中制作参数变化循环。不过我对此没有太多经验。 - 如果您改变几何参数以找到某种优化,您可以使用 Dymola 附带的优化库(从 2017 FD01 版本开始)。
使用上述建议之一,您可以开箱即用地重用 MSL 中的所有组件。
此致, 雷内·贾斯特·尼尔森
varaibales/parameters 的继承权限制了它们的使用。如您所知,parameters
不允许在模拟中变化。因此,您会收到错误消息,指出您正在尝试使用变量值或 input
变量定义 parameter
。
如果您需要该功能,我建议复制 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 库,但尚未发布,最直接的方法可能会尝试我所讨论的方法。