2015-04-16 6 views
0

Я реализовал три аналогичные публикации в одной модели 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

+0

Вы можете попробовать сделать «input pubSelect» вместо «parameter pubSelect». –

+0

Я попробовал ваше предложение, но это дает 'изменчивость =" дискретная "causality =" input ". Спасибо, тем не менее :) –

+0

Но ввод причинности в порядке. Это означает, что он настраивается. Или это не так? –

ответ

1

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

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

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

+0

Извините, я думаю, что аннотация (Evaluate = false) сама выполнит эту работу. –

+0

Использование аннотации 'selection (start = pubSelect.Publication_2) (Evaluate = false)' дает 'изменчивость =" настраиваемый "causality =" параметр "в файле XML. Исходный код 'selection = pubSelect.Publication_2 annotation (Evaluate = false)' дает тот же результат в файле XML. Таким образом, аннотация сама по себе выполняет работу на моем компьютере, как указано в вашем комментарии. Большое спасибо за вашу помощь! –