バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
FMILibrary経由でパラメータ変更もできた。
これでFMUを外部から制御できそうなものは制御できるということになる。
パラメータ仕様が記載されたmodelDescription.xmlの各種情報も取得できるので
valueReferenceを意識しなくても制御する、ツールとしては割と真っ当な作りも出来そうだ。
しかし、パラメータ名が分かっていればmodelDescription.xmlを総なめしなくてもアクセスできそうな気がしないでもない。
登場人物
博識フクロウのフクさん
![指差しフクロウ](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
別のvalueReference取得方法があるのか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
前回までの話で、使用者からvalueReferenceを意識させない方法の目途はたったけど、
なんかちょっとした操作をするのにvalueReferenceとパラメータ名のデータ構造を作るってのも大げさな気もするんだよなー。
もうちょっと楽な方法とかないの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
あるよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」11アップ.png)
あるんかい!
ならそれを先に説明すべきだったんじゃない?!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁそれも考えたんだけど、
まずはmodelDescription.xmlの構造とかも知って置いた方が良いと思って黙ったてた。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
黙ってたって・・・。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
まぁ便利なやり方があるなら早く教えてよ。
楽なvalueReference取得方法
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/はてなフクロウ.png)
たぶん、太郎くんのイメージしている「楽なvalueReference取得方法」ってのは
パラメータ名の文字列を渡したらそのままvalueReferenceが取得できる。
ってイメージであってる?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
そうそう。
そういう便利APIがあっても良いんじゃないかなーって思ってる。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
早速で悪いが、そういうAPIは無いな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」11アップ.png)
えー!!
![フクさん](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)
直接は取れないんだけど、
パラメータ名文字列を元に変数オブジェクトを取得して、
その変数オブジェクトからvalueReferenceを取得する。
って流れになるくらいだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
おー!
そんな程度だったらそれでも良いや。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
そういえば変数オブジェクトは変数リストの時にも出て来たね。
パラメータに紐づいた情報を引っ張り出せるハンドルだよね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうそう。
そこらへんのイメージを持ってもらうためにも
変数リストの話をしたような感じだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
まぁ確かにアレをやったから割とイメージが湧きやすくはなったな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
というわけで改めて手順を書き出すと、以下になる。
- パラメータ文字列を元に変数オブジェクトを取得。
- 変数オブジェクトを元にvalueReferenceを取得。
- valueReferenceを使ってパラメータの読み書きを実施
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
うん。
後ろ2つのAPIは以前やった
fmi2_import_get_variable_vr
と
fmi2_import_get_real、fmi2_import_set_real
でできるはずだから、
最初の「パラメータ文字列を元に変数オブジェクトを取得」ってとこだけ把握すればOKだね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
じゃ、そこだけ次回説明しよう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 変数リストを取得する以外のvalueReference取得方法がある。
- パラメータ名文字列を指定してvalueReference取得したいが、直接それができるAPIは無い。
- パラメータ名文字列を元に変数オブジェクトを取得するAPIはある。
- 変数オブジェクトが取得できれば、そこからvalueReferenceは取得できる。
バックナンバーはこちら。
コメント