久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

LabVIEW與MATLAB混合編程


    LabVIEW建立在易于使用的圖形數(shù)據(jù)流編程語言——G語言上,大大簡化了過程控制和測試軟件的開發(fā)。
MATLAB以其強大的科學計算功能、大量穩(wěn)定可靠的算法庫,已在為數(shù)學計算工具方面事實上的標準。但才者各有
欠缺,利用混合編程可以相互補充。

    MATLAB是MathWorks公司開發(fā)的“演算紙”式的程序設(shè)計語言。它提供了強大的矩陣運算和圖形處理功能,編
程效率高,幾乎在所有的工程計算領(lǐng)域都提供了準確、高效的工具箱。但MATLAB也有不足之處,例如界面開發(fā)能
力較差,并且數(shù)據(jù)輸入、網(wǎng)絡(luò)通信、硬件控制等方面都比較繁瑣。

    美國NI公司推出的LabVIEW語言是一種非常優(yōu)秀的面向?qū)ο蟮膱D形化編程語言。LabVIEW是實驗室虛擬儀器集
成環(huán)境(Laboratory Virtual Instrument Engineering Workbench)的簡稱,是一個開放型的開發(fā)環(huán)境,使用圖
標代替文本代碼創(chuàng)建應(yīng)用程序,擁有大量與其它應(yīng)用程序通信的VI庫。例如LabVIEW使用自動化ActiveX、DDE和
SQL,可與其它Windows應(yīng)用程序集成;使用DataSocket技術(shù)、Web Server、TCP/IP和UDP網(wǎng)絡(luò)Vis,與遠程應(yīng)用程
序通信。在對硬件的支持方面,LabVIEW集成了與GPIB、VXI、PXI、RS-232/485、PLC和插入式數(shù)字采集設(shè)備等進
行數(shù)據(jù)通信的全部功能。在LabVIEW下開發(fā)的程序稱為虛擬儀器VI(Virtual Instrument),因為其外形和操作可
以模擬實際的儀器。在對各種算法的支持方面,LabVIEW的工具箱非常有限,這就限制了大型應(yīng)用程序的快速開
發(fā)。

    鑒于LabVIEW和MATLAB的優(yōu)點,本文介紹了通過ActiveX技術(shù),在LabVIEW(Ver6.1)中調(diào)用和操作MATLAB
(Ver6.5)的方法,實現(xiàn)LabVIEW和MATLAB的混合編程,充分發(fā)揮兩者的優(yōu)勢。



1 基本原理

    ActiveX自動化是基于組件對象模型COM(Component Object Model)的技術(shù),允許應(yīng)用程序或組件控制另一
個應(yīng)用程序或組件的運行,它包括自動化服務(wù)器和自動化控制器。MATLAB支持ActiveX自動化技術(shù)。通過使用
MATLAB自動化服務(wù)器功能,可以在其它應(yīng)用程序中執(zhí)行MATLAB命令,并與MATLAB的工作空間進行數(shù)據(jù)交換。因此
可以借助這一特性,把LabVIEW與MATLAB結(jié)合,充分利用MATLAB提供的大量高效可靠的算法和LabVIEW的圖形化編
程能力,混合開發(fā)出功能強大的應(yīng)用軟件。

2 應(yīng)用舉例

    在混合編程中,通常用LabVIEW設(shè)計用戶圖形界面,負責數(shù)據(jù)采集和網(wǎng)絡(luò)通信;MATLAB在后臺提供大型算法供
LabVIEW調(diào)用。

2.1 方法一:使用MATLAB Script節(jié)點

    為了簡化調(diào)用過程,LabVIEW提供了MATLAB Script節(jié)點。LabVIEW使用ActiveX技術(shù)執(zhí)行該節(jié)點,啟動一個
