如果没有Modelica CombiTable1D实例,则无法使用自定义CombiTable1D初始化模型

如果没有Modelica CombiTable1D实例,则无法使用自定义CombiTable1D初始化模型,modelica,dymola,Modelica,Dymola,我的目标是创建一个1D/2D查找表,该表可以读取JSON文件中的可变大小数组,而无需指定静态大小的Modelica数组参数 我首先尝试扩展externda,根据github问题中的建议实现一个自定义表: 概述的步骤是: 创建您自己的CombiTable副本,修改它以接受数据访问对象和稳定名称,请参见下面的代码段 创建ExternalCombiTable1D的副本,该副本将引用您自己的CombiTable数据对象 创建一个c函数,直接从json读取数据并将其存储到表对象中,然后将其传递给MSL

我的目标是创建一个1D/2D查找表,该表可以读取JSON文件中的可变大小数组,而无需指定静态大小的Modelica数组参数

我首先尝试扩展externda,根据github问题中的建议实现一个自定义表:

概述的步骤是:

  • 创建您自己的CombiTable副本,修改它以接受数据访问对象和稳定名称,请参见下面的代码段
  • 创建ExternalCombiTable1D的副本,该副本将引用您自己的CombiTable数据对象
  • 创建一个c函数,直接从json读取数据并将其存储到表对象中,然后将其传递给MSL 函数模型StandardTables\u CombiTable1D\u init2
我已经实现了所有三个步骤来创建自定义CombiTable1D块,该块通过ExterndaJSON函数填充动态大小的表。包裹代码如下:

在这个软件包中,有3个与这个问题相关的实验。所有实验均可编译,但只有一个实验有效:

  • externda.Examples.JSONTestVariableArrayBroken.mo
    -自定义CombiTable1D的单个实例-不初始化
  • externda.Examples.jsontestarraycombi2dbreak.mo
    -自定义CombiTable1D和Modelica CombiTable2D实例-未初始化
  • externda.Examples.JSONTestVariableArrayWorking.mo
    -自定义CombiTable1D和几个Modelica CombiTable1D实例-按预期工作
我试图找出为什么我的自定义CombiTable1D实现只有在实验中至少存在一个Modelica CombiTable1D实例时才会初始化和运行。我确保在我自己的实现中链接了
ModelicaStandardTables.h
ModelicaStandardTables.lib
库,在
dsbuild.txt
中检查了警告,编译似乎很好

由于某些原因,自定义ExternalCombiTable1D外部对象(
ExternData.Types.ExternalCombiTable1D
)的构造函数不返回,因此自定义CombiTable1D块(
ExternData.Tables.CombiTable1D
)当模型中没有Modelica CombiTable1D表的实例时,无法初始化

如果您能想到为什么会发生这种情况以及如何克服它,我将不胜感激

  • IDE-Dymola 2021x
  • 操作系统-视窗10
  • 编译器-Visual Studio 2019

@tbeu已经慷慨地将JSON支持添加到 这使得这个问题变得毫无意义,因为我可以将这个包与externda一起使用


然而,为什么会发生这种情况仍然很有趣。似乎是Dymola翻译错误。

您的解决方法是否因更新库而过时?@tbeu是的,这使此问题过时。