LabVIEW 和Matlab混合編程綜述

admin @ 2014-03-26 , reply:0

    這篇文章主要是針對LabVIEW早期版本的(8.0以前)寫的,在8.0以及隨後的8.2版本中LabVIEW自身已經能很好地將Matlab集成進來。但它依然不能獨立於Matlab,如果要開發獨立於Matlab的應用時,基於DLL和COM組件的方法依然有他們不可替代的優勢。

摘要:本文從應用程序介面技術出發,總結了LabVIEW和MATLAB混合編程的方法,並介紹每種方法的特點,比較了它們之間的優勢和缺點,為開發人員提供比較全面的參考。利用LabVIEW和MATLAB混合編程,可實現兩者優勢互補,從而為開發功能更強大性能更優越的測控軟體,提供途徑。

    LabVIEW作為易學易用的圖形化編程語言,在虛擬儀器設計和測控軟體開發方面已是事實上的工業標準。Matlab提供強大矩陣運算和圖像處理能力,在工程計算領域有著廣泛的應用,其優勢是其他軟體無法比擬的。因此,關於將兩者結合起來混合編程的思想也廣泛被人們所討論。目前,應用程序之間通信的技術主要有下面幾種:動態數據交換(DDE)、動態鏈接庫(DLL)、組件對象模型(COM)、以及基於COM的ActiveX技術。LabVIEW和Matlab都支持這些介面技術,這也就為兩者進行數據通信提供了可能。也正是從不同的介面技術出發,人們提出了不同的混合編程方法,下面對這些方法進行簡單的介紹和比較,以供開發者參考。

一 基於動態數據交換(DDE)技術
    動態數據交換是Windows操作系統中一種基於消息的協議,用於在Windows平台上的兩個正在運行的應用程序之間動態交換數據,其中提供數據服務的程序稱為伺服器程序(DDE Server),請求數據和服務的程序稱為客戶程序(DDE Client).LabVIEW提供了DDE通信VI,利用這些VI可以創建DDE Server或DDE Client,完成接收/發送數據、請求/提供服務等功能。LabVIEW調用Matlab功能時,需將服務名(service name)指定為”Matlab”,主題名(Topic Name)指定為”Engine”,同時在運行VI之前先啟動Matlab或者Matlab計算引擎(在內存中均為Matlab.exe),否則無法通信。DDE VIs可在<LabVIEW>\vi.lib\platform\dde.llb下找到。

二 基於動態鏈接庫(DLL)技術
    動態連接庫是基於Windows程序設計的一個重要組成部分,它由一系列封裝好的可執行代碼組成,其內部函數能被其他程序所共享。LabVIEW通過CLF(Call Library Function Node)實現對DLL的調用。另一方面,Matlab編譯器能將函數文件編譯C/C++代碼,這些代碼又能被C/C++編譯器(如Microsoft Visual C++ 6.0)編譯成DLL文件,只要介面(輸入輸出參數)安排正確,就可以將Matlab編寫的演算法集成到LabVIEW應用程序中,且脫離了Matlab運行環境,執行效率高。另外,Math works公司為Microsoft Visual C++ 6.0提供了一個插件,可以輕鬆完成上述工作,當然介面還需開發人員自己安排。CLF在函數面板的“Advanced”子模板下。

三 基於組件對象模型(COM)技術
    組件對象模型的核心就是二進位介面規範,此規範獨立於編程語言和操作系統。從6.5版本開始,Matlab提供了COM生成器。COM生成器提供了實現Matlab獨立應用的一種新途徑。它能把Matlab開發的演算法做成組件,這些組件作為獨立的COM對象,可直接被Visual Basic,Visual C++或其他支持COM的語言所引用[1]。LabVIEW5.0及以上版本支持COM。它通過自動化標識(automation refnum)獲取一個已安裝在系統中的COM組件的引用,然後藉助ActiveX功能子模板中的VI完成對組件的控制和調用工作。利用COM技術的LabVIEW和Matlab無縫集成的應用程序運行效率高,佔有系統資源少,而且非常利於用戶應用軟體的發布。[2]                                                                                             

