1

我正在研究一个包含大量数据的复杂 Modelica 模型,我需要继续进行模拟,直到我终止模拟过程,甚至可能持续几天,所以 .mat 文件可能会变得非常大,我遇到了麻烦如何进行数据处理。所以我想问是否有任何方法可以让我

  1. 在模拟期间的固定时间步后输出我需要的数据,但在模拟后不使用 .mat 文件。我正在考虑使用 Modelica.Utilities.Stream.Print 函数将我需要的数据打印到 CSV 文件中,但是我必须编写大量代码来打印我需要的每个变量,所以我认为应该有更好的解决方案.
  2. 在固定的时间步内删除.mat文件,这样我PC上存储的.mat文件就不会太大,也不会影响Dymola的正常模拟。
4

2 回答 2

1

很久以前,我写了一个小 C 程序,它用两个线程运行 Dymola 的可执行文件。其中之一负责在超过输入时间限制后终止整个模拟。我在 Dymola 给定的标准 mfile 中使用了这个 C 程序的可执行文件。我认为有了一些黑客能力,就可以满足上述要求。

看看https://github.com/Mathemodica/dymmat但是我需要警告相关的 mfiles 用于特定类型的模型,并且该软件长期以来没有维护。但是,C 程序的想法是可以重现的。

于 2021-04-02T17:11:27.237 回答
1

我没有对此进行全面测试,因此请将此视为“灵感来源”,而不是完整答案:

在 Dymola 2021 发行说明的“4.3.6 在模拟期间保存定期快照”部分中,您将找到执行以下操作的说明:

可以指示模拟器在模拟过程中打印模拟结果文件“dsfinal.txt”快照。

这可以使用模拟设置选项“完整结果快照”定期完成,但我认为对于您的情况,使用函数从模型中触发它可能更有用Dymola.Simulation.TriggerResultSnapshot()。还给出了一个简单的例子:

when x > 0 then
  Dymola.Simulation.TriggerResultSnapshot();
end when;

此函数的一个属性也可以提供帮助,因为它默认创建多个文件而不覆盖它们:

默认情况下,会在快照文件名中添加时间戳,例如:“dsfinal_0.1.txt”。

创建的格式dsfinal_[TIMESTAMP].txt起初有点压倒性,因为它包含初始化模型的所有信息,但应该有你需要的一切......

因此,一些工作转移到了后期处理上,因为您可能需要读取多个文件,但我认为这是一个可以接受的折衷方案。

于 2021-04-06T04:59:21.407 回答