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幅頻特性圖,

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412746.html
標籤:.NET技术
