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