バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
python-canでCAN-FDのシミュレーション。
今回はCAN-FD用のPythonコードの作成。
登場人物
博識フクロウのフクさん
イラスト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
python-canによる送受信復習
太郎くん
これはCANでやったことのCAN-FD版って感じかな?
フクさん
そうだね。
ほとんど変わらないかな。
太郎くん
じゃー、以前のを一回復習してから見た方が良いねー。
ここで復習できるよー。
CAN-FDリクエスト用Pythonコード
フクさん
CANの時とほぼ一緒
import can
# バス接続
bus = can.interface.Bus(bustype='vector', channel='0', bitrate=500000, fd=True)
# 送信データ(CANID 0x111、DLC:12、Data:01 02 03 04 05 06 07 08 09)
send_msg = can.Message(arbitration_id=0x111, extended_id=1, bitrate_switch=True, is_fd=True, data=[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09])
print('Send msg : %s' % send_msg)
# 送信
bus.send( send_msg )
# 受信
recv_msg = bus.recv(timeout=1)
print('Recv msg : %s' % recv_msg)
太郎くん
初期化のところで”fd=True”
メッセージ構築のところで”bitrate_switch=True, is_fd=True”
でCAN-FDになってる感じだねー。
太郎くん
これはcan.logger、can.playerの修正は関係ないの?
フクさん
うん。
ここは関係ない。
というかcan.logger、can.playerがこのBus初期化とメッセージ構築を呼び出している感じ。
CAN-FDに対応していなかったのはあくまでcan.loggerとcan.playerだけってことになるね。
CAN-FDレスポンス用Pythonコード
フクさん
こっちもCANの時とほぼ一緒だね。
import can
# バス接続
bus = can.interface.Bus(bustype='vector', channel='0', bitrate=500000, fd=True)
# 受信
while True:
recv_msg = bus.recv(timeout=1)
if recv_msg != None:
print('Recv msg : %s' % recv_msg )
break
# 送信データ(CANID 0x222、DLC:6、Data:0A 0B 0C 0D 0E 0F)
send_msg = can.Message(arbitration_id=0x222, extended_id=1, bitrate_switch=True, is_fd=True, data=[0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F])
print('Send msg : %s' % send_msg)
# 送信
bus.send( send_msg )
太郎くん
こっちも同じ感じだね。
大丈夫そうだ。
まとめ
フクさん
まとめだよ。
- python-canのリクエスト、レスポンスコードの復習。
- CAN-FDとしてのリクエスト、レスポンスコード作成。
- Bus初期化時にfd=True。
- メッセージ作成時にbitrate_switch=True, is_fd=True。
バックナンバーはこちら。
コメント