LabVIEW與MATLAB混合編程
>>ActiveX模 板中提供了一組與ActiveX操作相關(guān)的子VI,其中Automation Open.vi打開引用,啟動MATLAB自動化服務(wù)器,并將 引用傳遞給其它節(jié)點,如屬性節(jié)點(Property Node)、調(diào)用方法節(jié)點(Invoke Node)。程序中LabVIEW調(diào)用 PutFullMatrix方法,將二維組A通過參數(shù)pr傳到MATLAB的“base”工作空間。雖然A為雙精度浮點型數(shù)組,pr和pi 的數(shù)據(jù)類型為變體(Variant),數(shù)據(jù)類型不同,但LabVIEW會自動將輸入數(shù)據(jù)的類型轉(zhuǎn)換為變化,以滿足輸入要 求。程序中A為實數(shù)數(shù)組,無虛部,所以給pi賦空值。接著LabVIEW調(diào)用MLApp.DIMLApp提供的Execute方法,向 MATLAB傳送一條命令“B=A.*3”,于是MATLAB將數(shù)組A的每個元素與3相乘,計算后的結(jié)果保存在數(shù)組B中。 再調(diào)用GetFullMatrix方法,從“base”工作空間中獲取數(shù)組B的實部。這里必須使用Variant to Data.vi, 將變體類型的輸出轉(zhuǎn)化為LabVIEW中的二維數(shù)組。最后用Quit方法退出MATLAB,Automation Close.vi隨即斷開引 用。運行程序,可以看到MATLAB一經(jīng)啟動,任何標上底圖標例立即消失,計算結(jié)果返回到LabVIEW的前面板上。這 里僅介紹了ActiveX函數(shù)模板的基本使用以及調(diào)用MATLAB過程的總體框架,讀者可以根據(jù)需要進行擴充。 2.3 兩種調(diào)用方法的比較 (1)MATLAB Script節(jié)點具有多輸入、多輸出的特點,一次處理的信息量要以很大。MATLAB腳本可以先在 MATLAB下調(diào)試。無誤后再導(dǎo)入到MATLABSeript節(jié)點中。MATLAB Script節(jié)點對輸入、輸出數(shù)據(jù)的類型有明確的要 求。只有LabVIEW中的數(shù)據(jù)類型與MATLAB中的數(shù)據(jù)型相匹配,才能進行數(shù)據(jù)傳輸。使用MATLAB Script節(jié)點的方 法,快捷方便,但不利于較大的應(yīng)用程序開發(fā)。當需要使用時,可將其模塊化,采用主程序動態(tài)加載。 (2)使用ActiveX函數(shù)模的方法,具有對MATLAB更強的控制能力。如隨時打開和關(guān)閉MATLAB,隱藏在務(wù)欄中 的MATLAB圖標,與MATLAB進行字符數(shù)組傳輸,這些都是MATLAB Script節(jié)點都不具有的。使用ActiveX函數(shù)模板 時,經(jīng)常 會遇到數(shù)據(jù)類型的轉(zhuǎn)換,尤其是變體(Variant)與其他類型的轉(zhuǎn)換。當高用大型算法時,必須明確輸 入、輸出數(shù)據(jù)的具體類型,而且要盡量減少數(shù)據(jù)傳輸量和啟動MATLAB自動化服務(wù)器的次數(shù)ActiveX函數(shù)模板,適于 較大的應(yīng)用程序開發(fā)。在LabVIEW順序結(jié)構(gòu)中,不提供使用。原因是順序結(jié)構(gòu)妨礙了作為LabVIEW優(yōu)點之一的程序 并行運行機制,而且MATLAB自動化服務(wù)器啟動也需要一定時間,這會使整個程序不能及時處理其它的用戶操作。 總之,兩種調(diào)用方法其自身的優(yōu)勢和不足。在開發(fā)一個大的復(fù)雜應(yīng)用程序時,綜合不同的應(yīng)用要求,合理選擇可 以顯著提高開發(fā)效率。 采用虛擬儀器技術(shù),通過LabVIEW構(gòu)建測試儀器開發(fā)效率高、可維護性強、測試精度、穩(wěn)定性和可靠性能夠得 到充保證;具有很高的性價比,節(jié)省投資,但于設(shè)備更新和功能擴充。如果能利用MATLAB功能強大的算法庫,可 望開發(fā)出更具智能化的虛擬儀器,將會在諸如故障診斷、專家系統(tǒng)、復(fù)雜過程控制等方面大有用武之地。 |