KEI

事例

【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」なので当たって砕けろ方式。
事例

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

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

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

マルチFMU制御用のコード提示。 前半は前回まで説明した内容。 ロード、モデルセット、モデル間接続セット、Master定義 後半はシミュレーション結果取得と波形表示。 FMILibraryの時とは異なり、結果取得と波形表示が楽なのは本当に有難い。 結果は連想配列で取得。 波形表示はmatplotlib使用。
事例

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

Masterにオプション設定が可能。 今回はstep_sizeを調整。 デフォルト値が0,01秒なので0,001秒に変更。 step_size以外にも大量のオプションがある。 補間の仕方、並列処理の有無、結果出力、ログ出力などなど。 どういうものがあるかだけ把握し、必要になった際に再度確認すればOK。
事例

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

Masterが土台になるが必要な情報がある。 モデルセット。 FMUをロードしたモデルをリスト化。 モデル間接続セット。 モデルの出力、入力を1セットとしたリスト。 モデルセットとモデル間接続セットをMasterに渡せばシミュレーションをする準備はおおよそ完了。 まだ、若干の調整はある。
事例

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

PyFMIでマルチFMU制御する際にある程度の前提知識が必要になる。 FMUロード。 以前はload_fmuを使ったが、今回はFMUModelCS2を使用。 引数が増えている。 PATHの指定がファイル名のPATHに分けることが可能。 DLLロード有無の引数がある。 つまりロードしない使い方が・・・。
事例

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

DCモータモデル分解とFMU exportを実施。 前回までのやり方で簡単にできるはず。 (よって詳細説明は端折った) PyFMIからのFMU呼び出しをする際のおおまかな構成を提示。 各FMUの信号はPython側で接続するイメージ。 マルチFMU制御ならではの処理。 (それだけでは解決しない話もあったり)