CAN入門(3)

引き続き、VehicleSpyを使ったCAN開発について見ていきます。

前回のCAN入門(2)では、ECU単体の開発を行うために、CANバスをモニターしたり、CANバスにメッセージを送出したりしました。

今回は、ECU単体での検証は済んだものとして、実車による検証にフォーカスします。

CANインターフェースは、スタンドアロン動作もできるNeoVIというデバイスを使用します。

実車による検証

ECUを実車に積んだ後は、OBD2などのインターフェースを介してCAN通信を行うことになります。

ダイアグ作業

ECUの内部をモニターしたり、ECUのパラメータを書き換えたりするのに、ダイアグと呼ばれる機能を使用します。

ダイアグとは、CANバス上に特定のプロトコルが定義されているもので、そのプロトコルに従うことでECU内部にアクセスする事ができます。

一昔前であれば、マイコンのデバッグインターフェースを使用してECU内部にアクセスするやり方がメインでしたが、徐々にCANバス経由のダイアグが浸透してきているようです。(とはいえ、デバッグインターフェース経由のやり方が、消える気配はありません。しばらく両立するのかな?)

VehicleSpyには、GMLANや、ISO14229、そしてXCPのようなダイアグプロトコル機能が備わっています。

ダイアグの細かいところはVehicleSpyがやってくれるので、ユーザーは「アドレスXXXXを読み込みたい!」と指示するだけでOKです。

ちょっと前にGMLANを使った案件をさせていただいたのですが、その時はこの機能にすごくお世話になりました。

スタンドアロンロギング作業

実車試験にも色々ありますが、やっぱり最後は走り回る!これしかないように思います。

走り回るのであれば、走行状態に関するデータはなるだけ多く記録しておいて、あとで解析できるようにするべきです。

NeoVIというCANインターフェースを使用すると、CAN(やLIN)をスタンドアロンでロギングできます。

スタンドアロン実行中は、内蔵のSDカード(2GB)に、ひたすらCANメッセージを記録しておいて、あとからそれを取り出すことができます。

注意点:このモードでは、XCP等のダイアグ機能はサポートされていません。そのため、単にCANメッセージをロギングするのみです。どうしてもダイアグ要素を入れたければ、NeoVI上で別途プログラミングを行う必要があります。(逆に言えば、プログラミングさえ行えば大概の事は出来るようになっています)

スタンドアロンロギングを実施するには?

作業の流れは、つぎのような感じです。

(1)ロギング用アルゴリズムを開発する

詳細はあとでご説明しますが、

  • どんなメッセージを?
  • どんなタイミングで?

ロギングしたいのか設定を行います。

ロギング用のロジックはPC上で実施し、NeoVIは単なるCANインターフェースに徹することで、比較的簡単にロギング用ロジックを調整できます。

(2)スタンドアロンで測定する

この段階では、PCを使いません。NeoVIを単体で実車に取り付けます。そして、その状態で1ヶ月なり放置します。

その間、NeoVIはひたすらCANメッセージを、内蔵SDカードに記録しつづけます。

(3)測定結果を取り出す

測定結果を取り出すために、NeoVIからSDカードを取り出します。

取り出したSDカードをPCに接続して、専用ユーティリティ経由で中身を吸い出します。

ロギング用アルゴリズムの開発

VehicleSpy上にて、「送受信CANメッセージ」「アプリケーションシグナル」「ファンクションブロック」の3つを定義したら、それをPC上で実行したり、NeoVI上で実行したり出来ます。

送受信CANメッセージ

これは、CANを送受信するためのバッファーを用意するようなものです。実車上でロギングするだけなら、受信CANメッセージだけを設定します。すると、ここで指定したCANメッセージをロギングすることができます。

もう少しインテリジェンスを持たせてCANメッセージ送信までさせるのであれば、送信CANメッセージも定義しておきます。

アプリケーションシグナル

C言語でいう変数みたいなものです。単純にロギングするだけであれば、使う必要はありません。

インテリジェンスを持たせて色々やりたいのであれば、変数用途に確保します。こいつはC言語でいうグローバル変数のようなもので、全ファンクションブロックからアクセスする事ができます。

ファンクションブロック

C言語でいう関数みたいなものです。これには3種類用意されていて、それぞれ次のようなイメージです。

  • Script : C言語の関数と同じく、いろいろとロジックを書きます。CANメッセージの送受信、各種条件判断などができます。
  • Capture : CANメッセージをSDカードにロギングするためのもの
  • Playback : SDカードからCANメッセージを読み込み、CANバスに送出するためのもの

単にロギングするだけであれば、ロジックを書く必要は無く、「Capture」タイプのファンクションブロックを追加してやります。

Captureタイプのファンクションブロックは、次のようにGUIだけで調整が可能です。

