バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はSET_DAQ_LIST_MODEによるDAQのモード設定とSTART_STOP_DAQ_LISTによるDAQ開始可能状態まで実施。
DAQのモード設定でSTIM指定をしたが特にエラー応答はなかったので、
STIMは対応している雰囲気は醸し出している。
今回はついに、STIMを実施する回となる。
登場人物
博識フクロウのフクさん
イラスト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
STIMを実施するためのPyXCP側のコード
そういえば、以前はSTIM未対応を前提にしてたらか、
DAQ起動後のRAM値書き換えはSET_MTA、DOWNLOADになってるのか。
SET_MTA、DOWNLOADの部分をSTIMに書き換える必要があるね。
まぁ基本的な流れは一緒なはずだから
こんな感じかな。
# START_STOP_SYNCH
xm.startStopSynch(0x01);
# DAQの計測とSTIMによる外部からの値更新
stim_wait = 0.05
start = time.time()
stim_time = time.time()+stim_wait-0.03
ram_update = [
[0x11, 0x22, 0x33, 0x44],
[0x55, 0x66, 0x77, 0x88],
[0x99, 0xAA, 0xBB, 0xCC],
[0x00, 0x00, 0x00, 0x00],
]
i = 0
str = ""
while True:
queue_len = len(xm.transport.daqQueue)
for _ in range(queue_len):
daq = xm.transport.daqQueue.popleft()
str += '%.6f, %s\n' % ( daq[3],daq[0].hex() )
if time.time() > stim_time:
bhv = bytearray([0x01]*5)
bhv[1:5]=ram_update[i]
xm.transport.send(bhv)
str += 'stim %s\n' % bhv.hex()
stim_time = stim_time + stim_wait
i = i+1
if i > 3:
i = 3
if time.time() > start + 0.22:
break
time.sleep(0.010)
print(str)
そうだね。
これで実験してみよう。
結果
1638777497.160842, 00486f00000000
1638777497.170812, 00526f00000000
1638777497.180806, 005c6f00000000
1638777497.190759, 00666f00000000
1638777497.200753, 00706f00000000
1638777497.210698, 007a6f00000000
1638777497.220676, 00846f00000000
1638777497.230662, 008e6f00000000
stim 0111223344
1638777497.240665, 00986f00000000
1638777497.250602, 00a26f11223344
1638777497.260555, 00ac6f11223344
1638777497.270557, 00b66f11223344
1638777497.280519, 00c06f11223344
stim 0155667788
1638777497.290538, 00ca6f11223344
1638777497.300499, 00d46f55667788
1638777497.310461, 00de6f55667788
1638777497.320430, 00e86f55667788
1638777497.330408, 00f26f55667788
stim 0199aabbcc
1638777497.340402, 00fc6f55667788
1638777497.350380, 00067099aabbcc
1638777497.360333, 00107099aabbcc
1638777497.370311, 001a7099aabbcc
1638777497.380273, 00247099aabbcc
stim 0100000000
1638777497.390234, 002e7000000000
1638777497.400245, 00387000000000
1638777497.410206, 00427000000000
1638777497.420168, 004c7000000000
stim 0100000000
お!
これは結構良い感じでRAM値が更新されているのでは?
そうだね。
若干のDelayはあるようだが、
PythonならではのDelayはどうしても取り除けないので、
このくらいの応答性が限界なのだろう。
CAN回線ログ
一応CAN回線ログも確認しておこう。
0.677233 1 1 Rx d 2 DD 01
0.679027 1 2 Rx d 1 FF
0.683475 1 2 Rx d 7 00 48 6F 00 00 00 00
0.693445 1 2 Rx d 7 00 52 6F 00 00 00 00
0.703439 1 2 Rx d 7 00 5C 6F 00 00 00 00
0.713392 1 2 Rx d 7 00 66 6F 00 00 00 00
0.723386 1 2 Rx d 7 00 70 6F 00 00 00 00
0.733331 1 2 Rx d 7 00 7A 6F 00 00 00 00
0.743309 1 2 Rx d 7 00 84 6F 00 00 00 00
0.753295 1 2 Rx d 7 00 8E 6F 00 00 00 00
0.762839 1 1 Rx d 5 01 11 22 33 44
0.763298 1 2 Rx d 7 00 98 6F 00 00 00 00 ← 割り込み
0.767271 1 2 Rx d 1 FF
0.773235 1 2 Rx d 7 00 A2 6F 11 22 33 44
0.783188 1 2 Rx d 7 00 AC 6F 11 22 33 44
0.793190 1 2 Rx d 7 00 B6 6F 11 22 33 44
0.803152 1 2 Rx d 7 00 C0 6F 11 22 33 44
0.810582 1 1 Rx d 5 01 55 66 77 88
0.813171 1 2 Rx d 7 00 CA 6F 11 22 33 44 ← 割り込み
0.814146 1 2 Rx d 1 FF
0.823132 1 2 Rx d 7 00 D4 6F 55 66 77 88
0.833094 1 2 Rx d 7 00 DE 6F 55 66 77 88
0.843063 1 2 Rx d 7 00 E8 6F 55 66 77 88
0.853041 1 2 Rx d 7 00 F2 6F 55 66 77 88
0.857588 1 1 Rx d 5 01 99 AA BB CC
0.863035 1 2 Rx d 7 00 FC 6F 55 66 77 88 ← 割り込み
0.864018 1 2 Rx d 1 FF
0.873013 1 2 Rx d 7 00 06 70 99 AA BB CC
0.882967 1 2 Rx d 7 00 10 70 99 AA BB CC
0.892944 1 2 Rx d 7 00 1A 70 99 AA BB CC
0.902906 1 2 Rx d 7 00 24 70 99 AA BB CC
0.905019 1 1 Rx d 5 01 00 00 00 00
0.908919 1 2 Rx d 1 FF
0.912867 1 2 Rx d 7 00 2E 70 00 00 00 00
0.922878 1 2 Rx d 7 00 38 70 00 00 00 00
0.932839 1 2 Rx d 7 00 42 70 00 00 00 00
0.942801 1 2 Rx d 7 00 4C 70 00 00 00 00
0.951255 1 1 Rx d 5 01 00 00 00 00
0.952795 1 2 Rx d 7 00 56 70 00 00 00 00
0.956801 1 2 Rx d 1 FF
0.962765 1 2 Rx d 7 00 60 70 00 00 00 00
0.972718 1 2 Rx d 7 00 6A 70 00 00 00 00
0.982688 1 2 Rx d 7 00 74 70 00 00 00 00
0.991085 1 1 Rx d 2 DD 00
CAN回線ログを見た感じだとSTIMのパケットを送ったタイミングでDAQパケットが割り込んでたんだな。
となると、PyXCPで取得した結果は完全に正しいってことになるな。
これは予想以上の成果か。
ただ、1点ちょっと気になるところがあるな・・・。
まぁ今回の問題点であった性能の話とは別だけど。
え゛
まだ何かあるのか・・・。
いや、気になる程度の話で何かがダメって話では無い。
これに関しては次回説明しよう。
まとめ
まとめだよ。
- ついにAUTOSAR-XCPでSTIMを実現。
- SET_MTA,DOWNLOADで実現していたコードを改修。
- 若干、遅れがあるように見えたが、CAN回線ログと比較した感じだと、全に正しい結果となっている。
- 思った以上の成果と言える。
- フクさんが一点気になることがあるらしい。
- これは次回説明予定。
バックナンバーはこちら。
コメント