バックナンバーはこちら。
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分で実現してるだけ。
- 次回は実際にソースコード作成。
バックナンバーはこちら。
コメント