【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をコピーしました