1

我的目标是能够在 Ubuntu 18.04 中运行 OpenModelica 生成的 FMU,然后在 Python 3 环境中使用 PyFMI 运行这些 FMU。

我按照这里的 PyFMI 安装大纲https://jmodelica.org/pyfmi/installation.html

到目前为止,我已经使用 Conda 成功安装了 Python3、Numpy、Scipy、lxml 和其他一些包,并使其与我的一些 Python 示例一起工作。但我会很感激一些详细的建议如何

  1. 安装 FMI 库 - 我不知道如何设置标志 fmil-home
  2. 安装 Assimulo

在那之后,我想我们已经准备好从安装大纲“python setup.py install —fmil-home=/path/to/fmil”

感谢一些基本的建议!

4

2 回答 2

2

在这里,我总结了关于如何使用 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 开发工作的人都知道并调查了它。

于 2020-01-14T10:14:29.983 回答
0

我必须编译所有内容以使其工作,因此 conda 可能是一个更简单的解决方案。这对我有用:

# change myUser to your user in the code below!
# install the dependencies (maybe you need more, I might have installed some already)
pip3 install numpy
pip3 install Cython
# get FMIL and build it
git clone https://github.com/modelon-community/fmi-library
cd fmi-library
mkdir build-fmil
cd build-fmil
cmake -DFMILIB_INSTALL_PREFIX=/home/myUser/fmil ..
make install test
# now you should have the FMIL library in:
# /home/myUser/fmil
# export that to terminal before installing PyFMI
export FMIL_HOME=/home/myUser/fmil

# get and install sundials
wget https://computing.llnl.gov/projects/sundials/download/sundials-3.0.0.tar.gz
tar -xf sundials-3.0.0.tar.gz
cd sundials-3.0.0
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/home/myUser/sundials ..
make install

# get and install lapack and blas
https://github.com/Reference-LAPACK/lapack/archive/v3.9.0.tar.gz
tar -xf v3.9.0.tar.gz
cd lapack-3.9.0/
mkdir build
cmake -DCMAKE_INSTALL_PREFIX=/home/myUser/lapack ..
make install

# get Assimulo
git clone https://github.com/modelon-community/Assimulo
cd Assimulo/
sudo python3 setup.py install --sundials-home=/home/myUser/sundials --blas-home=/home/myUser/lapack/lib --lapack-home=/home/myUser/lapack

# get PyFMI
git clone https://github.com/modelon-community/PyFMI/
cd PyFMI
sudo python3 setup.py install --fmil-home=/home/myUser/fmil

# now you should have everything installed for your myUser
# you need to do:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/myUser/sundials/lib/
# before running PyFMI as all these libraries are installed for the local user
# note that you can install all these at the system level if you want, just do:
# -DCMAKE_INSTALL_PREFIX=/usr/local and -DFMILIB_INSTALL_PREFIX=/usr/local
于 2020-01-08T12:23:29.360 回答