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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

FMULibraryのfmi2_import_set_realについて掘り下げ。
API仕様、FMI status、モデル記述オブジェクトについては確認できた。
モデル記述オブジェクトはFMUのインターフェースを定義ファイルであるmodelDescription.xmlを読み込んで作成されるもので、FMU自体のハンドルとも言えるもの。

まだ少し厄介なパラメータが残っているので、それも確認していこう。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

value referenceの配列

太郎くん
太郎くん

前回の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

太郎くん
太郎くん

value referenceの配列はどうすれば良いのかな?

太郎くん
太郎くん

value reference自体はここらへんでやった話ではあるのだけど。

フクさん
フクさん

まぁ手っ取り早い方法としてはmodelDescription.xmlを見てみることだね。

modelDescription.xml

フクさん
フクさん

とりあえず、modelDescription.xmlの一部を引っ張ってきた。

  <ScalarVariable name="HIGHT" valueReference="0" initial="exact" causality="output" description="Hight of the ball">
    <Real start="1.0" />
  </ScalarVariable>
  <ScalarVariable name="HIGHT_SPEED" valueReference="1" initial="exact" description="Speed of the ball">
     <Real start="4.0" />
	 </ScalarVariable> 
  <ScalarVariable name="HIGHT_SPEED alias" valueReference="1" description="Speed of the ball">
     <Real />
	 </ScalarVariable> 
  <ScalarVariable name="HIGHT_ACC" valueReference="4" description="Speed of the ball">
     <Real />	 
  </ScalarVariable>   
  <ScalarVariable name="A variable" valueReference="100" initial="exact" description="Speed of the ball">
     <Real start="4.0" />
  </ScalarVariable>
  <ScalarVariable name="GRAVITY" valueReference="2" description="Gravity constant" initial="exact">
     <Real start="-9.81"/>
  </ScalarVariable>
  <ScalarVariable name="BOUNCE_COF" valueReference="3" initial="exact" description="Bouncing coefficient">
     <Real start="0.5" />
太郎くん
太郎くん

そうそう。
こんな感じのxmlの中からvalueReferenceが分かるんだよね。

フクさん
フクさん

端的に言うと、ここに記載されてるvalueReferenceの値を配列形式で渡してあげればOK。

太郎くん
太郎くん

え?
そんなんでいいの?

フクさん
フクさん

まぁいろいろ流儀はあるが、
とりあえず、パラメータ変更だけを考えるとそれでOK。

フクさん
フクさん

例えば、ボールの初期位置の高さを変えたい場合は
valueReference=”0″

“HIGHT”
を変更すれば良いので、

const fmi2_value_reference_t vrTmp[1] = { 0,};
fmi2_real_t iniTmp[1] = 2.0;

fmistatus = fmi2_import_set_real(fmu, vrTmp, 1, iniTmp);
フクさん
フクさん

みたいな書き方をすればOKだね。

太郎くん
太郎くん

これだけみるとチョロそうではあるが・・・。

フクさん
フクさん

次回までに適当なvalueReferenceに対して読み書きするようにfmi2_import_cs_testのソースコードを弄ってこよう。

まとめ

フクさん
フクさん

まとめだよ。

  • modelDescription.xmlでインターフェース定義を確認。
  • fmi2_import_set_realに渡すvalueReferenceはmodelDescription.xmlに定義されてるvalueReferenceを渡せばOK。
  • これを踏まえた上で最もシンプルと思われるコードサンプル提示。

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

コメント

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