【PyFMI】最小構成のMBD事例 第2章 その97【マルチFMI⑦】

【PyFMI】最小構成のMBD事例 第2章 その97【マルチFMI⑦】 事例
【PyFMI】最小構成のMBD事例 第2章 その97【マルチFMI⑦】

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

はじめに

前回はFMUプラットフォームのMasterに対するオプションの話。
かなり多くのオプションがあったが、
今回使用するのはstep_sizeの指定くらい。

そして今回がコード全体を見せる回になる。

登場人物

博識フクロウのフクさん

指差しフクロウ

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

マルチFMU制御用のコード

フクさん
フクさん

とりあえず、必要な前提知識は話したので、ソースコード開示だ。

from pyfmi import FMUModelCS2, Master
import numpy as np
import matplotlib.pyplot as plt

model_sub1 = FMUModelCS2( "PID.fmu", "", _connect_dll=True)
model_sub2 = FMUModelCS2( "Motor.fmu", "", _connect_dll=True)
model_sub3 = FMUModelCS2( "Ramp.fmu", "", _connect_dll=True)

models = [model_sub1, model_sub2, model_sub3]
connections = [
    (model_sub3,"y",model_sub1,"target"),
    (model_sub1,"y",model_sub2,"voltage"),
    (model_sub2,"speed",model_sub1,"u"),
    ]

master = Master(models, connections)

opts = master.simulate_options()
opts["step_size"] = 0.001

res = master.simulate(final_time=2.0, options=opts)

voltage = res[model_sub2]['voltage']
current = res[model_sub2]['current']
speed = res[model_sub2]['speed']
loadTorqueStep_tau = res[model_sub2]['loadTorqueStep.tau']
target = res[model_sub1]['target']

t = res[model_sub1]['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.plot(t, target, label="target")
plt.legend(loc='best')
plt.xlabel('time [sec]')

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

ソースコード確認

太郎くん
太郎くん

まぁ前半は前回まで説明してもらった部分で、
後半はシミュレーション結果を取得して、グラフ表示してるところか。

フクさん
フクさん

そうだね。
以前のPyFMIを使用した時もそうだったが、
各種パラメータが連想配列でアクセスできるのは本当に楽だ。(じみじみ)

太郎くん
太郎くん

(FMILibraryの時は結構大変だったもんな・・・。)

フクさん
フクさん

あとは実行して、その後いろいろ考察だ。

太郎くん
太郎くん

(な、なんか問題があることが前提の方な言い方だ・・・。)

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

フクさん
フクさん

今回使用したPythonコード、Modelicaモデル、FMUはGitHubで公開している。

興味がある人は実際に動かしてみると良いだろう。

まとめ

フクさん
フクさん

まとめだよ。

  • マルチFMU制御用のコード提示。
    • 前半は前回まで説明した内容。
      • ロード、モデルセット、モデル間接続セット、Master定義
    • 後半はシミュレーション結果取得と波形表示。
  • FMILibraryの時とは異なり、結果取得と波形表示が楽なのは本当に有難い。
    • 結果は連想配列で取得。
    • 波形表示はmatplotlib使用。

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

コメント

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