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

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

バックナンバーはこちら。
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を指定する必要がある。

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

コメント

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