バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
python-canでCAN-FDのシミュレーション。
can.playerで再生、can.loggerで収録。
するための改造。
登場人物
博識フクロウのフクさん
イラスト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.playerとcan.loggerはCAN-FDに対応してなかったーーーーー!!!!
マジかーーーーーーーーー!!!!!
どうするの?!!
もう詰みなんじゃない?!
CANのところで話を終わらせておいた方が良かったんじゃないの?!!
うむ。
私にも森の賢者(フクロウ)のプライドがある。
そのプライドとやらをどう見せる!?
python-canの内部コードを追ったところ、
python-can自体はCAN-FDに対応しているっぽい。
CAN-FDに対応していないのはcan.playerとcan.loggerなんで、
これを改造すれば行けそうって感じ?
※ この記事執筆段階のpyton-canのversionは3.3.3。これより後のversionでは対応されている可能性あり。
can.playerのpythonコードの場所
で、どう改造するの?
まず、can.playerの記述しているpythonコードを探す。
Anacondaの場合、デフォルトでインストールしてるならば以下にあるはず。
C:\ProgramData\Anaconda3\Lib\site-packages\can
そして、can.playerのコードはplayer.pyになる。
can.playerのCAN-FD対応
そして、以下の修正を入れる。
player.py_oldが元の方で、player.pyが修正した方。
--- C:/ProgramData/Anaconda3/Lib/site-packages/can/player.py_old
+++ C:/ProgramData/Anaconda3/Lib/site-packages/can/player.py
@@ -42,7 +41,14 @@
parser.add_argument('-b', '--bitrate', type=int,
help='''Bitrate to use for the CAN bus.''')
+
+ parser.add_argument("--fd", help="Activate CAN-FD support", action="store_true")
+ parser.add_argument(
+ "--data_bitrate",
+ type=int,
+ help="""Bitrate to use for the data phase in case of CAN-FD.""",
+ )
parser.add_argument('--ignore-timestamps', dest='timestamps',
help='''Ignore timestamps (send all frames immediately with minimum gap between frames)''',
action='store_false')
@@ -77,6 +83,7 @@
error_frames = results.error_frames
config = {"single_handle": True}
+ config["fd"]= results.fd
if results.interface:
config["interface"] = results.interface
if results.bitrate:
can.playerのBusというモジュールはCAN-FD用のパラメータを持ってるんで、
それを起動オプションから追加できるようにした。
って感じ。
おー。思ったよりシンプルな修正だったんだね。
can.loggerのpythonコードの場所
can.loggerはcan.playerと同じく、
C:\ProgramData\Anaconda3\Lib\site-packages\can
の
logger.py
これもなんとかなりそうな予感。
can.loggerのCAN-FD対応
そして修正内容。
logger.py_oldが元の方で、logger.pyが修正した方。
--- C:/ProgramData/Anaconda3/Lib/site-packages/can/logger.py_old
+++ C:/ProgramData/Anaconda3/Lib/site-packages/can/logger.py
@@ -57,6 +57,14 @@
parser.add_argument('-b', '--bitrate', type=int,
help='''Bitrate to use for the CAN bus.''')
+ parser.add_argument("--fd", help="Activate CAN-FD support", action="store_true")
+
+ parser.add_argument(
+ "--data_bitrate",
+ type=int,
+ help="""Bitrate to use for the data phase in case of CAN-FD.""",
+ )
+
state_group = parser.add_mutually_exclusive_group(required=False)
state_group.add_argument('--active', help="Start the bus as active, this is applied by default.",
action='store_true')
@@ -94,6 +102,10 @@
config["interface"] = results.interface
if results.bitrate:
config["bitrate"] = results.bitrate
+ if results.fd:
+ config["fd"] = True
+ if results.data_bitrate:
+ config["data_bitrate"] = results.data_bitrate
bus = Bus(results.channel, **config)
if results.active:
うん。こっちもfdというパラメータを追加した感じだね。
まぁそうね。
ただ・・・can.loggerの方は若干問題があってー・・・。
え?!
もしかして動かない?
一応、うごくんだけど。
まぁ動かしたときにちょっと説明するよ。
(まぁ一応動くようだし、様子を見るか・・・。)
まとめ
まとめだよ。
- can.playerとcan.loggerがCAN-FDに対応していないことが発覚。
- 即行でCAN-FD対応に修正してみた。
- can.loggerはまたちょっと別の問題あり。
バックナンバーはこちら。
コメント