Modelica MSL CombiTimeTable - 如何在编译时仅设置 table 的大小?

Modelica MSL CombiTimeTable - how to only set size of table at time of compilation?

我已声明使用 MSL CombiTimeTable 并替换我自己的代码以获得类似的功能。有没有办法在编译时仅指定 table 的大小,然后再给出 table 值?

以下声明代码有效

    CombiTimeTable pump(
        smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments,
        extrapolation = Modelica.Blocks.Types.Extrapolation.HoldLastPoint,
        table=[0,0; 1001,1; 1002,2; 1003,3; 1004,4; 1005,5]);

但我想避免提供 table 虚拟值。此块的 MSL 文档并未表明这是可能的,但这里可能有一些方法可以做到这一点?

https://doc.modelica.org/Modelica%203.2.3/Resources/helpMapleSim/Blocks/Sources/index.html#CombiTimeTable

我通常将 Modelica 代码编译成 FMU,并在 Python 脚本中设置参数。可以从文件中读取 CombiTimeTable 信息,但为简单起见,我想在 Python 脚本中包含 FMU 的所有参数。

视情况而定。你可以试试:

  CombiTimeTable pump(
        nout=1,
        smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments,
        extrapolation = Modelica.Blocks.Types.Extrapolation.HoldLastPoint,
        table=table);
  parameter Real table[6,2];

它使用了未指定的 table 合适的尺寸。

但是,工具可能需要特殊设置(Dymola 似乎需要 Advanced.IssueErrorForUnassignedParameter=false)- and/or 无论如何都会生成默认值,例如 0。

是否可以选择从文件中指定 table 数据,即 tableFromFile=true?这样你就不需要以显式方式关心​​ table 行的数量,因为它都在 Modelica 外部函数代码中处理。