NI-CANログファイル仕様

概要

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

内容

メモ!

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

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

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

NI-CANログファイル特性

『NI-CANログファイル仕様』は、以下の特性を満たすように設計されています。

  • シンプル:ログファイルの各イベント(フレーム)の形式は、NI-CANで使用されるフレーム形式、およびCAN(CompactRIO CANモジュール)用のLabVIEW FPGA I/Oインタフェースに似ています。これにより、アプリケーション開発が簡単かつ効率的になります。
  • オープン:NI-CANログファイルのエンコーディングはこのドキュメントで完全に指定されており、ソースコードはサンプルで提供されています。サンプルコードを変更せずにアプリケーションに組み込むことで、NIツールを使用したアプリケーションの動作を確認できます。または、サンプルコードを拡張して、独自のログファイル形式 (独自のファイル拡張子) を作成することもできます。
  •   バイナリ:完全なバス負荷の効率的なロギングをサポートするために、判読可能なテキストではなくバイナリ形式を使用します。
  • 拡張可能:各NI-CANログファイルは、バージョン情報を含むヘッダで始まります。この仕様の以降のバージョンでは、更新されたバージョンのファイルが作成されます。アプリケーションは1つのバージョンのサポートに焦点を当てることができますが、今後のNI-CANツールではすべてのバージョンが解釈されるようになります。
  • フレーム (波形以外):CANフレームは(周期的にスケジュールされていない)イベント駆動型でネットワーク上で発生するため、CANフレームは最も効率的なファイルストレージの手段となります。NI-CANは、特定のCANメッセージ識別子から取得した各チャンネル(信号)のCAN波形もサポートします。CAN データを波形として格納する効率は劣りますが、NI Test Data Exchange 形式(.tdm)などのバイナリ形式をこの目的で使用できます(詳細については、LabVIEW または DIAdem ヘルプを参照してください)。または、NI-CAN ログファイルを使用して CAN データを取得し、NI-CAN のフレーム/チャンネル変換機能を使用して 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』を参照してください。

  • 第10章 LabVIEW用フレームAPI ncReadNetMult
  • 第11章 C、ncRead、CANネットワークインタフェースオブジェクトのフレームAPI

ログファイルの最初のフレームは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ログファイルイベント情報
 

Was this information helpful?

Yes

No