バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はFMILibraryのサンプルプロジェクトのfmi2_import_cs_testのシミュレーションにおいて、
ステップ時間とシミュレーション時間を変えてみた。
問題無く変更ができ、結果の確認もできた、
こうなってくると他のパラメータも変えられないか気になってくる。
登場人物
博識フクロウのフクさん
イラスト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のシミュレーションパラメータを変更できるのか?
前回、ステップ時間とシミュレーション時間が変更できるのはわかったけど、
他も変更できるのかな?
できるよ。
ボールの初期位置とかはFMUの中にうまってるだろうし。
できるよ。
FMUは事前に用意されたものだから、FMU側を修正しないと無理だよなぁ。
だから、できるんだってば!!!
できるんかい!!
(なぜキレられるのか。理不尽)
シミュレーションパラメータを変更するポイント
まず、シミュレーションパラメータの初期値のようなものを修正する場合は
イニシャルモード中に実施する必要がある。
イニシャルモード?
fmi2_import_cs_testの中で説明すると、以下の部分があるのだが、
fmistatus = fmi2_import_enter_initialization_mode(fmu);
if(fmistatus != fmi2_status_ok) {
printf("fmi2_import_enter_initialization_mode failed\n");
do_exit(CTEST_RETURN_FAIL);
}
fmistatus = fmi2_import_exit_initialization_mode(fmu);
if(fmistatus != fmi2_status_ok) {
printf("fmi2_import_exit_initialization_mode failed\n");
do_exit(CTEST_RETURN_FAIL);
}
あ、関数みると、
fmi2_import_enter_initialization_mode
fmi2_import_exit_initialization_mode
ってあるから、
この2つの関数の間がイニシャルモード中ってことになるのか。
正解。
シミュレーションパラメータの変更方法
で、次は実際のシミュレーションパラメータの変更方法だけど、
これはどうすれば良いのかな?
使用するAPIとしては
fmi2_import_set_real
を使用する。
まぁパラメータの型に合わせるて呼び出すAPIも
fmi2_import_set_integer
fmi2_import_set_boolean
fmi2_import_set_string
と分かれるんだけど、
今回のFMUの場合はfmi2_import_set_realだけで間に合うだろう。
このAPIの引数とかは?
こんな感じだな。
fmi2_status_t fmi2_import_set_real(fmi2_import_t* fmu, const fmi2_value_reference_t vr[], size_t nvr, const fmi2_real_t value[])
なんかいろいろあるな・・・。
次回、詳細に説明しよう。
まとめ
まとめだよ。
- FMUのシミュレーションパラメータを変更することができる。
- ただし、イニシャルモード中。
- イニシャルモードを指定するAPIが存在。
- fmi2_import_set_realというAPIでパラメータ変更が可能。
- 型に応じたAPIになっており、他にinteger、boolean、string用のAPIが存在する。
バックナンバーはこちら。
コメント