Изменить аннотацию (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 (не открыт для публично пока).