MATLAB進程。這樣用戶就可以很方便地在自己的LabVIEW應(yīng)用程序中使用MATLAB,包括執(zhí)行MATLAB命令、使用功能
豐富的各種工具箱,如神經(jīng)網(wǎng)絡(luò)工具箱(Neural Network Toolbox)、優(yōu)化工具箱(Optimization Toolbox)。
值得注意的是:LabVIEWgn MATLAB之間的數(shù)據(jù)通信僅支持Real、RealVector、RealMatrix、Complex、
VectorComplex、Matrix六種格式的數(shù)據(jù),且必須根據(jù)具體情況進行選擇。

    當開發(fā)涉及工業(yè)控制的應(yīng)用程序時,常常由于控制參數(shù)的非線性變化,而無法建立合適的模型。由于此類問
題,神經(jīng)網(wǎng)絡(luò)提供了一條有效的解決途徑。

    在LabVIEW開發(fā)環(huán)境下新建一個三層BP神經(jīng)網(wǎng)絡(luò)的VI程序,程序框圖見圖1。網(wǎng)絡(luò)結(jié)構(gòu)部分主要設(shè)置隱層
(Hidelay)神經(jīng)元的個數(shù)、傳遞函數(shù)(Transfer Function)以及網(wǎng)絡(luò)訓練算法(Algorithm)。經(jīng)過樣本數(shù)據(jù)
(Training Data)訓練過的網(wǎng)絡(luò),即可進行仿真測試了。MATLAB腳本程序可以在MATLAB環(huán)境下調(diào)試,再使用
MATLAB Script節(jié)點導入MATLAB腳本;也可以直接在MATLAB Script節(jié)點中編寫。位于
Function>>Mathematics>>Formula模板中的MATLAB Script節(jié)點可以導入MATLAB腳本。圖1中的腳本程序使用CASE
語句進行傳遞函數(shù)和訓練算法的選擇。MATLAB Script節(jié)點中神經(jīng)網(wǎng)絡(luò)的輸入層和隱層之間的權(quán)值矩陣inweight應(yīng)
指定為RealMatrix,在LabVIEW中對應(yīng)的數(shù)據(jù)類型是二維實數(shù)據(jù)組Net.I-Weight。各變量數(shù)據(jù)類型見表1。

    表1 MATLAB Script節(jié)點輸入、輸出變量的數(shù)據(jù)類型

    變量名 LabVIEW數(shù)據(jù)類型 MATLAB數(shù)據(jù)類型
    size of algorithm Double floating point numeric Real
    t outweight hideb outb result 1D array double floating numeric Real Vector
    p data inweight Multidimensional array double floating point numeric Real Matrix

    在此程序中,得到的BP網(wǎng)絡(luò)各層的權(quán)值矩 陣、閾值向量和傳遞函數(shù)三類參非常有用的,它們決定了神經(jīng)網(wǎng)絡(luò)
的結(jié)構(gòu)與特性。因此當神經(jīng)網(wǎng)絡(luò)訓練好后,可以直接使用這些參數(shù)處理新的數(shù)據(jù),得到預(yù)測值,而不必重新調(diào)用
MATLAB。這樣程序的運行效率會更高。另一方面,將調(diào)試好的神經(jīng)網(wǎng)絡(luò)VI創(chuàng)建成一個子VI,作為模塊保存,當需
要更新網(wǎng)絡(luò)時,可以隨時調(diào)用。

    雖然通過MATLAB Script節(jié)點進行通信比較易于實現(xiàn),但以這種方式調(diào)用MATLAB時,在任務(wù)欄中將出現(xiàn)一個
MATLAB圖標,單擊該圖形會打開MATLAB窗口,在其中可以任意輸入。通常,這會干擾前臺程序的運行,甚至造成
程序的崩潰。另一方面,當MATLAB Script節(jié)點中的腳本執(zhí)行完后,MATLAB也不能自動關(guān)閉。

    2.2 方法二:使用ActiveX函數(shù)模板

     在LabVIEW中使用引用(Refnum,也稱“參考”)作為某個對象的唯一標識符,對象可以是文件、設(shè)備、網(wǎng)絡(luò)
