バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
FMILibrary経由のパラメータ名文字列からFMUの制御までのソースコードを作成。
後半は以前やったvalueReferenceを元にパラメータ制御をしたものと同一。
要はvalueReferenceさえなんとかしてしまえば、あとはどうとでもなる。
というわけで、今回は実際の実験用ソースコードの実際の動作を確認。
登場人物
博識フクロウのフクさん

イラスト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
実験用ソースコードの実際の動作

じゃ、早速動作させるよー。
HIGHT:valueReference is 0
HIGHT_SPEED:valueReference is 1
GRAVITY:valueReference is 2
BOUNCE_COF:valueReference is 3
Initial Parameters.
vr:0,iniTmp is 1.000000
vr:1,iniTmp is 4.000000
vr:2,iniTmp is -9.810000
vr:3,iniTmp is 0.500000
Modified parameters.
vr:0,iniTmp is 5.000000
vr:1,iniTmp is 4.000000
vr:2,iniTmp is -9.810000
vr:3,iniTmp is 0.500000
module = FMICAPI, log level = VERBOSE: Calling fmi2ExitInitializationMode
Ball height Ball speed
5.35585 3.019
5.61361 2.038
5.77326 1.057
5.83482 0.076
5.79827 -0.905
5.66363 -1.886
5.43088 -2.867
5.10004 -3.848
4.6711 -4.829
4.14405 -5.81
3.51891 -6.791
2.79566 -7.772
1.97432 -8.753
1.05487 -9.734
0.037325 -10.715
0.451273 4.52365
0.859494 3.54265
1.16961 2.56165
1.38163 1.58065
1.49555 0.59965
実験用ソースコード動作解説

これはバッチリなんじゃない?

そうだね。
valueReferenceも取れてるし、
今回はボールの初期高さを5[m]に変えるようにしたんだけど、
それもシミュレーションに反映されてる。
OKだね。
一応、グラフも貼っておこう。

ちょっと感想

結構外部からいろいろ弄れてるからシミュレーションパターンも変えられるし結構よさそうだよね。

そうだね。
内部の細かいアルゴリズムは変えられないが、
まぁそもそものユースケースがサプライヤの部品を完成車メーカで簡単にシミュレーションしたい。
ってところだからパラメータ変更程度はあってもアルゴリズムの変更まではやらないだろうしね。

なるほど。
うまく役割分担を意識したような仕様って感じか。
今後の方針

で、今後はどうするの?
以前ちょっと話出てたけど、他のFMUを試すとか?

そうだね。
OpenModelicaがFMUのexport機能をもってるからね。
これをうまく活用できないかってところだねー。

おー。
なんか本格的になってきた感じがする。

具体的な方針については次回説明しよう。
まぁホントにうまくいくかは当然やってみないとわからないけどねー。
ソースコードについて

一応、今回最終的に使用したソースコードはGitHubで公開している。
興味のある人は落としてみてもよいだろう。
まとめ

まとめだよ。
- パラメータ名文字列からFMUの制御までを動作確認。
- valueReferenceの取得OK。
- その後のvalueReferenceを使用したパラメータ変更も当然OK。
- 今後の予定としては、OpenModelicaがexportしたFMUを使っていろいろやっていこうと画策している。
- ぶっちゃけると手探り状態。
バックナンバーはこちら。
コメント