バックナンバーはこちら。
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等だともっと早い。
バックナンバーはこちら。
コメント