【问题标题】:Differences between executable files generated by Dymola and OpenModelicaDymola 和 OpenModelica 生成的可执行文件的区别
【发布时间】:2021-05-19 07:46:55
【问题描述】:

我正在考虑使用由 Dymola (dymosim.exe) 或 OpenModelica (model_name.exe) 生成的可执行文件对同一模型进行参数化仿真。 我想知道,这两个 .exe 文件和相关的输入文件有什么区别吗? (对于 Dymola 是 dsin.txt,对于 OpenModelica 是 model_name_init.xml)。

关于文件大小,我可以看到 Dymola 文件更小。但我也想知道脚本输入文件的执行速度和灵活性。 最后,由于 Dymola 是一款商业软件,dymosim.exe 文件是否可以公开共享?

【问题讨论】:

  • 您是否考虑过使用 FMI (fmi-standard.org)?这将为您提供一个干净的接口定义和一个很好的起始基础,例如使用 FMPy (github.com/CATIA-Systems/FMPy)。
  • 我想到了,但我想到.exe文件主要是因为两个原因:1)我对FMI不是很熟悉,2)实际的参数化过程应该运行在幕后,因为我已经有了一种 GUI。我仍然可以使用 FMI 方法,但问题是:有什么优势?如果我理解正确,FMI 方法的一个优点可能与在不同操作系统(Windows、macOS 和 Linux)中实现该过程会更容易这一事实有关

标签: modelica dymola openmodelica


【解决方案1】:

我会为 OpenModelica 写这个,Dymola 的人可以添加他们自己的。

我建议使用 FMU 而不是可执行文件和一些(共同)模拟框架,如 OMSimulator(通过 Python 脚本)或其他一些框架(PyFMI 等)。在此处查看示例: https://www.openmodelica.org/doc/OMSimulator/master/html/OMSimulatorPython.html#example-pi

请注意,如果您有表格等资源,如果您使用 Modelica URI,这些资源将被放入 FMU:modelica://LibraryName/Resource/blah。但是,对于生成的可执行文件,您需要将它们与 exe 一起提供,并且它们需要位于另一台机器上的特定目录中。此外,您需要为 FMU 的可执行文件提供相关的 DLL,因为它们是静态编译的,所以不需要(如果您有在模型中调用的外部 dll,则大多数情况下是不正确的)。

模拟速度取决于模型,有时其中一个更快。

关于 OpenModelica 支持哪些库,您可以查看库覆盖率: https://libraries.openmodelica.org/branches/overview-combined.html

如果您仍想使用可执行文件,以下是它们的命令行参数列表:https://www.openmodelica.org/doc/OpenModelicaUsersGuide/latest/simulationflags.html

如何通过可执行文件进行参数扫描: https://openmodelica.org/doc/OpenModelicaUsersGuide/latest/scripting_api.html#simulation-parameter-sweep

【讨论】:

  • 只是为了确保我理解。基本上,如果我用 OpenModelica 导出一个 FMU,然后分发给其他人,这些人是否能够使用 PyFMI 模拟 FMU?
  • 是的,或者任何其他基于 FMI 的仿真工具。
  • 关于 .exe 方法:我刚刚仔细查看了 model_name_init.xml 文件,我可以看到第 10 行(至少在我的文件中)说“OPENMODELICAHOME”,它似乎指向与安装 OpenModelica 相关的路径。此外,还有几行“fileName”行指向存储用于仿真的 modelica 模型(.mo 文件)的路径。这是否意味着其他用户也需要拥有 .mo 文件?如果是,FMU 方法是否也是这种情况?
  • 这些是用于调试的,因此您不需要安装或库。对于 exe,您将需要:Model.exe Model_init.xml Model_info.json 和所需的 DLL。对于 1.17.0,您只需要 libstdc++-6.dll,对于 1.18.0,您需要更多,因为我们动态链接 exe。
  • 当您说“对于生成的可执行文件,您需要将它们与 exe 一起发送,并且它们需要位于另一台机器上的特定目录中”,您的意思是我无法创建相对路径为他们?我现在实际上遇到了这样的问题。基本上,我有一个由 Modelica 模型读取的外部文件,但我无法弄清楚如何通过相对路径使其可用。我试图把这个文件放在 OpenModelica 工作目录中,但我猜这里有一个问题,因为 OpenModelica 在运行模拟时会创建子文件夹。有什么解决方法吗?
【解决方案2】:

对于 Dymola:

如果您拥有适当的二进制导出许可证,您可以生成一个可以分发的dymosim.exe

参数扫描可以在 Dymola 中运行(脚本自动生成),也可以从 Python 等中运行。

但是,以这种方式运行参数扫描不仅使用dsin.txt,还使用一些附加文件。有两个原因:

  • 减少了启动/停止 dymosim.exe 的开销,尤其是对于小型模型。
  • 自动并行化。

dymosim 的那部分目前在手册中没有很好的记录,但是你可以运行:

  • dymosim -M 默认扫描基于两个 csv 文件(multIn.csvmultOutHeader.csv)生成第三个(multOut.csv
  • dymosim -M -1 mIn.csv -2 mOutH.csv -3 mOut.csv 如果你想要不同的文件名
  • dymosim -M -n 45生成正常轨迹文件,dsres45.mat, dsres46.mat, ...
  • dymosim -h求帮助
  • dymosim -s普通模拟
  • 如果你真的很大胆,你可以通过管道与dymosim.exe 进行参数扫描

另一种可能性是使用 FMU。

【讨论】:

  • 您是否发现 dymosim.exe 和 FMU 这两种方法在计算时间上有何差异?从您的回答中,我可以看到 dymosim.exe 方法在这方面可能具有一些优势,因为它可以减少启动/停止和自动并行化的开销。如果我使用 FMU 方法,这些选项也可能吗?但也许我在这里遗漏了一个更普遍的问题:我可以直接使用 Python 模拟 Dymola 导出的 FMU(例如使用 FMPy)吗?还是我需要额外的软件?
  • 生成的 FMI(可能需要许可证)应该在 FMPy 中工作,并且您应该能够通过在程序中只加载一次 FMU 来减少 FMU 的开销。 (对于并行执行,每个线程加载一个 FMU 并并行运行它们可能是最简单的。)
  • 当您说“可能需要许可证”时,您的意思是,如果我生成一个 FMU,并将这个 FMU 提供给我的一位同事,比如说,他/她需要安装有许可证的 Dymola?
  • 不,拥有 Dymola 许可证就足够了 - 但我不记得您是否需要一些特殊选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 2013-05-16
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
相关资源
最近更新 更多