バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
FMULibraryによって、ステップ時間、シミュレーション時間以外も変更できそうなことが分かった。
パラメータ変更するにはイニシャルモード中であること。
実際にパラメータ変更するにはfmi2_import_set_realというAPIを使用する。
今回はfmi2_import_set_realについて掘り下げる。
登場人物
博識フクロウのフクさん
イラスト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_set_real
前回、ちょっと触れたけど、
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:モデル記述オブジェクト
vr:value referenceの配列
nvr:配列要素数う
value:変数の値
戻り値:FMI status
FMI statusはこういう定義になってる。
typedef enum {
fmi2_status_ok,
fmi2_status_warning,
fmi2_status_discard,
fmi2_status_error,
fmi2_status_fatal,
fmi2_status_pending
} fmi2_status_t;
まぁfmi2_status_okが返ってくればAPIの処理成功ってことだね。
モデル記述オブジェクト
なんか最初の引数のモデル記述オブジェクトってのでもう意味不明なんだけど・・・。
まぁ今回はすでに周辺で使われてる変数に「fmu」ってのをそのまま使えばよいのだけど、一応説明しよう。
main関数の中で以下の処理がある。
fmu = fmi2_import_parse_xml(context, tmpPath, 0);
確かにあるね。
起動時に指定したテンポラリディレクトリにmodelDescription.xmlが展開されてるんだけど、fmi2_import_parse_xmlは、これをうまく読み取ってくれるAPIとなる。
modelDescription.xmlってFMUのインターフェースを定義してくれてるファイルだったね。
ここらへんでやった。
そうそう。
FMUを制御する上で重要なオブジェクトってことになる。
いわゆるハンドルってことか。
その認識でOKだ。
サンプルプロジェクトのfmi2_import_cs_testではすでにあるから、
これを使いまわせばOKだね。
まとめ
まとめだよ。
- fmi2_import_set_realのAPI仕様確認。
- FMI statusの定義確認。
- モデル記述オブジェクトはfmi2_import_parse_xmlで取得できるfmi制御用のハンドル。
- FMUを展開した後に出てくるのmodelDescription.xmlを指定する必要がある。
バックナンバーはこちら。
コメント