Изменить аннотацию (Evaluate=true/false) для параметров в моделях из стандартной библиотеки Modelica

Я использую некоторые компоненты из стандартной библиотеки Modelica (MSL) в своих симуляциях. Каждый из этих компонентов имеет некоторые параметры. Например, Modelica.Fluid.Sources.MassFlowSource_T имеет parameter m_flow, Обычно параметры могут изменяться между прогонами моделирования без перекомпиляции. Это не так для m_flowпотому что у него есть annotation(Evaluate=true), поэтому он используется для символьной обработки.
Можно ли изменить аннотации параметров при создании экземпляра? Я попробовал следующее, но это не сработало.

Modelica.Fluid.Sources.MassFlowSource_T source2(
    redeclare package Medium = Medium2,
    nPorts=1,
    m_flow=22.17 annotation(Evaluate=false));

Конечно, есть обходные пути, например, сначала сделать копию и изменить там аннотацию, или использовать use_m_flow_in=true и постоянный источник блока.

1 ответ

Решение

Насколько я знаю, это невозможно с текущей спецификацией Modelica. Некоторые инструменты могут поддерживать это, если вы расширяете MassFlowSource_T:

model MassFlowSource_T_2
  extends Modelica.Fluid.Sources.MassFlowSource_T;
  // declare m_flow here again with annotation(Evaluate=false);
end MassFlowSource_T_2;

use MassFlowSource_T_2 when you declare source2.

В настоящее время проводится определенная работа по расширению способа указания / обработки аннотаций, но пройдет некоторое время, пока он не войдет в спецификацию Modelica: https://trac.modelica.org/Modelica/ticket/1293 (не открыт для публично пока).

Другие вопросы по тегам