バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はFMILibraryのサンプルプロジェクトのfmi2_import_cs_testのシミュレーションにおいて、
ステップ時間とシミュレーション時間を変えてみた。
問題無く変更ができ、結果の確認もできた、
こうなってくると他のパラメータも変えられないか気になってくる。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
FMUのシミュレーションパラメータを変更できるのか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
前回、ステップ時間とシミュレーション時間が変更できるのはわかったけど、
他も変更できるのかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
できるよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
ボールの初期位置とかはFMUの中にうまってるだろうし。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
できるよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
FMUは事前に用意されたものだから、FMU側を修正しないと無理だよなぁ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/びっくりフクロウ.png)
だから、できるんだってば!!!
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」11アップ.png)
できるんかい!!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
(なぜキレられるのか。理不尽)
シミュレーションパラメータを変更するポイント
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まず、シミュレーションパラメータの初期値のようなものを修正する場合は
イニシャルモード中に実施する必要がある。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
イニシャルモード?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
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);
}
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あ、関数みると、
fmi2_import_enter_initialization_mode
fmi2_import_exit_initialization_mode
ってあるから、
この2つの関数の間がイニシャルモード中ってことになるのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
正解。
シミュレーションパラメータの変更方法
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、次は実際のシミュレーションパラメータの変更方法だけど、
これはどうすれば良いのかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
使用するAPIとしては
fmi2_import_set_real
を使用する。
まぁパラメータの型に合わせるて呼び出すAPIも
fmi2_import_set_integer
fmi2_import_set_boolean
fmi2_import_set_string
と分かれるんだけど、
今回のFMUの場合はfmi2_import_set_realだけで間に合うだろう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
このAPIの引数とかは?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
こんな感じだな。
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[])
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
なんかいろいろあるな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
次回、詳細に説明しよう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- FMUのシミュレーションパラメータを変更することができる。
- ただし、イニシャルモード中。
- イニシャルモードを指定するAPIが存在。
- fmi2_import_set_realというAPIでパラメータ変更が可能。
- 型に応じたAPIになっており、他にinteger、boolean、string用のAPIが存在する。
バックナンバーはこちら。
コメント