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

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

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

はじめに

PyXCPでDAQパケットを受信しながらSET_MTA、DOWNLOADのコマンド送信を行う実験用のコードを起こした。
一応PyXCP内コード的には大丈夫そうではあるが、
本当に大丈夫かは試しておいた方が良さそう。

というわけで、今回は実際に動作確認してみる。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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パケットを受信しながらSET_MTA、DOWNLOADのコマンド送信

太郎くん
太郎くん

じゃ、前回のコードを走らせるよー。

import time

download_wait = 0.05
start = time.time()
download_time =  time.time()+download_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() > download_time:
        xm.setMta(0x00000004,0xff)
        bhv = bytearray(ram_update[i])
        xm.download(bhv)
        str += 'download %s\n' % bhv.hex()
        download_time =  download_time + download_wait
        i = i+1
        if i > 3:
            i = 3
    if time.time() > start + 0.22:
        break
    time.sleep(0.010)
    
print(str)

結果

1637603013.423053, 00000000000000
1637603013.432965, 00630000000000
1637603013.443000, 00c70000000000
1637603013.452937, 002a0100000000
1637603013.462923, 008e0100000000
1637603013.472877, 00f20100000000
1637603013.482838, 00550200000000
1637603013.492832, 00b90200000000
download 11223344
1637603013.502785, 001d0300000000
1637603013.512772, 00810311223344
1637603013.522799, 00e50311223344
1637603013.532695, 00480411223344
1637603013.542681, 00ac0411223344
1637603013.552667, 00100511223344
download 55667788
1637603013.562620, 00730511223344
1637603013.572639, 00d70555667788
1637603013.582608, 003b0655667788
1637603013.592578, 009f0655667788
download 99aabbcc
1637603013.602572, 00030755667788
1637603013.612509, 00660755667788
1637603013.622512, 00ca0799aabbcc
1637603013.632432, 002d0899aabbcc
download 00000000
1637603013.642459, 00920899aabbcc
1637603013.652380, 00f50899aabbcc
1637603013.662292, 00580999aabbcc
1637603013.672376, 00bd0900000000

結果確認

太郎くん
太郎くん

うん。
一応動いてそうだ。

太郎くん
太郎くん

でも、donwloadを呼び出したタイミングでDAQパケットの値が変わっていないのが気になる・・・。

フクさん
フクさん

CAN回線的にどうなっているかを見たら?

太郎くん
太郎くん

こんな感じだね。

 0.654443 1  2               Rx   d 7 00 00 00 00 00 00 00
 0.664355 1  2               Rx   d 7 00 63 00 00 00 00 00
 0.674390 1  2               Rx   d 7 00 C7 00 00 00 00 00
 0.684327 1  2               Rx   d 7 00 2A 01 00 00 00 00
 0.694313 1  2               Rx   d 7 00 8E 01 00 00 00 00
 0.704266 1  2               Rx   d 7 00 F2 01 00 00 00 00
 0.714228 1  2               Rx   d 7 00 55 02 00 00 00 00
 0.724222 1  2               Rx   d 7 00 B9 02 00 00 00 00
 0.734175 1  2               Rx   d 7 00 1D 03 00 00 00 00
 0.735330 1  1               Rx   d 8 F6 00 00 FF 04 00 00 00
 0.736444 1  2               Rx   d 1 FF
 0.739058 1  1               Rx   d 6 F0 04 11 22 33 44
 0.740155 1  2               Rx   d 1 FF
 0.744161 1  2               Rx   d 7 00 81 03 11 22 33 44
 0.754188 1  2               Rx   d 7 00 E5 03 11 22 33 44
 0.764084 1  2               Rx   d 7 00 48 04 11 22 33 44
 0.774070 1  2               Rx   d 7 00 AC 04 11 22 33 44
 0.784056 1  2               Rx   d 7 00 10 05 11 22 33 44
 0.785482 1  1               Rx   d 8 F6 00 00 FF 04 00 00 00
 0.787407 1  2               Rx   d 1 FF
 0.794010 1  2               Rx   d 7 00 73 05 11 22 33 44
 0.800440 1  1               Rx   d 6 F0 04 55 66 77 88
 0.802398 1  2               Rx   d 1 FF
 0.804029 1  2               Rx   d 7 00 D7 05 55 66 77 88
 0.813998 1  2               Rx   d 7 00 3B 06 55 66 77 88
 0.823968 1  2               Rx   d 7 00 9F 06 55 66 77 88
 0.833962 1  2               Rx   d 7 00 03 07 55 66 77 88
 0.836559 1  1               Rx   d 8 F6 00 00 FF 04 00 00 00
 0.840524 1  2               Rx   d 1 FF
 0.843899 1  2               Rx   d 7 00 66 07 55 66 77 88
 0.847602 1  1               Rx   d 6 F0 04 99 AA BB CC
 0.849428 1  2               Rx   d 1 FF
 0.853901 1  2               Rx   d 7 00 CA 07 99 AA BB CC
 0.863822 1  2               Rx   d 7 00 2D 08 99 AA BB CC
 0.873849 1  2               Rx   d 7 00 92 08 99 AA BB CC
 0.883769 1  2               Rx   d 7 00 F5 08 99 AA BB CC
 0.884908 1  1               Rx   d 8 F6 00 00 FF 04 00 00 00
 0.886178 1  2               Rx   d 1 FF
 0.893682 1  2               Rx   d 7 00 58 09 99 AA BB CC
 0.894312 1  1               Rx   d 6 F0 04 00 00 00 00
 0.897098 1  2               Rx   d 1 FF
 0.903766 1  2               Rx   d 7 00 BD 09 00 00 00 00
 0.913711 1  2               Rx   d 7 00 20 0A 00 00 00 00
 0.923730 1  2               Rx   d 7 00 84 0A 00 00 00 00
 0.933642 1  2               Rx   d 7 00 E8 0A 00 00 00 00
 0.943653 1  2               Rx   d 7 00 4C 0B 00 00 00 00
フクさん
フクさん

CAN回線上はDOWNLOADコマンド発行後にDAQパケットの値が変わってるからXCP Basic側は正常
つまり、daqQueueにデータを貯めているListener側のスレッドとメインスレッドの切り替わりで20~30[ms]程度のオーバーヘッドがあるってことになるな。
加えて、SET_MTA、DOWNLOADの2コマンドを投げているのも遅れの原因となっているのだろう。

太郎くん
太郎くん

まじか。

太郎くん
太郎くん

これは・・・問題無い?

フクさん
フクさん

元々の目的がHILSもどきなんで、リアルタイム性に於いて、ちょっと問題ありではあるが、
Pythonで回している以上、リアルタイム性はある程度犠牲にはなるんだよね。
よって、一旦問題無いとするのも考え方としてはありだね。

フクさん
フクさん

まぁこれはこれで重要な結果だし、
これを元に次の手を考えるネタにはなる。

太郎くん
太郎くん

(つまり失敗寄りの結果ってことなんだな)

まとめ

フクさん
フクさん

まとめだよ。

  • DAQパケットを受信しながらSET_MTA、DOWNLOADのコマンド送信してみた。
    • 一応動いた。
    • が、DAQパケットの吸い上げのリアルタイム性が若干悪い。
      • 20~30[ms]程度の遅れがある。
  • Pythonでやる以上、やむを得ない問題ではあるが、もう少し手が無いか考える必要はありそう。

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

コメント

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