我在一个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文件。为了启用在线更改,变量必须在此XML中设置属性variability="tunable"
。
但是,变量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: 是否可以制作Modelica枚举类型变量&#34;可调&#34;何时导出为FMU / FMI?
Dymola Version 2015 FD01(32位),2014-11-04