LoginSignup
18
20

More than 5 years have passed since last update.

WindowsでModelicaとPythonを連携する

Last updated at Posted at 2017-01-14

お手軽にモデルベース開発環境を構築したい』で紹介した、ModelicaとPythonの連携方法についてです。

目的

下記のような操作を行うことが今回の目的です。

  • Modelicaで物理モデルを作成する。
  • 物理モデルをPythonのPyModelicaモジュール(JModelica)でFMU形式にコンパイルする。
  • FMUファイルをPythonのPyFMIモジュール(JModelica)で計算する。
  • 計算結果をPythonのMatplotlibモジュールでグラフ表示する。

環境設定

実行環境

  • Windows 10 (64bit)

Anaconda2のインストール

Anaconda_Logo.png

連成シミュレーション・マスタとしてのPython実行環境をAnacondaで構築します。後述のJModelicaがPython2 32bitのみに対応しているため、Anacondaもそれに対応したものを用います。(すでに別のPython環境がインストールされている場合も、追加でインストールすれば問題ないと思います。)

以下のページから『Python 2.7 version (32bit)』版のインストーラをダウンロードします。
Download Anaconda Now! | Continuum

ダウンロードしたインストーラを実行し、基本的にデフォルトのまま進めます。インストール先フォルダは C:\Anaconda2 に設定しておきます。

JModelicaのインストール

PythonモジュールのPyModelicaとPyFMIを利用するため、JModelicaをインストールします。

JM_1.PNG

下記ページから最新のインストーラをダウンロードします。
Download | JModelica.org

Pythonモジュールインストール時、インストール先が C:\Anaconda2 になるように選択します。

Modelicaモデルを作成する

今回は『WindowsでOpenModelicaを使う』で紹介した Modelica.Thermal.HeatTransfer.Exsamples.Motor をModelica形式で保存したものを用います。

ozawaat/FMI_Motor』の Motor.mo に保存しておきましたのでこちらをご利用ください。

Motor.mo を適当な場所に保存しておいてください。

ModelicaモデルをFMU形式にコンパイルする

JModelicaからPythonを起動する

Motor.mo が保存されているフォルダでPythonを操作します。Pythonの起動方法は以下のいずれかを用いてください。

  1. [画面左下のWindowsマーク] → [JModelica.org-1.17] からIPythonを開き、コンソールに
    !cd C:\[Motor.moが保存されているフォルダ]\
    を入力してフォルダを移動します。

  2. Motor.mo と同じフォルダに C:\JModelica.org-1.17 から IPython.bat をコピーしておきます。この IPython.bat をダブルクリックしてIPythonを開きます。

IPython.png

ModelicaファイルをFMUにコンパイルする

Motor.mo と同じフォルダに下記ファイルを保存します。

Motor_Compile.py
from pymodelica import compile_fmu
model_name = 'Motor'
mo_file = 'Motor.mo'
my_fmu = compile_fmu(model_name, mo_file, target='cs')

IPythonコンソールから
run Motor_Compile.py
を入力すると、 Motor.mo がコンパイルされて Motor.fmu が作成されます。

FMUをPythonで計算してグラフに表示する

Motor.mo と同じフォルダに下記ファイルを保存します。

Motor.py
import matplotlib.pyplot as plt
from pyfmi import load_fmu

model = load_fmu('Motor.fmu')
opts = model.simulate_options()
opts["ncp"] = 1000

res = model.simulate(final_time=100000, options=opts)

T1 = res['Twinding.T']
T2 = res['Tcore.T']
t = res['time']

plt.plot(t, T1, label="Twinding.T")
plt.plot(t, T2, label="Tcore.T")
plt.legend(loc='best')
plt.xlabel('time [sec]')
plt.ylabel('Temperature [K]')
plt.show()

IPythonコンソールから
run Motor.py
を入力すると、 Motor.fmu がPython上で計算されて下記のグラフが表示されます。

Motor_plot.png

18
20
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20