NI-CAN 記錄規格

概觀

此 NI-CAN 記錄檔規格定義的 CAN 資料儲存簡易、開放的二進位檔案格式。記錄檔的主要用途是在 NI-CAN 與 CompactRIO 範例中用於記錄、重播與顯示 CAN 資料。NI-CAN 記錄檔也會用於匯流排監控等 NI 儀器 CAN 工具中。

內容

注意!

雖然 NCL 記錄檔格式可為相容性提供支援,但建議新應用使用 TDMS 記錄檔格式。如需詳細資訊,請參閱「TDMS 中的嵌入式網路資料」。

NI-XNET Logfile Specification 建立的記錄檔無法搭配針對 NI-CAN Logfile Specification 設計的應用使用。

NI-CAN 記錄檔可搭配以 NI-XNET 記錄檔規格設計的應用使用。

NI-CAN 記錄檔案特性

NI-CAN Logfile Specification 的設計旨在滿足下列特性:

  • 簡單:記錄檔案中的每個事件 (框架) 的格式,都與 NI-CAN 所使用的框架格式,以及適用於 CAN 的 LabVIEW FPGA I/O 介面 (CompactRIO CAN 模組) 類似。如此一來,應用程式的開發作業就能更輕鬆、更有效率。
  • 開啟:本文件完整說明了 NI-CAN 記錄檔的編碼,並以範例提供原始碼。您可以將範例程式碼整合於應用程式中,不會有任何變更,這樣即可確保應用程式能使用 NI 工具正常運作。或者,您也可以加強範例程式碼,建立專屬的記錄檔格式 (使用專屬的檔案副檔名)。
  •   二進位:為支援有效記錄完整的匯流排負載,此格式為二進位格式,而非人類可讀的文字。
  • 可擴充:每個 NI-CAN 記錄檔案都會從包含版本資訊的標頭開始。後續版本的這項規格將導致檔案出現更新版本。雖然您的應用可專注於支援單一版本,但未來的 NI-CAN 工具會解譯所有版本。
  • 框架 (非波形):由於 CAN 框架會以事件導向的方式 (非循環排程) 於網路上發生,因此 CAN 框架可提供最有效率的檔案儲存方式。NI-CAN 也支援從特定 CAN 訊息識別碼取得的每個通道 (訊號) 的 CAN 波形。雖然以波形格式儲存 CAN 資料的效率較低,但您可以使用如 NI Test Data Exchange (.tdm) 等二進位格式進行這項作業 (如需詳細資訊,請參閱 LabVIEW 或 DIAdem 說明)。或者,您也可以將 NI-CAN 記錄檔用於 CAN 資料,然後使用 NI-CAN 的框架對通道轉換功能,將 CAN 框架轉換為波形以供顯示。
  • Big-endian:多位元整數的順序是大到大 (最重要位元先出)。

檔案擴充名

所有 NI-CAN 記錄檔案均使用的 檔案副檔名為:

.ncl

所有 NI-CAN 產品均假設具有此副檔名的檔案完全符合此規格。

NI 提供原始碼以存取 NI-CAN 記錄檔案。若您在未經變更的情況下將原始碼整合至應用程式,則可繼續使用該應用程式所用的檔案。

即使是以看似相容的方式變更 NI-CAN 記錄檔案的程式碼,您也必須將檔案副檔名從 .ncl 變更為其他副檔名。這個新的檔案副檔名可將您的檔案視為符合您自己的規格,因此可確保適用於 CAN 的 NI 軟體產品不會誤判該檔案。

協定

規格會針對每個欄位使用下列類型:

            U8 8 位元非正負號整數

            U16 16 位元非正負號整數、大到大位元,在檔案中以 16 位元偏移進行對齊

            U32 32 位元非正負號整數,大到大,在檔案中以 32 位元偏移進行對齊

            U64 64 位元非正負號整數、大到大,在檔案中以 64 位元偏移進行對齊

資訊

標頭是記錄檔案中的第一個欄位序列。每個記錄檔案僅有一個標頭。

 

 欄位

類型

說明

 簽名

 U16

所有 NI-CAN 記錄檔案的固定值,用於驗證檔案的二進位編碼是否符合此規格。該值為六分數 4E49 (在 ASCII 中稱為「NI」)。

 標頭大小

 U16

