Входы FMU для параметров в Modelica - PullRequest
1 голос
/ 30 апреля 2019

У меня есть несколько блоков "FixedCurrent" в моей электрической цепи.Я хочу иметь возможность изменять значения тока для этих блоков через FMU.Я могу изменить значение, используя «параметр», как показано в коде ниже:

type Current = Real(unit = "A", min = 0);

parameter Current CurrentTest1(start = 50) "Test current";

PowerSystems.Generic.FixedCurrent fixedCurrent3(
    I = CurrentTest1, 
    redeclare package PhaseSystem = PhaseSystem), 
  annotation(...);

PowerSystems.Generic.FixedCurrent fixedCurrent1(
    I = 55, 
    redeclare package PhaseSystem = PhaseSystem), 
  annotation(...);

Но я не могу назначить вход для них.например, если я использую команду ввода (1) или блок RealInput (2), чтобы установить значение тока для блока fixedCurrent3:

// 1) 
input Real TZtest(start=50);
PowerSystems.Generic.FixedCurrent fixedCurrent3(
    I = TZtest, 
    redeclare package PhaseSystem = PhaseSystem),
  annotation(...);

// 2) 
Modelica.Blocks.Interfaces.RealInput TZTest2 annotation(...);
PowerSystems.Generic.FixedCurrent fixedCurrent3(
    I = TZtest, 
    redeclare package PhaseSystem = PhaseSystem),
  annotation(...);

, я получаю соответствующие ошибки:

1) Translation Error
Component fixedCurrent3.I of variability PARAM has binding TZtest of higher variability VAR.

2)Translation Error
Component fixedCurrent3.I of variability PARAM has binding TZTest2 of higher variability VAR.

Таким образом, я не могу установить значение для параметра через вход FMU.Буду благодарен за любые решения этой проблемы.

1 Ответ

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

Короче говоря: проблема заключается в изменчивости ваших переменных. Замените свой блок FixedCurrent блоком, который позволяет устанавливать переменные токи. Таким образом, вместо параметра он должен иметь реальный вход для текущего I.

В Modelica переменные могут иметь одну из следующих переменных (от самой низкой до самой высокой):

  • константа: не изменяется пользователем, то же значение для всего моделирования
  • параметр: изменяемый перед началом моделирования, но то же значение для всего моделирования
  • discrete: изменять их значения только в событиях (внутри когда-предложений)
  • непрерывно: регулярные переменные

Переменные можно назначать только другим переменным с такой же или большей изменчивостью. Например, параметр не может быть установлен с непрерывной переменной. И в ваших примерах 1) и 2) вы пытаетесь сделать именно это.

Для 1) вы можете установить переменную входного параметра, используя префиксный параметр:

parameter input Real TZtest(start=50);

В случае 2) у вас проблема в том, что выходы FMU непрерывны. Следовательно, вы должны заменить блок FixedCurrent каким-либо переменным текущим блоком, как упоминалось в начале этого ответа.

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

...