CAN入門(2)

CANを使った開発をする際、開発ツールがあるととても便利です。CANに限らず、通信内容をモニターできるのと出来ないのとでは、開発効率に雲泥の違いが出ます。

そこで、VehicleSpyというツールを使うと、どんな感じになるのかまとめてみます。

ちなみにCANツールで有名どころというと、やっぱりVectorさんですね。CANoeというツールなどが有名です。CANoe向けのカスタマイズ案件をやらせていただいた事もありますが、すごく良く出来ているツールだと思います。

ただ、たまたま別の案件でVehicleSpyを使うことがあり、その関係でVehicleSpyを持っているので、それを使うことにします。(機能的にはぜんぜん不満はなく、技術サポートにも満足しているため、これで不自由は感じていません。)

モニター用構成

まずとにかく、CANメッセージが見たいですね。そこで、こんな感じにしてみます。

CANバスに、VehicleSpyを追加する

CANバスに繋がっているものは、

・CANノード:開発中のマイコン
・CANノード:通信相手 (これと通信しなさい!と渡されたECUとか、HILSとか)
・VehicleSpy

の3つです。

CANメッセージを見る

VehicleSpy上のボタンをポチっと押すだけで、メッセージが見られます。

CANメッセージが、ドドドっと流れていくモード

CANメッセージが、メッセージIDごとにまとめられるモード

まぁ、こんな感じでメッセージが見られます。これだけで、マイコン開発はめちゃくちゃ助かりますね。

全種類メッセージが出てくるのがウザければ、見たいメッセージだけ表示する事も出来ます。

表示したメッセージは、ファイルに保存する事も出来ます。

「Save」ボタンをポチっとすると、ファイルに保存しておける

保存しておいて、あとからじっくり解析する場合に便利です。

CANメッセージを注入する

見るだけでもいいのですが、ちょいとメッセージを注入できると助かる場合もあります。

そういう時は、送りたいメッセージを定義します。

「Message Editor」を使って、送信用メッセージを定義する

入力するのは、次のアイテムです。

・Description: モニター時にわかりやすいよう、メッセージに名前をつける。
・Arb ID: メッセージIDのこと。0~7FF
・DLC: このメッセージに、何バイトのデータが載っているか。上図であれば4バイト
・B1~B8: 送信するメッセージの内容

次に、Tx Panel画面を開き、Txボタンをポチっとします。

「Tx Panel」で、Txボタンをポチ

すると、CANバス上にメッセージが送信されます。

CANバス上に送信されたメッセージ

送信タイミングは、

・Txボタンを押したとき
・指定時間ごとに定期送信

などのモードから選べます。

まとめ

基本は見たいメッセージをモニターしつつ、場合によってはCANメッセージをCANバスに流し込む。

これだけの事ができるだけで、CANマイコン開発はめちゃくちゃラクになると思います。

ちなみにVehicleSpyで気に入っているのは、上記の事をするのに必要最小限の設定だけで済む、という点です。最初にCANのボーレート設定だけしたら、あとはボタンをポチっとするだけで、ここまでの事が出来てしまいます。個人的には、かなり分かりやすかったです。

1対1構成

通信相手のマイコンをもらえればいいんですが、そうじゃないケースも往々にしてあります。そういう場合は、こんな感じにせざるをえません。

マイコンとVehicleSpyを直接つなぐ

CANバスに繋がっているものは、

・CANノード:開発中のマイコン
・VehicleSpy

の2つだけです。

CANメッセージを見たり送ったり

今回も、モニター用構成のところでご紹介したように、CANメッセージを見たり送ったりします。

これで済むような仕様であれば、これだけで十分です。

CSVファイルを再生

VehicleSpyは、CSVファイルで定義されたメッセージをCANバスに流し込むことも出来ます。

実機でとったデータをCSV化するなり、「こうあるべき」というメッセージをCSVファイル化するなりして、VehicleSpyに流し込みます。

これをするには、ちょっとだけ複雑な操作が必要です。

VehicleSpyには、「Function Block」と呼ばれるプログラミングが出来る機能があります。Function Blockは、VehicleSpy中で実行され、メッセージを送受信する事ができます。これを使ってCSVファイルをCANバスに流し込みます。

「Function Blocks」画面で、Playbackを追加する

CSVファイルを指定する

この状態で実行ボタンをポチっとすると、CSVファイルが読み込まれ、CANバス上に送信されます。

通信相手をシミュレート

CANバス上にECUが2つしか無いとか、普通はありえません。いーっぱいECUがぶら下がってて、それぞれのECUがガンガンCANメッセージを送信する、というのが普通のように思います。

そういう場合、VehicleSpyでECUをシミュレートする事ができます。そのために、Function Blockを使用します。

Function Blockは、GUI上でぽちぽちっと作れるスクリプトです。

500msおきに、メッセージを送信するスクリプトの全容

スクリプトで出来るのは、次の通りです。

・受信メッセージの内容を見る
・送信メッセージの内容を指定する
・メッセージを送信する
・指定時間だけ待機する
・その他、プログラミング言語で出来そうなこと (変数、If文など)

VehicleSpy上では、このFunction Blockを複数定義できます。ここで素晴らしいのは、これらのFunction Blockが並列に動作するという点です。

「ECU1」「ECU2」「ECU3」「ECU4」の4つのFunction Block

すなわち、Function Block 「ECU1」で500msウェイトしているからといって、他のFunction Blockが止まったりしません。Windowsで複数アプリを動かした時と同様に、それぞれ並列に動いてくれます。

そのため、シミュレートしたいECUを、それぞれ別々のFunction Blockとして実装してやると、それぞれが別々のECUのごとく並列に動作してくれます。

まとめ

VehicleSpyが、開発中のマイコンを一手に相手しないといけない場合、ただモニターするだけでは厳しいです。

単純にメッセージをモニター&送信するだけで良ければすごくラクなのですが、そうでない場合には、CSVファイルを再生したり、シミュレート用のスクリプトを書いたりする必要があり、ちょいと面倒です。

とは言え、通信相手となる別ECUを用意するとか、そのためのHILSを作るとかと比べると、断然ラクなように思います。

次回

かなりザックリと見ていきましたが、VehicleSpyを使うともっと色々なことができます。

エンジニアとして結構気に入っている機能があったりしますので、次回はそのあたりをご紹介します。