バックナンバーはこちら。
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→浮動小数点)。
バックナンバーはこちら。
コメント