【PyFMI】最小構成のMBD事例 第2章 その98【マルチFMI⑧】

【PyFMI】最小構成のMBD事例 第2章 その98【マルチFMI⑧】 事例
【PyFMI】最小構成のMBD事例 第2章 その98【マルチFMI⑧】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回はマルチFMU制御のPythonコードを提示。
基本いままで説明した内容。

今回は、実行結果とその考察。
まぁ現状だとまだ使い勝手としては不完全・・・。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

マルチFMU制御用のコード実行結果。

フクさん
フクさん

さっさと実行結果を出そう。

マルチFMUシミュレーション結果、volatage、current、speed、loadTorqueStep.tau、target、モータ電流、指令値、角速度、制御電圧、負荷トルク
フクさん
フクさん

そして、事前にOpenModelicaで取得していた波形。

DCモータモデル出力波形、モータ電流、指令値、角速度、制御電圧、負荷トルク

結果確認

太郎くん
太郎くん

これはOKなんじゃない?

フクさん
フクさん

そうだね。
シミュレーションとしてはOKだろう。

太郎くん
太郎くん

なんか含みのある言い方だなー。

フクさん
フクさん

今回のやり方自体は全く持って問題無い。

太郎くん
太郎くん

ということはやり方じゃないところに問題が?

問題とか課題とか

フクさん
フクさん

PyFMIにFMUを渡して一括でシミュレーションしてしまっている部分にちょっと課題がある。

太郎くん
太郎くん

そうなの?
楽で良いと思ったけど。

フクさん
フクさん

PythonやFMUの中でロジックが閉じてるならOKなんだが、
外部からのリアルタイムの入出力を想定すると今回の方式だとうまく行かないんだよね。

太郎くん
太郎くん

そっか!
元々はHILSみたいな環境って話だったから、
リアルタイムな入出力を想定しないといけないのか?!

Hardware-in-the-loop (HIL) simulation, or HWIL, is a technique that is used in the development and test of complex real-time embedded systems. HIL simulation provides an effective platform by adding the complexity of the plant under control to the test platform. The complexity of the plant under control is included in test and development by adding a mathematical representation of all related dynamic systems. These mathematical representations are referred to as the “plant simulation”. The embedded system to be tested interacts with this plant simulation.

Wikipediaより(https://en.wikipedia.org/wiki/Hardware-in-the-loop_simulation)

↓日本語訳

HIL(Hardware-in-the-Loop)シミュレーション(HWIL)は、複雑なリアルタイム・エンベデッドシステムの開発やテストに使用される技術です。HILシミュレーションは、テストプラットフォームに制御対象となるプラントの複雑性を加えることで、効果的なプラットフォームを提供します。制御下にあるプラントの複雑さは、関連するすべての動的システムの数学的表現を追加することによって、テストと開発に含まれます。これらの数学的表現は、「プラントシミュレーション」と呼ばれています。テストされる組込みシステムは、このプラントシミュレーションと相互作用する。

フクさん
フクさん

そうそう。
今回の方式だと

res = master.simulate(final_time=2.0, options=opts)
フクさん
フクさん

この一行ですべてのシミュレーションが完了してしまう。
これはこれでとても便利なんだが、外部とのやり取りができないんで、
HILSをゴールとした場合に於いては不便なことになる。

じゃあ、どうする?

太郎くん
太郎くん

じゃー、どうすれば・・・。

フクさん
フクさん

やり方はいろいろあるだろうが、
以下の方式でシミュレーション時間を実時間に合わせこめないか模索してみようかと思う。

  • PyFMI側でFMUのstep毎処理を握る
  • シミュレーションを刻む
太郎くん
太郎くん

これって可能な話?

フクさん
フクさん

わからん。

太郎くん
太郎くん

まじか。

フクさん
フクさん

ただ、PyFMIの中身を見た感じだと両方ともそれなりにできるような気はするんだよねー。
というわけで当たって砕けろ。だ。

太郎くん
太郎くん

最近こういうの多いなー・・・。

フクさん
フクさん

だってググっても情報が全然出て来ないんだもん。
それなりに使ってる人は居そうなんだけどねー。

フクさん
フクさん

まぁ情報が無いならしようがない。
勘でやってくしかないよねー。

太郎くん
太郎くん

(まぁ頭使うのは僕じゃないし)

まとめ

フクさん
フクさん

まとめだよ。

  • マルチFMU制御用のコード実行結果を提示。
    • 事前に取っていたOpenModelicaのシミュレーション結果も一緒に提示。
  • 今回の方法だと目的のHILS環境としては課題がある。
    • シミュレーションが1関数の中で閉じてるのでリアルタイムに外部とのやり取りができない。
    • ググっても情報出て来ないのでいろいろ模索するしかない。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました