【问题标题】:data processing of Dymola's result during simulation模拟过程中 Dymola 结果的数据处理
【发布时间】:2021-04-02 08:43:19
【问题描述】:

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

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

【问题讨论】:

  • 结果过滤有帮助吗? claytex.com/blog/…
  • 我不确定您要执行哪种分析。如果您只需要在写入变量时访问它们并且可以接受一些丢失并且没有历史记录......那么 OPC 可能是您最好的选择。我不确定 Dymola 是使用 OPC-DA(仅限 Windows)还是 OPC-UA
  • @sjoelund.se,我正在考虑使用 Modelic_DeviceDrivers 库通过 UDP 传输数据,但事实证明我必须通过组件连接每个变量,而且我有几千个变量,它将它们连接起来会花费太多精力。
  • 在模拟过程中修改结果 .mat 将无法可靠地工作,因为它是如何编写的。

标签: modelica data-processing dymola


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    在 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 的格式一开始有点压倒性,因为它包含了初始化模型的所有信息,但应该有你需要的一切......

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

    【讨论】:

    • 您还可以设置模型的输出间隔,跳过模拟的“无趣”部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多