【MDF】最小構成のMBD事例 第2章 その314【仮想HILS④】

【MDF】最小構成のMBD事例 第2章 その314【仮想HILS④】 事例
【MDF】最小構成のMBD事例 第2章 その314【仮想HILS④】

バックナンバーはこちら。
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。

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

コメント

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