Я реализовал три аналогичные публикации в одной модели 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
variability="discrete" causality="input"
. Тем не менее спасибо :) - person Jay_At_Play   schedule 20.04.2015tunable
. К сожалению, у меня сейчас нет времени, но я обязательно обновлю эту ветку, если продолжу свое исследование! - person Jay_At_Play   schedule 24.04.2015