バックナンバーはこちら。
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ロード有無の引数がある。
- つまりロードしない使い方が・・・。
バックナンバーはこちら。
コメント