バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
PyFMIを使用してFMUのロード&シミュレーション、
さらに複数のFMUのロード&シミュレーションもやったが、
シミュレーションのリアルタイム化ができないとHILSっぽい環境は実現できない。
どうやってシミュレーション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
HILSに於いてのシミュレーション時間と実時間の合わせこみ方法

HILSっぽくするにはシミュレーション時間を如何に実時間に近づけるかってのがポイントだったよね。

そうだね。
それをこれから考える必要がある。

ちなみに一般的なHILSだとどうしてるのかな?

まぁどれを一般的とするかにもよるが、
1msなら1ms周期で各モデルを呼び出すことを保証した機能をいれ、
その周期時間を想定したモデルを組み込むって組み方になるだろうね。
モデルはMATLAB、Simulink、FMU、C言語と様々だが、
考え方は一緒だろう。

もう一個は、
モデルの一つがシミュレーション時間と実時間を常に評価してて、
シミュレーション時間が実時間に追いついていなければ、
実時間に追いつくまでそこで処理を待機させるってやり方があるな。

とすると、どっちのアプローチでやってくつもり?

とりあえず、後者の
「モデルの一つがシミュレーション時間と実時間を常に評価」
って方かな。

となると・・・。
今回のPyFMUの話に当てはめると、
そういったFMUを作るって感じになるのか???
ダミーFMU

そうだね。
つまりダミーのFMUを作って、
時間制御させればOKってことだ。

ダミーのFMUなんて作れるの?
今のところOpenModelicaからexportする以外のFMUの作り方ってわからないんだけど・・・。

まぁFMUを自作するってのも一つのやり方ではあるね。

恐ろしくイバラの道な予感しかない。

確かにそのとおりだ。

というわけで、いろいろ調べたところ、
PyFMI自体がダミーFMUを定義できるっぽいんだよね。

え?
そうなの?

ただ、ドキュメントで明記されているわけでもなく、
どっかの誰かが試した方法でもないんだよねぇ。
Undocumented specification

フクさんはそれをどうやって調べたんだ??

PyFMIのソースコードを潜った。
つまりこのダミーFMU仕様は
PyFMIの「Undocumented specification」って位置づけになる。

Undocumented specification?

ドキュメントには書かれてないけど、
機能としては存在しているものってことだねー。

良くそんなの見つけたな。

でもそうなるとうまく動作する保証はなさそうだな。

何となくPyFMIの仕組みが見えてきたんで、
たぶん狙い通り動くんじゃないかな?

まじか。

とりあえず、対応方針とかをまず考えよう。
まとめ

まとめだよ。
- HILSに於いてのシミュレーション時間と実時間の合わせこみ方法は大きく2種類。
- HILS自体が時間保証。
- モデルの一部で時間の辻褄合わせ。
- 今回はモデルの一部で辻褄合わせの方針。
- PyFMIでダミーFMUを定義できそう。
- 「Undocumented specification」なので当たって砕けろ方式。
- PyFMIでダミーFMUを定義できそう。
バックナンバーはこちら。
コメント