バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
PyFMIでダミーFMUを定義する手段があるっぽい。
ドキュメントとして明記しているわけではなく、
PyFMIのソースコードを呼んだ結果としてそういう機能がありそうって程度で確実にできるという保証はない。
(構造上たぶんできるんじゃね?ってあたり)
上記に向けての大雑把な方針を考えて見る。
登場人物
博識フクロウのフクさん
イラスト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定義に向けての方針
今回はPyFMIでダミーFMUを作ってみる場合の方針を決めるだっけ?
そうだね。
まぁざっくりとは以下になるだろうね。
- ダミーFMUの作り方のアタリを付ける
- ダミーFMUの利用方法を決める
- 実際にダミーFMUを使ってみる
- ダミーFMUでシミュレーション時間と実時間を合わせて見る
そうだねー。
まずは作り方がわかってないとどうしようも無いし、
それをどう使うかってのもわからんよねー。
FMUのロードの仕方を再確認
と言っても実はダミーFMUの作り方はおおよそあたりが付いている。
ほう?
以前、FMUをロードする時に以下の関数を使用した。
model_sub1 = FMUModelCS2( "PID.fmu", "", _connect_dll=True)
そうだね。
ここでやった。
この関数の引数で_connect_dllをFalseにするとFMUがロードされない。
そういうえばそう言うこと言ってたね。
FMUを使いたいのにロードしないってどういうこと?
って思ったけど。
FMUのロード時に_connect_dll=Falseにすると?
あ!
もしかして、ロードしないとダミーFMUになる?!!
そうだね。
FMUをロードしないんで、
内部のアルゴリズムが空のFMUが定義されることになる。
このタイプのFMUの利用方法は、
アルゴリズムを使用せずに入力、出力の制御だけをFMU外からしたい場合に使う。
例えば、Rampの出力を止めて1.0固定にするとか。
ほう!
これを利用すればダミーFMU実現可能ってことか!
残念ながら、これだと今回の目的としているダミーFMUにはならない。
そうなの?
Python側から、うまくFMUの制御権を奪っているように感じたけど。
あくまで値の変更だけで、
時間の制御はできないんだよねー。
ってことは、ダミーFMUでは今回の目的は達成できないのか・・・。
あくまで、このやり方だと目的が達成できないってだけ、
これを加味した別のやり方をやれば・・・。
ってのを次回説明しよう。
(やけにもったい付けるな・・・。)
まとめ
まとめだよ。
- ダミーFMU定義に向けての方針を提示。
- FMUのロードの仕方を再確認。
- _connect_dllという引数があった。
- _connect_dllをFalseにするとFMUがロードされずインターフェースだけが定義される。
- インターフェースを利用してでPython側からFMU出力制御可。
- しかし、時間の制御はできない。
バックナンバーはこちら。
コメント