バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
ISO-TPのシミュレーションをしよう。のシリーズ。
pyton-canのcan.playerによるCANログ再生。
登場人物
博識フクロウのフクさん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
python-canのインストール
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
次はお待ちかねのpython-can。
こいつでpythonからCANの送受信ができるようになる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
(前回説明せずにぶった切ったということは、
まぁまぁのボリュームがあるってことなのかな・・・。)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
インストール自体は簡単。
pipっていうPythonのパッケージ管理ツールを使用する。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
お、ということはコマンド一発でインストール完了なのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうだね。
ホント便利な世の中だよね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ちなみに以下でインストールOKだよ。
> pip install python-can
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
あれ?
エラーになった!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
あー。太郎くんとこの会社だとプロキシが必要みたいだね。
プロキシを指定した上で再度実行。
> pip --proxy=[プロキシサーバ名]:[プロキシポート番号] install python-can
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
お、通った。
良かった。
python-canの動作確認
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
これも単体で動作確認してしまおう。
以下の構成で確認。
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/08/02_動作確認構成-1024x583.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ん?
このcan.plyaerって何?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
python-canに含まれているモジュールなんだけど、
スクリプトとして呼び出すことで単体アプリ動作が可能なんだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者a」19アップ.png)
(何言ってるかちょっとわからなかったぞ。静観してみるか)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
(「何言ってるかわからずにとりあえず静観を決め込んだ」波動を感じた。)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
一種のサンプルプログラムと思えばOKだよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
おー、そういうことか!
can.player用の再生asc作成
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まずcan.playerに再生してもらうascファイルを作成する。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ascファイルって何だっけ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
Vector社製品で使用するCANのログファイルフォーマットだね。
まぁフォーマットとしてはデファクトスタンダードな感じなんで、Vector社以外でも使われていることは多いかな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
やはり、CANの話になるとVector社強いな。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ざっとテキストエディタで書いてみた。
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
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あ、なんか見たことある!
これがascファイルか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
一番左の列がタイムスタンプで単位は秒。
can.playerはこのタイムスタンプに則って送信する作りになってると思う。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
思うって・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
さっきpython-canのドキュメントを流し読みしただけだから、
まだ動くかどうかも分かってない。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
まぁチャレンジネタって言ってたもんね・・・。
BusMasterの収録モード設定
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
じゃまずBusMasterを起動して、収録可能状態する。
LoggingのConfigureを選択。
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/08/03_Configure.png)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
addボタンを押して、ログファイルの保存先を指定しておく。
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/08/04_ConfigureAdd.png)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
LoggingのActivateをクリックすると収録モードになるよ。
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/08/05_Activate.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
あー、これは設定する場所が分かれば雰囲気で設定できそう。
can.playerで再生したものをBusMasterで受けてみる。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
can.playerでCANログを再生してみよう。
can.playerの起動コマンドは以下。
> python -m can.player -i vector -c 0 canlog.asc
-m:動作モジュール指定
-i:インターフェース指定
-c:チャンネル指定
オプション無しパラメータで再生ファイル指定
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
インターフェースはVectorだから-i vectorなのね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そして、以下が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]***
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
あれ?
ascファイルフォーマットじゃないんだ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうみたいだね。
BusMaster自体はETAS社が主導で作ったものらしいんで、
ETASのCANログフォーマットなのかもしれないね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
あれ?
時間をよく見ると、
ちょっとズレてない?
1[ms]ごとに3つのフレームで、それが10[ms]周期のascだと思ってたんだけど?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁ完全な再現は難しいっぽいね。
たぶん、精度としては1~2[ms]くらいのズレは発生するんだと思うよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
CANoeとかだともっと良い感じなのかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
そうだねぇ。
CANoeの方だと250~500[us]オーダーの精度になるんじゃないかな?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
そこは流石にCANoeの方が上かー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ここが互角だとますますCANoeの立場が危うくなるし。
そもそもPython自体はスクリプト言語なんで、速度面ではちょっと不利だしね。
でも、おおよそのテストには使えるんじゃない?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
確かにそこまでの精度を求めないなら十分かな。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- python-canのインストールをした。
- python-canの動作確認をした。
- can.playerで送信してBusMasterで収録。
- python-canの動作性能は1~2[ms]オーダー。
- CANoe等だともっと早い。
バックナンバーはこちら。
コメント