將 NI-CAN 應用移植到 NI-XNET

概觀

CAN、LIN 與 FlexRay 介面的 NI-XNET 系列,整合速度更快的 CAN、LIN 與 FlexRay 介面,並包含 NI-XNET 驅動程式軟體。新的 NI-XNET 介面可透過如 Series 2 PCI/PXI/PCMCIA 介面的舊款 NI-CAN 產品,達到更高效能、更為簡單易用,且可長期支援的優點。

內容

為了以 NI-XNET CAN 與 FlexRay 介面達到新一代的效能與簡單易用性,NI 針對 NI-XNET 產品設計了新款 API。NI 發現目前大型應用的安裝架構,均是以較舊的 NI-CAN API 所撰寫,且將必須長時間維護這些應用。

 

為了能簡化 NI-CAN 撰寫的應用程式轉為 NI-XNET,並協助您運用 NI-XNET 介面的全新功能,NI-XNET 驅動程式包含了 NI-CAN 相容層,可在驅動程式層級模擬 NI-CAN 函式呼叫。由於此功能已安裝於驅動程式層 (Driver level),因此大多數以 NI-CAN 所撰寫的應用,均可搭配 NI-XNET 立刻進行作業。然而,在搭配 NI-XNET 介面之前,必須先了解此 2 種驅動程式的相異處。

 

此篇技術文件將說明應如何使用 NI-CAN 相容性函式庫,以透過新的 NI-ZNET 硬體建置 NI-CAN 應用。文中也將說明潛在的相容性問題,並將相似的 NI-CAN 概念轉換為 NI-XNET API。

 

如需深入了解 NI-CAN 通道 API 的基本概念,請參閱 NI-CAN 通道 API。

安裝相容性函式庫 (Compatibility Library) 的支援功能

若要使用 NI-XNET 著手撰寫新應用,則不需要相容性層。只有在要搭配 NI-XNET 裝置使用現有的 NI-CAN 應用程式時才需要這項功能。

相容性函式庫支援 CAN 與 LIN 介面卡與模組。它支援需要收發儀連接線的車輛多協定介面裝置與模組,例如 PCIe-8510、PXIe-8510 與 NI 9860。由於沒有 NI-CAN 架構的同級產品,因此也不支援 C 系列 LIN 模組。

若要讓現有應用進行作業,則必須安裝 NI-XNET 與 NI-CAN 驅動程式。NI-XNET 安裝組合,包含可讓相容性函式庫正確運作的所有必要元件。如需詳細說明,請參閱「安裝 NI-XNET Compatibility Library for NI-CAN」。

NI-CAN

一般來說,NI-CAN API 與 舊款 CAN 硬體 (包含 Series 2 CAN 介面) 相關。NI-XNET 則為新一代 NI-XNET CAN、LIN 與 FlexRay 介面的主要驅動程式。NI-XNET 介面的新應用,均使用了 NI-XNET 驅動程式與 API。 

相容性

若目前為使用 NI-CAN 的應用,則 NI 提供相容性函式庫,可協助程式碼搭配使用新款 NI-XNET CAN C 系列、PCI 與 PXI 介面。相容性函式庫的功能適用於 NI-CAN API,不適用於 NI-XNET。 如需有關相容性函式庫功能的詳細資訊,請參閱《NI-CAN 硬體與軟體手冊》。

轉換

若現有應用是使用 NI-CAN,且欲開始啟用新的 NI-XNET CAN C 系列、PCI 與 PXI 硬體,則接著應應將程式碼轉至 NI-XNET。雖然 NI-XNET 統一了早期 NI-CAN API 的多項概念,但是主要功能仍相似。下表交叉參照 NI-CAN 術語與類比 NI-XNET 術語。

注意: 如需詳細資訊,請參閱 USB-8472/73/76 CAN 介面的 遷移選項

