gpt4 book ai didi

filepath - Dymola 中的相对(modellica ://. ..)路径名出现问题

转载 作者:行者123 更新时间:2023-12-05 09:29:56 27 4
gpt4 key购买 nike

有史以来第一个 Stack Overflow 帖子!

我在 Dymola 2021x 中工作,我正在尝试运行一位同事提供给我的模型。其中一个组件的 package.mo 文件正在加载一些文件

```fileName=ModelicaServices.ExternalReferences.loadResource("modelica://Master_Branch/components.../filename.mos")```

现在,据我所知,应该发生的是该路径中的“modelica://”是工作目录,这样无论我将项目文件夹。但是,确实发生了以下情况:

当我尝试模拟组件时,我在翻译过程中收到消息,提示找不到所有用“modelica://...”引用的文件。我收到如下错误:

Not possible to open file "C:/Program Files/Dymola 2021x/Modelica/Master_Branch/modelica:/Master_Branch/.../filename.mos" for reading:
Invalid argument

现在 我认为发生的事情是程序无法识别 modelica://应该是工作目录,而是试图在工作目录中找到目录 modelica://.

我的同事没有得到这个错误。我们都不太精通 Dymola,所以我想知道是否有一些我可能遗漏的基本知识?作为引用,我使用的库是:

MSL3.2.3
ModelicaServices 3.2.3
AixLib 0.10.7
BuildingSystems 2.0.0-Beta
Modelica_Synchronous 0.92.2
NCDataReader2 2.5
SDF 0.41
Modelica_DeviceDrivers 1.7.0
ExternData 2.5.0

我试着在 https://specification.modelica.org/v3.4/Ch13.html 查看 modelica 文档(13.2.3 外部资源)但并没有从中得到多少,以及 load.Resource() 命令的文档位于 https://doc.modelica.org/om/Modelica.Utilities.Files.loadResource.html

欢迎任何帮助或建议!欢呼和感谢,蒂斯

最佳答案

函数 ModelicaServices.ExternalReferences.loadResource() 不返回工作目录的路径。它有不同的用途——见下文。如果您的加载库列表是正确的,它将不起作用,因为您必须引用加载的类。

引用的错误信息看起来很奇怪。但是,如果没有不完整的示例,就很难在这种特定情况下提供帮助。不过,我会尝试提供一些可能有帮助的一般信息。

获取工作目录

要获取当前工作目录,请使用:

Modelica.Utilities.System.getWorkDirectory();
= "C:/tmp/dymola"

loadResource()的使用

loadResource() 允许您检索与 modelica 库一起存储在硬盘上的资源(非 modelica 文件)的绝对文件路径。典型用法是引用图像、脚本或数据集。

例如,您可以通过以下调用获取 Modelica 库在硬盘上的位置:

import Modelica.Utilities.Files.loadResource;
loadResource("modelica://Modelica/");
= "C:/Program Files/Dymola 2022x/Modelica/Library/Modelica 4.0.0/"

这将返回当前加载的 Modelica 库所在目录的绝对文件路径。现在您可以扩展此调用以引用资源:

loadResource("modelica://Modelica/Resources/Scripts/Dymola/Mechanics/Rotational/CoupledClutches.mos")
= "C:/Program Files/Dymola 2022x/Modelica/Library/Modelica 4.0.0/Resources/Scripts/Dymola/Mechanics/Rotational/CoupledClutches.mos"

因此传递给 loadResource 的参数可以分解为:

[modelica-uri][top-level-package]/[relative-file-path]

与:

  • [modelica-uri]: modelica://
  • [package]:当前加载包的绝对类路径
  • /:斜杠很重要。从 modelica 规范:

    Any Modelica-scheme URI containing a slash after the package-name is interpreted as a reference to aresource

  • [relative-file-path]:文件路径,相对于package
  • 的位置

记住这一点:

  • 必须加载引用的类
  • loadResource() 不检查引用的文件是否存在
  • 在 Windows 上也使用正斜杠
  • 当你只是引用一个没有资源的库时,不要忘记结尾的斜线。
    • 这有效:loadResource("modelica://Modelica/")
    • 这不起作用:loadResource("modelica://Modelica")

ModelicaServices 与 Modelica.Utilities

ModelicaServices.ExternalReferences.loadResource() 等同于Modelica.Utilities.Files.loadResource(),但我建议使用后者。 Modelica 库对用户可见。 ModelicaSerivces 也由 Dymola 在启动时自动加载,但它在包浏览器中隐藏。

关于filepath - Dymola 中的相对(modellica ://. ..)路径名出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70198203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com