バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はストレージ用のリスト宣言の話。
Pythonでは空っぽのリストを事前に宣言可能。
本来であれば、メモリ圧迫回避のため、一時ファイルの方が望ましい。
今回は、ボタン押下イベント内のMDF保存部分の実装について説明。
登場人物
博識フクロウのフクさん

イラスト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
ボタン押下時にやること

太郎くん
次はボタン押下時の処理になるのかな?
MDFを生成して保存する処理だと思うけど。

フクさん
そうだね。
以前のMDF生成実験とほぼ同じことをやることになるね。

太郎くん
ということは以下の流れになるのか。
- 各種シグナルの宣言
実データはリストを渡す。 - シグナルリストに各種シグナルを登録
- シグナルリストをMDFインスタンスに渡す
- MDF保存

フクさん
加えて以下かな。
- MDFのインスタンス再生成
- 各種リストのクリア

太郎くん
各種リストのクリアってどうしたらいいんだ?

フクさん
普通に再宣言すればOKだ。
こんな感じ。
self.mdf = MDF()
self.time_sig = []
self.voltage_sig = []
self.current_sig = []
self.speed_sig = []
self.loadTorque_sig = []
self.target_sig = []

太郎くん
なんだ。
それだけか。
想定ソースコード

太郎くん
上記を元に書いたソースコードが以下。
# ボタン用関数
def btn_click(self):
sigs = []
t = self.time_sig
sig = Signal(
self.voltage_sig,
self.time_sig,
name="voltage",
unit="V",
conversion=None,
comment="voltage",
)
sigs.append(sig)
sig = Signal(
self.current_sig,
self.time_sig,
name="current",
unit="A",
conversion=None,
comment="current",
)
sigs.append(sig)
sig = Signal(
self.speed_sig,
self.time_sig,
name="speed",
unit="rad/s",
conversion=None,
comment="speed",
)
sigs.append(sig)
sig = Signal(
self.loadTorque_sig,
self.time_sig,
name="loadTorque",
unit="N.m",
conversion=None,
comment="loadTorque",
)
sigs.append(sig)
sig = Signal(
self.target_sig,
self.time_sig,
name="target",
unit="N.m",
conversion=None,
comment="target",
)
sigs.append(sig)
#self.mdf.append(sigs, comment="single dimensional channels", common_timebase=True)
self.mdf.append(sigs)
self.mdf.save("MotorControl.mf4")
self.mdf = MDF()
self.time_sig = []
self.voltage_sig = []
self.current_sig = []
self.speed_sig = []
self.loadTorque_sig = []
self.target_sig = []

フクさん
動かしてみないとわからんけど、
流れとしてはOKだろう。
まとめ

フクさん
まとめだよ。
- ボタン押下時にやることを確認。
- MDFインスタンス生成。
- 各種シグナル生成。
- 各種シグナルをリストにまとめる。
- MDFインスタンスに統合
- MDFを生成。
- 各種シグナルとMDFインスタンスを再初期化。
- 上記を元にコードを書いてみた。
- 実際には動かしてみないとわからないが流れはOK。
バックナンバーはこちら。
コメント