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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回まででFMILibraryによる変数リスト、変数オブジェクト及びそれに紐づいた情報取得の仕様確認は完了。
そこそこの数のAPIを使うが、難易度はそれほど高くはないだろう。

最後の
fmi2_import_get_variability、fmi2_import_get_causality、fmi2_import_get_initial
に関係した便利APIがあるので、それを紹介して仕様確認は終わり。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

fmi2_import_get_variability、fmi2_import_get_causality、fmi2_import_get_initialと併用して使う便利API

フクさん
フクさん

前回の最後に説明したAPI。
fmi2_import_get_variability、fmi2_import_get_causality、fmi2_import_get_initial
なんだけど、
これらって特定のenumが取得されるAPI。

太郎くん
太郎くん

うん。
そうだったね。

フクさん
フクさん

実はこのenumを文字列に変換してくれるAPIがある。

太郎くん
太郎くん

え?
そうなの?!
enumで評価して自分で文字列変換しないとダメかと思ってた。

フクさん
フクさん

まぁそれがすでに用意されてるって話だねー。

文字列変換API達

フクさん
フクさん

じゃー、ざっと文字列変換APIを書き出そう。

const char* fmi2_variability_to_string(fmi2_variability_enu_t v);
const char* fmi2_causality_to_string(fmi2_causality_enu_t c);
const char* fmi2_initial_to_string(fmi2_initial_enu_t ini);
太郎くん
太郎くん

API名もそのまんまだなー。

フクさん
フクさん

これにenumを渡せばそのまま文字列が取得できる。
まぁAPIの中の実装はシンプルで以下のイメージだけど。

const char* fmi2_variability_to_string(fmi2_variability_enu_t v) {
    switch(v) {
    case fmi2_variability_enu_constant: return "constant";
    case fmi2_variability_enu_fixed: return "fixed";
    case fmi2_variability_enu_tunable: return "tunable";
    case fmi2_variability_enu_discrete: return "discrete";
    case fmi2_variability_enu_continuous: return "continuous";
	default: break;
    }
    return "Unknown";
}
太郎くん
太郎くん

なるほど。
switch文で分岐してるだけか。
まぁ最初から用意されてるのはありがたいね。

今後の方針

太郎くん
太郎くん

で、たぶん必要なAPIは出そろったと思うのだけど、
あとはコードをガリガリ書いてくだけかな?

フクさん
フクさん

そうだね。
まぁmodeDescription.xmlに記載されてる変数を一気に列挙するようなコードをfmi2_import_cs_testに追加するようなイメージで居るけど。

フクさん
フクさん

流れとしては前回提示した以下を想定している。

  • fmi2_import_parse_xmlによるモデル記述オブジェクトの取得
  • fmi2_import_get_variable_listによる変数リストの取得
  • fmi2_import_get_variable_list_sizeによる変数リスト数の取得
  • fmi2_import_get_variableによる変数オブジェクトの取得
  • fmi2_import_get_variable_vrによるvalueReferenceの取得
  • fmi2_import_get_variable_nameによる変数名の取得
  • fmi2_import_get_variable_description、fmi2_import_get_variability、fmi2_import_get_causality、fmi2_import_get_initialによる各種詳細情報の取得
太郎くん
太郎くん

API仕様の確認もこれに沿ってたしね。

フクさん
フクさん

とりあえず、次回までにそれっぽいものを作ってみるよ。

まとめ

フクさん
フクさん

まとめだよ。

  • fmi2_import_get_variability、fmi2_import_get_causality、fmi2_import_get_initialと併用して使う便利APIが存在。
    • 上記関数戻り値のenumに準じて文字列を返してくれるAPI。
    • 中身はswich分で実現してるだけ。
  • 次回は実際にソースコード作成。

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

コメント

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