バックナンバーはこちら。
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フレームの差し込みで対応。
- これにより、とりあえずマルチフレームリクエストが通った。
バックナンバーはこちら。
コメント