バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回は、PyFMIの依存関係のヤバさが垣間見えた。
FMILibraryの64bit品、Assimuloが依存しているsolverの64bit品とか・・・。
一応condaでインストールすればうまく依存関係が解決できるのでconda推奨。
PyFMIはイントールできたということでまずは当然動作確認。
その動作確認をどのようにしていくか。
というお話。
登場人物
博識フクロウのフクさん
![指差しフクロウ](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
PyFMIの動作確認方法。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
PyFMIはcondaのおかげであっさり終わったけど、
これ、どう使えばいいんだ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁ動作確認も兼ねて確認していくとしよう。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
とりあえず、以下の流れを想定している。
- DCモータモデル改造とそのFMUをexport
- FMUをロード
- 信号を生成
- 入力オブジェクトの生成
- シミュレーション
- シミュレーション結果の取得
- シミュレーション結果のグラフ表示
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
割と手順が有るようには見れるが、
一個一個は大したことないの・・・か?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうだね。
2つ目の「FMUロード」以降はPythonの話で完結している物だ。
Pythonのコードとしてどのように書くか。
って程度の話になると思う。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
なるほど。
PyFMIとmatplotlibがあるからPythonで完結できるのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そういうことだねー。
DCモータモデル改造
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
DCモータモデルも大して改造じゃないんで、
ざっと見せておこう。
![DCモータ、OpenModelica、Modelica.Electrical.Analog.Sources.SignalVoltage、Modelica.Electrical.Analog.Sensors.CurrentSensor、Modelica.Electrical.Analog.Basic.Ground、Modelica.Electrical.Machines.BasicMachines.DCMachines.DC_PermanentMagnet、Modelica.Mechanics.Rotational.Sensors.SpeedSensor、Modelica.Electrical.Machines.Utilities.ParameterRecords.DcPermanentMagnetData、Modelica.Mechanics.Rotational.Components.Inertia、Modelica.Mechanics.Rotational.Sources.TorqueStep、Modelica.Blocks.Interfaces.RealOutput、Modelica.Blocks.Interfaces.RealInput](https://www.simulationroom999.com/blog/wp-content/uploads/2021/08/02_DCモータモデルPyFMI用.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
あ、PID制御器を挟まず、そのまま電圧制御するのね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
あれ?
そういえば、Outputブロックは以前やったけど、
voltageのところで入力っぽい感じになってるね?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そう。
まさに入力でInputブロックだ。
Outputブロックの反対の機能ではあるが、これもOutputブロックと同様にエイリアスが生成される。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
エイリアスの話はここでやったねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
じゃー、Inputブロックもエイリアスが生成されるから、
何かしらの入力をしたい場合は”voltage”ってエイリアス名でアクセスすればOKってわけか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
それでOKだ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、DCモータモデルはこの程度で、
そのままFMUでexportしてしまおう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
OpenModelicaでのFMU exportはここでやったから、
これの通りやればOKだね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
これでFMU側は準備ができた。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- PyFMIの動作確認方法を列挙。
- 実験用のFMUを作って、それをPyFMIで制御しつつmatplotlibで波形表示する。って流れ。
- DCモータモデル改造。
- 改造と言ってもInputブロックを追加した程度。
- InputブロックもOutputブロックと同様にエイリアスは生成される。
- このエイリアスにアクセスする予定。
バックナンバーはこちら。
コメント