【CanTp】車両診断通信 その23【シミュレーション⑩】

【CanTp】車両診断通信 その23【シミュレーション⑩】 車両診断通信

バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/

はじめに

ISO-TPのシミュレーションをしよう。のシリーズ。
Pythonパッケージcan-isotpのマルチフレームリクエストのパラメータについて。

登場人物

博識フクロウのフクさん

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

can-isotpのマルチフレームリクエストを見た感じ。

フクさん
フクさん

前回、can-isotpのマルチフレームリクエストやったんだけど、
その時のログがこれ。

Begin Triggerblock 
 0.000000 Start of measurement
 0.000000 1  18DA10F1x       Rx   d 8 10 1E 01 02 03 04 05 06
 0.001598 1  18DAF110x       Rx   d 8 30 00 00 CC CC CC CC CC
 0.003047 1  18DA10F1x       Rx   d 8 21 07 08 09 10 01 02 03
 0.003170 1  18DA10F1x       Rx   d 8 22 04 05 06 07 08 09 10
 0.003285 1  18DA10F1x       Rx   d 8 23 01 02 03 04 05 06 07
 0.003334 1  18DA10F1x       Rx   d 4 24 08 09 10
End TriggerBlock
太郎くん
太郎くん

確かにこれだね。
無事に送信出来て良かったよ。

フクさん
フクさん

これ見てなんか気づかない?

太郎くん
太郎くん

え?
普通にFF送って、FC受けて、CF送って・・・で

太郎くん
太郎くん

あ!!
最後のCFにパディングが無い!!

フクさん
フクさん

その通り。
どうやらcan-isotpのデフォルト状態だと。
DLC最適仕様」が採用されるようなんだよね。

太郎くん
太郎くん

んー、でも一応ISO15765-2的にはOKな方式だから特に問題は無いよね?

フクさん
フクさん

まぁ通信する分にはね。
ただ、完成車メーカ的には「DLC最適仕様」を許容しないとまでは行かなくても、
可能あれば採用しないで欲しいって場合もある。

太郎くん
太郎くん

さっき、「デフォルト状態では」って言い方してたけど、
切り替えられるってこと?

フクさん
フクさん

Yes!

can-isotpのDLC最適化仕様の切り替え

フクさん
フクさん

まぁ手っ取り早くスクリプトを書いてみようか。

import isotp 
import time 
from can.interfaces.vector import VectorBus 

isotp_params = { 
    'tx_padding’ : 0xCC,
    'tx_data_min_length' : 8 
} 

bus = VectorBus(channel=0, bitrate=500000) 
addr = isotp.Address(isotp.AddressingMode.NormalFixed_29bits, source_address=0xF1, target_address=0x10) 
stack = isotp.CanStack(bus, address=addr, params=isotp_params) 

#stack.send(b'\x01\x02\x03\x04\x05\x06\x07’) 
stack.send(b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\
                     \x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\
                     \x01\x02\x03\x04\x05\x06\x07\x08\x09\x10’)
 
while stack.transmitting(): 
    stack.process() 
    time.sleep(0.0001) 

bus.shutdown() 
太郎くん
太郎くん

ん?
なんかCanStakに渡すパラメータが増えた?

フクさん
フクさん

その通り。
CanStackにparamsという通信パラメータ設定用の引数があるんで、
これで振る舞いを切り替えられる。

太郎くん
太郎くん

よし、ちょっとこれで動かしてログ取ってみよう。

Begin Triggerblock
 0.000000 Start of measurement
 0.000000 1  18DA10F1x       Rx   d 8 10 1E 01 02 03 04 05 06
 0.001294 1  18DAF110x       Rx   d 8 30 00 00 CC CC CC CC CC
 0.003219 1  18DA10F1x       Rx   d 8 21 07 08 09 10 01 02 03
 0.003309 1  18DA10F1x       Rx   d 8 22 04 05 06 07 08 09 10
 0.003359 1  18DA10F1x       Rx   d 8 23 01 02 03 04 05 06 07
 0.003408 1  18DA10F1x       Rx   d 8 24 08 09 10 CC CC CC CC
End TriggerBlock
太郎くん
太郎くん

おー、今度はちゃんとパディングが入った!

フクさん
フクさん

と言う感じで、振る舞いを変えるってことも可能って話でした。

まとめ

フクさん
フクさん

まとめだよ。

  • can-isotpのデフォルト状態だとDLC最適化仕様が採用される。
  • CanStackに渡すパラメータでパディング、MIN_DLCを設定するとパディング仕様に切り替わる。

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

コメント

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