NI-XNETログファイル仕様

概要

このNI-XNETログファイル仕様は、組込ネットワークデータ(CAN、FlexRay、およびLIN)を格納するためのシンプルでオープンなバイナリファイル形式を定義します。ログファイルの主な目的は、NI-XNET、NI-CAN、およびCompactRIOのサンプルで組込ネットワークデータのロギング、再生、および表示に使用することです。NI-XNETログファイルは、NI-XNETバスモニタなどのナショナルインスツルメンツのツールでも使用されます。

内容

メモ

互換性のためにNCLログファイル形式がサポートされていますが、新しいアプリケーションにはTDMSログファイル形式が推奨されます。詳細については、「TDMSの組込ネットワークデータ」を参照してください。

目標

NI-XNETログファイル仕様の目標:

  • シンプル:ログファイルの各イベント(フレーム)の形式は、NI-XNET、NI-CAN、およびCAN用LabVIEW FPGA I/Oインタフェース(CompactRIO CANモジュール)で使用されるフレーム形式に似ています。これにより、アプリケーション開発が簡単かつ効率的になります。
  • オープン:NI-XNETログファイルのエンコーディングはこのドキュメントで完全に指定されており、ソースコードはサンプルで提供されています。サンプルコードを変更せずにアプリケーションに組み込むことで、NIツールを使用したアプリケーションの動作を確認できます。または、サンプルコードを拡張して、独自のログファイル形式 (独自のファイル拡張子) を作成することもできます。
  • バイナリ:完全なバス負荷の効率的なロギングをサポートするために、判読可能なテキストではなくバイナリ形式を使用します。このバイナリ形式はNI-XNETのrawフレーム形式に非常に似ています。このファイル形式とNI-XNET raw形式との唯一の違いは、ファイル内でマルチバイト要素が特定のバイト順序を使用するのに対し、NI-XNETは常にネイティブのバイト順序を使用する点です。
  • 拡張可能:各NI-XNETログファイルは、バージョン情報を含むヘッダで始まります。この仕様の以降のバージョンでは、更新されたバージョンのファイルが作成されます。アプリケーションは単一のバージョンのサポートに焦点を当てることができますが、今後のNIツールではすべてのバージョンが解釈されます。
  • フレーム(波形ではない):すべてのNI組込ネットワークソフトウェアは、データをフレームとして読み書きします。フレームデータは、ケーブルを介して転送される未処理ビットを表します。フレームデータは効率的で、そのタイミングはネットワークタイミングに対応しているため、NI-XNETログファイルではこの形式が使用されます。NI-XNETは、特定のネットワークフレームから取得した各信号の波形もサポートします。組込ネットワークデータを波形として保存する効率は劣りますが、NI TDMストリーミング形式 (.tdms) などのバイナリ形式をこの目的で使用できます (詳細については、LabVIEW または DIAdem ヘルプを参照してください)。

メモ!

NI-XNETログファイル仕様で作成されたログファイルは、NI-CANログファイル仕様用に設計されたアプリケーションでは使用できません。

NI-CANログファイルは、NI-XNETログファイル仕様用に設計されたアプリケーションで使用できます。

ファイル拡張子

NI-XNETログファイルで使用されるファイル拡張子は次のとおりです。

.ncl

すべてのNI組込ネットワーク製品は、この拡張子を持つファイルがこの仕様に完全に準拠することを前提としています。

NIでは、NI-XNETログファイルにアクセスするためのソースコードを提供しています。ソースコードを変更せずにアプリケーションに組み込む場合、そのアプリケーションで使用されるファイルに対して.ncl拡張子を引き続き使用できます。

NI-XNETログファイルのエンコーディングを変更する場合は、一見互換性があるように見えても、ファイル拡張子を.nclから他の拡張子に変更する必要があります。この新しいファイル拡張子は、ユーザが作成したファイルをユーザ独自の仕様に準拠させるものとして識別するため、組込ネットワーク用のNIソフトウェア製品によってファイルが誤って解釈されることがありません。

表記規則

仕様では、各要素に以下のタイプを使用します。

        U8            8ビット符号なし整数

U16 16ビット符号なし整数、ファイル内の16ビットオフセットで整列

U32 32ビット符号なし整数、ファイル内の32ビットオフセットで整列

