【XCP】最小構成のMBD事例 第2章 その237【CAN-FD⑭】

【XCP】最小構成のMBD事例 第2章 その237【CAN-FD⑭】 事例
【XCP】最小構成のMBD事例 第2章 その237【CAN-FD⑭】

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

はじめに

前回はxcp_canの改造箇所を整理した。
仮想HILSにXCPの都合を見せないための部分なので修正内容が集中し易いという性質が垣間見れた。

引き続きxcp_canの修正作業となり、DAQ list周りの修正に入る。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

DAQ listのODT_ETNRYのデータ長変更(16bit→32bit)

太郎くん
太郎くん

今回はxcp_canクラスのODT_ENTRYの修正だね。

フクさん
フクさん

これはシンプルで、namedtupleのところをちょこっと書き換えるだけだ。

# ODT_ENTRYへの書き込み
DaqEntry = namedtuple("DaqEntry", "daq odt entry bitoff size ext addr")
de0 = (
	# DAQ 0
	DaqEntry(daq=0, odt=0,  entry=0, bitoff=255, size=4, ext=0xff, addr=0x00000200),
	DaqEntry(daq=0, odt=0,  entry=1, bitoff=255, size=4, ext=0xff, addr=0x00000204),
	DaqEntry(daq=0, odt=0,  entry=2, bitoff=255, size=4, ext=0xff, addr=0x00000208),
	
	# DAQ 1
	DaqEntry(daq=1, odt=0,  entry=0, bitoff=255, size=4, ext=0xff, addr=0x00000200),
	DaqEntry(daq=1, odt=0,  entry=1, bitoff=255, size=4, ext=0xff, addr=0x00000204),
)
太郎くん
太郎くん

あー、確かにnamedtuple使ってたね。
この仕組みのおかげで一撃で修正完了って感じか。
sizeも4byteになってて、アドレスも4byte境界になってるから、
これで32bit対応はOKだね。

DAQの受信レイアウト調整とDAQ受信データの物理値変換(1/65536→浮動小数点)

フクさん
フクさん

ODT_ENTRYを変えたんで、
DAQで送信されてくるデータのレイアウトも変わる
さらに物理値変換も元々が1/256だったものが1/65536になっているので、これも調整だ。

while True:
	daq = xcp.recv_daq()
	if len(daq) > 0:
		print_str += '%.6f, %s\n' % ( daq['0'][3],daq['0'][0].hex() )
		deque_time.append(time.perf_counter())
		deque_target.append( float(int.from_bytes(daq['0'][0][1:5], byteorder='little', signed=True))/0x10000 )
		deque_input.append( float(int.from_bytes(daq['0'][0][5:9], byteorder='little', signed=True))/0x10000 )
		deque_output.append( float(int.from_bytes(daq['0'][0][9:13], byteorder='little', signed=True))/0x10000 )
		if time.time() > stim_time:
			xcp.stim(ram_update[i][0], ram_update[i][1])
			print_str += 'stim %s %s\n' % ( hex(ram_update[i][0]), hex(ram_update[i][1]) )
			stim_time =  stim_time + stim_wait
			i = i+1
			if i > len(ram_update)-1:
				i = len(ram_update)-1
	if time.time() > start + 12:
		break
	time.sleep(0.010)
太郎くん
太郎くん

ここは確かテストコードのところだったね。

フクさん
フクさん

そうだね。
よって、仮想HILS側もこれと同等の修正が必要にはなるが、
xcp_can単体で動作するかをここで見ておいた方が良いだろう。

太郎くん
太郎くん

16bit→32bitの変更もint.from_bytesを使用してるからそんなに大きな変更って感じじゃないね。

フクさん
フクさん

これがさらに増えたとしても、それほど難しいことにはならないだろう。

まとめ

フクさん
フクさん

まとめだよ。

  • DAQ listのODT_ETNRYのデータ長変更(16bit→32bit)。
    • namedtupleを使用していたので修正は楽。
  • DAQの受信レイアウト調整。
    • int.from_bytesを使用してるので16bitから32bitへの変更は楽。
  • DAQ受信データの物理値変換(1/65536→浮動小数点)。

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

コメント

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