バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
とりあえずDummy_FMUModelCS2と、
そのメソッドであるdo_stepを使用すれば
シミュレーション時間の制御はできそうな気がしてきた。
実際にどのような感じで実験するかの構成を決めていく必要がある。
登場人物
博識フクロウのフクさん
![指差しフクロウ](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
実験構成
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
前回でDummy_FMUModelCS2を使用すれば、
シミュレーション時間が制御できそうな気配はしてきたけど
どう実験するつもり?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
そうだねー。
とりあえず、以前のマルチFMU時の構成をベースにちょっと変更を加えるようなイメージでいる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
マルチFMUの時の構成というとここで見たやつだね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうそう。
これを元にした構成としては以下を想定している。
![Dummy_FMUModelCS2実験構成1、Pythonで時間制御。(出力波形も変える)、ramp、duration=0.8s、pid、const、k=1、signalvoltage、ground、currentSecsor、dcpm、dcpmData、speedSensor、loadInertia、JLoad、kgm^2、loadTorqueStep、Time](https://www.simulationroom999.com/blog/wp-content/uploads/2021/08/02_Dummy_FMUModelCS2実験構成1-1024x707.png)
![Dummy_FMUModelCS2実験構成2、Pythonで時間制御。(出力波形も変える)、Python、テストプログラム、PyFMI、FMU、Ramp、PID、DCモータ](https://www.simulationroom999.com/blog/wp-content/uploads/2021/08/03_Dummy_FMUModelCS2実験構成2-1024x720.png)
実験構成説明
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
RampのFMUの処理をPython側で挿げ替える感じか。
![フクさん](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)
うん。
出力もstep毎に変えられそうなんで、
それも一緒に実験してしまおうと思って。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ほう。
そんなこともできるのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
まぁ出力を変えられるって方がDummy_FMUModelCS2の本来の目的で
時間制御の方が例外的な運用だと思うけどねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
そりゃそうか。
普通はそういうこと想定しなさそうだもんねー。
各FMUのロード
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まずは各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)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
ちなみにDummy.fmuはRamp出力のFMUの名称を変えただけのFMUだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
あれ?実際のFMUを読み込む必要ってあるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
インターフェース仕様を取り込む必要があるんだよね。
よって、動く動かないは別としても実際のFMUを読み込んだ方が話は早そう。
って感じだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
なるほど。
FMUのパラメータ名とかvalueReferenceとかインターフェース仕様だけでも結構面倒だし、
既存のFMUで定義できるならそっちの方が楽だね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
次回はdo_step関連の話をしよう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- Dummy_FMUModelCS2を使用する実験構成を提示。
- 以前作ったマルチFMUの構成をベースにちょい修正の方針。
- ついでにPythonからstep毎の出力も制御してみる。
- 各FMUのロードのコード。
- Dummy_FMUModelCS2で既存のFMUを指定しておくとインターフェース仕様だけは取り込める。
バックナンバーはこちら。
コメント