NI-XNET 記錄規格

概觀

這項 NI-XNET 記錄檔規格定義了簡易的開放式二進位檔案格式,適用於儲存嵌入式網路資料 (CAN、FlexRay 與 LIN)。記錄檔主要用於 NI-XNET、NI-CAN 與 CompactRIO 範例中記錄、重播及顯示嵌入式網路資料。NI-XNET 記錄檔也在 NI-XNET Bus Monitor 等 NI-Instruments 工具中使用。

內容

附註

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

目標

NI-XNET 記錄檔規格的目標:

  • 簡單:記錄檔案中的每個事件 (框架) 的格式,皆與 NI-XNET、NI-CAN 與適用於 CAN 的 LabVIEW FPGA I/O 介面 (CompactRIO CAN 模組) 所使用的框架格式類似。如此一來,應用程式的開發作業就能更輕鬆、更有效率。
  • 開啟:本文件完整說明了 NI-XNET 記錄檔的編碼,並以範例提供原始碼。您可以將範例程式碼整合於應用程式中,不會有任何變更,這樣即可確保應用程式能使用 NI 工具正常運作。或者,您也可以加強範例程式碼,建立專屬的記錄檔格式 (含專屬的檔案副檔名)。
  • 二進制:為支援有效記錄完整的匯流排負載,此格式為二進位格式,而非人類可讀的文字。此二進位格式與 NI-XNET 的原始框架格式非常相似。此檔案格式與 NI-XNET 原始格式之間的唯一差別,在於檔案中的多位元元素會使用特定位元序列,而 NI-XNET 一律使用原生位元序列。
  • 可擴充:每個 NI-XNET 記錄檔都以標頭開頭,內含版本資訊。後續版本的這項規格將導致檔案出現更新版本。雖然您的應用可集中支援單一版本,但未來的 NI 工具仍會解譯所有版本。
  • 框架 (非波形):所有 NI 嵌入式網路軟體都能以框架形式讀取與寫入資料。框架資料代表透過連接線傳輸的原始位元。由於框架資料非常有效率,且其時序會對應至網路時序,NI-XNET 記錄檔中會使用此格式。NI-XNET 也支援從特定網路框架取得的每個訊號的波形。雖然將嵌入式網路資料儲存成波形的效率較低,但您可以使用 NI TDM Streaming 格式 (.tdms) 等二進位格式進行這項作業 (如需詳細資訊,請參閱 LabVIEW 或 DIAdem 說明)。

注意!

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

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

檔案擴充名

NI-XNET logfiles 使用的檔案副檔名為:

.ncl

所有 NI 嵌入式網路產品均假設具有此副檔名的檔案完全符合此規格。

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

即使是以看似相容的方式變更 NI-XNET 記錄檔的編碼方式,您也必須將檔案副檔名從 .ncl 變更為其他副檔名。這個新的檔案副檔名可將檔案視為不符合您個人規格的問題,因此可確保 NI 嵌入式網路軟體產品不會誤解檔案。

協定

規格會針對每個元件使用下列類型:

U8 8 位元非正負號整數

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

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

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

表頭內的 U16、U32 或 U64 類型元素會使用大位元組順序 (最有效位元先出)。在每個 Event (框架) 中,多位元元素會使用標頭的 EventIsLittleEndian 元素指定的位元順序。

在下文中,「API」一詞指的是使用以存取嵌入式網路硬體的 NI 軟體。此為 NI-XNET、NI-CAN 或 LabVIEW FPGA CAN 節點。

在 NI-XNET 原始框架格式中,U16、U32 或 U64 的元素一律使用原生位元組順序。由於原生位元順序可能與記錄檔案中的 EventIsLittleEndian 元素不同,因此,這就是 NI-XNET 格式與記錄檔格式之間的唯一差別。

頭 (Header)

標頭是記錄檔中第一個元素序列。每個記錄檔案僅有一個標頭。