U64 64ビット符号なし整数、ファイル内の64ビットオフセットで整列

ヘッダ内では、タイプU16、U32、またはU64の要素はビッグエンディアンバイト順序を使用します (最上位バイトが先)。各イベント(フレーム)内では、マルチバイト要素はヘッダのEventIs LittleEndian要素で指定されたバイト順序を使用します。

以下のテキストでは、「API」という用語は、組込ネットワークハードウェアへのアクセスに使用するナショナルインスツルメンツのソフトウェアを指します。これはNI-XNET、NI-CAN、またはLabVIEW FPGA CANノードです。

NI-XNET rawフレーム形式では、U16、U32、またはU64の要素は常にネイティブのバイト順序を使用します。ネイティブのバイト順序はログファイルの EventIs LittleEndian 要素と異なる場合があるため、NI-XNET 形式とログファイル形式の違いはこれだけです。

ヘッダ

ヘッダは、ログファイルの最初の要素シーケンスです。ログファイルにつき1つのヘッダのみが存在します。

要素タイプ説明
署名U16すべてのNI-XNETログファイルの固定値。ファイルのバイナリエンコーディングがこの仕様に準拠しているかどうかを検証するために使用します。値は16進数の4E49(ASCIIでは「NI」)です。
ヘッダサイズU16署名とヘッダサイズを含む、U32 (4バイト間隔) の倍数でのヘッダのサイズです。
HeaderMajorVersionU8ヘッダのメジャーバージョン (1.5に1など)。これは、旧バージョンとの互換性が損なわれたことを示します。
HeaderUpgradeVersionU8ヘッダのアップグレードバージョン (1.5では5)。これは、アップグレード バージョン 0 との互換性を維持する変更を示します。
EventMajorVersionU8ファイル内のすべてのイベントのメジャーバージョンです。  これは、旧バージョンとの互換性が損なわれたことを示します。
EventUpgradeVersionU8ファイル内のすべてのイベントのバージョンをアップグレードします。  これは、アップグレード バージョン 0 との互換性を維持する変更を示します。
EventIs LittleEndianU8

この要素が0の場合、イベント内のすべてのマルチバイト要素 (タイプU16、U32、またはU64) はビッグエンディアンバイト順序 (最上位バイト順) を使用します。この要素が1の場合、イベント内のすべてのマルチバイト要素はリトルエンディアンバイト順序を使用します (最下位バイトが先)。

最適なパフォーマンスを得るには、コンピューティングプラットフォームにネイティブなバイト順序を使用することをお勧めします。これは通常、WindowsおよびPXI LabVIEW Real-Timeではリトルエンディアン、CompactRIOではビッグエンディアンです。

あるコンピューティングプラットフォームから別のコンピューティングプラットフォームへのログファイルの移植性を最大限に高めるには、ビッグエンディアンバイト順序を使用することをお勧めします。

サンプルコードでは、「ログファイルを開く」関数は、必要なバイト順序 (ネイティブまたはビッグエンディアン) を指定するのに使用する入力パラメータを使用します。「開く」関数の後に、すべてのバイトスワップが自動的に処理されます。アプリケーションは、APIを使用してフレームの読み取り/書き込みを行い、「ログファイルの読み取り/書き込み」関数との間で特別なバイトスワップコードなしでフレームを交換することができます。

(予約済み)3 U83つのバイトはすべて0である必要があります。これらのバイトは、サイズが4バイトの倍数になるようにヘッダをパディングします。

 

この仕様では、ヘッダは常に以下の16進数のバイトシーケンスで構成されている必要があります。

4E 49 00 03 01 02 00 XX 00 00 00

XXは、0 (ビッグエンディアン) または1 (リトルエンディアン) のEventIs LittleEndianです。

ヘッダが1.0から1.1にアップグレードされたのは、EventIs LittleEndian要素が追加されたためです。NI-XNETサンプルコードがヘッダ1.0(ヘッダサイズ2)を読み取る場合、イベントのビッグエンディアンとみなされます。

イベントが1.0から2.0にアップグレードされたのは、FlexRayのイベントタイプが追加されたためです。以前のCANフレームとは異なり、FlexRayフレームのサイズはさまざまです。アップグレードは、リトルエンディアン要素 (1.0は常にビッグエンディアン) の可能性を反映しています。NI-XNETサンプルコードがイベント1.0を読み取る場合、すべてのイベントは24バイトCANフレームで、すべての要素がビッグエンディアンであるとみなされます。

