雖然 NCL 記錄檔格式可為相容性提供支援,但建議新應用使用 TDMS 記錄檔格式。如需詳細資訊,請參閱「TDMS 中的嵌入式網路資料」。
以 NI-XNET Logfile Specification 建立的記錄檔無法搭配針對 NI-CAN Logfile Specification 設計的應用使用。
NI-CAN 記錄檔可搭配以 NI-XNET 記錄檔規格設計的應用使用。
NI-CAN Logfile Specification 的設計旨在滿足下列特性:
規格會針對每個欄位使用下列類型:
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 硬體與軟體手冊:
強烈建議記錄檔案中的第一個框架包含 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 記錄檔案事件資訊