元素類型說明
簽名U16所有 NI-XNET 記錄檔的固定值,用於驗證檔案的二進位編碼是否符合此規格。該值為六分數 4E49 (在 ASCII 中稱為「NI」)。
標頭大小U16標頭大小 (使用 U32 的倍數 (增加 4 位元組),包括簽名與標頭大小。
HeaderMajor版本U8標頭的 主要版本 (即 1.5 中的 1 個)。這表示變更無法與舊版相容。
HeaderUpgrade 版本U8標頭的 升級版本 (即 5 in 1.5)。這表示該變更仍與升級版本 0 相容。
EventMajor 版本U8檔案中所有事件的 主要版本。  這表示變更無法與舊版相容。
事件升級版本U8針對檔案中的所有事件進行版本升級。  這表示該變更仍與升級版本 0 相容。
EventIsLittleEndianU8

如果此元素為 0,事件中所有多位元元素 (類型 U16、U32 或 U64) 皆使用大到大位元組順序 (最有效位元先出)。若這個元素為 1,則事件中的所有多位元元元素都會使用小位元組序列 (以最低有效位元先出)。

為了達到最佳效能,建議使用原生的運算平台位元組排序。通常這對 Windows 與 PXI LabVIEW Real-Time 而言很少,對 CompactRIO 來說則是很少。

為了讓記錄檔從一個運算平台移植到另一個運算平台,建議使用大到大位元組排序。

在範例程式碼中,Open Logfile 函式會使用輸入參數來指定所需的位元組順序:native 或 big-endian。Open 函式之後,會自動處理所有位元交換作業。應用程式可使用 API 讀取/寫入框架,再使用 Read/Write Logfile 函式加以交換,且不需在兩者之間交換特定的位元組碼。

(保留)3 名 U8全部 3 位元組必須為零。這些位元組可將標頭夾住,使其大小保持 4 位元的倍數。

 

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

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

XX是 EventIsLittleEndian,也就是 0 (大到大) 或 1 (小到大)。

由於 EventIsLittleEndian 元素新增,標頭從 1.0 升級為 1.1。如果 NI-XNET 範例程式碼讀取標頭 1.0 (HeaderSize 2),則會假設該事件的 big-endian。

事件從 1.0 升級至 2.0,是因為新增了 FlexRay 的事件類型。FlexRay 框架大小不同於先前的 CAN 框架。這項升級也反映出「小到小」(0 始終是大到小)。如果 NI-XNET 範例程式碼讀取事件 1.0,則會假設所有事件均為 24 位元的 CAN 框架,且所有元素皆為大寫字元。

事件

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

記錄檔中的 每個事件一律以以下的 24 位元基本單位開頭。接著的基本單位為零或更多 8 位元酬載單位。FlexRay 框架最多可容納 254 個酬載位元,因此需要額外的酬載單位。

5.1.基本組件

元素類型說明
時間戳記U64

每 100 毫微秒漸進的 64 位元時間戳記。時間戳記格式可以是絕對 (日期/時間) 或相對 (以零為準)。

針對 NI-XNET,時間戳記格式一律為絕對格式。在 LabVIEW 中進行開發時,NI-XNET 框架中的時間戳記為 LabVIEW 時間戳記類型,範例程式碼會將其轉換為 U64 做為檔案 I/O 的一部分。以 C/C++ 進行開發時,NI-XNET 框架中的時間戳記為 U64 (與此元素相同)。

針對 NI-CAN,預設時間戳記格式為絕對格式,但如有需要,您可以設定相對時間。在 LabVIEW 中進行開發時,NI-CAN 框架內的時間戳記為浮點 (DBL) 秒,範例程式碼會將其轉換為 U64 做為檔案 I/O 的一部分。針對 C/C++ 中的 NI-CAN 開發,NI-CAN 框架中的時間戳記為 2 個 U32 元件,順序相當小。

在 LabVIEW FPGA 開發中,時間戳記格式一律相對。時間戳記是依序幾分別使用的 2 個 U32 項目。

識別器U32

框架識別碼.

當 Type 指定 CAN 框架時,位元 29 (hex 20000000) 表示 CAN 識別元格式: set for extended, clear for standard。如果位元 29 為空白,則較低的 11 位元 (0-10) 會包含 CAN 框架識別元。如果設定了位元 29,則較低的 29 位元 (0-28) 會包含 CAN 框架識別元。

當 Type 指定 FlexRay 框架時,較低的 16 位元會包含插槽號。

所有未使用位元皆為零。

類型U8

事件 (框架) 類型。

此元素指定框架的基本類型。識別元件、標記與資訊元素的解釋,各類型各不相同。

針對 NI-XNET 開發,這會對應至 CAN 與 FlexRay 框架中的 Type 元素。

在 LabVIEW 中開發 NI-CAN 時,這會對應 CAN 與 LIN 框架中的 IsRemote 元素。

使用 C/C++ (或其他語言) 開發 NI-CAN 時,這會對應於 CAN 與 LIN 框架中的 FrameType 元素。

在 LabVIEW FPGA 開發中,這會對應至 CAN 框架中的 Type 元素。

此元素的上 4 位元指定協定 (六分數):

  • 0 CAN
  • 1 LIN
  • 2 FlexRay
  • 3D 保留 (未使用)
  • E 無 (不與協定相關)
  • F 客制化 (僅限記錄檔中的特定客戶類型)

此元件的下 4 位元為特定類型。

六十位元中最常見的類型為 00 (CAN 資料框架)、01 (CAN 遠端框架)、12 (LIN 完整框架)、20 (FlexRay 資料框架) 與 21 (FlexRay null 框架)。請參閱 API 使用說明,了解其他類型。

自訂類別 (上 4 位元的 F) 是專為記錄檔案所設計。除了將此記錄檔格式用於嵌入式網路框架之外,您可能還需要編碼其他資料,例如類比或數位量測,或是按下人機介面按鈕的時間。建立此類客制化事件時,請務必注意,未來的 API 版本不會從 Read 函式傳回該類型。此外,您可能會想讓 API Write 函式忽略這些客制化事件。雖然所有從 00 到 EF hex 的型別皆可由 NI 產品使用,但 F0 到 FF 型別可供您客制化。使用上述客制化類型時,NI 產品會忽略事件。識別元、標記、資訊與酬載的定義,由您自行決定。如果您打算與其他公司交換記錄檔,建議使用不同於 .ncl (或其他的 Signature) 的檔案副檔名,以避免不同客制化類型定義之間的衝突。

除了客制框架類型與 Info 元件的上 2 位元之外,您必須假設事件的所有其他位元均為 NI 產品的後續使用所保留。針對目前未使用的位元 (即識別元件的 30 位元與 31 位元),API Read 函式一律會傳回 0,而您一律必須針對傳遞至 API Write 的框架使用 0。

標誌U8

八個布林標記,可符合框架類型。

此元素存在於 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 位元專為客制化使用,就像 Type 元件的 Custom 範圍一樣。這 2 個客制位元可讓您將資訊新增至 CAN、LIN 與 FlexRay 框架 (NI 範圍內的類型)。API Read 會一律將 2 個客制化位元回傳為 0,但在寫入記錄檔之前,您可以使用您自己的位元 OR。若要從記錄檔案讀取框架,並將其傳遞至 API Write 函式,則 API 將忽略這 2 個客制化位元中的任何值。

PayloadLengthU8

PayloadLength (酬載長度) 表示 Payload 中的有效資料位元組數。

針對所有 CAN 與 LIN 框架,酬載長度不可超過 8。由於此基本裝置一律包含 8 位元的負載資料,因此,整個 CAN/LIN 框架已包含在基本裝置中,且沒有其他負載單位。

針對 FlexRay 框架,PayloadLength 範圍為 0 到 254 位元組。如果酬載長度為 0 到 8,則只有基本單位可存在。若酬載長度為 9 或更高,則有一或多個酬載單位會依循基本單位。額外的酬載單位可透過 8 位元的漸進方式提供,以最佳化 DMA 傳輸效率。例如,如果 PayloadLength 為 9,則位元 0-7 位元位於基本單元的 Payload 中,位元 8 位元位於下一個 payload 單元的第一位元,而下一個 payload 單元的最後七位元位元則會遭到忽略。

換句話說,原始資料中的每個框架長度都有可能不同。每個框架的大小 (位元) 皆可使用虛擬程式碼計算:

U16 FrameSize; // 最大型 FlexRay 訊框最多 272 位元組
  框架大小 = 24; // 24 位元基本單位
  if (付載長度 > 8)
    框架大小 = 框架大小 +
      (U16)(付載長度 - 1) 和 0xFFF8;

虛擬程式碼中的最後一行會扣除 1 個,並中斷為最近的 8 倍數 (使用位元設定 AND)。如此會新增額外酬載單位所需的位元組,舉例來說,在 9 到 16 的酬載長度中,需要額外使用 8 位元組的酬載單元。

範例程式碼負責處理此變數長度框架編碼的詳細資料。

有效載荷8 名 U8此元素一律在記錄檔案中使用 8 位元組,但有效位元組數由 PayloadLength 決定。

 

5.2.單位

額外的負載單元 (0 到 31) 數量,由基本單元的負載長度元素決定。

元素類型說明
有效載荷8 名 U8此元素一律在記錄檔案中使用 8 位元組,但有效位元組數由 PayloadLength 決定。

 

更多資訊 

NI-XNET Logfile 規格也會隨同 NI-XNET 一起安裝 (通常位於 C:\Program Files\National Instruments\NI-XNET\Documentation)

Was this information helpful?

Yes

No