イベント

ヘッダの後に、NI-XNETログファイルには0個以上のイベントが含まれます。各イベントは通常1つのフレームを表しますが、エラーやトリガなどの他の情報をエンコードすることもできます。

ログファイルのすべてのイベントは、以下の24バイトの基本単位で始まります。基本ユニットの後に0個以上の8バイトペイロードユニットが続きます。FlexRayフレームには、最大254バイトの合計ペイロードを含む追加のペイロードユニットが必要です。

5.1.基本単位:

要素タイプ説明
タイムスタンプU64

100ナノ秒間隔の64ビットタイムスタンプです。タイムスタンプ形式は、絶対(日付/時間)または相対(ゼロベース)です。

NI-XNETでは、タイムスタンプ形式は常に絶対形式です。LabVIEWでの開発では、NI-XNETフレーム内のタイムスタンプはLabVIEWタイムスタンプタイプで、サンプルコードはファイルI/Oの一部としてU64に変換します。C/C++での開発では、NI-XNETフレーム内のタイムスタンプはU64です(この要素と同じ)。

NI-CANでは、デフォルトのタイムスタンプ形式は絶対形式ですが、必要に応じて相対時間を構成できます。LabVIEWでの開発では、NI-CANフレーム内のタイムスタンプは浮動小数点(DBL)秒です。サンプルコードは、このタイムスタンプをファイルI/Oの一部としてU64に変換します。C/C++ での NI-CAN 開発では、NI-CAN フレーム内のタイムスタンプは、リトルエンディアン順の 2 つの U32 要素です。

LabVIEW FPGA開発では、タイムスタンプ形式は常に相対的です。タイムスタンプは、リトルエンディアン順序の2つのU32要素です。

識別子U32

フレームの識別子です。

タイプがCANフレームを指定する場合、ビット29 (16進数で20000000) はCAN識別子の形式 (拡張の場合はset、標準の場合はclear) を示します。ビット29がクリアの場合、下位11ビット(0~10)にCANフレーム識別子が含まれます。ビット29が設定されている場合、下位29ビット(0~28)にCANフレーム識別子が含まれます。

タイプがFlexRayフレームを指定する場合、下位16ビットにはスロット番号が含まれます。

未使用ビットはすべてゼロです。

タイプU8

イベント(フレーム)のタイプです。

この要素はフレームの基本タイプを指定します。Identifier、Flags、およびInfo要素の解釈は、各タイプで異なります。

NI-XNET開発では、これはCANおよびFlexRayフレームのタイプ要素に対応します。

LabVIEW での NI-CAN 開発では、これは CAN および LIN フレームの IsRemote 要素に対応します。

C/C++(または他の言語)でのNI-CAN開発では、これはCANおよびLINフレームのFrameType要素に対応します。

LabVIEW FPGA開発では、これはCANフレームのタイプ要素に対応します。

この要素の上位4ビットはプロトコル (16進数) を指定します。

  • 0 CAN
  • 1 LIN
  • 2 FlexRay
  • 3D予約済み (未使用)
  • E なし (プロトコルとは無関係)
  • Fカスタム (ログファイルのユーザ固有のタイプのみ)

この要素の下位4ビットは特定のタイプです。

16進数で最も一般的なタイプは、00(CANデータフレーム)、01(CANリモートフレーム)、12(LINフルフレーム)、20(FlexRayデータフレーム)、21(FlexRayヌルフレーム)です。その他のタイプについては、APIドキュメントを参照してください。

カスタムカテゴリ (上位4ビットのF) は、ログファイルで使用するように設計されています。組込ネットワークフレームにこのログファイル形式を使用する他に、アナログまたはデジタル測定、フロントパネルのボタンが押された時間などの他のデータをエンコードする必要がある場合があります。このようなカスタムイベントを作成する場合、APIの今後のバージョンでは「読み取り」関数からそのタイプが返されないことに注意してください。また、「API書き込み」関数でこれらのカスタムイベントを無視することもできます。00~EFの16進数タイプはすべてNI製品用に予約されていますが、F0~FFタイプはカスタムタイプとして使用できます。これらのカスタムタイプの1つを使用する場合、NI製品はイベントを無視します。識別子、フラグ、情報、およびペイロードの定義はユーザ次第です。他社とログファイルを交換する場合は、カスタムタイプの異なる定義間の競合を避けるため、.ncl (または異なる署名) とは異なるファイル拡張子を使用することをお勧めします。

