バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はFMILibraryの「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による各種詳細情報の取得
登場人物
博識フクロウのフクさん
![指差しフクロウ](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
fmi2_import_get_variable_list_sizeによる変数リスト数の取得
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
次は「fmi2_import_get_variable_list_sizeによる変数リスト数の取得」だが、
これはこのまんまの話だな。
変数リストの要素数が取得できる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ホントそのまんまだねー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
一応、API仕様を書きだそう。
size_t fmi2_import_get_variable_list_size(fmi2_import_variable_list_t* vl)
vl:変数リスト
戻り値:変数リストの要素数
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
要素数を取るってことは、この後for文かなんかで回すことを想定しているのかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうだね。
私がサンプルとして提示しようとしているソースコードとしてはそんな感じ。
実際には、情報格納用のバッファを動的に確保したいときとかいろいろありそうだけど。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
なるほどー。
fmi2_import_get_variableによる変数オブジェクトの取得
![フクさん](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)
まぁ変数オブジェクトそのものが情報と言うより、
これもハンドル的な性質が強いな。
この変数オブジェクトを元に該当変数に紐づいた様々な情報が取れるってイメージ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
じゃー、とりあえず変数情報を得るために一時的に記憶すればOKか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
API仕様は以下だ。
fmi2_import_variable_t* fmi2_import_get_variable(fmi2_import_variable_list_t* vl, size_t index)
vl:変数リスト
index:変数リストから取得したい要素のインデックス
戻り値:変数オブジェクト(範囲外だとNULL)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
そのまま配列的なアクセスかと思ったけど、
APIを経由するのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
内部の構造としてはSTLのstd::vectorみたいな可変長配列として実装されているようだ。
と言っても、仕様として明確なのはAPI仕様だけなので、
FMILibraryの今後のversionUP次第では内部実装は変わってしまうことはあるだろう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
まぁAPIを経由するとは言え、使う側からすると配列アクセスとあんまり変わらないようにしてくれてるってことだね。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 「fmi2_import_get_variable_list_sizeによる変数リスト数の取得」の仕様確認。
- やってることはそのままでリストの要素数を取得。
- 「fmi2_import_get_variableによる変数オブジェクトの取得」の仕様確認。
- 変数オブジェクトは変数関連の情報にアクセスするハンドルのようなもの。
バックナンバーはこちら。
コメント