各種設定をGUI上で実施したら、CANメッセージのロギングができるようになります。

PC上で動かしてみる

まずは、どんな感じになるのかPC上で動かしてみます。VehicleSpyの左上のボタンをクリックすれば動作開始です。

ロギング結果は、SDカードではなく、PC上のファイルに直接保存されます。のぞむデータが取れていそうか、実験してください。

スタンドアロンで測定する

コンパイル&ダウンロード

スタンドアロンで測定を行うには、ロギング用ロジックをNeoVIにダウンロードしてやる必要があります。

大きな流れとしては、「コンパイル」->「ダウンロード」という作業が必要です。

コンパイルというと少し難しそうなイメージを抱かれるかも分かりませんが、上記作業は数クリックで済んでしまいますのでご安心ください。

ロギング用ロジックが完成したら、VehicleSpyのメニューから「Tools」>「Utilities」>「CoreMini Console」をクリックします。すると、次のような画面があらわれます。

実は、この画面があらわれた時点で勝手に「コンパイル」が実施されています。あとは、「Send….」ボタンをクリックして「ダウンロード」するだけです。

すると、「neoVI updated( Time XXXms ) – Success というメッセージが現れ、ダウンロードが完了します。

これで、NeoVIではPCに接続されていなくても勝手にロギング用ロジックが走ります。

それどころか、PCに接続されていても勝手にロギング用ロジックが走ります。スタンドアロンによるロギングが終了し、NeoVIが勝手に走るのが望ましくない状態になったら、「Clear」ボタンを押して、NeoVI上のロジックを消去してやります。

スリープモード

ここで忘れてはいけないのが、スリープモードの設定です。NeoVIはそれなりの電力を食います。走行中はいいとしても、停止中にまで動作させつづけたらバッテリーがあがってしまいかねません。

そこで、CANメッセージがある程度来なかったらスリープ、CANメッセージが来たらウェークアップ、という設定をしてやる必要があります。

これを設定するには、「Hardware Setup」から設定モードに入ります。そして、「Sleep Mode」から次の2点を設定します

  • Enabled : チェックを入れる
  • Timeout(ms) :CANメッセージが、何秒こなければスリープするか?

 

ちなみに、「Enabled Fast Wakeup」とは、「やや消費電力が増える代わりに、CANメッセージが来たらすぐに起動する」モードです。

これにチェックを入れないと、CANメッセージが来てからウェークアップし、ロギングを開始するまでに数秒かかります。

この数秒がガマンできない場合のみ、Fast Wakeupにチェックを入れると良いでしょう。

測定結果を取り出す

いっぱい測定を行ったら、NeoVIからデータを取り出しましょう。SDカードからデータを取り出したら、それをVehicleSpyで見ることができます。

取り出し方は実に簡単です。SDカードをPCに接続すると、PCからは次のファイルが見えます。

ここにある「extract.exe」を実行すると、次のような画面になります。

  • Source Data:SDカードのあるドライブを指定する
  • Output Directory:出力先のフォルダーを指定する

上記2点を設定したら「Convert Log File」ボタンをクリックします。

すると、VSBファイルというものが、指定したフォルダーに生成されます。

このVSBファイルは、VehicleSpyから見ることができます。メニューの「File」>「Review Buffer…」をクリックし、先ほどのVSBファイルを指定すると、次のようにロギングしたデータが見られます。

まとめ

ロギング設定をNeoVIに書き込んでおくことで、NeoVI単体でもロギングが出来ますよ、という所をご説明しました。

VehicleSpyの開発元はUSにあるのですが、USの車両メーカーさんではこのような事がガンガン行われているようです。

オマケ

ここまでの機能は、「必要なヒトには必要だよなぁ」というものです。

しかし、「こんな機能要るのか・・・?でも・・・オモシロイ!」というものを1つご紹介します。

今回の対象デバイスは、NeoVIという少し大きめのCANインターフェースでした。

しかし、実はValueCAN3という小さなデバイスにも、ロギング用ロジックをダウンロードできます。

これは本当に小さなデバイスで、

  • 内部にFlashデバイスはありません → ロジックをダウンロードしても、USBケーブル抜いたら消える
  • SDカードなんて積んでいません → スタンドアロンでロギングなんてムリ

というシロモノです。でも、ロジックをダウンロードできちゃうんですね。むりやりメリットをあげるとしたら、

  • PC上でロジックを動かす場合と比べ、レスポンスが少し速い

という程度です。ほんと、たったコレだけです。こんな機能、意味あんのかい!と思うのですが、やってみるとなーんか楽しいんですよね。

VehicleSpyを使った案件をやってるときは、PC上で動かせば済むようなロジックを、あえてValueCAN3にダウンロードして動かしたりして、ひとり楽しんでいました。「おっ、ちょっとだけスピードアップしたぞぉ!」なんて。