バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回で実験用のFMUをOpenModelicaからexportした。
Inputブロックも追加し、入力側のエイリアスを設置。
今回からPyFMIの実際の使い方に入っていく。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
PyFMIやその他ライブラリのimport

まずはPythonでFMUを使用するにあたって必要なライブラリのimportだな。

PyFMI自身もそうだけど、グラフ表示を想定するとmatplotlibとかも必要そうだよね。

そうだね。
まぁとっとと書き出してしまおう。
from pyfmi import load_fmu
import numpy as np
import matplotlib.pyplot as plt

ほう。
numpyも使うのか。

データの生成や加工で必要になるんで要importだ。

まぁそこらへんはnumpyがあると楽そうだよね。

from pyfmi import load_fmu
は・・・。
pyfmiの中のload_fmuをロードしてるってことだろうけど、
load_fmuは・・・名前の通り、FMUをロードする?
load_fmu

まぁこれは名前のまんまだね。
使い方としては以下になる。
model = load_fmu('Motor.fmu')

使い方はシンプルだね。
ロードしたいFMUのPATHを指定するだけか。

この取得出来たmodelは具体的に何になるんだろう?

Motor.fmuに合わせて変化するね。
候補としては以下になる。
- FMUModelCS1
- FMUModelCS2
- FMUModelME1
- FMUModelME2

おー、これはなんか見たことあるなー。
確かここらへんでやったかな。

Co-Simulation(通称CS)とModel Exchange(通称ME)だね。
今回はFMI仕様version2.0のCSなので、FMUModelCS2のオブジェクトになっているはずだ。
と言っても、それを意識して使うことにはならないはずだけどね。

インターフェースとしては共通だから
差分はうまくカプセル化してくれてるってことか。

と、言ってもFMUModelCS2と明示してロードすることの方が本来としては正しいんで、
今後似たようなことをする場合は明示側を使用すると思う。

まぁなんかの間違いで期待するFMUと違うものがロードされても面倒だから
明示できるものは明示しておいた方が事故が無くて良いかもね。

(しかも、特殊なFMUを無理やり生成とかもできるから変に抽象化すると訳分からんことにもなるんだけどね。って話はまだ黙っておこう。)
まとめ

まとめだよ。
- FMUをPythonで使用する上で必要ライブラリのimport。
- PyFMIのload_fmu。
- numpy。
- matplotlib。
- load_fmuの戻りのオブジェクトはFMU次第。
- FMUModelCS1。
- FMUModelCS2。
- FMUModelME1。
- FMUModelME2。
バックナンバーはこちら。
コメント