|
USB CAN デバイス USB-847x (USB-8473、USB-8473s、USB-8472、USB-8472s)や CompactRIO 用 CAN モジュール NI 985x (NI 9853、NI 9852)ではチャンネル API が使用できないため、フレームとチャンネルを変換するために
の 2 つの方法がありましたが、より良い方法はないでしょうか。
NI-XNET とは、従来の NI-CAN デバイスに替わる次世代の CAN/LIN/FlexRay デバイスのドライバです。
詳細につきましては Developer Zone: Tutorial: NI-CANアプリケーションをNI-XNETに移行する をご参照ください。
NI-XNET は USB-847x や NI 985x のドライバではありませんが、NI-XNET 1.2 以降ではフレームとチャンネルを変換する機能がサポートされており、フレームとチャンネルの変換のために使用することができます。
2011年8月版以降の Device Drivers DVD には NI-XNET 1.3.1 以降が含まれています。もしくは、 ドライバと更新: NI-XNET から無償で別途ダウンロードすることもできます。
NI-CAN で使用していたデータベースを NI-XNET で使用する手順につきましては、 KnowledgeBase 5P0III1C: NI-CAN で使用していたデータベースを NI-XNET で使用できますか。 をご参照ください。
NI-XNET にて CAN フレームとチャンネルを変換する方法としまして、下記の 2 種類がサポートされています。
NI-XNET の方法につきましては、メニューバーの ヘルプ » サンプルを検索 から開くサンプルファインダにて ハードウェア入力と出力 » CAN » NI-XNET » セッションの紹介 » 変換セッション » Convert CAN Frames to-from Signals.vi にございますサンプル VI をご参照ください。
NI-XNET Raw の方法は、通常 NI 985x CAN モジュールと共に使用します。サンプルファインダ » ハードウェア入力と出力 » CompactRIO » モジュールに特定 » CAN » 985x (NI-XNETと使用) »
CAN Signals Receive.lvproj 及び CAN Signals Transmit.lvproj をご参照ください。(NI-XNET だけでなく、NI-RIO ドライバも必要です。Device Drivers DVD には NI-XNET と NI-RIO の両方が含まれています。もしくは、ドライバと更新: NI-RIO から無償で別途ダウンロードすることもできます。)
メモ: NI-XNET Raw フレームは、フレーム内の情報をクラスタではなく、フレーム数 × 24バイト の数値配列形式で保持します。NI 985x CAN モジュールは、FPGA I/O ノードを右クリック » プロパティ からフレーム情報をクラスタではなく 4 バイトの数値 6個 を含む配列(24バイト)形式にすることができますので、NI-XNET Raw フレームを使用することによりチャンネル変換が容易となります。NI-XNET Raw フレームの構造の詳細につきましては、スタート » すべてのプログラム » National Instruments » NI-XNET » NI-XNET Hardware and Software Manual の ページ 1006 をご参照ください。
NI-CAN 仮想ポートの方法、NI-XNET の方法、NI-XNET Raw の 3 つの方法のいずれかを使用することにより、USB-847x や NI 985x ではサポートされていないチャンネル API と同様の動作を実装することができます。
この技術資料の最後に添付されている XNET_CAN_Conversion_Examples_LV2011.zip (LabVIEW 2011 以降用) には、サンプルファインダ » ハードウェア入力と出力 » CAN » NI-CAN » チャンネル API » 基本 » Single Sample Event Output.vi 及び Single Sample Input の 2 つのチャンネル API のサンプル VI と同様の動作を実装したサンプル VI が含まれます。(LabVIEW 8.5 ~ 2010 の場合には XNET_CAN_Conversion_Examples_LV85.zip をご利用頂けます。)
また、XNET_CAN_Conversion_PerformanceTest_LV2011.zip (LabVIEW 2011 以降用)には、上記の サンプル VI のコードから実際に CAN デバイスを使用する部分を取り除き、変換処理のみを100000 回繰り返して要した時間を 100000 で割り、1 回当たりの変換処理時間を計算するパフォーマンステスト用の VI が含まれます。(LabVIEW 8.5 ~ 2010 の場合には XNET_CAN_Conversion_PerformanceTest_LV85.zip をご利用頂けます。)
LabVIEW 2011, NI-CAN 2.7.3, NI-XNET 1.3.1, CAN Frame Channel Conversion Library 1.0.3, Windows 7 SP1 の環境で、NI-CAN 、NI-XNET 付属のサンプルデータベースにて定義されている TransmissionFluilds フレームのデータと、 TransmissionOilPressure、TransmissionFilterPressure の 2 つのチャンネルの変換を行ったテスト結果は下記のとおりです。
Channel to Frame | Frame to Channel | |
NI-CAN 仮想ポート | 38.09 μs | 72.77 μs |
NI-XNET | 3.82 μs | 3.58 μs |
NI-XNET Raw | 5.11 μs | 4.86 μs |
NI-CAN 仮想ポートの方法と比べ、NI-XNET の方法は、チャンネルからフレームへの変換で 10 倍程度、フレームからチャンネルへの変換で 20 倍程度パフォーマンスに優れているという結果になりました。NI-XNET Raw の方法は、NI 985x CAN モジュールと使用する場合にはより効率的な方法ですが、Raw フレーム内のパラメータ( Arbitration ID 、データ長、データ)にアクセスする場合には NI-XNET の方法よりも時間がかかると考えられます。
上記の 3 つの方法では、複数のチャンネルは必ずしも単一の Arbitration ID のフレームに属している必要はなく、複数の Arbitration ID のフレームを扱うことができます。一方、Conversion Library の方法では 単一の Arbitration ID (message ID) を指定して変換するため、1 回の変換処理で扱う複数のチャンネルは単一の Arbitration ID のフレームに属している必要があります。
上記と同様の環境でのテスト結果は以下のとおりです。
Channel to Frame | Frame to Channel | |
Conversion Library | 0.30 μs | 0.66 μs |
要した時間は前述の 3 つの方法よりも短い、つまり処理速度は速いという結果になりましたが、Conversion Library の方法では単一フレームのみの変換ですので単純比較はできません。
また、Conversion Library の方法では、
といった点に注意する必要があります。
結論としまして、
をお勧め致します。
KnowledgeBase 45EE2VJL: どのようにしてUSB-CANデバイスでChannel APIを使用するのでしょう。
KnowledgeBase 5D0DHKBI: CAN Frame Channel Conversion Library 1.0.3 インストール後の LabVIEW のパレット
Developer Zone: Tutorial: NI-CANアプリケーションをNI-XNETに移行する
KnowledgeBase 5P0III1C: NI-CAN で使用していたデータベースを NI-XNET で使用できますか。
XNET_CAN_Conversion_Examples_LV2011.zip
XNET_CAN_Conversion_Examples_LV85.zip
XNET_CAN_Conversion_PerformanceTest_LV2011.zip
XNET_CAN_Conversion_PerformanceTest_LV85.zip
|