使用ModelicaSystem加载Buildings库失败,求助参数编辑实现方案
问题
我可通过OMCSessionZMQ代码运行依赖外部Buildings库的RoomM模型仿真,但使用ModelicaSystem实现参数编辑时,代码执行失败,报错提示:
Notification: Skipped loading package Buildings (9.1.0,default) using MODELICAPATH C:/OpenModelica1.18.1-64bit/lib/omlibrary (uses-annotation may be wrong)
可运行代码(OMCSessionZMQ版本)
from OMPython import OMCSessionZMQ from OMPython import ModelicaSystem omc = OMCSessionZMQ() omc.sendExpression("loadModel(Modelica)") omc.sendExpression("loadFile(\"C:\\OpenModelica1.18.1-64bit\\lib\\omlibrary\\Buildings-9.1.0\\Buildings-9.1.0\\Buildings\\package.mo\")") omc.sendExpression("loadFile(getInstallationDirectoryPath() + \"/share/doc/omc/testmodels/RoomM.mo\")") omc.sendExpression("instantiateModel(RoomM)") omc.sendExpression("simulate(RoomM, stopTime=1.0)")
失败代码(ModelicaSystem版本)
mod=ModelicaSystem("C:/OpenModelica1.18.1-64bit/share/doc/omc/testmodels/RoomM.mo","RoomM", ["C:\\OpenModelica1.18.1-64bit\\lib\\omlibrary\\Buildings-9.1.0\\Buildings-9.1.0\\Buildings\\package.mo"])
解决方法
问题核心是ModelicaSystem的库路径参数使用逻辑错误,它需要传入库的根目录路径而非具体的package.mo文件路径,同时要确保核心Modelica库被正确加载。调整后的代码如下:
from OMPython import ModelicaSystem # 指定Buildings库的根目录(包含Buildings文件夹的上级目录) library_paths = ["C:\\OpenModelica1.18.1-64bit\\lib\\omlibrary\\Buildings-9.1.0\\Buildings-9.1.0"] # 初始化ModelicaSystem,开启自动加载Modelica核心库,并传入正确的库路径 mod = ModelicaSystem( "C:/OpenModelica1.18.1-64bit/share/doc/omc/testmodels/RoomM.mo", "RoomM", libraries=library_paths, loadModelica=True ) # 执行参数编辑与仿真 mod.setParameters({"someParameter": 123}) mod.simulate(stopTime=1.0)
关键说明
- ModelicaSystem的
libraries参数需要指向库的根目录,而非单个文件,这样OpenModelica才能识别库的完整结构与注解关系。 - 添加
loadModelica=True参数,确保Modelica核心库被自动加载,避免依赖缺失。 - 若仍有加载问题,可手动调用OMC命令补全加载逻辑:
mod.sendExpression("loadModel(Buildings)")
内容的提问来源于stack exchange,提问作者sophie
相关产品推荐
相关产品推荐

