我在一个 Modelica 模型中实现了三个类似的发布,使用枚举类型变量来选择发布。目标是通过在线更改枚举类型变量的值来切换计算方法(即出版物之间)。
计算包括三个步骤,每个步骤都有自己的枚举变量。这允许混合计算方法,例如通过设置步骤 1 根据出版物 1 进行计算,并根据出版物 2 设置步骤 2 和 3。
每一步都是这样的
model Calculation_step
type pubSelect = enumeration(
Publication_1,
Publication_2,
Publication_3);
// ####### Publication Selection #######
parameter pubSelect selection = pubSelect.Publication_2;
// ##### End Publication Selection #####
Modelica.Blocks.Interfaces.RealInput incoming;
Modelica.Blocks.Interfaces.RealOutput outgoing;
parameter Real factor = 5;
equation
if selection == pubSelect.Publication_1 then
outgoing = factor * sin(incoming);
elseif selection == pubSelect.Publication_2 then
outgoing = factor * sin(incoming)^2;
elseif selection == pubSelect.Publication_3 then
outgoing = factor * sin(incoming)^3;
else
outgoing = 99999;
end if;
annotation (uses(Publicationica(version="3.2.1"), Modelica(version="3.2.1")));
end Calculation_step;
模型不会在 Dymola 中计算。相反,使用 Dymola 创建了一个功能模型单元 (FMU)。这将创建一个描述模型的 XML 文件。为了启用在线更改,变量必须variability="tunable"
在此 XML 中设置属性。
但是,该变量selection
是不可调整的,如下面的 XML 摘录所示:
-<ModelVariables>
<!-- Index for next variable = 1 -->
-<ScalarVariable name="selection" variability="constant" valueReference="100663296">
<Enumeration start="2" declaredType="Calculation_step"/>
</ScalarVariable>
对变量的声明使用相同的代码会factor
产生一个可调的FMU 变量:
<!-- Index for next variable = 4 -->
-<ScalarVariable name="factor" variability="tunable" valueReference="16777216" causality="parameter">
<Real start="5"/>
</ScalarVariable>
tl;dr: 当导出为 FMU / FMI 时,是否可以使 Modelica 枚举类型变量“可调”?
Dymola 版本 2015 FD01(32 位),2014-11-04