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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

実験用のGUIはtkinterを使用。
そして必要そうな機能を洗い出した。

  • シミュレーションしながらリアルタイムで波形表示
  • スライダー等で入力を手動操作
  • sin波、のこぎり波などを入力
  • リアルタイム表示の一時停止

上記に対してGUIの大雑把な構成を決めていく。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

どこから決めていくか?

太郎くん
太郎くん

GUIが必要なら、
GUI構成を先に決めた方が良いのかな?

フクさん
フクさん

どこから始めたら良いってものはないだろうが、
GUI構成の方がイメージは湧きやすいだろうね。
対人間に於いてのインターフェースがそこでおおよそ確定するしね。

太郎くん
太郎くん

そうか。
自動車関連の開発をしてると忘れることもあるけど、
人間ともやり取りするわけだから、インターフェースの一種と言えるのか。

フクさん
フクさん

そもそもGUIがGraphical User Interfaceの略だから
一種も何もインターフェースそのものだけどね。

太郎くん
太郎くん

(このフクロウ・・・「良いこと言った!」みたいな感じで読者のハートを掴むつもりだったのに台無しにしやがった・・・。)

GUI構成

フクさん
フクさん

とりあえず、青図としては以下かな。

太郎くん
太郎くん

今どき青図とか言わなそうだけど。

フクさん
フクさん

じゃーGUI概要図!(仕返しか?)

tkinter、チェックボックス、スライダー、Scale、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、Target Speed、matplotlib、voltage、current、speed、loadTorqueStep_tau、target

GUI構成詳細

太郎くん
太郎くん

リアルタイムで描画するのはシミュレーション時の波形だよね?
シミュレーションが終わった後にmatplotlibで一気に描画ってのはやったけど、
GUIに埋め込む形で、しかもリアルタイム描画とかできるもんなのかな?

フクさん
フクさん

たぶん可能だ。
少なくとも以下を個別にできるのは昔やったことある。

  • tkinterにmatplotlibを埋め込み
  • matplotlibでリアルタイム描画
太郎くん
太郎くん

逆に言うと、同時にやったことはないのか・・・。

太郎くん
太郎くん

あとはTarget Speedってスライダーがあるね?
これは何に使うの?

フクさん
フクさん

このスライダー、Tkに於いてはScaleと呼ぶらしい。
これを使って手動で0~100の範囲の指令値をリアルタイムに指定するつもりだ。

太郎くん
太郎くん

ということは、このScaleをマウスとかで掴んで動かすと
それに合わせて指令値が変わって、DCモータモデルの各パラメータもそれに応じて変化する。
って感じか。

フクさん
フクさん

そうそう。
その想定だ。

太郎くん
太郎くん

あとは、各チェックボックスは?

フクさん
フクさん

まぁやっていくうちに増減する可能性はあるが、
現時点で想定している以下の機能の有効無効の切り替え用だ。

  • Enable Scale bar
    • Scale操作を反映するかどうか。
  • Enable Cpu Load
    • CPU負荷に相当する情報をグラフに反映するか。
  • pause
    • 描画更新を一時停止
  • sin wave
    • SIN波を指令値として入力
  • Sawtooth wave
    • のこぎり波を指令値として入力
太郎くん
太郎くん

CPU負荷って何を表示するつもりなの?

フクさん
フクさん

まぁFMU処理含めた処理一周分の時間をmsオーダーで入れようと思ってる。
といっても、具体的な内部処理の話はしてないから、現時点は何を言ってるか分からないと思う。
よって一旦スルーしてもらってOKだ。

太郎くん
太郎くん

(じゃースルーしよ)

太郎くん
太郎くん

pauseは?
まぁあっても良い機能とは思うけど、変に機能増やすとその分対応が大変になりそうだから、
不要だったらそういう機能は入れたくないなーって思うんだけど。

フクさん
フクさん

pauseは波形の更新を止めて波形の詳細を見たいって動機の他に
描画の更新を止めた際のCPU負荷がどうなるかを見るために入れようと思ってる。

太郎くん
太郎くん

ほう。
なるほど。
たしかにリアルタイム描画がどの程度の負荷になってるか知るためには
リアルタイム描画をしないパターンってのも作れる必要はあるね。

フクさん
フクさん

GUI構成のおおまかな話はこんなもんだろう。

まとめ

フクさん
フクさん

まとめだよ。

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

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました