在这里,我总结了关于如何使用 OpenModelica 在 Xubuntu 18.04 上设置 PyFMI 的良好意见。来自 Modelon 的 Christian Winther 和 LiU 的 Adrian Pop 的意见并为此感到高兴。
安装遵循https://jmodelica.org/pyfmi/installation.html并进行了一些说明。
OpenModelica 安装在 Linux 上的 VM 上,您可以在此处获得https://openmodelica.org/download/virtual-machine
这是我所理解的所有 64 位软件。
使用conda安装比pip方便,如下图:
在此处下载适用于 Python 3 的 Miniconda https://docs.conda.io/en/latest/miniconda.html
安装 Miniconda3 并获得 Python 3.7 和一些软件包。很高兴通过以下方式更新 conda
$conda update conda
PyFMI 的安装现在只需通过以下命令完成:
$conda config --add channels conda-forge
$conda install pyfmi
在此安装过程中,还安装了 NumPy、Scipy、Lxml、Matplotlib 等关键软件包。根据上面提到的 PyFMI 主页,安装 wxpython 可能很有趣,但不是必需的。如果安装了它也应该使用 conda 来完成。
我们可以通过 Python 脚本以不同的方式与 FMU 进行交互。
a) 将 OpenModelica(或其他 Ubuntu 环境)生成的 FMU 与一些运行 FMU 并绘制结果的 Python 脚本 simu_FMU 一起放在文件夹 FMU_test 中。转到文件夹 FMU_test。以下命令运行 FMU 并绘制结果
$python3 simu_FMU.py
b) 可以通过以下方式安装与流行的 Jupyter notebook 交互的框架
$conda install ipython
$conda install jupyter
然后启动笔记本,从文件夹 FMU_test 执行以下命令
$jupyter notebook
然后打开网络浏览器,您可以从一个单元格运行 python 脚本,也可以直接与 FMU 交互并更改参数等。可以在每个单元格中执行几个 python 命令。单元格的结果显示在输出单元格中。Jupyter notebook 专注于一种研究仿真模型的顺序方法。图表中的所有模拟都必须在一个单元格中执行。
c) 具有 IPython 的交互式框架也会很有趣。通过这种方式,可以完成一种更加迭代的方法来处理模拟。像模拟,更改一些参数,再次模拟并在与以前相同的图表中绘制。
使用交互式 Python 窗口,使用以下命令启动
$ipython --pylab
需要设置命令“locale”如何读取文本文件
$import numpy as np
$import matplotlib.pyplot as pli
$from pyfmi import load_fmu
$import locale
$locale.setlocale(locale.LC_ALL, ‘en_US.UTF-8’)
$model = load_fmu(”FMU_example.fmu”)
模型在 FMU 中的表示方式具有一定的灵活性,OpenModelica 生成的模型包含并非所有供应商在其 FMU 中都有的 json 类型的文本文件,例如 JModelica.org 中没有。读取这个 json 文件需要语言环境的设置才能在 IPython 窗口中正确读取它。因此在 Jupyter 笔记本环境中不需要,但至少在那里没有负面影响。
在 PyFMI 的标准 (Windows) JModelica 安装中,使用 c) 进行交互。在 Ubuntu 18.04 中使用 JModelica 2.4 编译的 FMU 时,到目前为止测试的 Python 脚本在 Xubuntu 18.04 中的工作方式完全相同。测试包括 PyFMI model.simulate() 和 model.estimate()。
由 OpenModelica 1.14.1 和更高的开发版本编译的 FMU 可用于使用过程 mode.simulate() 进行仿真。然而,与 model.get() 和 model.set() 的交互表现出不同的行为。这可能是由于对 FMU 标准的不同解释,甚至是实施中的错误。从事 OpenModelica 开发工作的人都知道并调查了它。