バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
とりあえずDummy_FMUModelCS2と、
そのメソッドであるdo_stepを使用すれば
シミュレーション時間の制御はできそうな気がしてきた。
実際にどのような感じで実験するかの構成を決めていく必要がある。
登場人物
博識フクロウのフクさん
イラスト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
実験構成
前回でDummy_FMUModelCS2を使用すれば、
シミュレーション時間が制御できそうな気配はしてきたけど
どう実験するつもり?
そうだねー。
とりあえず、以前のマルチFMU時の構成をベースにちょっと変更を加えるようなイメージでいる。
マルチFMUの時の構成というとここで見たやつだね。
そうそう。
これを元にした構成としては以下を想定している。
実験構成説明
RampのFMUの処理をPython側で挿げ替える感じか。
そのとおり。
シミュレーション時間と実時間の辻褄合わせの処理を入れる。
あと、出力波形も変えるの?
うん。
出力もstep毎に変えられそうなんで、
それも一緒に実験してしまおうと思って。
ほう。
そんなこともできるのか。
まぁ出力を変えられるって方がDummy_FMUModelCS2の本来の目的で
時間制御の方が例外的な運用だと思うけどねー。
そりゃそうか。
普通はそういうこと想定しなさそうだもんねー。
各FMUのロード
まずは各FMUのロードになるが、
以下の感じになる。
model_sub1 = FMUModelCS2( "PID.fmu", "", _connect_dll=True)
model_sub2 = FMUModelCS2( "Motor.fmu", "", _connect_dll=True)
model_dummy = Dummy_FMUModelCS2([], "Dummy.fmu", "", _connect_dll=False)
ちなみにDummy.fmuはRamp出力のFMUの名称を変えただけのFMUだ。
あれ?実際のFMUを読み込む必要ってあるの?
インターフェース仕様を取り込む必要があるんだよね。
よって、動く動かないは別としても実際のFMUを読み込んだ方が話は早そう。
って感じだ。
なるほど。
FMUのパラメータ名とかvalueReferenceとかインターフェース仕様だけでも結構面倒だし、
既存のFMUで定義できるならそっちの方が楽だね。
次回はdo_step関連の話をしよう。
まとめ
まとめだよ。
- Dummy_FMUModelCS2を使用する実験構成を提示。
- 以前作ったマルチFMUの構成をベースにちょい修正の方針。
- ついでにPythonからstep毎の出力も制御してみる。
- 各FMUのロードのコード。
- Dummy_FMUModelCS2で既存のFMUを指定しておくとインターフェース仕様だけは取り込める。
バックナンバーはこちら。
コメント