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