Python

事例

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

現状のソースコード確認。 暗黙的なものも含めてグローバル変数が点在している。 GUIイベントとかタイマハンドラで関数が分離しているので仕方ない面もある。 折角なのでクラスとしてまとめてみようと試みる。 基本的なロジックは出来ているのでそれほど修正時間はかからない見込み。
事例

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

現状のコードで動作確認をしてみた。 FMUの波形表示OK。 Scaleで指令値変更OK。 まだ以下の課題が残っている。 ソースコードがちょっとヤッツケ。 負荷関連の評価が出来ていない。 実際の負荷状態。 描画処理の影響有無の評価。 なんとなく現状でも負荷の影響が見え隠れはしている。
事例

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

plot_handlerことmatplotlibリアルタイム更新処理のコード提示。 以前のリアルタイム描画実験との差は以下。 deque使用。 plot時にnp.arrayに変換しているが無くてもOK。 CPU負荷描画チェックボックス確認。 dequeのように要素数が分からない場合は-1による末尾指定が便利。
事例

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

FMU_handlerことFMUシミュレーション用処理のコードを提示。外部の変数を使用するためにglobal定義している変数あり。実時間の経過を元にFMUシミュレーション時間を決定している。 実時間にシミュレーション時間を追いつかせる方式。ただし、開始と終了のstepが重複したり欠落したりするので微小時間の調整が必要。
事例

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

必要なタイマハンドラは2つ FMU処理用とmatplotlib描画用。 描画用側の負荷が高いので、こっちは長めの周期で実施。 FMU処理用タイマハンドラ内で時間関連の演算が入るため、タイマハンドラ外で下準備が必要。 Masterの初回呼び出し時のオプションと2回目以降で変える必要がある。initializeオプション。
事例

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

FMU関連処理前準備を一気に説明。 いままでやってきたものなので細かい説明は省略。 deque関連の初期化。 dequeはcollectionsライブラリの一部。 maxlenで最大要素数を指定できる。 指定なしの場合は無限に入れられる。 実際には物理的な限界はあるだろうが・・・。
事例

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

FMU関連処理追加がそこそこいろいろあるので情報整理。 基本はいままでのFMU処理ではある。 追加でdequeが必要そう。 シミュレーションデータ全てを保持すると、記憶する配列が膨大になる可能性が高い。 よって、描画に必要なデータだけを格納するためにdequeを使用。 dequeの使用方法を追々説明予定。
事例

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

いままでごちゃごちゃと追加してきたコードを再確認。 tkinterによるリアルタイム描画の動作確認。 sin波が流れるように描画されていることを確認。 pauseで一時停止もできることを確認。 FMU関連処理はまだ未実装だが、tkinterによるリアルタイム描画はできそう。
事例

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

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

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

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