FMU-Export в Dymola: можно ли настроить переменную типа перечисления Modelica при экспорте как FMU / FMI

Я реализовал три аналогичные публикации в одной модели Modelica, используя переменную типа перечисления для выбора публикации. Цель состоит в том, чтобы переключаться между методами расчета (т. Е. Между публикациями) путем изменения значения переменной типа перечисления в режиме онлайн.
Расчет состоит из трех шагов, каждый из которых имеет свою собственную переменную перечисления. Это позволяет использовать смешанные методы расчета, например установив шаг 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). Это создает 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: Можно ли сделать переменную типа перечисления Modelica "настраиваемой" при экспорте как FMU / FMI?

Dymola Version 2015 FD01 (32-разрядная версия), 04.11.2014


person Jay_At_Play    schedule 16.04.2015    source источник
comment
Вы можете попробовать сделать ввод pubSelect вместо параметра pubSelect.   -  person Adrian Pop    schedule 18.04.2015
comment
Я попробовал ваше предложение, но это дает variability="discrete" causality="input". Тем не менее спасибо :)   -  person Jay_At_Play    schedule 20.04.2015
comment
Но ввод причинно-следственной связи в порядке. Значит настраивается. Или нет?   -  person Adrian Pop    schedule 20.04.2015
comment
@AdrianPop Думаю, это может сработать, мне придется когда-нибудь попробовать. Я предполагаю, что успех зависит от того, можно ли сделать требуемую входную переменную tunable. К сожалению, у меня сейчас нет времени, но я обязательно обновлю эту ветку, если продолжу свое исследование!   -  person Jay_At_Play    schedule 24.04.2015


Ответы (1)


Я попытался добавить начальное значение к параметру выбора, и с аннотацией (Evaluate = false) он стал настраиваемым.

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

Это даст вам предупреждение о неназначенном параметре, хотя я действительно не пробовал, действительно ли он работает (измените значение в событиях / точках связи), сообщите мне результат, если у вас есть возможность попробовать. Спасибо ~

person Hang Yu    schedule 01.05.2015
comment
Извините, я думаю, что аннотация (Evaluate = false) справится с этой задачей. - person Hang Yu; 01.05.2015
comment
Использование selection(start=pubSelect.Publication_2) annotation(Evaluate=false) дает variability="tunable" causality="parameter" в файле XML. Исходный код selection = pubSelect.Publication_2 annotation(Evaluate=false) дает точно такой же результат в XML-файле. Таким образом, сама аннотация работает и на моем компьютере, как было предложено в вашем комментарии. Спасибо большое за вашу помощь! - person Jay_At_Play; 22.05.2015