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を使うともっと色々なことができます。
エンジニアとして結構気に入っている機能があったりしますので、次回はそのあたりをご紹介します。