FMI

事例

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

タイマ処理にmatplotlibの描画更新処理を入れてみる。 現時刻をベースに過去8秒分の時間軸を生成し、それをsin関数に入れてsin波生成。 relimメソッドを使うと縦軸が自動調整される。 pauseのチェックボックスを設置していたので、チェック状態を確認して更新するかしないかの判定に使う。
事例

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

まずはtkinterのタイマ処理から確認。タイマ処理に描画処理、FMU処理を組み込むためまずはタイマ。 タイマ処理はafterメソッドに指定時間とタイマハンドラを渡すことで実施できる。しかし、一回コールバックするとそれで終了。 よって、周期的に処理したい場合はタイマハンドラ内で再度afterメソッドを呼び出す必要あり。
事例

【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に関してはリアルタイム描画を抑制した際の負荷を見る為に設置。