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

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

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

はじめに

ISO-TPのシミュレーションをしよう。のシリーズ。
Pythonパッケージcan-isotpのマルチフレームリクエストの確認をするためのFCの辻褄合わせ。

登場人物

博識フクロウのフクさん

イラスト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でマルチフレームリクエストがどうしても失敗しちゃうんだけど、
うまくFC(FlowControl)応答をしてあげれば、うまくいきそうってことでいいんだよね?

フクさん
フクさん

そうだね。
さて、どうしようっか?

太郎くん
太郎くん

うーん、
python-canで単発のFCをタイミングよく送ればいいんだけど・・・。
FFを送った直後にFC相当のフレームを送信するスクリプトを実行するとか?

フクさん
フクさん

まぁN_Bsタイムアウトが1秒になってる前提であれば不可能ではないかな・・・。

太郎くん
太郎くん

答え持ってるなら教えてよ!!

FF受けたらとりあえずFC返す

フクさん
フクさん

まぁ答えは以前すでに作ったものの中にあるんだよね。

太郎くん
太郎くん

なんか作ったっけ?

フクさん
フクさん

python-canの実験をした時に
リクエストを受けたらレスポンスを返す
ってのやったじゃん。
あれのレスポンスをしている方のスクリプト。

太郎くん
太郎くん

あ、そういえば!
今回のに当てはめると
FFリスエストを受けたあとにFCレスポンスをすれば、

とりあえず解決するのか!!

python-canでFC応答スクリプト

フクさん
フクさん

じゃ、FCレスポンスのスクリプト書いてみて。

太郎くん
太郎くん

前回のpython-canの実験スクリプトを

ちょい修正すればいけそうなんで・・・。

太郎くん
太郎くん

こんな感じかな。

import can

# バス接続
bus = can.interface.Bus(bustype='vector', channel='0', bitrate=500000)

# 受信
while True:
	recv_msg = bus.recv(timeout=1)
	if recv_msg != None:
		print('Recv msg : %s' % recv_msg)
		break


send_msg = can.Message(arbitration_id=0x18daF110, extended_id=1, data=[0x30, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC])
print('Send msg : %s' % send_msg)

# 送信
bus.send( send_msg )
フクさん
フクさん

うん、そうだね。
受信がFFかどうかは判定していないけど、
受信をトリガにFCを返すんで、実験する分には十分だ。

太郎くん
太郎くん

よし!やってみよう。

can-isotpのマルチフレームリクエスト

太郎くん
太郎くん

まず、can.loggerを起動
そのあとに、上のスクリプトを先に起動。
最後に、前回のisotpsndtest.pyを実行。

太郎くん
太郎くん

お、今回はエラーが出ないで通ったみたい。

フクさん
フクさん

ログを見てみよう。

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
太郎くん
太郎くん

おー、うまくマルチフレームリクエストが通った!!

フクさん
フクさん

(まぁ、ちょっとツッコミどころはあるけど次回かな。)

まとめ

フクさん
フクさん

まとめだよ。

  • python-canでFCの辻褄合わせした。
  • python-canでちょっとしたタイミングを見計らったCANフレームの差し込みで対応。
  • これにより、とりあえずマルチフレームリクエストが通った。

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

コメント

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