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

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

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

はじめに

前回は、時間軸、Ramp関数、入力用行列、入力オブジェクトの生成まで実施。
シミュレーションを実施する上での必要な準備が整った状態。

今回は実施にFMUを駆動させてシミュレーションを実施するところ。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

シミュレーション

太郎くん
太郎くん

前回のでシミュレーションの前準備が揃ったから
今回はついにシミュレーション実施だね。

フクさん
フクさん

そうだね。
まぁやることはシミュレーション用の関数を呼び出すだけだ。

res = model.simulate(start_time=0.0,final_time=2.0, input=input_object)
太郎くん
太郎くん

前回作った、入力オブジェクトをここで渡すんだね。
シミュレーション時間も開始を0秒、終了を2秒か。

フクさん
フクさん

そうそう。
これでシミュレーションとしては完了だ。

シミュレーション結果の取得

太郎くん
太郎くん

で、シミュレーションの結果はどう取得するの?
戻り値でresってのは受け取ってるけど?

フクさん
フクさん

そのresの中に連想配列で格納されてる。
取得方法としては以下になる。

voltage = res['voltage']
current = res['current']
speed = res['speed']
loadTorqueStep_tau = res['loadTorqueStep.tau']
t = res['time']
太郎くん
太郎くん

ほう。
パラメータ名をそのまま指定すれば取得できるのか!

太郎くん
太郎くん

FMILibraryの時は一旦変数オブジェクトを取得して、
そこからvalueReferenceがどうのってあったけど、
そこらへんは要らないんだね。

フクさん
フクさん

そうだね。
そこら辺はかなり扱いが楽になっていると言える。

シミュレーション結果の表示

太郎くん
太郎くん

次はグラフにするんだろうけど、
これは普通にmatplotlibを使えばいいんだろうね。

太郎くん
太郎くん

こんな感じかな。

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()
フクさん
フクさん

うん。
それでOKだろう。

まとめ

フクさん
フクさん

まとめだよ。

  • シミュレーション実施。
    • 開始時刻、終了時刻、入力オブジェクトを渡すことで実施可能。
  • シミュレーション結果取得。
    • simulate関数の戻り値が連想配列になっている。
    • voltage = res[‘voltage’]のような指定方法。
  • シミュレーション結果のグラフ表示。
    • matplotlibでプロットするのみ。

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

コメント

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