FMU

事例

【PyFMI】最小構成のMBD事例 第2章 その108【リアルタイム描画②】

実験環境は「シミュレーションしながらリアルタイムで波形表示」。上記以外にも以下を組み込む。スライダー等で入力を手動操作。sin波、のこぎり波などを入力。リアルタイム表示の一時停止。tkinterを使用する予定。Tk GUIツールキットをPythonから呼ぶライブラリ。
事例

【PyFMI】最小構成のMBD事例 第2章 その107【リアルタイム描画①】

前回までやってたシミュレーション時間と実時間の同期には課題がある。シミュレーション時間の方が長いと破綻。Python側でグラフ表示等すると破綻し易い。よって、別案。前回まではシミュレーション時間に実時間を追いつかせる。対して、新方式は実時間に対してシミュレーション時間を追いつかせる。
事例

【PyFMI】最小構成のMBD事例 第2章 その106【ダミーFMU⑧】

ダミーFMU実験の動作確認。タイミングによっては若干ズレるがシミュレーション時間と実時間の同期はOK。シミュレーション波形確認。Ramp Up、Ramp Downの台形状の波形が出ており、期待通りの指令値になっている。上記によりダミーFMUによる実験がし易くなる。簡単なアルゴリズムであればPythonで実施。
事例

【PyFMI】最小構成のMBD事例 第2章 その105【ダミーFMU⑦】

ダミーFMU実験用ソースコードは以前のマルチFMUの時の物を流用。do_step周りの追加が主な修正部分。ソースコード開示。FMUModelCS2の一部をDummy_FMUModelCS2。do_stepをdo_dummyで上書き。時刻同期ができてるかを確認できるよう一部printを入れている。
事例

【PyFMI】最小構成のMBD事例 第2章 その104【ダミーFMU⑥】

do_stepの実装方針を決めた。Ramp UpとRamp Down。出力信号のソースコード。シミュレーション時間を見ながら出力信号を決定する方式。時刻同期のソースコード。単にタイマーを使ってシミュレーション時間が実時間に追いつくのを待つ。do_stepメソッドの上書きはそのまま作成関数で上書きすればOK。
事例

【PyFMI】最小構成のMBD事例 第2章 その103【ダミーFMU⑤】

Dummy_FMUModelCS2を使用する実験構成を提示。以前作ったマルチFMUの構成をベースにちょい修正の方針。ついでにPythonからstep毎の出力も制御してみる。各FMUのロードのコード。Dummy_FMUModelCS2で既存のFMUを指定しておくとインターフェース仕様だけは取り込める。
事例

【PyFMI】最小構成のMBD事例 第2章 その102【ダミーFMU④】

do_stepをオーバーライドしている理由の説明。Cythonによる静的関数でそのままではPython側からの上書きができない。do_stepの重要性の説明。masterモジュールからシミュレーションステップ毎に呼ばれるメソッドだから。これを自由に書き換えられれば時間制御ができる。実時間に追いつくまで待たせる。
事例

【PyFMI】最小構成のMBD事例 第2章 その101【ダミーFMU③】

FMUロード関数を一旦整理。Dummy_*という謎関数が各FMUタイプ別に存在。Dummy_FMUModelCS2を題材として掘り下げ。FMUModelCS2を継承している。オーバーライドしているメソッド多数。重要なのはdo_step。cpdef定義なので外部から上書きできないのを回避している。
事例

【PyFMI】最小構成のMBD事例 第2章 その100【ダミーFMU②】

ダミーFMU定義に向けての方針を提示。FMUのロードの仕方を再確認。_connect_dllという引数があった。_connect_dllをFalseにするとFMUがロードされずインターフェースだけが定義される。インターフェースを利用してでPython側からFMU出力制御可。しかし、時間の制御はできない。
事例

【PyFMI】最小構成のMBD事例 第2章 その99【ダミーFMU①】

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