【FMU】最小構成のMBD事例 第2章 その56【FMILibrary⑬】

【FMU】最小構成のMBD事例 第2章 その56【FMILibrary⑬】 事例
【FMU】最小構成のMBD事例 第2章 その56【FMILibrary⑬】

バックナンバーはこちら。
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が存在する。

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

コメント

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