Как параметризировать переопределение? - PullRequest
1 голос
/ 23 мая 2019

У меня есть пакет для представления определенных медиа, созданный по аналогии с Modelica.Media, но не совсем так. Я хочу позволить пользователю выбирать между различными функциями для определенного свойства без необходимости изменять способ вычисления оставшихся свойств.

В упаковке:

package myPac
    replaceable function prop = F1 constrainedby partialF
       annotation (choicesAllMatching=true);

    function partialF
        input Real x;
        output Real y;
    end partialF;

    function F1
        extends partialF;
    algorithm
        y := x;
    end F1;

    function F2
        extends partialF;
    algorithm
        y := 2*x;
    end F2;
end myPac;

Я хочу затем выбрать F1 или F2 внутри модели.

model myModel
    replaceable package pack1 = myPac(redeclare function prop = pack1.F2);
    Real x;
    Real y;
equation
    y = pack1.prop(x);
end myModel;

работает как положено. Как я могу параметризировать переопределение реквизита, чтобы его можно было установить из диалогового окна параметров?

Я искал что-то вроде:

model myModel2
    replaceable package pack1 = myPac(redeclare function prop = if a == 1 then pack1.F1 else pack1.F2);
    parameter Integer a = 1;
    Real x;
    Real y;
equation
    y = pack1.prop(x);
end myModel2;

что явно неверный синтаксис. Кроме того, choicesAllMatching = true в объявлении prop показывает мне выпадающее меню, но в списке нет вариантов.

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Как можно параметризировать переопределение реквизита, чтобы его можно было установить в диалоговом окне параметров?

Вам не нужен дополнительный параметр a для выбора функций,Просто нажмите кнопку редактирования prop, чтобы получить окно параметров выбранного сменного пакета, где вы можете выбрать между F1 и F2.Я добавил анимацию ниже, чтобы сделать это более понятным.

Кроме того, choicesAllMatching = true в объявлении prop показывает мне выпадающее меню, но в списке нет вариантов.

Это работает для меня, как вы можете видеть на анимации.Обратите внимание, что я объявил функцию partialF как partial, поэтому она не включена в раскрывающееся меню.И я добавил еще одну аннотацию choicesAllMatching к replaceable package pack1 в myModel, чтобы создать еще один раскрывающийся список для выбора pack1 (как это сделал Ганс в своем ответе).

Animation of Dymola parameter window

0 голосов
/ 24 мая 2019

В настоящее время вы не можете иметь переопределения в зависимости от значений параметров.

Однако вы можете сделать выбор между двумя пакетами, которые появятся в диалоговом окне:

package myPac
    replaceable function prop = F1 constrainedby partialF
       annotation (choicesAllMatching=true);

    function partialF
        input Real x;
        output Real y;
    end partialF;

    function F1
        extends partialF;
    algorithm
        y := x;
    end F1;

    function F2
        extends partialF;
    algorithm
        y := 2*x;
    end F2;
end myPac;
package myPac1=myPac(redeclare function prop=myPac.F1);
package myPac2=myPac(redeclare function prop=myPac.F2);

model myModel
    replaceable package pack1 = myPac annotation(choicesAllMatching=true);
    Real x;
    Real y;
equation
    y = pack1.prop(x);
end myModel;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...