Modelica——使用参数方程,编译后不失参数化能力

Modelica - Using parameter equations without losing the ability to parameterize after compilation

通常,我会使用依赖于其他参数的参数构建 Modelica 模型:

model ParameterTest
  parameter Real a = 5;
  parameter Real b = a/2;
end ParameterTest;

在这里,参数 b 不再可用于在编译模型中进行参数化,我已锁定 b=a/2 关系。

或者,我可以执行以下操作:

model ParameterTest
  parameter Real a = 5;
  parameter Real b = 5/2;
end ParameterTest;

在这里,我已经失去了参数 b 默认值的一些可追溯性和逻辑,如果我将来要更改参数 a,我需要手动 maintain/update 参数 b。这是一个微不足道的例子,但可能在更真实的例子中,方程组和逻辑会更复杂以确定参数 b。

虽然上述行为完全合乎逻辑且符合预期,但我通常更喜欢的是第三种方法,它让我两全其美:根据参数 a 指定参数 b 的默认值,但保持能力编译后到 change/parameterize b。另外,在这里给出一些动机:我会说当参数之间没有严格的关系(在这种情况下为 a 和 b)时会出现此 situation/need,但存在 convenient/typical 默认关系.

例如,如果有如下的注解就好了:

model ParameterTest
  parameter Real a = 5;
  parameter Real b = a/2 annotation(EvaluateExpression=true); // this would effectively replace "a/2" with "2.5" prior to compilation
end ParameterTest;

有什么已知的方法可以实现我所追求的目标吗?或任何其他 thoughts/suggestions?

我想像下面这样的模型可以满足您的要求。

model ParameterTest
  parameter Real a = 5;
  parameter Real bVal = 0;
  parameter Real b = if evaluateExpression then a/2 else bVal;
  parameter Boolean evaluateExpression = true;
end ParameterTest;

我添加了一个布尔参数 evaluateExpression,它将影响 b get 的计算或使用参数 bVal。 在 OpenModelica (OMEdit) 中,您可以通过在仿真时将 evaluateExpression=falsebVal 更改为某个值来更改 b 的值。