連接等。由于引用是指向某一對象的臨時指針,因此它僅在對象被打開時有效,一旦對象被關(guān)閉,LabVIEW就會自
動斷開連接。為了獲得對MATLAB更多的控制,可以在框圖程序中使用LabVIEW提供的相關(guān)子VI創(chuàng)建和獲取自動化對
象,然后在代碼中調(diào)用對象擁有的方法和屬性。當不再需要對象時,可以隨時釋放。

    LabVIEW可以調(diào)用MATLAB(Ver6.5)ActiveX接口提供的8個方法和1個屬性:

    (1)BSTR Execute([in]BSTR Command):Execute方法調(diào)用MATLAB執(zhí)行一個合法的MATLAB命令,并將結(jié)果以
字符串的形式輸出。其輸入?yún)?shù)Command為字符串類型變量,表示一個合法的MATLAB命令。

    (2)void GetFullMatrix([in] BSTR Name,[in]BSTR Workspace,[in,out]SAFEARRAY(double)*pr,
[in,out]SAFEARRAY(double)*pi):使用GetFullMatrix方法,LabVIEW從指定的MATLAB工作空間中獲取一維或二
維數(shù)組。Name為數(shù)組名,Workspace標識包含數(shù)組的工作空間,其默認值是“base”。Pr了所提取數(shù)組的實部,pi
包含了所提取數(shù)組的虛部,它們在LabVIEW中為變體(Variant_數(shù)據(jù)類型。

    (3)void PutFullMatrix([in]BSTR Name,[in]BSTR Workspace,[in]SAFEARRAY(double)*pr,[in]
SAFEARRAY(double)*pi);此方法向指定的MATLAB工作空間中設(shè)置一維或二維數(shù)組。如果傳遞的數(shù)據(jù)為實數(shù)
型,pi也必須傳送,不過其內(nèi)容可以為空。

    (4)BSTR GetCharArray([in]BSTR Name,[in]BSTR Workspace):此方法從指定的MATLAB工作空間中獲取
字符數(shù)組。

    (5)void PutCharArray([in]BSTR Name,[in]BSTR Workspace,[in]BSTR charArray):此方法向指定的
工作空間中的變量寫入一個字符數(shù)組。

    (6)void MinimizeCommandWindow():此方法使MATLAB窗口最小化。

    (7)void MaximizeCommandWindow():此方法使MATLAB窗口******化。

    (8)void Quit():用于MATLAB退出。

    (9)屬性Visible:當Visible為1時,MATLAB窗口顯示在桌面上;當Visible為0時,隱含MATLAB窗口。

    舉例說明:LabVIEW程序中有二維數(shù)組A、B,通過MATLAB計算表達式B=A.*3(即A的每個元素均乘以3),得到
的結(jié)果保存在LabVIEW的數(shù)組B中,并顯示在前面板上。其MATLAB Window為枚舉量,值為Lnvisible或Visible,目
的是用于控制任務(wù)上是否出現(xiàn)MATLAB圖標。數(shù)組A為控制量,用于輸入二維數(shù)組數(shù)據(jù)。數(shù)組B為指示量,用于顯示
經(jīng)MATLAB計算后返回的結(jié)果??驁D程序見圖2。此程序較完整地描述了調(diào)用MATLAB過程的總體框架,至于復(fù)雜的算
法可以在MATLAB中實現(xiàn)。

     首先必須引用自動化對象。為此在LabVIEW的Controls>>ActiveX>>Automation Refnum模板中選擇自動化引
用(Automation Refnum)控制量,將其放置在前面板上,設(shè)置控件的Visible屬性為False,從對象列表中選擇
Matlab Application(Version6.5)Type Library Version1.0。這樣MATLABr的引用就添加到程序中,其對應(yīng)的
圖標為MLApp.DIMLApp。為了簡化訪問自動化服務(wù)器的過程,LabVIEW在其Function>L>Communication

COPYRIGHT(C) 2011 廈門永宏亞得機電科技有限公司版權(quán)所有(閩ICP備05025945號) ALL RIGHTS RESERVED?

電話: 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門市海滄區(qū)興港六里17號2607室 郵編:361009 聯(lián)系人:翟先生