標頭大小為 u32 的倍數 (以 4 位元組為增量),包括簽名與標頭大小。NI-CAN 記錄檔可支援使用 u32 的陣列進行剖析。

 HeaderMajor版本

 U8

標頭的主要版本 (即 1 in 1.5)。這表示變更無法與舊版相容。

HeaderUpgrade 版本 

 U8

標頭的升級版本 (即 5 in 1.5)。這表示該變更仍與升級版本 0 相容。

 EventMajor 版本

 U8

檔案中所有事件的主要版本。  這表示變更無法與舊版相容。

 事件升級版本

 U8

檔案中所有事件的升級版本。  這表示該變更仍與升級版本 0 相容。

表 1:  NI-CAN 記錄檔頭資訊

針對此規格,標頭一律以六分數為單位,包含下列位元組序列:

4E 49 00 02 01 00 01 00

活動資訊

標頭之後,NI-CAN 記錄檔案將包含零個或更多事件。 每個事件通常都代表單一的 CAN 框架,但也可編碼其他資訊,例如錯誤或觸發。

針對這個版本的規格,記錄檔中的每個事件大小皆相同。這個固定大小為 24 位元組 (如下表所示)。標頭大小和每個事件的大小都是固定的,因此通常可以根據檔案大小來判斷事件的數量。

在後續內容中,Net Interface Read 函式一詞指的是網路介面的 NI-CAN Frame API Read 函式。視您所使用的應用開發環境而定,請參閱下列任一範疇的 NI-CAN 硬體與軟體手冊:

  • 第 10 章,框架 API for LabVIEW, ncReadNetMult.vi
  • 第 11 章,框架 API for C、ncRead、CAN 網路介面物件

強烈建議記錄檔案中的第一個框架包含 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 框架中的時間戳記為兩個 U32 欄位。由於 NI-CAN 中的每個 U32 都會以 little-end 格式儲存 (先是最低有效位元組),因此您必須在存取記錄檔前先替換位元組順序。

在 LabVIEW FPGA 開發中,時間戳記是 2 個 U32 欄位。LabVIEW 的二進位檔案 I/O 函式使用大到大,因此您可以輕鬆存取最高有效率的 U32 與最低有效率的 U32。

識別元

U32

CAN 框架識別碼。

位元 29 (hex 0x20000000) 表示 CAN 識別元格式: Set for extended, Clear for standard。

位元交換的慣例,與時間戳記的每個 U32 部分所說明的技術相符。

類型

U8

事件類型 (框架)。

這個欄位為 0 表示 CAN 資料框架,1 表示 CAN 遠端框架。NI-CAN 支援額外的數值。

在 LabVIEW 中開發 NI-CAN 時,這會對應至 CAN 框架中的 IsRemote 欄位。有關 CAN 框架以外的類型,請參閱「網路介面讀取函式」。

針對使用 C/C++ (或其他語言) 開發 NI-CAN,這會對應至 CAN 框架中的 FrameType 欄位。有關 CAN 框架以外的類型,請參閱「網路介面讀取函式」。

針對 LabVIEW FPGA 開發,這會對應至 CAN 框架中的 Type 欄位。LabVIEW FPGA 僅支援 CAN 資料框架與 CAN 遠端框架。

InfoA

U8

用於認證類型的資訊。

沒有適用於 NI-CAN 的此資訊。

此資訊適用於 LabVIEW FPGA,但目前並未使用 (將於未來預留)。

讀取記錄檔時,應忽略此欄位。撰寫記錄檔時,您必須將此欄位設為零。

InfoB

U8

用於認證類型的資訊。

您應將此欄位解譯為與 InfoA (忽略) 相同。

資料長度

U8

針對 CAN 資料框架,DataLength 表示資料中的有效位元組數。針對 CAN 遠端框架,DataLength 會指出所要求的位元組,而非資料中的有效位元組數。針對所有其他框架類型值,DataLength 會指出資料中的有效位元組數。

資料

U8

此欄位一律包含記錄檔案中的 8 位元組,但有效位元組數通常是由 DataLength 決定。

表 2:  NI-CAN 記錄檔案事件資訊
 

Was this information helpful?

Yes

No