LabVIEW生成.NET的DLL——C#下呼叫NI資料採集裝置功能的一種方法 [原創www.cnblogs.com/helesheng]

helesheng發表於2022-01-12

LabVIEW是NI公司的資料採集裝置的標準平臺,在其上呼叫NI-DAQmx驅動和介面函式能夠高效的開發資料採集和控制程式。但作為一種圖形化的開發語言,使用LabVIEW開發涉及演算法和流程控制的大型應用程式還是顯得力不從心。因此在C#和VB等.net開發工具中實現NI-DAQmx驅動的靈活呼叫,對於資料採集裝置的廣泛應用意義重大,常見的方法有:

1、使用NI公司為Visual Studio提供的整合式開發套件Measurement Studio,它帶有的ActiveX和.NET控制元件,以及物件導向的資料採集硬體介面。但由於Measurement Studio屬於付費軟體,成本較高,且進一步造成Measurement Studio的開發資源不多見,開發難度較大。

2、LabVIEW具有建立.NET的DLL的功能,可以把LabVIEW下開發的資料採集卡驅動軟體打包成可供Visual Studio .NET方便呼叫的動態連結庫,大大降低資料採集軟體開發的難度和成本。

在使用這一功能的同時,我還意外的發現在LabVIEW環境下使用MathScript RT節點,通過Matlab的M語言開發的演算法也能夠封裝在DLL中,為.NET下的演算法開發提供一種“捷徑”。以下內容歡迎轉載,但請註明出處: https://www.cnblogs.com/helesheng

一、在LabVIEW中開發DLL

開啟LabVIEW,建立一個專案。

 

 

在彈出的專案瀏覽器視窗中重新命名專案名稱為“測試DLL專案”,右鍵單擊專案瀏覽器中的“我的電腦”順序選擇“新建”->“VI”,建立一個名為“單次採集有限樣本數.vi”的VI。

 

 在該VI的程式框圖介面輸入以下資料採集卡採集資料的程式。實現用10KSPS的速度,從DEV1裝置的通道0(ai0)連續採集指定點數的資料,並將之顯示在波形圖控制元件上。其中採集資料點數通過數值輸入控制元件“samples per channel”在前皮膚輸入得到。為方便實現DLL輸出介面,下圖的程式框圖還將取樣結果輸出到了名為data的顯示控制元件陣列中。

 

 右鍵單擊前皮膚視窗中單擊右上角的連線端子圖示,在彈出選單中選擇“模式”,以及一個輸入端子和一個輸出端子的模式(輸入和輸出端子的數量可以根據需要DLL封裝的函式的需要確定)。

 

 在工具選板中選擇“連線”工具將連線端子圖示左側的輸入端子連線到前皮膚上的數值輸入控制元件“samples per channel”,圖示右側的輸出端子連線到前皮膚上的數字顯示控制元件“data”。連線端子的顏色將隨所連線控制元件的資料型別發生改變。

在專案瀏覽器中右鍵單擊“程式生成規範”選擇新建->.NET互操作程式集。

 

在彈出的互操作程式集屬性頁面中選擇左側類別中的“資訊”,填寫DLL相關資訊,這些命名將在C#呼叫DLL時用到。

 

 在左側類別中選擇 “原始檔”,並在專案檔案中選擇需要封裝為DLL的VI,單擊下圖中向右的藍色箭頭,將其搬移到右側的“匯出”視窗中。

 

 在隨即彈出的定義VI原型窗如下圖所示。

 

 將採集結果data作為returnvalue返回,同時刪去左側引數框中的data,配置後定義VI原型視窗變為下圖所示的樣子。

 

 在“預覽”視窗單擊生成預覽可以預覽將要生成的DLL檔案,檢查路徑配置正確後,單擊下方的生成按鈕,即可在指定目錄生成可供呼叫的DLL庫。

 

 

二、在C#中呼叫LabVIEW生成的DLL

在VS的C#開發環境中新建一個工程。右鍵單擊“解決方案資源管理器”中的“引用”條目,選擇“新增引用”。

 

 新增之前在LabVIEW中建立的DLL檔案。

 

 

在“解決方案資源管理器”中雙擊DLL,可以檢視該DLL中的方法。

在窗體程式碼中新增之前在LabVIEW中指定的名稱空間。

 

之後就可以在C#程式碼中呼叫DLL中的資料採集裝置控制函式了。 

 

 下圖是我用USB-6009採集的LED燈泡工作時的電流。其中使用了Measurement Studio中的波形顯示控制元件WaveformGraph控制元件(實際使用時,不一定要安裝Measurement Studio)。

 

 

三、在LabVIEW中封裝帶有Matlab指令碼的DLL

突發奇想,LabVIEW的MathScript RT節點可以包括Matlab的M指令碼演算法,那是否可以通過LabVIEW將Matlab開發的演算法打包到可供C#呼叫的DLL中呢?試了一下,還真可以!

如下圖所示,在LabVIEW程式框圖中插入一個MathScript RT節點,對採集到的訊號計算快速傅立葉變換FFT,結果同樣作為VI的輸出。

 

 更新LabVIEW專案瀏覽器中的互操作程式集和C#中的引用,不修改之前的程式碼,就看到了上面電流訊號的FFT幅頻特性圖。

 

 

 

相關文章