カスタムフレームタイプと情報要素の上位2ビット以外は、イベントのその他のすべてのビットはNI製品が将来使用できるように予約されていると想定する必要があります。現在使用されていないビット(識別子のビット30と31)では、「API読み取り」関数は常に0を返し、「API書き込み」に渡されるフレームには常に0を使用する必要があります。

フラグU8

フレームのタイプを指定する8つのブールフラグです。

この要素はNI-XNETに存在します。CANおよびFlexRayで使用されます(詳細については、NI-XNETのドキュメントを参照してください)。

この要素はNI-CANフレームに存在しません。

この要素はLabVIEW FPGA CANフレーム(InfoA)に存在しますが、現在は使用されていません(将来のために予約されています)。

情報U8

フレームのタイプを限定する情報です。

この要素はNI-XNETに存在します。CANには使用されません。FlexRayフレームでは、フレームのサイクルカウント(0~63)を提供します。

この要素はNI-CANフレームに存在しません。

この要素はLabVIEW FPGA CANフレーム(InfoB)に存在しますが、現在は使用されていません(将来のために予約されています)。

この要素の上位2ビットは、タイプ要素のカスタム範囲と同様に、カスタム専用です。この2つのカスタムビットにより、CAN、LIN、およびFlexRayフレーム(NI範囲内のタイプ)に情報を追加できます。API読み取りは常に2つのカスタムビットを0として返しますが、ログファイルに書き込む前に独自のビットでORを実行することもできます。ログファイルからフレームを読み取り、「API書き込み」関数に渡す場合、APIはこれら2つのカスタムビットの値を無視します。

ペイロードの長さU8

ペイロードの長さは、ペイロードの有効なデータバイト数を示します。

すべてのCANおよびLINフレームで、ペイロード長は8を超えることはできません。このベースユニットには常に8バイトのペイロードデータが含まれているため、CAN/LINフレーム全体がベースユニットに含まれ、追加のペイロードユニットは存在しません。

FlexRayフレームでは、ペイロードの長さの範囲は0~254バイトです。PayloadLengthが0~8の場合、基本単位のみが存在します。PayloadLengthが9以上の場合、1つ以上のペイロード単位が基本単位に従います。追加のペイロードユニットは、DMA転送の効率を最適化するために8バイト単位で提供されます。たとえば、PayloadLengthが9の場合、バイト0~7はベースユニットのペイロード内にあり、バイト8は次のペイロードユニットの最初のバイトにあり、次のペイロードユニットの最後の7バイトは無視されます。

つまり、生データの各フレームの長さは異なる場合があります。各フレームのサイズ(バイト単位)は、擬似コードを使用して計算できます。

U16 FrameSize; // 最大のFlexRayフレームに対して最大272
  FrameSize = 24; // 24バイト基本単位
  if (ペイロードの長さ > 8)
    FrameSize = FrameSize +
      (U16)(ペイロード長 - 1) AND 0xFFF8;

擬似コードの最後の行は1を減算し、最も近い8の倍数に切り捨てます(ビット単位のANDを使用)。これにより、追加のペイロードユニットのバイトが追加されます。たとえば、PayloadLengthが9~16の場合、8バイトのペイロード単位が1つ必要になります。

サンプルコードは、この可変長フレームエンコーディングの詳細をユーザに代わって処理します。

ペイロード8 U8この要素は常にログファイルで8バイトを使用しますが、有効なバイト数はペイロードの長さによって決定されます。

 

5.2.ペイロード単位

追加のペイロードユニットの数(0~31)は、ベースユニットのペイロード長要素によって決定されます。

要素タイプ説明
ペイロード8 U8この要素は常にログファイルで8バイトを使用しますが、有効なバイト数はペイロードの長さによって決定されます。

 

詳細情報 

NI-XNETログファイル仕様もNI-XNETと一緒にインストールされます(通常はC:\Program Files\National Instruments\NI-XNET\Documentation)。

Was this information helpful?

Yes

No