在没有 Modelica CombiTable1D 实例的情况下,无法使用自定义 CombiTable1D 初始化模型
Posted
技术标签:
【中文标题】在没有 Modelica CombiTable1D 实例的情况下,无法使用自定义 CombiTable1D 初始化模型【英文标题】:Cannot initialize model with custom CombiTable1D without instance of Modelica CombiTable1D 【发布时间】:2021-03-02 05:38:06 【问题描述】:我的目标是创建一个 1D/2D 查找表,它可以读取 JSON 文件中可变大小的数组,而无需指定静态大小的 Modelica 数组参数。
我开始尝试扩展 ExternData 以根据 github 问题中的建议实现自定义表:https://github.com/modelica-3rdparty/ExternData/issues/34#issuecomment-718552210
概述的步骤是:
创建您自己的 CombiTable 副本,修改它以接受数据访问对象和稳定名称,请参见下面的代码 sn-p 创建 ExternalCombiTable1D 的副本,它会引用您自己的 CombiTable 数据对象 创建一个直接从json读取数据并将其存储到表对象中的c函数,然后将其传递给MSL 函数 ModelicaStandardTables_CombiTable1D_init2
我已经实现了所有三个步骤来制作自定义 CombiTable1D 块,该块从 ExternData JSON 函数填充动态大小的表。封装代码如下:
https://github.com/vsskanth/ExternData.CustomTable
在这个包中,有 3 个与这个问题相关的实验。所有实验都能编译,但只有一个实验有效:
ExternData.Examples.JSONTestVariableArrayBroken.mo
- 自定义 CombiTable1D 的单个实例 - 未初始化
ExternData.Examples.JSONTestArrayCombi2DBroken.mo
- 自定义 CombiTable1D 和 Modelica CombiTable2D 实例 - 未初始化
ExternData.Examples.JSONTestVariableArrayWorking.mo
- 自定义 CombiTable1D 和几个 Modelica CombiTable1D 实例 - 按预期工作
我试图找出为什么我的自定义 CombiTable1D 实现仅在实验中至少存在一个 Modelica CombiTable1D 实例时才会初始化和运行。我确保在我自己的实现中链接ModelicaStandardTables.h
和ModelicaStandardTables.lib
库,检查dsbuild.txt
中的警告并且编译似乎没问题。
由于某种原因,自定义 ExternalCombiTable1D 外部对象 (ExternData.Types.ExternalCombiTable1D
) 的构造函数没有返回,因此当没有 Modelica CombiTable1D 表的实例时,自定义 CombiTable1D 块 (ExternData.Tables.CombiTable1D
) 无法初始化模型。
我将不胜感激任何关于为什么会发生这种情况以及如何克服它的想法。
IDE - Dymola 2021x 操作系统 - Windows 10 编译器 - Visual Studio 2019【问题讨论】:
您的解决方法是否已被github.com/modelica-3rdparty/ExternData/issues/…(即更新的库github.com/tbeu/ModelicaTableAdditions)淘汰? @tbeu 是的,这使这个问题过时了。 【参考方案1】:@tbeu 已经足够慷慨地将 JSON 支持添加到 https://github.com/tbeu/ModelicaTableAdditions 这使这个问题变得毫无意义,因为我可以将那个包与 ExternData 一起使用。
但为什么会发生这种情况仍然很有趣。似乎是 Dymola 翻译错误。
【讨论】:
以上是关于在没有 Modelica CombiTable1D 实例的情况下,无法使用自定义 CombiTable1D 初始化模型的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 Open Modelica 编译器进行展平步骤后停止编译过程?