【PyFMI】最小構成のMBD事例 第2章 その100【ダミーFMU②】

【PyFMI】最小構成のMBD事例 第2章 その100【ダミーFMU②】 事例
【PyFMI】最小構成のMBD事例 第2章 その100【ダミーFMU②】

バックナンバーはこちら。
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出力制御可。
    • しかし、時間の制御はできない。

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

コメント

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