バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はコードの修正を実施。
各関数(メソッド)で横断的に使用されてるものはメンバ変数へ移動。
各変数のスコープがハッキリしたことろで、
今回から実験続きを実施する。
登場人物
博識フクロウのフクさん

イラスト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
修正コードでとりあえず動作

コードの修正もできたし、とりあえず動作させてみるよー。
![tkinter、FMU、クラス、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]](https://www.simulationroom999.com/blog/wp-content/uploads/2021/09/02_tkinterFMU動作状態クラス化版-1024x608.png)

うん。
コード修正はしたけど、問題無く動作しているようだ。
やはり少しカクついてる?

と言ってもやっぱり少し波形がカクついてように見えるんだよなー。
Scaleのバーをマウスで動かしてるせいもあるかもしれないけど、
うまく原因の切り分けはできないものかなー。

そのためにsin波入力の機能を入れ込んでいる。

そっか。
sin波がキレイにでれば、マウス操作のせいで、
そうでなければ、処理の負荷に原因がある。
ってことにあるのか。

というわけでsin waveのチェックをON!
![tkinter、FMU、クラス、sin波入力、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]](https://www.simulationroom999.com/blog/wp-content/uploads/2021/09/03_tkinterFMU動作状態クラス化版sin波入力-1024x608.png)

やっぱりカクついてる!
これはやっぱり処理負荷のせいなのか?!

そこで、Enable Cpu Loadのチェックを入れて、
FMU処理の周期をプロットするモードにしてみよう。
FMU処理の周期で負荷の確認

よし!
sin波入力のままEnable Cpu Loadのチェックを入れてみる。
![tkinter、FMU、クラス、sin波入力、CPU負荷表示、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]](https://www.simulationroom999.com/blog/wp-content/uploads/2021/09/04_tkinterFMU動作状態クラス化版sin波入力CPU負荷表示付き-1024x608.png)

この点線が負荷・・・とすると、
なんか負荷が高い時と低い時が交互にあって、
負荷が高い時にカクついてる・・・?

波形を一時停止して、
下部の方にある虫眼鏡のボタンで波形を拡大してみよう。

たしかmatplotlibのメニューを配置してたね。
こういう時に使うものだったのか。
負荷を拡大して確認
![tkinter、FMU、クラス、sin波入力、CPU負荷表示、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]](https://www.simulationroom999.com/blog/wp-content/uploads/2021/09/05_tkinterFMU動作状態クラス化版sin波入力CPU負荷表示付き-1024x608.png)

これは完全に処理できていない期間があるってことだな。

そうだね。
点線が処理負荷ことFMUの処理可能な周期を示してて
逆に言うとFMU処理以外の別の処理で持ってかれている時間と言える。
単位はmsで、
負荷が低い時は10ms周期くらいで駆動しているが、
負荷が高い時は80ms~100msくらいは別の処理に持っていかれてるようだね。

まじかー。
これだとイマイチかなー。

まぁ80ms~100msをどうとらえるかだなー。
多少反応精度が悪いHILSでも良いってことであれば、
使い道はありそうってところかな。

でも大体制御とかって10ms以下で動いてたりしない?

そうだねー。
でも、それっぽい応答性が机上で評価できればOKってことであれば有用とは言える。

まぁこのレベルの環境である程度の不具合を洗い出して、
もっと高性能なHILSで詳細確認みたいな役割分担ってのは可能ってことか。
まとめ

まとめだよ。
- 修正コードでとりあえず動作させてみた。
- 問題無く動作した。
- 負荷確認実施。
- カクついているが人間の操作のせいの可能性もある。
- sin波の自動入力で確認。
- やはりカクついている。
- よって、操作の問題ではない。
- やはりカクついている。
- CPU負荷を見て、さらにmatpotlibの波形拡大で詳細確認。
- FMU処理以外の処理負荷大きそう。
バックナンバーはこちら。
コメント