我有一个自定义包,我发现自己在 Dymola 模型中重复使用它,我想将此包放在一个公共目录中,该目录在我启动 Dymola 时会自动加载。我目前的策略是在加载我正在处理的模型时加载自定义包,然后保存总计。这并不优雅,因为自定义包的内容最终保存在我硬盘上的多个位置,如果我更改其中一个,更改不会反映在任何地方。我想要一种更强大的方式来将此自定义包分发到我的所有模型。有没有办法告诉 Dymola 每次都自动加载我的自定义包装?
5 回答
诀窍是将以下几行添加到 c:/Users/USERNAME/AppData/Roaming/Dynasim 中的 settings.mos 中:
Utilities.setenv("MODELICAPATH", "C:\Users\USERNAME\Documents\Dymola");
openModel("c:\Users\USERNAME\Documents\Dymola\UserDefined\package.mo")
第一行将目录添加到 Dymola 用于搜索在模型第一次运行之前尚未加载的包的路径中,第二行加载指定的包。这两个命令可能有些多余,但我都这样做是因为除了加载 UserDefined 包之外,我还想确保我的自定义包在路径上。
两个建议。首先,您需要将您的包添加到 MODELICAPATH。您必须查阅 Dymola 文档才能准确了解您需要做什么。但通常,这意味着您必须设置一个环境变量,该变量提供;
要搜索您的包的目录列表(分隔)。现在它将把它放在你的路径中,这样它就可以自动找到它,但在需要它之前它不会加载它。
如果您希望它始终出现在包浏览器中,您可能需要设置一个 .mos 文件(脚本)来加载它。Dymola 具有该功能,但您必须阅读手册以了解必须调用该脚本的内容以及 Dymola 期望在何处找到它。
我希望这会有所帮助。
在 Dymola 2018 -> insert -> dymola.mos 的安装文件夹中,我添加了以下行:
Utilities.setenv("MODELICAPATH", "C:\Users\XXXX\Documents\Dymola");
openModel("C:\Users\XXXX\Documents\Dymola\DCOL\package.mo");
openModel(“C:\Users\XXXX\Documents\Dymola\Annex60 1.0.0\package.mo”);
现在我没有得到实用程序语句,因为没有它,DCOL 包可以很好地加载,并且在包菜单中添加的“实用程序”包是无用的。但它并没有打开附件60 包。
我尝试了很多不同的组合,但无法加载多个包。我怀疑文本作品中也添加了“cd”和“Advanced.ParallelizeCode”。
自 Dymola 2017 FD01 以来,已接受的答案不起作用,因为不再使用文件 settings.mos。用户设置存储在 setup.dymx 文件中,位于
C:\Users\USERNAME\AppData\Roaming\DassaultSystemes\Dymola
与 setup.mos 文件相比,您不能在 setup.dymx 中包含带有 modelica 脚本的自定义行。
使用 dymola.mos的答案仍然有效,但您需要管理员权限才能修改此文件。
这是一个适用于所有 Dyomola 版本的简单解决方案:您可以将 .mos-script 作为第一个参数传递给 dymola.exe。
这可以像这样完成:
- 使用 openModel() 等命令在某处创建一个 .mos 脚本。
- 创建 Dymola.exe 的桌面快捷方式
- 打开快捷方式的属性并在目标文本字段中添加 .mos 脚本的路径。然后它看起来像这样:
"C:\Program Files\Dymola 2018 FD01\bin64\Dymola.exe" "C:\<some-path>\startup.mos"
- 使用桌面快捷方式启动 Dymola。该脚本将被执行,最终的错误或消息将显示在“命令”窗口中
另一个建议您不需要将包硬编码到操作系统的环境变量中(对于没有经验的程序员来说可能更安全):
- 转到安装 Dymola 的文件夹(例如 C:\Program Files\Dymola 2020)。
- 在插入文件夹中搜索 Dymola.mos 文件。“插入”文件夹
- 打开脚本(例如,在记事本++中)
- 在此处使用 openModel 语句将链接添加到您的 Dymola-library-package.mo 文件,例如openModel("C:/IDEAS/package.mo"); Dymola.mos 脚本
- 保存脚本。现在,每次打开 Dymola 时,您的库都会自动加载。