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にダウンロードして動かしたりして、ひとり楽しんでいました。「おっ、ちょっとだけスピードアップしたぞぉ!」なんて。