如何解决具有固定大小错误的组件数组?

时间:2016-06-15 21:12:23

标签: arrays modelica dymola

我有一个带有维度[x,y]的端口的类,它连接到另一个具有匹配端口的类。现在我想通过外部函数调用为这些变量[x,y]提供值,其中我基本上读取.xml文件并获取x和y的值。但是Dymola给出了一个错误,因为在编译期间它出现了一个非固定大小的数组。

附有错误的屏幕截图。enter image description here

2 个答案:

答案 0 :(得分:3)

数组大小是结构参数,它们通常不依赖于外部函数调用,因为它们应该在编译时知道。但是,例如OpenModelica支持这一点,其中构建并调用外部函数的dll,并在模型编译期间获取结果。

在所有工具中支持此功能的唯一方法是使用外部工具生成模型,该工具读取xml并使用读取的值更改.mo文件。 你可能有类似Parameters.mo的东西:

package Parameters
  constant Integer nTube = <EXTERN_NTUBE>;
  constant Integer nSeg = <EXTERN_NSEG>;
end Parameters;

并且您的外部工具将读取XML并绑定在Parameters.mo中,然后您可以通过Parameters.nTube和Parameters.nSeg在模型中使用它们。也许最好给出一些默认值,以便它可以直接使用这个文件:

package Parameters
  constant Integer nTube = 1;
  constant Integer nSeg = 2;
end Parameters;

然后您的外部工具将在编译之前用所需的值替换1和2。

答案 1 :(得分:3)

这应该在Dymola 2017中得到改进(无需修改Modelica代码)。在早期版本的Dymola中,如果你翻译被称为计算nTube和nSeg的C函数,它应该可以工作。

如果这样做无效,则需要使用完整的代码来分析问题。