LabVIEW生成.NET的DLL——C#下調用NI數據採集設備功能的一種方法 [原創www.cnblogs.com/helesheng]
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下的演算法開發提供一種「捷徑」。以下內容歡迎轉載,但請註明出處: //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幅頻特性圖。