四 基於ActiveX自動化技術
    ActiveX的自動化(automation)是ActiveX最重要的功能之一,是一個程序藉助其方法和屬性控制另一程序的能力,它包括自動化伺服器和自動化控制器。Matlab支持ActiveX自動化技術。Matlab自動化伺服器提供一系列方法和屬性,藉此可以實現在其他應用程序中執行Matlab命令和控制Matlab。LabVIEW5.0及以後的版本提供對ActiveX自動化的支持。在LabVIEW中基於ActiveX實現和Matlab混合編程的方法又有兩種,第一種使用Matlab腳本節點,第二種使用ActiveX函數模板。兩種方法的基本過程都相同??先打開Matlab自動化伺服器,然後執行Matlab命令,最後關閉自動化伺服器。LabVIEW中與ActiveX有關函數模板在函數面板中“communication”子面板下的”ActiveX”面板中。 

五 其他方法
    還有一種將DLL和Matlab計算引擎(基於COM技術)結合起來的方法。這種方法把調用Matlab計算引擎的C代碼編譯成DLL供LabVIEW調用。Matlab計算引擎採用了客戶機/伺服器的模式,在windows上通過ActiveX通道與Matlab進行連接,因此這種方法與基於ActiveX自動化技術的方法有些類似。在進行混合編程時,先打開Matlab計算引擎,然後執行Matlab命令,最後關閉Matlab計算引擎。所不同的是使用ActiveX自動化技術傳遞數據均為變體,數據類型由應用程序和Matlab伺服器自動匹配,而通過DLL調用Matlab計算引擎的方法即可傳遞變體類型數據也可傳遞標準C類型數據,數據類型之間的轉換在DLL中完成,因此需開發人員額外編程。除了上述混合編程方法外,NI公司和Math works公司合作推出一個工具包??SIT(Simulation Interface Toolkit),用來實現LabVIEW和Simulink互動式編程。有了這一工具包,設計工程師們可以建立自定義的用戶界面,以便互動式地驗證Simulink模型,並輕鬆地將這些模型配置到實時硬體進行控制原型設計和硬體在環(hardware-in-the-loop)測試,最終節省產品上市時間。但如其名,它僅用於和Simulink通信,且為附加軟體需額外購買。 

六 比較總結
    由於混合編程的方法均基於介面技術,因此每種方法也帶上各自介面技術的特點。基於DDE、ActiveX自動化、DLL+計算引擎混合編程的方法需要Matlab環境的支持,開發出來的應用程序缺乏獨立性,但能全面支持Matlab的功能,Matlab所有的命令、M函數和工具箱均能在其中調用。三者之中,以DLL+計算引擎混合編程的方法對Matlab控制最強,編程最靈活也最複雜,基於ActiveX自動化技術的方法次之。另外,Matlab計算引擎可放在網路上其他計算機上運行,結合LabVIEW的網路通信功能,可以實現分散式應用,這一點在網路實驗室的開發方面很有應用價值。基於DLL和COM技術混合編程的方法,最大一個優點就是可以創建獨立的應用,而且在執行效率方面有所改善。但程序的獨立性也是相對的,應用程序要正確運行還需要Matlab運行時庫的支持??基於DLL技術混合編程開發的應用程序需額外安裝,而基於COM技術混合編程的方法將所需的庫文件自動打包到COM對象,只要安裝COM對象,即可獨立運行。此外,執行效率的改善也不是絕對的,[3]它與具體應用有關。在Matlab6.5中Matlab編譯器不能編譯所有的M文件(其中包括工具箱中的M文件),這就限制了基於DLL和COM技術混合編程方法的應用範圍,Matlab7.0使用組件運行環境(MCR),它完全支持Matlab語言,所以可以運行所有支持編譯的Matlab及工具箱命令,[4]只是初始化時間比以前要慢得多。

    從上面的綜述可以看出沒混合編程的方法各有自己的優缺點,開發人員可以根據應用的特點選擇其中一種或者幾種用之。相信利用這些混合編程的技術,可以將LabVIEW和Matlab各自的優勢結合起來,開發出功能更強大性能更優越的測控軟體




[admin via 研發互助社區 ] LabVIEW 和Matlab混合編程綜述已經有1495次圍觀

http://cocdig.com/docs/show-post-44863.html