【CanTp】車両診断通信 その18【シミュレーション⑤】

【CanTp】車両診断通信 その18【シミュレーション⑤】 車両診断通信

バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/

はじめに

ISO-TPのシミュレーションをしよう。のシリーズ。
pyton-canのcan.playerによるCANログ再生。

登場人物

博識フクロウのフクさん

イラスト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のインストール

フクさん
フクさん

次はお待ちかねのpython-can
こいつでpythonからCANの送受信ができるようになる。

太郎くん
太郎くん

(前回説明せずにぶった切ったということは、

まぁまぁのボリュームがあるってことなのかな・・・。)

フクさん
フクさん

インストール自体は簡単。
pipっていうPythonのパッケージ管理ツールを使用する。

太郎くん
太郎くん

お、ということはコマンド一発でインストール完了なのか。

フクさん
フクさん

そうだね。
ホント便利な世の中だよね。

フクさん
フクさん

ちなみに以下でインストールOKだよ。

> pip install python-can
太郎くん
太郎くん

あれ?
エラーになった!

フクさん
フクさん

あー。太郎くんとこの会社だとプロキシが必要みたいだね。
プロキシを指定した上で再度実行。

> pip --proxy=[プロキシサーバ名]:[プロキシポート番号] install python-can
太郎くん
太郎くん

お、通った。
良かった。

python-canの動作確認

フクさん
フクさん

これも単体で動作確認してしまおう。
以下の構成で確認。

太郎くん
太郎くん

ん?
このcan.plyaerって何?

フクさん
フクさん

python-canに含まれているモジュールなんだけど、
スクリプトとして呼び出すことで単体アプリ動作が可能なんだ。

太郎くん
太郎くん

(何言ってるかちょっとわからなかったぞ。静観してみるか)

フクさん
フクさん

(「何言ってるかわからずにとりあえず静観を決め込んだ」波動を感じた。)

フクさん
フクさん

一種のサンプルプログラムと思えばOKだよ。

太郎くん
太郎くん

おー、そういうことか!

can.player用の再生asc作成

フクさん
フクさん

まずcan.playerに再生してもらうascファイルを作成する。

太郎くん
太郎くん

ascファイルって何だっけ?

フクさん
フクさん

Vector社製品で使用するCANのログファイルフォーマットだね。
まぁフォーマットとしてはデファクトスタンダードな感じなんで、Vector社以外でも使われていることは多いかな。

太郎くん
太郎くん

やはり、CANの話になるとVector社強いな。

フクさん
フクさん

ざっとテキストエディタで書いてみた。

Begin Triggerblock 
 0.000000 Start of measurement
 0.000000 1  111       Rx   d 3 01 02 03
 0.001000 1  222       Rx   d 4 0A 0B 0C 0D
 0.002000 1  333       Rx   d 8 11 22 33 44 55 66 77 88
 0.010000 1  111       Rx   d 3 01 02 03
 0.011000 1  222       Rx   d 4 0A 0B 0C 0D
 0.012000 1  333       Rx   d 8 11 22 33 44 55 66 77 88
 0.020000 1  111       Rx   d 3 01 02 03
 0.021000 1  222       Rx   d 4 0A 0B 0C 0D
 0.022000 1  333       Rx   d 8 11 22 33 44 55 66 77 88
 0.030000 1  111       Rx   d 3 01 02 03
 0.031000 1  222       Rx   d 4 0A 0B 0C 0D
 0.032000 1  333       Rx   d 8 11 22 33 44 55 66 77 88
 0.040000 1  111       Rx   d 3 01 02 03
 0.041000 1  222       Rx   d 4 0A 0B 0C 0D
 0.042000 1  333       Rx   d 8 11 22 33 44 55 66 77 88
End TriggerBlock
太郎くん
太郎くん

あ、なんか見たことある!
これがascファイルか。

フクさん
フクさん

一番左の列がタイムスタンプで単位は秒。
can.playerはこのタイムスタンプに則って送信する作りになってると思う。

太郎くん
太郎くん

思うって・・・。

フクさん
フクさん

