互換性のためにNCLログファイル形式がサポートされていますが、新しいアプリケーションにはTDMSログファイル形式が推奨されます。詳細については、「TDMSの組込ネットワークデータ」を参照してください。
NI-XNETログファイル仕様で作成されたログファイルは、NI-CANログファイル仕様用に設計されたアプリケーションでは使用できません。
NI-CANログファイルは、NI-XNETログファイル仕様用に設計されたアプリケーションで使用できます。
『NI-CANログファイル仕様』は、以下の特性を満たすように設計されています。
すべてのNI-CANログファイルで使用されるファイル拡張子は、 です。
.ncl
すべてのNI-CAN製品は、この拡張子を持つファイルがこの仕様に完全に準拠していることを前提としています。
NIでは、NI-CANログファイルにアクセスするためのソースコードを提供しています。ソースコードを変更せずにアプリケーションに組み込む場合、そのアプリケーションで使用されるファイルに対して.ncl拡張子を引き続き使用できます。
NI-CANログファイルのコードを変更する場合は、一見互換性があるように見えても、ファイル拡張子を.nclから他の拡張子に変更する必要があります。この新しいファイル拡張子は、ファイルを独自の仕様に準拠させるものとして識別するため、CAN用NIソフトウェア製品がファイルを誤って解釈することを防ぎます。
仕様では、各フィールドに以下のタイプを使用します。
U8 8ビット符号なし整数
U16 16ビット符号なし整数、ビッグエンディアン、ファイル内の16ビットオフセットで整列
U32 32ビット符号なし整数、ビッグエンディアン、ファイル内の32ビットオフセットで整列
U64 64ビット符号なし整数、ビッグエンディアン、ファイル内の64ビットオフセットで整列
ヘッダはログファイルの最初のフィールドシーケンスです。ログファイルにつき1つのヘッダのみが存在します。
| フィールド | タイプ | 説明 |
| 署名 | U16 | すべてのNI-CANログファイルの固定値。ファイルのバイナリエンコーディングがこの仕様に準拠しているかどうかを検証するために使用します。値は16進数の4E49 (ASCIIでは「NI」) です。 |
| ヘッダサイズ | U16 | Signature と HeaderSize を含む、u32 (4 バイト間隔) の倍数でのヘッダのサイズ。NI-CANログファイルは、u32の配列での解析をサポートするように設計されています。 |
| HeaderMajorVersion | U8 | ヘッダのメジャーバージョン (1.5に1など)。これは、旧バージョンとの互換性が損なわれたことを示します。 |
| HeaderUpgradeVersion | U8 | ヘッダのアップグレードバージョン (1.5では5)。これは、アップグレード バージョン 0 との互換性を維持する変更を示します。 |
| EventMajorVersion | U8 | ファイル内のすべてのイベントのメジャーバージョンです。 これは、旧バージョンとの互換性が損なわれたことを示します。 |
| EventUpgradeVersion | U8 | ファイル内のすべてのイベントのバージョンをアップグレードします。 これは、アップグレード バージョン 0 との互換性を維持する変更を示します。 |
表1: NI-CANログファイルヘッダ情報
この仕様では、ヘッダは常に以下の16進数のバイトシーケンスで構成されている必要があります。
4E 49 00 02 01 00 01 00
ヘッダの後、NI-CANログファイルには0個以上のイベントが含まれます。 各イベントは通常1つのCANフレームを表しますが、エラーやトリガなどの他の情報をエンコードすることもできます。
このバージョンのスペシフィケーションでは、ログファイルの各イベントのサイズは同じです。この固定サイズは24バイトです(以下の表を参照)。ヘッダのサイズと各イベントのサイズは固定されているため、多くの場合、ファイルのサイズからイベント数を決定できます。
以降のテキストでは、「ネットインタフェース読み取り関数」はネットワークインタフェースの「NI-CANフレームAPI読み取り」関数のリファレンスを示します。使用するアプリケーション開発環境に応じて、次のいずれかの『NI-CAN Hardware and Software Manual』を参照してください。
ログファイルの最初のフレームはNI-CAN開始トリガフレーム(タイプ4)で構成することを強く推奨します。開始トリガには、CAN測定開始の絶対タイムスタンプ(日付/時間)と、後続のCANフレームのタイムスタンプ形式(絶対または相対)が含まれます。開始トリガがログファイルにない場合、CAN測定の開始は最初のCANフレームのタイムスタンプと同じとみなされます。開始トリガフレームの詳細については、「ネットインタフェース読み取り」関数を参照してください。
フィールド | タイプ | 説明 |
タイムスタンプ | U64 | 64ビットタイムスタンプ (100ナノ秒間隔)。タイムスタンプ形式は、絶対(日付/時間)または相対(ゼロベース)です。 LabVIEWでのNI-CAN開発では、NI-CANフレーム内のタイムスタンプは浮動小数点(DBL)秒です。ログファイルにアクセスするには、この浮動タイムスタンプを2つのU32フィールド間で変換する必要があります (例を参照)。LabVIEWのバイナリファイルI/O関数はビッグエンディアンを使用するため、最上位のU32と最下位のU32に単純にアクセスできます。 C/C++(または他の言語)でのNI-CAN開発では、NI-CANフレーム内のタイムスタンプは2つのU32フィールドです。NI-CANの各U32はリトルエンディアン(最下位バイト優先)で保存されるため、ログファイルにアクセスする前にバイト順序を変更する必要があります。 LabVIEW FPGA開発では、タイムスタンプは2つのU32フィールドです。LabVIEWのバイナリファイルI/O関数はビッグエンディアンを使用するため、最上位のU32と最下位のU32に単純にアクセスできます。 |
識別子 | U32 | CANフレームの識別子です。 ビット29 (16進数で0x20000000) は、CAN識別子の形式 (拡張用に設定する、標準用にクリア) を示します。 バイトスワップの表記規則は、タイムスタンプの各U32部分に記述されている方法と一致します。 |
タイプ | U8 | イベント(フレーム)のタイプ。 このフィールドは、CANデータフレームを示す0、CANリモートフレームを示す1です。NI-CANは追加の値をサポートしています。 LabVIEWでのNI-CAN開発では、これはCANフレームのIsRemoteフィールドに対応します。CANフレーム以外のタイプについては、「ネットインタフェース読み取り」関数を参照してください。 C/C++(または他の言語)でのNI-CAN開発では、これはCANフレームのFrameTypeフィールドに対応します。CANフレーム以外のタイプについては、「ネットインタフェース読み取り」関数を参照してください。 LabVIEW FPGA開発では、これはCANフレームのタイプフィールドに対応します。LabVIEW FPGAはCANデータフレームとCANリモートフレームのみをサポートします。 |
インフォA | U8 | タイプを限定する情報です。 この情報はNI-CANには存在しません。 この情報はLabVIEW FPGA用ですが、現在使用されていません(将来のために予約されています)。 ログファイルを読み取る際は、このフィールドは無視してください。ログファイルを書き込む場合、このフィールドをゼロに設定する必要があります。 |
インフォB | U8 | タイプを限定する情報です。 このフィールドはInfoAと同じ解釈をする必要があります (無視)。 |
データ長 | U8 | CANデータフレームでは、DataLengthはDataの有効なバイト数を示します。CANリモートフレームでは、DataLengthはデータ内の有効なバイト数ではなく、要求されたバイト数を示します。その他のすべてのフレームタイプ値では、データの長さはデータ内の有効なバイト数を示します。 |
データ | U8 | このフィールドにはログファイルに常に8バイトが含まれますが、有効なバイト数はデータ長によって決定されます。 |
表2: NI-CANログファイルイベント情報