Я реализовал три аналогичные публикации в одной модели Modelica, используя переменную типа перечисления, чтобы выбрать публикацию. Цель состоит в том, чтобы переключаться между методами расчета (т. Е. Между публикациями), изменяя значение переменной типа перечисления онлайн.
Расчет состоит из трех этапов, каждый из которых имеет свою собственную переменную перечисления. Это позволяет использовать смешанные методы расчета, например. на шаге 1 установки для расчета в соответствии с публикацией 1 и пунктами 2 и 3 в соответствии с публикацией 2.FMU-Export в Dymola: возможно ли сделать переменную типа перечисления Modelica «перестраиваемой» при экспорте в виде FMU/FMI
Каждого шаг читает что-то вроде этого
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>
Т.Л., д-р: ли возможно ли сделать переменную типа перечисления Modelica «перестраиваемой» при экспорте в виде FMU/FMI?
Dymola Версия 2015 FD01 (32-разрядная версия), 2014-11-04
Вы можете попробовать сделать «input pubSelect» вместо «parameter pubSelect». –
Я попробовал ваше предложение, но это дает 'изменчивость =" дискретная "causality =" input ". Спасибо, тем не менее :) –
Но ввод причинности в порядке. Это означает, что он настраивается. Или это не так? –