【FMI/FMU】最小構成のMBD事例 第2章 その87【PyFMI④】

【FMI/FMU】最小構成のMBD事例 第2章 その87【PyFMI④】 事例
【FMI/FMU】最小構成のMBD事例 第2章 その87【PyFMI④】

バックナンバーはこちら。
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。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました