バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回までで仮想ECU側の修正が完了。
XCP関連とPID制御の入出力変数関連が修正範囲
今回はCAN経由で指令値を発行していた指令器の修正となる。
(まぁCANがCAN-FDになるだけなので、それほど大した修正にはならない・・・はず?)
登場人物
博識フクロウのフクさん
イラスト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で指令値を出してたのをCAN-FDにするだけだもんね。
といっても、どこをどう修正するのか全然わからん・・・。
指令器の修正範囲
修正範囲はシンプルで、以下の2か所。
- バス初期化
- メッセージ構築
ほう。
その2か所だけで良いのか。
まぁCANに関連してCAN-FDに変わるところとするとそのくらいしかないんだよね。
だったら、さくっと修正してしまおう。
修正作業
まずバス初期化は以下になる。
# バス接続
bus = can.interface.Bus(bustype='vector', channel='1', bitrate=500000)
↓
# バス接続
bus = can.interface.Bus(bustype='vector', channel='1', bitrate=500000, fd=True, data_bitrate=2000000)
これは見たまんまんだね。
fd=True
でCAN-FD対応バスになって、
data_bitrate=2000000
でDataRateを2Mbpsにしてる。
って感じか。
正解。
そして、次は「メッセージ構築」
send_msg = can.Message(arbitration_id=0x111, extended_id=0, data=[byts[0], byts[1], byts[2]])
↓
send_msg = can.Message(arbitration_id=0x111, extended_id=0, data=[byts[0], byts[1], byts[2]],is_fd=True, bitrate_switch=True)
これは
is_fd=True
でCAN-FD対応メッセージにしてるのはわかるが・・・。
bitrate_switch=True
は何?
これがTrueになっていないと、DataRateが2Mbpsにならない。
まぁCAN-FDなのでデータフィールドは64byteまで増やせるけどね。
でも、DataRateが2Mbpsにならないってことは500kbpsのままだから、CAN-FDの恩恵はあんまり無いね。
そうそう
だから、
bitrate_switch=True
は忘れずに設定しておこう。
まとめ
まとめだよ。
- 指令器の修正範囲を確認。
- CANがCAN-FDに変えることから逆算して特定。
- バス初期化とメッセージ構築の部分。
- CANがCAN-FDに変えることから逆算して特定。
- バス初期化はCAN-FD有効化とDataRateの設定。
- メッセージ構築はCAN-FD化とbitrate_switch有効。
- bitrate_switch無効でもOKだがbitrateは切り替わらない。
バックナンバーはこちら。
コメント