Dymola 中的 FMU 导出:导出为 FMU / FMI 时是否可以创建 Modelica 枚举类型变量 "tunable"

FMU-Export in Dymola: Is it possible to make a Modelica enumeration type variable "tunable" when exported as FMU / FMI

我在一个 Modelica 模型中实现了三个类似的出版物,使用枚举类型变量 select 出版物。目标是通过在线更改枚举类型变量的值来切换计算方法(即在出版物之间)。
计算包括三个步骤,每个步骤都有自己的枚举变量。这允许混合计算方法,例如通过将步骤 1 设置为根据出版物 1 进行计算,将步骤 2 和 3 设置为根据出版物 2 进行计算。

每一步都是这样读的

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 中计算。相反,功能模型单元 (FMU) 是使用 Dymola 创建的。这将创建一个描述模型的 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;博士: 导出为FMU / FMI时是否可以制作Modelica枚举类型变量"tunable"?

Dymola 版本 2015 FD01(32 位),2014-11-04

我尝试将起始值添加到选择参数,并通过注释 (Evaluate=false) 使其变得可调。

parameter pubSelect selection(start=pubSelect.Publication_2) annotation (Evaluate=false);

它会给你一个关于未分配参数的警告,但我没有真正尝试过它是否真的有效(在 events/communication 点更改值),如果有机会请告诉我结果试一试。谢谢~