chevron_left

メインカテゴリーを選択しなおす

cancel
KEI
フォロー
住所
未設定
出身
未設定
ブログ村参加

2020/02/11

arrow_drop_down
  • 【PyFMI】最小構成のMBD事例 第2章 その116【リアルタイム描画⑩】

    Scaleの配置確認。 問題無く配置されているのを確認。 Scaleの挙動確認。 値をprintしているのでそれを確認。 Scaleの値が出力されているの挙動もOK。 tkinterはmainloopに入ると、戻ってこない。 よって、タイマ処理を使ってうFMU関連、描画関連をうまくハンドリングする必要あり。

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

    最後のウィジットとしてScaleを配置。 いままでのウィジットの中では最もパラメータが多い。 縦置き、横置きの指定ができる。commandという引数で値変更時のコールバックを設定できる。to、from_で値の範囲を指定できるが大きさが逆転しても良い。0値の配置を逆にしたい場合は意図的に逆転させる。(公式もOK情報あり)

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

    チェックボックスの配置。 チェック状態を確認するための変数を用意し、ウィジット生成時に渡しておく。 この変数を見ればチェック状態が分かる。 チェック状態をPython側から変更することも可能。 placeで座標指定して配置。 同様の処理を必要なチェックボックス分実施。 GUI上でも設置されていることを確認。

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

    FigureCanvasTkAggを使用してtkinterへmatplotlibを埋め込み。pack(side = tkinter.RIGHT)でメインウィンドウの右端に接するよう配置。NavigationToolbar2Tkを使用してメニューバー配置。place(x=0, y=h/2-40)を使用して座標指定で配置。

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

    matplotlibをtkinterに埋め込む際には以下のモジュールが必要。 matplotlib.pyplot。 プロット用。 FigureCanvasTkAgg。 プロット画面埋め込み用。 NavigationToolbar2Tk。 メニューバー。 埋め込む前に図(figure)を用意しておく。

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

    tkinterのimportはそのまんま。 「import tkinter」 VisualStudioのリソースエディタのようなものは無い。 メインウィンドウ生成方法解説。 titleも指定可能。 メインウィンドウの大きさと位置指定。 文字列で以下のような感じで指定。 '960x540+960+0'。

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

    tkinterはPython標準ライブラリのためインストール済み。 動作確認。 「python -m tkinter」でウィンドウが出てくればとりあえずOK。 メインウィンドウをrootとして定義し、そこに各ウィジットを生成&紐づけしていく。 matplotlib関連もtkinter連携用モジュールが存在する。

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

    実験構成はGUIから決めていく。 GUIでおおよそのインターフェースが確定しそうだから。 GUIの概要図を描いた。 各種チェックボックス、Scale、plot画面。 上記の機能、目的を定義。 処理負荷が分かるようにする。 pauseに関してはリアルタイム描画を抑制した際の負荷を見る為に設置。

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

    実験構成はGUIから決めていく。 GUIでおおよそのインターフェースが確定しそうだから。 GUIの概要図を描いた。 各種チェックボックス、Scale、plot画面。 上記の機能、目的を定義。 処理負荷が分かるようにする。 pauseに関してはリアルタイム描画を抑制した際の負荷を見る為に設置。

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

  • 【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制御ならではの処理。 (それだけでは解決しない話もあったり)

  • 【PyFMI】最小構成のMBD事例 第2章 その92【マルチFMI②】

    元にするDCモータモデルは使いまわし。 Ramp、PID制御器、DCモータの構成が一番部品が多い。 モデルの分解もRamp、PID制御器、DCモータの単位でやってく予定。 念のため、OpenModelicaで現状の動作結果を取得しておく。 PyFMIで統合したときの成功/失敗の判定用。 次はモデル分解。

  • 【PyFMI】最小構成のMBD事例 第2章 その91【マルチFMU①】

    「完璧に把握したかもしれん」は幻。 ダニング=クルーガー効果。 FMUの本体の目的は「完成車メーカがサプライヤからの提供されたFMUを統合する」 よって、複数のFMUを作成。 DCモータモデルを分解して複数のFMUを作ってみる方針。 とりあえず上記をやってみて課題が出たら、それを次のネタにする。

  • 【FMI/FMU】最小構成のMBD事例 第2章 その90【PyFMI⑦】

    PyFMIでFMU制御するPythonコードを開示。 割とあっさり実現。 Pythonなのでmatpotlibでそのままグラフ表示。 FMILibraryと比べるとvalueReferenceに振り回されることが無い点がとても良い。 PyFMIによるFMU制御の有用性がなんとなく見えてきた。

  • 【FMI/FMU】最小構成のMBD事例 第2章 その89【PyFMI⑥】

    シミュレーション実施。 開始時刻、終了時刻、入力オブジェクトを渡すことで実施可能。 シミュレーション結果取得。 simulate関数の戻り値が連想配列になっている。 voltage = res['voltage']のような指定方法。 シミュレーション結果のグラフ表示。 matplotlibでプロットするのみ。

  • 【FMI/FMU】最小構成のMBD事例 第2章 その88【PyFMI⑤】

    時間軸作った。 とりあえず、0秒から2秒の等差数列で作った。 Ramp作った。 等差数列で斜めにプロットした後にmax,minでサチらせた。 時間軸とRamp入力と統合&縦方向に。 vstackとtransposeを使用。 入力オブジェクト作った。 voltageに入力行列を紐づけた。

  • 【FMI/FMU】最小構成のMBD事例 第2章 その87【PyFMI④】

    FMUをPythonで使用する上で必要ライブラリのimport。 PyFMIのload_fmu。 numpy。 matplotlib。 load_fmuの戻りのオブジェクトはFMU次第。 FMUModelCS1。 FMUModelCS2。 FMUModelME1。 FMUModelME2。

arrow_drop_down

ブログリーダー」を活用して、KEIさんをフォローしませんか?

ハンドル名
KEIさん
ブログタイトル
シミュレーションの世界に引きこもる部屋
フォロー
シミュレーションの世界に引きこもる部屋

にほんブログ村 カテゴリー一覧

商用