将库添加到dymola后,我无法通过buildingpy将其连接到Python

时间:2018-08-16 15:30:57

标签: python-3.x dymola

在我打开Dymola时,通过修改以下文件直接加载了一些库:“ c:/ program files(x86)/ dymola 2016 fd01 / insert / dymola.mos”,并添加了以下几行:

  

Utilities.setenv(“ MODELICAPATH”,“ C:/ Users / hrameh / Desktop / EnergySystems_V2-73p / ModelicaLibraries / ExternalMedia-master / Modelica / ExternalMedia 3.2.1”);   openModel(“ C:\ Users \ hrameh \ Desktop \ EnergySystems_V2-73p \ ModelicaLibraries \ ExternalMedia-master \ Modelica \ ExternalMedia 3.2.1 \ package.mo”);   Utilities.setenv(“ MODELICAPATH”,“ C:\ Users \ hrameh \ Desktop \ EnergySystems_V2-73p \ ModelicaLibraries \ EnergySystems”);   openModel(“ C:\ Users \ hrameh \ Desktop \ EnergySystems_V2-73p \ ModelicaLibraries \ EnergySystems \ package.mo”);   Utilities.setenv(“ MODELICAPATH”,“ \ illuin \ users $ \ hrameh \ Mesdocuments \ Dymola”);

该模型在Dymola中完全正常。但是,当尝试使用buildingspy库通过Python模拟模型时,模拟会失败。有什么建议可以帮助我找到解决方案吗?

1 个答案:

答案 0 :(得分:0)

我猜你的问题是,buildings依赖于buildingpy调用dymola.exe时Dymola获取的默认工作目录路径-但是dymola.mos中的openModel-commands会更改工作目录。

使用

openModel("<path-to-package.mo>", changeDirectory=false); 

避免这种情况。

此外,对于较新的Dymola版本,必须选择以下选项以确保不使用已保存的启动目录:编辑->选项->设置->不保存启动目录。 由于您当前正在使用Dymola 2016 FD01,因此目前这对您来说不是问题。

当buildingpy模拟模型时,通过显示Dymola窗口可以检测到此类问题。您可以使用showGUI进行此操作,如以下最小示例所示:

import os
from buildingspy.simulate.Simulator import Simulator
os.environ["PATH"] += os.pathsep + "C:/Program Files (x86)/Dymola 2016 FD01/bin"
s = Simulator("Modelica.Blocks.Examples.PID_Controller", "dymola")
s.showGUI(show=True)
s.simulate()

有关您的示例的其他提示:

  • 您不需要Utilities.setenv()调用即可打开库。 openModel就足够了
  • 我不会使用Utilities.setenv,因为这是一个未记录的文件,而且显然是一个非常旧的软件包(创建日期是2004年)。请改用Modelica.Utilities.System.setEnvironmentVariable。这样,您也不会在软件包浏览器中加载额外的软件包
  • 使用文件/insert/dymola.mos有一些缺点:
    • 每个用户都在系统范围内使用它,因此它不应包含用户目录的路径
    • 如果安装新的dymola版本,则必须再次编辑此安装的insert / dymola.mos文件
  • dymola.mos的替代品
    • 在Dymola 2016 FD01中,使用文件setup.mos来添加openModel命令(位于C:\ Users \\ AppData \ Roaming \ Dynasim中)
    • 较新的Dymola版本不再具有setup.mos,但没有setup.dymx的设置,没有startup.mos的用户命令(用于打开库等)