さっきpython-canのドキュメントを流し読みしただけだから、

まだ動くかどうかも分かってない。

太郎くん
太郎くん

まぁチャレンジネタって言ってたもんね・・・。

BusMasterの収録モード設定

フクさん
フクさん

じゃまずBusMasterを起動して、収録可能状態する。
LoggingのConfigureを選択。

フクさん
フクさん

addボタンを押して、ログファイルの保存先を指定しておく。

フクさん
フクさん

LoggingのActivateをクリックすると収録モードになるよ。

太郎くん
太郎くん

あー、これは設定する場所が分かれば雰囲気で設定できそう。

can.playerで再生したものをBusMasterで受けてみる。

フクさん
フクさん

can.playerでCANログを再生してみよう。
can.playerの起動コマンドは以下。

> python -m can.player -i vector -c 0 canlog.asc

-m:動作モジュール指定
-i:インターフェース指定
-c:チャンネル指定
オプション無しパラメータで再生ファイル指定

太郎くん
太郎くん

インターフェースはVectorだから-i vectorなのね。

フクさん
フクさん

そして、以下がBusMasterで収録したログ。

***<Time><Tx/Rx><Channel><CAN ID><Type><DLC><DataBytes>***
00:00:01:4980 Rx 1 0x111 s 3 01 02 03 
00:00:01:4999 Rx 1 0x222 s 4 0A 0B 0C 0D 
00:00:01:5018 Rx 1 0x333 s 8 11 22 33 44 55 66 77 88 
00:00:01:5069 Rx 1 0x111 s 3 01 02 03 
00:00:01:5089 Rx 1 0x222 s 4 0A 0B 0C 0D 
00:00:01:5110 Rx 1 0x333 s 8 11 22 33 44 55 66 77 88 
00:00:01:5178 Rx 1 0x111 s 3 01 02 03 
00:00:01:5197 Rx 1 0x222 s 4 0A 0B 0C 0D 
00:00:01:5218 Rx 1 0x333 s 8 11 22 33 44 55 66 77 88 
00:00:01:5279 Rx 1 0x111 s 3 01 02 03 
00:00:01:5289 Rx 1 0x222 s 4 0A 0B 0C 0D 
00:00:01:5299 Rx 1 0x333 s 8 11 22 33 44 55 66 77 88 
00:00:01:5368 Rx 1 0x111 s 3 01 02 03 
00:00:01:5388 Rx 1 0x222 s 4 0A 0B 0C 0D 
00:00:01:5408 Rx 1 0x333 s 8 11 22 33 44 55 66 77 88 
***[STOP LOGGING SESSION]***
太郎くん
太郎くん

あれ?
ascファイルフォーマットじゃないんだ?

フクさん
フクさん

そうみたいだね。
BusMaster自体はETAS社が主導で作ったものらしいんで、
ETASのCANログフォーマットなのかもしれないね。

太郎くん
太郎くん

あれ?
時間をよく見ると、
ちょっとズレてない?
1[ms]ごとに3つのフレームで、それが10[ms]周期のascだと思ってたんだけど?

フクさん
フクさん

まぁ完全な再現は難しいっぽいね。
たぶん、精度としては1~2[ms]くらいのズレは発生するんだと思うよ。

太郎くん
太郎くん

CANoeとかだともっと良い感じなのかな?

フクさん
フクさん

そうだねぇ。
CANoeの方だと250~500[us]オーダーの精度になるんじゃないかな?

太郎くん
太郎くん

そこは流石にCANoeの方が上かー。

フクさん
フクさん

ここが互角だとますますCANoeの立場が危うくなるし。
そもそもPython自体はスクリプト言語なんで、速度面ではちょっと不利だしね。
でも、おおよそのテストには使えるんじゃない?

太郎くん
太郎くん

確かにそこまでの精度を求めないなら十分かな。

まとめ

フクさん
フクさん

まとめだよ。

  • python-canのインストールをした。
  • python-canの動作確認をした。
    • can.playerで送信してBusMasterで収録。
  • python-canの動作性能は1~2[ms]オーダー。
    • CANoe等だともっと早い。

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

コメント

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