事例 【PyFMI】最小構成のMBD事例 第2章 その122【リアルタイム描画⑯】 必要なタイマハンドラは2つ FMU処理用とmatplotlib描画用。 描画用側の負荷が高いので、こっちは長めの周期で実施。 FMU処理用タイマハンドラ内で時間関連の演算が入るため、タイマハンドラ外で下準備が必要。 Masterの初回呼び出し時のオプションと2回目以降で変える必要がある。initializeオプション。 2021.10.06 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その121【リアルタイム描画⑮】 FMU関連処理前準備を一気に説明。 いままでやってきたものなので細かい説明は省略。 deque関連の初期化。 dequeはcollectionsライブラリの一部。 maxlenで最大要素数を指定できる。 指定なしの場合は無限に入れられる。 実際には物理的な限界はあるだろうが・・・。 2021.10.05 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その120【リアルタイム描画⑭】 FMU関連処理追加がそこそこいろいろあるので情報整理。 基本はいままでのFMU処理ではある。 追加でdequeが必要そう。 シミュレーションデータ全てを保持すると、記憶する配列が膨大になる可能性が高い。 よって、描画に必要なデータだけを格納するためにdequeを使用。 dequeの使用方法を追々説明予定。 2021.10.04 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その119【リアルタイム描画⑬】 いままでごちゃごちゃと追加してきたコードを再確認。 tkinterによるリアルタイム描画の動作確認。 sin波が流れるように描画されていることを確認。 pauseで一時停止もできることを確認。 FMU関連処理はまだ未実装だが、tkinterによるリアルタイム描画はできそう。 2021.10.03 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その118【リアルタイム描画⑫】 タイマ処理にmatplotlibの描画更新処理を入れてみる。 現時刻をベースに過去8秒分の時間軸を生成し、それをsin関数に入れてsin波生成。 relimメソッドを使うと縦軸が自動調整される。 pauseのチェックボックスを設置していたので、チェック状態を確認して更新するかしないかの判定に使う。 2021.10.02 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その117【リアルタイム描画⑪】 まずはtkinterのタイマ処理から確認。タイマ処理に描画処理、FMU処理を組み込むためまずはタイマ。 タイマ処理はafterメソッドに指定時間とタイマハンドラを渡すことで実施できる。しかし、一回コールバックするとそれで終了。 よって、周期的に処理したい場合はタイマハンドラ内で再度afterメソッドを呼び出す必要あり。 2021.10.01 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その116【リアルタイム描画⑩】 Scaleの配置確認。 問題無く配置されているのを確認。 Scaleの挙動確認。 値をprintしているのでそれを確認。 Scaleの値が出力されているの挙動もOK。 tkinterはmainloopに入ると、戻ってこない。 よって、タイマ処理を使ってうFMU関連、描画関連をうまくハンドリングする必要あり。 2021.09.30 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その115【リアルタイム描画⑨】 最後のウィジットとしてScaleを配置。 いままでのウィジットの中では最もパラメータが多い。 縦置き、横置きの指定ができる。commandという引数で値変更時のコールバックを設定できる。to、from_で値の範囲を指定できるが大きさが逆転しても良い。0値の配置を逆にしたい場合は意図的に逆転させる。(公式もOK情報あり) 2021.09.29 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その114【リアルタイム描画⑧】 チェックボックスの配置。 チェック状態を確認するための変数を用意し、ウィジット生成時に渡しておく。 この変数を見ればチェック状態が分かる。 チェック状態をPython側から変更することも可能。 placeで座標指定して配置。 同様の処理を必要なチェックボックス分実施。 GUI上でも設置されていることを確認。 2021.09.28 事例
事例 【PyFMI】最小構成のMBD事例 第2章 その113【リアルタイム描画⑦】 FigureCanvasTkAggを使用してtkinterへmatplotlibを埋め込み。pack(side = tkinter.RIGHT)でメインウィンドウの右端に接するよう配置。NavigationToolbar2Tkを使用してメニューバー配置。place(x=0, y=h/2-40)を使用して座標指定で配置。 2021.09.27 事例