【XCP】最小構成のMBD事例 第2章 その208【AUTOSAR⑭】

【XCP】最小構成のMBD事例 第2章 その208【AUTOSAR⑭】 事例
【XCP】最小構成のMBD事例 第2章 その208【AUTOSAR⑭】

バックナンバーはこちら。
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回線ログと比較した感じだと、全に正しい結果となっている。
      • 思った以上の成果と言える。
  • フクさんが一点気になることがあるらしい。
    • これは次回説明予定。

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

コメント

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