【CAN-FD】車両診断通信 その90【python-can③】

【CAN-FD】車両診断通信 その90【python-can③】 車両診断通信

バックナンバーはこちら。
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はまたちょっと別の問題あり。

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

コメント

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