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

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

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

はじめに

前回、PyFMIから各種FMUを呼び出す際の構成図を出した。
FMU間の信号線の接続はPython上から実施することを想定。

今回から実際のPythonコードの話になるが、
割とややこしいことになるかもしれない・・・。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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制御する際の前提知識

太郎くん
太郎くん

マルチFMUを制御するPythonコードは書けた?

フクさん
フクさん

一応書けたには書けたが・・・。

太郎くん
太郎くん

なんか問題でも?

フクさん
フクさん

うーん、ちょっと先に説明を入れないとコードだけだと伝わり難いかなーって思って。

太郎くん
太郎くん

もしかして、凄まじい規模のコード量になったとか?!

フクさん
フクさん

コード規模は大して大きくないかな。
ただ、前回のPyFMIでは扱ってなかった概念が出てくるんで
それを先に説明してしまいたい。

太郎くん
太郎くん

なるほど。
だったら、早速よろしくー。

importするモジュール

フクさん
フクさん

まずimportするモジュールだが、以前はload_fmuだけだったのだが、以下に変わる。

from pyfmi import FMUModelCS2, Master
太郎くん
太郎くん

FMUModelCS2とMaster?
FMUModelCS2はどっかで見たことあるような?

フクさん
フクさん

たぶんここだね。

太郎くん
太郎くん

あ、そうそう。
load_fmuが自動でFMUのタイプを判定してオブジェクトを返してくれるんだけど、
それの一つだね。

太郎くん
太郎くん

ということは、
load_fmuが判定してくれるからload_fmuのままでも良かったのでは?

フクさん
フクさん

まぁ今回はそうなんだけど、
今後のPyFMIの使い方を想定するとFMUModelCS2の方が説明として繋ぎ易いんだよね。

フクさん
フクさん

とういうか、
以前、load_fmuの自動判別の説明をしたとき、
load_fmuは可能な限り使用しないって説明したじゃん!
そして太郎くんも同意してたじゃん!

太郎くん
太郎くん

あれ?
そうだっけ?
もう昔の話だからなぁ・・・。

フクさん
フクさん

(一週間前なはずなんだが・・・。)

Masterモジュール

太郎くん
太郎くん

で、Masterの方は?

フクさん
フクさん

シミュレーションをする上での土台になる部分だね。
各種FMUと接続構成を渡してうまくやってくれるところ。
詳細は随時説明しよう。

FMUのロード

フクさん
フクさん

そして、FMUのロードの部分は以下になる。

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

各種FMUのPATHをしていしてロードするのか。

太郎くん
太郎くん

あれ?引数がPATH以外にもいろいろあるね?

フクさん
フクさん

厳密には1つ目はFMU名、2つ目はFMUがあるPATHを指定する。
まぁ1つ目のFMU名のところでPATH指定しちゃうことが多いから2つ目は空文字になるね。

太郎くん
太郎くん

そして、_connect_dllってのは?

フクさん
フクさん

FMU内部のライブラリをロードするか否か。

太郎くん
太郎くん

いや、FMUを使いたいんだからロードするでしょ!!

フクさん
フクさん

まぁロードしないやり方もあるってことなのかもねー。(すっとぼけ)

太郎くん
太郎くん

(何か隠してやがるな・・・。)

まとめ

フクさん
フクさん

まとめだよ。

  • PyFMIでマルチFMU制御する際にある程度の前提知識が必要になる。
  • FMUロード。
    • 以前はload_fmuを使ったが、今回はFMUModelCS2を使用。
    • 引数が増えている。
      • PATHの指定がファイル名のPATHに分けることが可能。
      • DLLロード有無の引数がある。
        • つまりロードしない使い方が・・・。

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

コメント

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