Overview
NI-CANアプリケーションをNI-XNETに移行する
NI-XNETシリーズのCAN/FlexRayインタフェースは、CAN/FlexRayインタフェースにNI-XNETドライバソフトウェアを組み合わせたものです。新しいNI-XNETインタフェースは、Series 2 PCI/PXI/PCMCIAインタフェースなどのレガシーNI-CAN製品と比較して、使いやすさ、長期サポートの点で多くのメリットがあります。
NI-XNET CAN/FlexRayインタフェースの次世代性能と操作性を実現するため、ナショナルインスツルメンツではNI-XNET製品向けに新しいAPIを開発しました。NIでは、多くのアプリケーションに旧バージョンのNI-CAN APIが採用されているため、それらのアプリケーションを長期的にサポートする必要性を認識しています。
NI-CAN用に作成されたアプリケーションをNI-XNETに移行し、既存のユーザもNI-XNETの新しい機能を利用できるようにするため、NI-XNETドライバにはNI-CAN関数の呼び出しをエミュレーションするためのNI-CAN互換性レイヤがあります。この機能はドライバレベルでインストールされるため、NI-CANで作成したほとんどのアプリケーションはNI-XNETでもすぐに使用可能です。ただし、NI-XNETインタフェースの使用を開始する前に、この2つのドライバには顕著な違いがあることを知っておく必要があります。
このドキュメントでは、NI-CAN互換性ライブラリを使用して、新しいNI-XNETハードウェアにNI-CANアプリケーションを実装する方法を紹介します。また、想定される互換性問題と、NI-CANの概念をNI-XNET APIに移行する方法についても説明します。
どのNI CANインタフェースにどのNI-CAN APIが適しているかについては、NI組込ネットワーク製品の概要を参照してください。
互換性ライブラリサポートのインストール
既存のアプリケーションが動作するためには、NI-XNETとNI-CANの両ドライバがインストールされている必要があります。NI-XNETインストールパッケージには、互換性ライブラリが正しく機能するのに必要なコンポーネントが全て含まれています。インストール時に、NI-CAN互換性レイヤをインストールするか選ぶよう求められます。互換性レイヤには、最新版のNI-CANとライブラリ関数が含まれています。このオプションはデフォルトで有効ではないのでご注意ください。
NI-CAN
NI-CAN APIは、Series 2 CANインタフェースを含むレガシーCANハードウェアに関連付けられています。NI-XNETは、次世代のNI-XNET CAN/FlexRayインタフェースのデフォルトドライバです。NI-XNETインタフェース向けの新しいアプリケーションでは、NI-XNETドライバおよびAPIを使用します。
互換性
ナショナルインスツルメンツでは、NI-CAN用の既存のアプリケーションをお持ちのお客様のために、NI-XNET CAN製品にもコードを再利用できる互換性ライブラリをご用意しています。互換性ライブラリの機能はNI-XNETではなくNI-CAN APIに適用されるので、それらの機能はNI-CANのマニュアルに記載されています。詳しくは、『NI-CANハードウェア/ソフトウェアマニュアル』(英語)を参照してください。
移行
既存のアプリケーションでNI-CANを使用し、今後はNI-XNETハードウェアに完全移行する予定の場合は、コードをNI-XNETに移行するとよいでしょう。NI-XNETは旧NI-CAN APIの多くの概念を引き継いでいますが、主要機能は似通っています。表1は、NI-CAN用語と相当するNI-XNET用語を示しています。
| NI-CAN用語 | NI-XNET用語 | コメント |
|---|---|---|
| CANdbファイル | データベース | NI-XNETでは、 NI-CANチャンネルAPI、FIBEX、.DBC、.NCDよりも多くのデータベースファイルフォーマットをサポートしています。 |
| メッセージ | フレーム | “フレーム”とは、バス経由で転送されるビットを表す専門用語です。この用語は、CANやFlexRayなどの規格で使用されています。 |
| チャンネル | 信号 | “信号”とは、FIBEXなどの規格で使用される専門用語です。 |
| チャンネルAPIタスク | セッション(信号I/O) | NI-CANと異なり、NI-XNETではチャンネル(信号)I/OとフレームI/Oの同時使用がサポートされています。 |
| フレームAPI CAN オブジェクト(キューの 長さ0) |
セッション(フレームI/Oシングルポイント) | 1つのオブジェクトに入力(読み取り)と出力(書き込み)が両方含まれるNI-CAN CANオブジェクト。制御性を高めるため、NI-XNETでは各方向に異なるオブジェクトがあります。NI-CANの一方向のキューの長さが0というのは、NI-XNETフレームI/Oシングルポイントと同じです。 |
| フレームAPI CAN オブジェクト(キューの 長さ0以外) |
セッション(信号I/Oキュー) | NI-CANの一方向のキューの長さが0以外というのは、NI-XNETフレームI/Oキューと同じです。 |
| フレームAPI ネットワークインタフェース オブジェクト |
セッション(フレームI/Oストリーム) | 1つのオブジェクトに入力(読み取り)と出力(書き込み)が両方含まれるNI-CANネットワークインタフェースオブジェクト。制御性を高めるため、NI-XNETでは各方向に異なるオブジェクトがあります。 |
| インタフェース* | インタフェース | NI-CANではインタフェース名がCAN0から始まりますが、NI-XNETではCAN1(またはFlexRay1)から始まります。 |
表1. NI-CAN用語と相当するNI-XNET用語
図1は、NI-XNETとNI-CANにおける番号付けの違いを示しています。上の“CAN0”は、NI PCI-8513ボードの最初のポートを使用するNI-CANポート名に対応します。この同じポートを、CAN1を使ってNI-XNET APIで使用することができます。NI-CANポートをNI-XNETポートと同じ名前に変えることもできます。問題は一切起こりません。
図1. NI-XNETとNI-CANの番号付けの違い
NI-CAN互換性レイヤがインストールされたNI-XNETインタフェースでは、NI Measurement & Automation Explorer(MAX)でボードが2回表示される点にご注意ください。これは、NI-CANとNI-XNETとそれぞれ1回ずつボードの存在をMAXに通知するためです。
互換性のないコード
NI-CAN用NI-XNET互換性ライブラリ(NI-XCL)は基本機能の維持を目的としていますが、NI-XNETプラットフォームにはハードウェア特定の機能や基本機能の違いなどがあるため、NI-CANのライブラリをNI-XNETに完全に対応させることができるとは限りません。
互換性のない主な関数とそれぞれの対処法について下記に説明します。互換性のない全関数の一覧については、バージョン2.7以降の『』NI-CAN ハードウェア/ソフトウェアマニュアル』を参照してください。
1. ハードウェアフィルタ
従来トランシーバフィルタは、バス負荷の高い時に一部のCAN IDしか考慮されないアプリケーションで用いられます。場合によっては、NI-CANデバイスは全帯域幅をに及ぶため、バッファのオーバーフローが発生します。NI-XNETハードウェアアーキテクチャでは、NI-XNETデバイス駆動DMAエンジンを使用して、バッファフローの発生をエミュレーションします。NI-XNETCANインタフェースは、高バス負荷を処理し、バッファのオーバーフローを起こさずに最速レートで送信することができます。お客様のアプリケーションでハードウェアフィルタを頻繁に使用する場合は、CANオブジェクトを設定するか、ネットワークインタフェースオブジェクトを使ってバス全体を読み取るかいずれかを推奨します。そのようなアプリケーションには、ネイティブNI-XNET APIを使用するようコードを修正するのが最適なオプションです。
2. リモートフレームへの自動応答
この機能はNI-XNETハードウェアに搭載されていますが、新しいアーキテクチャで互換性を維持する手段は用意されていません。この機能が必要なアプリケーションの場合は、NI-XNET APIが使えるようにコードを変更する必要があります。NI-XNETAPIでリモートフレームを処理する方法の詳細については、『NI-XNETハードウェア/ソフトウェアマニュアル』(英語)を参照してください。
3. 外部トランシーバ
この機能は、NI-XNETハードウェアには搭載されていません。外部トランシーバの使用を検討されるお客様は、ナショナルインスツルメンツの営業部までお問い合わせください。
4. マスタタイムベースレートの変更
NI-XNETインタフェースは、ユーザからのパラメータを一切受け取らずにクロック入力周波数を自動検出し、同期します。このプロセスは自動で行われるので、マスタタイムベースレートをユーザが変更するオプションはありません。NI-XNETインタフェースでは、マスタタイムベースを明確に変更しなくても、様々なクロックレートでの同期(1、10、20 MHz)をサポートしています。1 MHzと10 MHzは、エクスポートにも使用できます。
5. 通信エラー/警告のロギング
NI-XNETでは、新しい方法でバスエラーを記録します。CANフレームをバス状態のエンコードとともに記録するのではなく、バス状態をただ読み取るだけです。
ただし、これはネイティブXNET APIを使用しているので、NI-CANとの互換性はありません。
6. タイムスタンプ形式
NI-XNETでは、絶対的なタイムスタンプ形式のみ使用します。ただし、特定のイベントのタイムスタンプを取得する関数は使用可能です。それらのタイムスタンプを使用すると、別の形式でデータを取得し直さなくても、異なる基準からの「相対的」時間を計算することができます。
この機能が必要なアプリケーションの場合は、NI-XNET APIが使えるようにコードを変更する必要があります。
7. タイムスタンプの送信とタイムラインの回復
この機能は、現在NI-XNETハードウェアには搭載されていません。お客様のアプリケーションでこの機能が必要な場合は、ナショナルインスツルメンツまでお問い合わせください。
8. RTSIイベント
NI-XNETには、タイムベースとスタートトリガを同期するためのRTSI機能があります。しかし、RTSIパルス状でイベントを構成(あるいはCANフレームを送信)することはできません。またCANイベントに基づいてRTSIイベントを構成することも不可能です。
NI-CANからNI-XNETへの変更
NI-XNET APIを使用するには、アプリケーションの変更が必要になる場合があります。それには様々な理由があります。次のセクションでは、NI-XNET APIを使用できるようNI-CANコードを変更する方法について説明します。
このドキュメントは、NI-CANの概念をNI-XNETに移し替えてコードの移行を容易にすることを目的としています。それぞれのアプリケーションについて説明するものではありません。コードの変更においてサポートが必要な場合は、ナショナルインスツルメンツまでお問い合わせください。
フレームAPI
インタフェースを開く
NI-CANインタフェースは、開く前に構成する必要があります。NI-XNETでは、まずインタフェース上にセッションを作成します。するとプロパティノードを使ってセッションのプロパティを自由に変更可能となります。これは、NI-DAQmxなど他の多くのNI APIで使用されているのと同じモデルです。
フレームの読み取り
フレームの読み取りは、NI-CANもNI-XNETも似ています。
性能の向上と新しいNIデバイス駆動DMAエンジンのおかげで、NI-XNETデバイスにクエリして使用可能なフレーム数を確認する必要はもうありません。NI-CANでは、性能上の理由でクエリが必要でした。この機能はNI-XNETでも使用可能ですが、全てのフレームを読み取るのに必要な機能ではありません。(nxRead関数に-1を入力すると、全てのフレームが返されます。)
フレームフォーマットはNI-CANでもNI-XNETでも同様の情報を提供しますが、表示のしかたが多少異なります。
シングルフレームの書き込み
NI-XNETのnxWrite (Frame CAN).viでは、フレームの配列を入力として受け入れます。そのため、シングルフレームを送信するには、1フレームの配列を作成する必要があります。
複数のフレームの書き込み
NI-XNETでは、配列の長さによって書き込むフレーム数がわかります。
周期的フレームの書き込み
NI-CANでは、フレームAPIで周期的フレームを書き込む場合、各フレームのオブジェクトを送信または受信用に構成する必要があります。NI Series 2 CANインタフェースには、49個のオブジェクト制限があります。
NI-XNETにおける個々の周期的フレームの構成は、やや異なります。NI-XNETは信号/フレームデータベースとの緊密な統合が可能なため、NI-XNETで周期的フレームを活用するには、FIBEXデータベースファイルを使ってネットワークが使用するフレームを記述するのが最も簡単な方法です。FIBEXデータベースを使用すると、NI-XNETドライバはアプリケーションからの介入なしに周期的フレームを自動で構成し処理します。
例として、データベース内の周期的フレームを任意ID、ペイロード長、および周期で構成する場合を考えてみます。構成して保存したアプリケーションは、シングルポイントセッションを使ってこのフレームの送受信を行うことができます。I/O制御によりデータベースから全てのフレームを動的にロードするため、アプリケーションでフレームを選択しやすくなります。この機能が動作するためには、使用するデータベースをNI-XNETに伝えるエイリアスを構成する必要がありますが、これは次のセクションで説明します。
NI-XNETドライバは、セッションを開く際にデータベースから全ての設定を読み取ります。するとドライバとNI-XNETファームウェアで周期的送受信が構成されます。アプリケーションでユーザが行うのは値のアップデートのみで、NI-XNETが次の周期中に自動で最新の値を送信します。NI-XNETには、多くの値をキューに入れるためのキューセッションが搭載されています。
信号データベースを使用する主なメリットは、コードの管理がしやすいことです。データベースをアップデートするとコードも自動でアップデートされますので、コードを変更して任意IDや送信レート、ビット定義などの変更を追跡する必要はありません。パラメータを変更する場合は、データベースファイルを変更するだけでけっこうです。コードには変更を加える必要がありません。
NI-XNETには、データベースファイルからロードされた値をプログラムで変更する関数が含まれています。これを使用してもデータベースファイルに書かれた実際の値は変更されません。NI-XNETドライバによってランタイムにロードされる値のみが変更されます。
データベースファイルを作成せずに全ての設定をランタイムに行いたい場合は、「メモリ内」のデータベースを作成することもできます。この場合、ネットワーク構成全体をプログラムで開発し、アプリケーションで使用することができます。ハードウェア入力と出力→CAN→NI-XNET Advancedのヘルプ→サンプルファインダにあるCANDynamic Database Creation.viをご覧ください。
他のフレームFPI関数
多くのNI-CANフレームAPIに同様のNI-XNETサンプルが付属されています。
チャンネルAPI
データベースファイルの編集
データベースファイルの編集には、主としてランタイム前とランタイム中の2つの方法があります。NI-CANで実行前にデータベースファイルを編集するには、MAXのデータベースエディタが必要です。NI-XNETでは、全てのデータベース編集機能が単体のデータベースエディタに移行されます。データベースエディタは、スタート→すべてのプログラム→National Instruments→NI-XNET→Database Editorから開くことができます。
NI-XNETデータベースエディタの詳細については、技術資料: FIBEXとNI-XNETデータベースエディタの概要(英語)を参照してください。
NI-XNETには、FIBEXデータベースファイルをプログラムで編集する関数があります。その関数を使用して、カスタムデータベース操作ツールをアプリケーションに組み込むことができます。NI LabVIEWに付属のサンプルを見るには、ヘルプ→サンプルを検索をクリックし、ハードウェア入力と出力→CAN→NI-XNET→Advancedを選択してください。
シングルポイント入出力
NI-CANでは、ハードドライブ上の.DBCまたは.NCLファイルを選択する必要があります。NI-XNETでは、アプリケーションを実行する前にエイリアスをデータベースファイル(.DBC、.NCL、FIBEX .xml)に追加する必要があります。これにはいくつかの方法があります。CANSignal Single Point Input.viという名前のサンプルは、ハードウェア入力と出力→CAN→NI-XNET→Basicにあります。信号リストを右クリックしてBrowse for Database Fileをクリックし、ディスクにあるデータベースファイルを選択します。NI-XNETドライバは、このデータベースのエイリアスを自動で作成しますので、簡単にもう一度選ぶことができます。
次にNI-XNET I/O制御器はデータベースファイルを自動で読み取り、全ての信号名を付けます。そうすることで、アプリケーションで使用する信号を選ぶのが非常に簡単になります。
下図は、NI-CANとNI-XNETのシングルポイントチャンネル/信号の書き込みを行うブロックダイアグラムを比較したものです。読み取りは似通っており、どちらのドライバにもサンプルが付いています。
波形の入出力
波形データの読み取りと書き込みもNI-CANとNI-XNETで似通っており、どちらのドライバにも比較用のサンプルが付属されています。
1つの違いは、NI-XNETではデフォルトサンプルレートが1000であるということです。サンプルレートは、プロパティノードで簡単に変更することができます。
データベースをディスクから読み取る
NI-CANでは、ディスク上にあるデータベースを直接使用できます。NI-XNETでは、アプリケーションでNI-XNET I/O制御器が使用できるように、そのファイルへのエイリアスを通常手動で作成します。ただし、アプリケーションを配布する場合やNI-CANの動作をエミュレーションしたい場合は、ディスク上のファイルのデータベースエイリアスをプログラムで作成することができます。その方法については、ハードウェア入力と出力→CAN→NI-XNET→AdvancedにあるManaging Local Databases.viというサンプルをご覧ください。
NI-XNET互換性レイヤで移行を簡素化
NI-XNETのNI-CAN用互換性レイヤにより、新しいNI-XNET CAN/FlexRayインタフェースを利用できるようにNI-CANコードを移行させるのも非常に簡単になっています。多少の違いはありますが、互換性レイヤを使用すれば、ほとんどのNI-CANアプリケーションはわずかな修正のみでNI-XNETハードウェアでも使用可能となります。
NI-XNET製品シリーズの概要
全組込ネットワーク製品の詳細を見る
NI-CANハードウェア/ソフトウェアマニュアル
NI-XNETCANインタフェースを参照
Legal
This tutorial (this "tutorial") was developed by National Instruments ("NI"). Although technical support of this tutorial may be made available by National Instruments, the content in this tutorial may not be completely tested and verified, and NI does not guarantee its quality in any way or that NI will continue to support this content with each new revision of related products and drivers. THIS TUTORIAL IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND AND SUBJECT TO CERTAIN RESTRICTIONS AS MORE SPECIFICALLY SET FORTH IN NI.COM'S TERMS OF USE (http://ni.com/legal/termsofuse/unitedstates/us/).