NI-CAN 用詞NI-XNET 用詞Comment
CANdb 檔案資料庫NI-XNET 支援的資料庫檔案格式遠高於 NI-CAN Channel API、FIBEX、.DBC 與 .NCD。
訊息框架「框架」是指透過匯流排傳輸的位元。這項術語用於 CAN 與 FlexRay 等標準。
通道訊號「訊號」是 FIBEX 等標準所使用的產業術語。
通道 API 工作工作階段 (訊號 I/O)不同於 NI-CAN,NI-XNET 支援同步使用通道 (訊號) I/O 與框架 I/O。
框架 API CAN
物件 (隊列
長度零)
工作階段 (框架 I/O 單點)NI-CAN CAN 物件在同一個物件中提供輸入 (讀取) 與輸出 (寫入)。為了提供更好的控制功能,NI-XNET 會針對每個方向提供不同的物件。若方向的 NI-CAN 接聽時間為零,則為類比 NI-XNET Frame I/O 單點。
框架 API CAN
物件 (隊列
長度非零)
工作階段 (框架 I/O 接聽 (Frame I/O Queued)如果某個方向的 NI-CAN 队列長度非零,那就與 NI-XNET Frame I/O Queued 類比。
Frame API
網路介面
物件
工作階段 (框架 I/O 串流)NI-CAN 網路介面物件在同一個物件中提供輸入 (讀取) 與輸出 (寫入)。為了提供更好的控制功能,NI-XNET 會針對每個方向提供不同的物件。
介面*介面NI-CAN 從 CAN0 開始使用介面名稱,但 NI-XNET 則從 CAN1 (或 FlexRay1) 開始使用。
定期循環NI-CAN 使用「週期」一詞,但 NI-XNET Database Editor 與 NI-XNET 屬性節點則使用「循環」。

表 1.NI-CAN 詞彙與 NI-XNET 的對應詞彙

下圖特別說明 NI-XNET 與 NI-CAN 之間的編號差異。上面「CAN0」所對應的 NI-CAN 通訊埠名稱,卻是使用 PCI-8513 介面卡的第一組通訊埠。而相同通訊埠在 NI-XNET API 中則為 CAN1。當然亦可將 NI-CAN 通訊埠重新命名為 NI-XNET 通訊埠的相同名稱,且不會發生任何問題。

圖 1.NI-XNET 與 NI-CAN 之間的編號差異

注意: 若已安裝 NI-CAN 相容層,則 NI Measurement & Automation Explorer (MAX) 將顯示該組介面卡 兩次。由於此 2 種驅動程式 (NI-CAN 與 NI-XNET) 均將對 MAX 回報該組介面卡,所以仍屬於正常現象。

下圖的狀況相似,只是使用即時 (RT) 系統。NI-XNET 裝置會在 MAX 中的 RT 系統中顯示,但 NI-CAN 透過相容性層使用的 NI-XNET 裝置,僅會在 NI-CAN RT 硬體設定工具下顯示。您可以看到,NI-XNET 中的 CAN1 是與 NI-CAN 中的 CAN0 相同的連接埠。

圖 2. 檢視用於 NI-XNET 的 CAN 介面與相容性層會有不同的檢視畫面。

若要開啟 NI-CAN RT 硬體設定視窗,請啟動 MAX,並選擇「工具」(Tools) »「NI-CAN »「RT 硬體設定」(RT Hardware Configuration),然後提供 RT 系統的 IP 位址。

不相容程式碼

雖然 NI-XNET 相容性函式庫 (適用於 NI-CAN) 的 NI-XNET 相容性函式庫,可確保基本功能運作無虞,但是因為 NI-CAN 平台的硬體特定功能或核心不相同,所以 NI-CAN 與 NI-XNET 的函式庫往往無法完整對應。

以下列舉幾項主要不相容函式,並附帶相關替代方案。如需完整清單,請參閱適用於 2.7 版或更新版本的 NI-CAN 硬體與軟體手冊。 

1. 自動遠端框架 (Remote Frame) 產生回應

雖然 NI-XNET 硬體即提供此功能,但是新架構並無法保有其相容性。若應用需要此功能,則必須將程式碼升級為可使用 NI-XNET API。如需深入了解如何使用 NI-XNET API 處理遠端框架,請參閱 NI-XNET 硬體與軟體手冊。 

2. 外接收發器

部分 NI-XNET 硬體均提供這項功能。PCI-8513 與 PXI-8513 型號是 XNET 硬體的範例,可選擇使用外部收發儀。

3.主要基率

NI-XNET 介面可自動偵測時脈輸入頻率並進行同步化,且不需使用者提供任何參數。由於此程序完全自動化,因此不需選擇是否變更主要時基率。NI-XNET 介面並支援多個同步化時脈率 (1、10 MHz 與 20 MHz),亦不需更改主要時基。而匯出作業亦可使用 1 MHz 與 10 MHz 速率。 

 4. 記錄通訊作業錯誤警示

NI-XNET 提供記錄匯流排錯誤的新方法。在此之前均透過匯流排狀態編碼 (Bus state encode) 以記錄 CAN 框架,而現在僅需讀取匯流排狀態:


圖 3. 現在可以觀察匯流排狀態即可查看匯流排錯誤。

此功能為 NI-XNET API 原生功能,無法與 NI-CAN 相容。

5. 時間戳記 (Timestamp) 格式

NI-XNET 目前僅使用絕對 (Absolute) 時間戳記格式。然而,函式仍可取得特定事件的時間戳記。透過這些時間戳記,不需以其他格式重新擷取資料,亦可使用不同的參考計算出「相對 (Relative)」的時間。


圖 4. NI-XNET 使用絕對時間戳記,但仍有其他方法可取得相對時間戳記。

若需要此項功能,則必須將程式碼變更使用 NI-XNET API。

6. 時間戳記傳輸 (Timestamp Transmit) 與時間回復 (Timeline Recovery)

此功能並非 NI-XNET 1.0 提供,而是 NI-XNET 1.1 所提供。這項功能現在稱為「CAN 重播」。

圖 5. 使用框架輸出串流即可設定 CAN 重播。

7. RTSI 事件

NI-XNET 的 RTSI 功能,可同步化時基與開始觸發器 (Start trigger)。但是無法於 RTSI 脈衝上設定事件 (亦指傳輸 CAN 框架)。亦無法根據 CAN 事件設定 RTSI 事件。

將 NI-CAN 變更為 NI-XNET

您可能需要修改應用,以使用 NI-XNET API,有許多原因。下一節將說明如何變更 NI-CAN 程式碼,以使用 NI-XNET API。

此篇技術文件將協助說明從 NI-CAN 轉為 NI-XNET 的類似概念,以利轉換程式碼。但無法涵蓋所有可能的應用。若需要轉換程式碼的任何部分協助,請聯絡 NI

Frame API

開啟介面

在開啟 NI-CAN 介面之前,必須先進行設定。在 NI-XNET 中,必須先在介面上建立 1 個工作區段 (Session),接著透過屬性節點變更區段中的任何屬性。此即為許多其他 NI API 所使用的模型,包含 NI-DAQmx 在內。 

圖 6. 在 NI-XNET 與 NI-CAN 中,設定匯流排屬性的方式不同。

讀取框架 (Frame)

NI-CAN 與 NI-XNET 中的框架讀取作業相似。


圖 7. 在兩個 API 中讀取框架的程式碼非常相似。

由於效能不斷提升且有新的 NI 裝置驅動 DMA 引擎架構問世,目前已不需要特別查詢 NI-XNET 裝置以了解可用的框架數量。此項特性亦為 NI-CAN 的必備效能要件。此功能仍在 NI-XNET 中使用,但不再需要用來讀取所有可用的框架 ( nxRead 函式中的 1 個輸入會傳回所有可用的框架)。

圖 8. 使用 NI-XNET 可更輕鬆地查詢可用框架數量。

框架格式具備 NI-CAN 與 NI-XNET 中的相似資訊,但其呈現方式極為不同:

圖 9. 每個 NI-CAN 與 NI-XNET 叢集都包含類似的框架資料。

撰寫單一框架

NI-XNET 中的 nxWrite (Frame CAN).vi,即使用框架陣列做為輸入。因此,若要傳送單一框架,則必須建立 1 組框架的陣列。

圖 10.  在 NI-XNET 中傳送框架資料時,必須輸入一組資料。

撰寫框架

NI-XNET 透過陣列長度得知應撰寫的框架數量。

圖 11. 用於傳送框架的 NI-CAN 與 NI-XNET 也提供類似函式呼叫。

撰寫週期性框架 (Periodic Frame)

若要在 NI-CAN 中以 Frame API 撰寫週期性框架,則必須為各組框架設定所要傳送或接收的物件。NI Series 2 CAN 介面則限制為 49 組物件。 

圖 12.  在 NI-CAN 中傳送週期框架時,必須使用個別函式呼叫設定物件。

若要設定 NI-XNET 中的各組週期性框架,則方法略有不同。由於 NI-XNET 緊密整合了訊號與框架資料庫,若要能輕鬆利用 NI-XNET 中的週期性框架,則必須使用 FIBEX 資料庫檔案以說明網路所使用的框架。當使用 FIBEX 資料庫時,NI-XNET 驅動程式將自動設定並處理週期性框架,且不會與應用產生額外的互動。 

舉例來說,若要於資料庫中設定週期性 (亦為 NI-XNET 中的「Cyclic」) 框架,亦必須考慮仲裁 (Arbitration) ID、酬載 (Payload) 長度,與期間 (Period)。一旦設定並儲存完畢,應用即可透過單點工作區段,以傳輸或接收此框架。I/O 控制功能可動態載入資料庫的所有框架,因此可輕鬆選擇應用中的框架。使用者必須設定別名 (Alias),以告知 NI-XNET 所應使用的資料庫,讓此項功能確實運作。下個章節將接著說明。 

圖 13. 在 NI-XNET 中傳送週期框架的作業可大幅簡化。

當開啟工作區段時,NI-XNET 驅動程式將透過資料庫讀取所有設定。接著將於驅動程式與 NI-XNET 韌體中,設定週期性 (Cyclic) 的傳輸及/或接收作業。而使用者僅需更新應用數值,NI-XNET 即可於下個週期中自動傳輸最新數值。NI-XNET 亦具備「Queued」工作區段,可查詢多項數值。

使用訊號資料庫的主要優點,即是程式碼的可維護性 (Maintainability)。在更新資料庫時,亦將自動更新程式碼,且不需更改程式碼,即可追蹤仲裁 ID、傳輸率、位元定義,還有更多的變更情況。若要變更參數,則僅需變更資料庫檔案即可。程式碼則是不需任何變動。

NI-XNET 的函式則是可透過程式設計的方式,針對從資料庫檔案所載入的數值進行變更。如此將不會變更資料庫檔案所寫入的實際數值,而僅將改變由 NI-XNET 驅動程式所載入的數值。

圖 14.  您可以使用初階函式,設定在 NI-XNET 中傳送週期框架的作業。

若使用者不想要資料庫檔案,且想在執行時間設定所有數值,亦可建立「In memory」資料庫。如此一來,即可透過程式設計的方式開發完整網路組態,且於應用中運作無虞。您可以查看位於 說明»尋找範例 (Hardware Input and Output»CAN»NI-XNET»Databases (Editing and Managing) 下方的 CAN Dynamic Database Creation.vi 範例。

其他框架 API 函式

許多 NI-CAN Frame API 範例均具備相似的 NI-XNET 範例。 

通道 API 

編輯資料庫檔案

目前主要共有 2 項技術可編輯資料庫檔案:執行前或執行期間。若要在 NI-CAN 執行作業之前,編輯資料庫檔案,則必須使用 MAX 中的資料庫編輯工具。NI-XNET 可透過獨立的資料庫編輯工具,移動所有的資料庫編輯作業。可從 Start» All Programs» National Instruments» NI-XNET Database Editor 啟動資料庫編輯功能。

圖 15.  NI-XNET Database Editor 是一款獨立式工具,可用來編輯 CAN 資料庫。

如需深入了解 NI-XNET 資料庫編輯器,請參閱「FIBEX 簡介」與「NI-XNET 資料庫編輯器」技術文章。

NI-XNET 亦可透過程式設計的方式,編輯 FIBEX 資料庫檔案。透過相關函式,即可於應用中建置客制化的資料庫操作工具。如需查看 NI LabVIEW 軟體隨附範例,請參閱 Help»Find Examples ( 說明) 並瀏覽 Ha rdware Input and Output»CAN»NI-XNET»Databases (Editing and Managing) (硬體輸入與輸出) 

輸入輸出

在 NI-CAN 中,使用者必須將應用指定為硬碟上的 .DBC 或 .NCL 檔案。而 NI-XNET 中,必須在執行應用之前,先行為資料庫檔案 (.DBC、.NCL,或 FIBEX .xml) 新增別名。亦有多個方法可達成此項作業。您可以開啟名為 CAN Signal Input Single Point.vi 的範例,該範例位於 Hardware Input and Output»CAN»NI-XNET»Intro to Sessions»Signal Sessions。對訊號清單按下滑鼠右鍵,點選「Browse for Database File」,再選擇磁碟上的資料庫檔案。NI-XNET 驅動程式將自動為此資料庫建立別名,讓使用者可輕鬆再次選擇。

圖 16.  在 NI-XNET 中選擇資料庫,即可在應用中參照資料庫。

接著 NI-XNET I/O Control 將自動讀取資料庫檔案,並產生所有訊號名稱。如此即可輕鬆選出應用所需的訊號。

圖 17.  控制項會根據資料庫中的可用訊號自動更新。

下圖則針對 NI-CAN 與 NI-XNET 的單點通道/訊號寫入作業,比較其程式圖。讀取作業較為相似,且此 2 組驅動程式均已提供範例。 

圖 18.  傳送單點資料的方式與 NI-CAN 與 NI-XNET 相似。

波形輸入輸出

NI-CAN 與 NI-XNET 波形資料的讀取/寫入作業亦極為相似,且此 2 組驅動程式亦具備比較範例。

圖 19.  兩個 API 都類似的波形讀寫功能。

其中一個差異在於 NI-XNET 會使用預設取樣率為 1000。您可以使用屬性節點,輕鬆變更取樣率。

圖 20.  波形的重新取樣率可透過屬性設定。

結論

 

NI-CAN 模式

NI-CAN 取樣率NI-XNET 模式附註
輸入0訊號輸入 (訊號輸入 Single-Point) 模式無 (無附加屬性)
輸入>0訊號輸入 (Signal Input Waveform) 模式使用 NI-CAN SampleRate 設定 Session > Resample Rate 屬性。
輸出0訊號輸出 XY針對每個框架,使用 NI-XNET 資料庫 API 將 CAN > Timing Type to Event Data 與 CAN > Transmit Time (傳輸時間) 設為零 (無反彈)。
輸出>0訊號輸出、波形針對每個框架,使用 NI-XNET 資料庫 API 設定 CAN > Timing Type to Cyclic Data,並設定 CAN > Transmit Time to the NI-CAN 1/SampleRate
輸出/近期>0訊號輸出單點針對每個框架,使用 NI-XNET 資料庫 API 設定 CAN > Timing Type to Cyclic Data,並設定 CAN > Transmit Time to the NI-CAN 1/Sample Rate。
時間戳記edinput不適用訊號輸入、XY無 (無附加屬性)

 

表 2. 下表列舉 CAN 通訊的 NI-CAN 與 NI-XNET 取樣率基本差異。

磁碟讀取資料庫

在 NI-CAN,可直接於磁碟上使用資料庫。 而在 NI-XNET,一般均必須手動為檔案建立別名,以於應用中使用 NI-XNET I/O Control。然而,若使用者要分配應用或模擬 NI-CAN 動作,則可透過程式設計的方式,於磁碟上建立檔案的資料庫別名。可點選 Managing Local Databases.vi 範例,位置為:Hardware Input and Output»CAN»NI-XNET»Databases (Editing and Managing)。

NI-XNET 的相容簡化轉換作業

針對 NI-CAN 所提供的 NI-XNET 相容層 (Compatibility layer),可大幅簡化 NI-CAN 程式碼的轉換作業,以完整利用新一代的 NI-XNET CAN 與 FlexRay 介面。姑且不論微小差異,當於 NI-CAN 硬體上搭配使用相容層時,大多數的 NI-XNET 應用函式幾乎不需進行修改。 

Was this information helpful?

Yes

No