0

我在一个 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

4

1 回答 1

1

我尝试向选择参数添加一个起始值,并通过注释 (Evaluate=false) 它变得可调。

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

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

于 2015-05-01T14:44:21.040 回答