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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

実際に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によるFMU制御のシミュレーションソースコード

フクさん
フクさん

とりあえず、一連の処理をまとめたコードは以下になる。

from pyfmi import load_fmu
import numpy as np
import matplotlib.pyplot as plt


model = load_fmu('Motor.fmu')

# Create an axis of time.
t = np.linspace(0.,2.,200) 

# Creation of the Ramp function. 
# (Drive from 0[V] to 100[V] in 0.2[s] to 1.0[s].)
x = np.linspace(-20, 220, 200)
x = np.maximum(x, 0)
x = np.minimum(100, x)


u = np.transpose(np.vstack((t,x)))

input_object = ('voltage', u)

res = model.simulate(start_time=0.0,final_time=2.0, input=input_object)


voltage = res['voltage']
current = res['current']
speed = res['speed']
loadTorqueStep_tau = res['loadTorqueStep.tau']
t = res['time']

plt.plot(t, voltage, label="voltage")
plt.plot(t, current, label="current")
plt.plot(t, speed, label="speed")
plt.plot(t, loadTorqueStep_tau, label="loadTorqueStep.tau")
plt.legend(loc='best')
plt.xlabel('time [sec]')

plt.grid(which='both')
plt.show()

結果のグラフ表示

フクさん
フクさん

そして結果のグラフはこれ。

PyFMI、FMI、FMI、DCモータ、OpenModelica、voltage、current、speed、loadTorqueStep.tau

感想的な何か

太郎くん
太郎くん

FMILibraryと比べるとかなり一撃感があるなー。

フクさん
フクさん

そうだね。
ここまで簡単にできるといろいろなパターンを自動化するのも楽そうだ。

太郎くん
太郎くん

特にvalurReferenceに振り回されないのがいいね。
FMILibraryの時はvalurReferenceの取得までが面倒だったりしたもんね。
ここらへんが無くなっただけでも大助かりだ。

フクさん
フクさん

というわけでPyFMIの有用性がなんとなく見えてきたってところだろう。

ソースコードとかモデルとかFMUとか

フクさん
フクさん

今回使用したPythonコード、Modelicaモデル、FMUをGitHubに上げておいた。
興味のある人を実際に動かしてみると良いだろう。

まとめ

フクさん
フクさん

まとめだよ。

  • PyFMIでFMU制御するPythonコードを開示。
    • 割とあっさり実現。
    • Pythonなのでmatpotlibでそのままグラフ表示。
  • FMILibraryと比べるとvalueReferenceに振り回されることが無い点がとても良い。
    • PyFMIによるFMU制御の有用性がなんとなく見えてきた。

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

コメント

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