バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
FMILibrary経由でFMUの内部のmodelDescription.xmlの情報を取得できそうである。
手順はそこそこあるが、それほどややこしい話でもなさそうだ。
- 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について掘り下げていく。
登場人物
博識フクロウのフクさん
イラスト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_parse_xmlによるモデル記述オブジェクトの取得
fmi2_import_parse_xmlは以前やったね。
確かここで。
まぁ複雑な話はないから、fmi2_import_parse_xmlについては説明は省略しよう。
fmi2_import_get_variable_listによる変数リストの取得
これが、modelDescription.xmlの情報取得の起点となる。
API仕様としては以下。
fmi2_import_variable_list_t* fmi2_import_get_variable_list(fmi2_import_t* fmu, int sortOrder)
fmu:モデル記述オブジェクト
sortOrder:リストのソートルール
戻り値:変数リスト
fmuはFMUに対するハンドルでOKとして、
sortOrder?
リストのソートルール?
具体的にどんな指定になるんだ?
ソートルール
数値として0~2の値を入れられる。
内訳は以下だ。
0:XMLファイルに記載されているオリジナルの順序。
1:変数名でアルファベット順。
2:型/valueReferenceでソート。
0、1はまぁわかるけど、2のイメージが湧かないな・・・。
まず、
- Real
- Integer
- Boolean
- String
- Enumeration
の型でソートされたあとに、
それぞれの型別にvalueReferenceでソートされるようだ。
ソースコードを見た限りだとね。
このソートはどういう時に使うのだろう?
うーん、FMUのアクセスはベクトル式にできるが、
異なる型に対しては一括アクセスはできないんだよね。
だから、型をグルーピングした方がアクセスする上では扱いやすいってのはあるのかもしれない。
あー、確かに一括アクセスできてたよね。
型が同一じゃないとだめなのか。
まぁソートに種類があってそれぞれ有用そうってのはわかった。
まとめ
まとめだよ。
- fmi2_import_parse_xmlについては以前やったのでスルー。
- fmi2_import_get_variable_listはmodelDescription.xmlの情報取得の起点。
- ソートルールを切り替えられる。
- 型/valueReferenceでソートがちょっと特殊。
- ベクトル的アクセスで使えそう。
- 型/valueReferenceでソートがちょっと特殊。
- ソートルールを切り替えられる。
バックナンバーはこちら。
コメント