Modelica MSL CombitMetable-如何在编译时只设置表的大小?

Modelica MSL CombitMetable-如何在编译时只设置表的大小?,modelica,fmi,Modelica,Fmi,我已经声明使用MSL CombitMetable,并将自己的代码替换为类似的函数。有没有办法在编译时只指定表的大小,然后再给出表的值 下面的声明代码有效 CombiTimeTable pump( smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, extrapolation = Modelica.Blocks.Types.Extrapolation.HoldLastPoint,

我已经声明使用MSL CombitMetable,并将自己的代码替换为类似的函数。有没有办法在编译时只指定表的大小,然后再给出表的值

下面的声明代码有效

    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]);
但我希望避免给出表伪值。MSL的文档并没有表明这是可能的,但这里也许有一些方法可以做到这一点


我通常将Modelica代码编译为FMU,并在Python脚本中设置参数。可以从文件中读取CombitMetable信息,但为了简单起见,我希望在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];
它使用了正确大小的未指定表


但是,工具可能需要特殊设置(Dymola似乎需要高级。IssueErrorForUnassignedParameter=false)-和/或生成默认值,如0。是否可以从文件中指定表格数据,即tableFromFile=true?通过这种方式,您不需要以明确的方式关注表格行数,因为所有这些都是在Modelica外部函数代码中处理的。

此解决方案的缺点是表格是在外部处理的。我当然可以给它起一个像pump_table这样的名字,以使关系更清晰,但仍然是一个与所有其他参数不同的名字。我希望这里毕竟是CombitMetable中的一些大小参数。链接到MSL中的文档毕竟没有那么完整。目前我看不到解决这个问题的方法,因为表已经有了默认值。在未来,它可能会用于CombitMetable泵(…,重新声明参数实表[6,2]=中断);-但我不确定它是否更具可读性。我知道,从文件中指定一个表可以在编译时为您提供表大小的灵活性,我正在寻找这种灵活性,因此我认为在编译时不使用文本文件是可能的。但似乎不是。不,我不想让表有额外的文件来跟踪。一切都应该用FMU和Python脚本来处理。那是我的愿望。你的愿望实现了。额外的文件(如表数据)作为FMU(=压缩存档)中的资源处理。听起来很有趣。这是FMU 2.0还是即将推出的FMU 3.0?我在哪里可以读到更多关于它的信息?