如何在没有加载文件错误的情况下运行 OpenModelica OMPython 示例模型?

问题描述

我正在尝试使用 ModelicaSystem python 模块模拟 OpenModelica 示例模型。但是我在其构造函数中收到以下错误。如下:

代码

import numpy as np
from matplotlib import pyplot as plt
import pyfmi
from OMPython import OMCSessionZMQ
from OMPython import ModelicaSystem

omc = OMCSessionZMQ()

model_path = '/usr/lib/omlibrary/Modelica 3.2.3/Electrical/'

omc.sendExpression('loadModel(model_path + Machines.mo)')

mod = ModelicaSystem(model_path + 'Machines.mo','Modelica.Electrical.Machines.Examples.AsynchronousInductionMachines.aimC_Inverter')

错误

loadFile Error: Error: Failed to insert class Machines within Modelica.Electrical;

 the available classes were:

有人可以帮我吗?

解决方法

我承认 User's Guide on OpenModelica Python Interface 目前还不清楚。 ModelicaSystem 还缺少从路径中的标准库加载模型的简单方法。

loadModel 是加载 Modelica 标准库 (MSL) 的函数,请参阅 OpenModelica Scripting API for loadModel。你不能用它加载文件。 如果要使用 omc.sendExpression,则需要使用 loadFile 从 Python 界面加载特定文件。

如果您想为 MSL 示例创建一个 ModelicaSystem,我建议您加载所有 MSL 包:

from OMPython import OMCSessionZMQ
from OMPython import ModelicaSystem

omc = OMCSessionZMQ()
model_path = '/usr/lib/omlibrary/Modelica 3.2.3/package.mo'
mod = ModelicaSystem(model_path,'Modelica.Electrical.Machines.Examples.AsynchronousInductionMachines.AIMC_Inverter')

您不能只加载 /usr/lib/omlibrary/Modelica 3.2.3/Electrical/Modelica 3.2.3/Electrical/Machines.mo,因为它仍然取决于 MSL 3.2.3。 在 OMEdit 中,您会得到更精确的错误消息,但在 Python 中,您只会得到该消息的第一行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...