999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于COM組件的LabWindows/CVI與Matlab混合編程

2012-05-03 09:11:00李丹陽
中國測試 2012年1期

李丹陽,朱 賽

(軍械工程學院電子與光學工程系,河北 石家莊 050003)

0 引 言

在雷達系統的性能檢測與故障診斷中,常常使用LabWindows/CVI進行檢測診斷程序的編寫,使用Matlab進行數據的分析處理。LabWindows/CVI是美國NI公司推出的面向測試領域的軟件開發平臺,包含豐富的控件資源和大量的儀器驅動。基于該平臺,可方便地進行儀器的控制和虛擬界面的開發。但對于當前的前沿數據處理方法,LabWindows/CVI卻缺少可直接調用的函數庫,增加了軟件開發的難度。Matlab是一種高效數值計算語言,包含各種高級數值計算工具包,基于Matlab可方便地開發各種數據處理算法,彌補了基于LabWindows/CVI的測試程序開發的不足。

LabWindows/CVI與Matlab的混合編程可以充分發揮兩者的優點,以LabWindows/CVI完成儀器的操作和用戶界面的編寫,Matlab進行高級數據處理,提高測試診斷軟件編寫速度。本文介紹了LabWindows/CVI與Matlab混合編程的常用方法,在對各方法進行分析的基礎上,重點介紹了基于COM組件的LabWindows/CVI與Matlab混合編程技術。

1 LabW indows/CVI與M atlab混合編程方式

LabWindows/CVI與Matlab的混合編程通常通過如下3種方式:

(1)間接操作Matlab。該方法是指通過一定途徑,在LabWindows/CVI中使用命令操作Matlab。主要有兩種方法:

1) 通過 Matlab Engine 方式[1]。Matlab Engine是指一組Matlab提供的接口函數,支持C語言,可以在LabWindows/CVI中調用,實現對Matlab Engine的控制。

2)通過 ActiveX 控件方式[2]。在 LabWindows/CVI中通過ActiveX控件方式,可以創建Matlab的驅動器。通過驅動器內函數,可以實現對Matlab的操作。

(2)使用Matlab自帶的函數庫[3]。Matlab中提供了可以供C/C++語言調用的C/C++數學函數庫,包含涉及到線形代數、數值分析、傅里葉變換、多項式計算、解微分方程等函數,并且函數庫中提供了大量各種矩陣操作函數,在LabWindows/CVI中可以直接使用這些函數,實現在Matlab中進行矩陣運算功能。

(3)將Matlab文件轉化為中間文件。通過Matlab自帶的編譯器或工具,可以將m文件編譯成中間文件,供LabWindows/CVI調用。主要有兩種途徑:

1)用Matlab自帶的Matlab Compiler編譯器。使用Matlab Compiler編譯器可以將m文件轉換成C源代碼、動態鏈接庫、可執行文件,這些文件可以在LabWindows/CVI編程中直接使用。

2)用 COM Builder工具[5]。COM Builder工具是Matlab自帶的COM組件生成工具,可以由m文件生成COM組件。COM組件在系統注冊后可以在LabWindows/CVI中使用。

間接操作Matlab的方法幾乎能利用Matlab全部功能,但是需要在機器上安裝Matlab軟件,而且執行效率低;使用Matlab自帶的函數庫的方法只能使用Matlab提供的有限的數據計算函數,不能充分發揮Matlab強大的計算能力;將Matlab文件轉換為中間文件,在LabWindows/CVI程序中調用,可以脫離Matlab環境運行,實現簡單,通用性強。

本文采用將Matlab文件轉化為中間文件的方法,利用Matlab中的COM Builder工具將數據處理函數生成COM組件,供LabWindows/CVI調用。

2 基于COM組件的混合編程

本文采用COM組件來實現LabWindows/CVI與Matla的混合編程,主要分為COM組件在Matlab中的生成和COM組件在LabWindows/CVI中的調用兩個步驟,其流程如圖1所示。

2.1 使用M atlab Builder制作COM組件

MathWorks公司在Matlab 6.5及其以后版本中推出了將Matlab中的M函數編譯為COM組件的工具COM Builder,它把Matlab開發的.m函數連同相關的支撐函數庫一起打包生成組件。生成的組件是進程內組建,以DLL形式存在,可以脫離Matlab環境獨立運行,在LabWindows/CVI中可以直接調用。

圖1 采用COM組件進行LabWindows/CVI與Matlab混合編程流程

本文使用Matlab 7.9.0進行COM組件的生成,其過程如下:

(1)設置Matlab Builder所使用的編譯器。在Matlab的命令窗口中輸入mbuild-setup和mexsetup命令,進行編譯器的設置。本文使用的編譯器是Microsoft Visual C/C++version 6.0。

(2)設置系統路徑。在我的電腦-屬性-高級-環境變量-用戶變量,分別選擇include、lib、path變量,如果變量不存在,新建變量。在變量值后添加:

其中Matlab為當前Matlab安裝路徑。

以上兩點只需要配置一次即可。

(3)啟動 Matlab Builder。啟動 Matlab Builder有兩種方法:1)在Matlab命令窗口中輸入deploytool命令;2)在Matlab窗口左下角選擇Start-Matlab-Matlab Builder EX-Deploment Tool。

(4)生成COM組件。在彈出的Deployment Project對話框中設置工程的名稱、路徑,在“Target”中選擇Generic COM Component。生成工程后,在Build下點擊Classes中的“Add Class”生成類,在生成的類下點擊“Add files”添加導出函數的m文件,點擊Shared Resource and Helper Files中的“Add files/directories”添加導出函數調用的內部函數的m文件或資源文件。添加完所需文件后,點擊“Builder”,生成COM組件。在當前工作目錄下生成一個與組件同名的文件夾,文件夾下有名為src和distrib兩個文件夾,sec文件夾中存放的為中間文件,distrib文件夾中存放的是動態鏈接庫(DLL)形式的COM組件。

(5)打包和分發組件。COM組件在生成時會自動注冊到系統,可以在當前計算機上直接使用。如果在其他計算機上使用,必須在使用的計算機上注冊,注冊命令為“regsvr32組件名”。另外,需要一些支持文件,這些支持文件可以通過COM Builder的打包功能獲得。

在Deployment Tool中的Package下,可以通過“Add files/directories”添加打包文件;如果目標計算機上沒有安裝MCR,則通過“Add MCR”添加MCR。打包文件添加完畢后,點擊“Package”,會把發布該組件所需的所有文件打包到一個與工程同名的可執行文件中。在目標計算機上運行該可執行文件,可自動安裝MCR和注冊組件。

2.2 在LabW indows/CVI中使用COM組件

在LabWindows/CVI中可通過ActiveX控件調用生成組件,其步驟如下:在LabWindows/CVI軟件的菜單欄中選擇Tools-Create ActiveX Controller,彈出ActiveX Controller Wizard窗口,單擊Next后,LabWindows/CVI會自動搜索系統中注冊的組件,可在ActiveX Server列表中選擇生成的組件,點擊Next后,在Target.fp File中設置生成驅動的路徑及名稱,之后一直點擊 Next,可生成“*.c”、“*.h”、“*.fp”、“*.obj”、“*.sub”5 個文件,其中“*.fp”為驅動器文件。將“*.h”和“*.fp”文件加入工程,打開“*.fp”文件可以看到所包含的函數,其中有新建對象、打開對象、激活對象、獲得和設置MW標志及m文件中定義的函數。這些函數可以直接在LabWindows/CVI編程中使用。函數在LabWindows/CVI中使用步驟如下:

(1)調用CA_InitActiveXThreadStyleFo-rCurrent Thread函數,該函數將線程設為ActiveX線程方式。將其threadStyle參數設為COINIT_APARTMENTTH READED。

(2)調用新建對象函數,此函數在“*.fp”中。該函數可以新建一個對象,并獲得該對象的句柄。

(3)參數轉換,在調用M中函數在“*.fp”對應的功能函數前,必須進行參數的轉換。因為m文件中函數生成COM組件,在LabWindows/CVI中生成驅動器函數,其所有參數轉換為VARIANT類型,即通過該類型實現LabWindows/CVI與COM組件間數據的傳遞。VARIANT數據類型是所有未被顯式聲明為其他類型變量的數據類型,VARIANT是一種特殊的數據類型,除了定長String數據及用戶定義類型外,可以包含任何種類的數據。軟件編程中的其他類型數據,可通過LabWindows/CVI中的數據轉換函數將其轉換為VARIANT類型。如整型數據intVal,將其轉換為VARIANT型變量varVal,可調用以下命令:

varVal=CA_VariantInt(intVal);

(4)調用功能函數,函數中的Object Handle參數即為第(2)步中獲得的句柄,函數參數為第(3)步中通過轉換獲得的VARIANT型變量。

(5)將結果進行數據轉換,取出計算結果。函數計算結果也為VARIANT型數據,必須通過數據轉換才能將結果轉換為相應的類型。如欲取出double型計算結果,調用命令:

CA_VariantGetDouble(&varVal,&dbVal),其 中varVal為函數返回的VARIANT型數據,dbVal為轉換后的double型結果。

(6)清除VARIANT型變量,釋放空間。調用CA_VariantClear(&varVal)命令,其中varVal為要清除的VARIANT型變量。

(7)關閉對象句柄,釋放空間。可通過調用CA_DiscardObjHandle(objHandle)命令完成,其中objHandle為要關閉的句柄。

3 實驗驗證

為了驗證本文所述內容,使用上述方法進行經驗模態分解(EMD)的混合編程,即在Matlab中編寫EMD算法,并生產COM組件,在LabWindows/CVI中調用COM組件完成測試軟件中信號的EMD分解。步驟如下:

(1)編寫EMD算法的 m文件,有EMD_Tr.m、getIMF.m、GetPagebyPCHIP.m、judgeRule.m、getmax.m、getmin.m,其中EMD_Tr.m為導出函數的m文件,其余為內部函數的m文件。

(2)按2.1所述創建EMDCom工程,并完成工程的配置,生成COM組件EMDCom_1_0.dll,并打包生成EMDCom_pkg.exe。

(3)運行EMDCom_pkg.exe完成MCR的安裝和組件的注冊。

(4)按2.2所述生成組件驅動EMDCom.fp等文件,并將其添加到當前測試軟件工程中。

(5)在測試軟件工程中按2.2所述調用EMDCom.fp中函數,其關鍵代碼如下:

圖2 基于混合編程的EMD分解軟件運行界面

其中cSig為原始信號數據,sigLon為原始信號數據長度,mNum為分解層數,mSig為原始信號矩陣,m IMF為分解結果矩陣,cIMF為分解后數據數組,分解后各層數據都依次存儲在cIMF中。

通過上述步驟,完成了LabWindows/CVI和Matlab混合編程的EMD算法實現軟件,軟件可脫離Matlab環境運行。軟件運行界面如圖2所示。

4 結束語

LabWindows/CVI與Matlab的混合編程方式有多種,但大都存在一定的局限性,不能充分發揮LabWindows/CVI與Matlab的優點,限制了基于LabWindows/CVI測試軟件的開發效率。

基于COM組件的LabWindows/CVI與Matlab混合編程技術實現了LabWindows/CVI與Matlab的完美結合,充分發揮了LabWindows/CVI的測試軟件開發能力和Matlab的數據處理能力,為基于Matlab的算法研究和基于LabWindows/CVI的工程實現搭建了一座橋梁,提高了測試軟件的開發效率。

[1]鄭力新,周凱汀,龔勇,等.LabWindows/CVI對Matlab的引擎調用技術[J].華僑大學學報:自然科學版,2007,28(4):365-367.

[2]陳希林,肖明清.一種LabWindows/CVI與Matlab混合編程的實現方法[J].微計算機信息,2005,21(1):43-44.

[3]張燕,陳華.LabWindows/CVI與Matlab接口實現的幾種方法[J].工業控制計算機,2006(1):1-3.

[4]黃成亮,鄭賓,黃公亮.Matlab與LabWindows/CVI接口技術在自動機測試中的應用[J].自動化與儀器儀表,2010(5):58-59.

[5]吳小麗,丁維明,程力.Delphi動態調用Matlab COM組件實現二者混合編程[J].工業控制計算機,2011,24(3):1-3.

[6]張強,吳慶鳴,陳東,等.ActiveX在LabWindows/CVI中的創建與應用[J].機電工程技術,2006,35(5):64-66.

主站蜘蛛池模板: 亚洲av无码久久无遮挡| 午夜啪啪网| 五月天香蕉视频国产亚| 亚洲综合色区在线播放2019| 青青极品在线| 尤物在线观看乱码| 久久精品日日躁夜夜躁欧美| 久久综合久久鬼| 国产精品女在线观看| 国产三级精品三级在线观看| 91欧美亚洲国产五月天| 国产亚洲精品自在久久不卡| 欧美三级日韩三级| 欧美在线黄| 亚洲三级成人| 伊伊人成亚洲综合人网7777| 香蕉国产精品视频| 奇米精品一区二区三区在线观看| 99久久精品免费视频| 成人91在线| 亚洲黄色视频在线观看一区| 亚洲精品黄| 久久久久亚洲av成人网人人软件| 青青青亚洲精品国产| 国产精品女人呻吟在线观看| 成人精品视频一区二区在线| 亚洲成aⅴ人片在线影院八| 久久黄色视频影| 欧美色亚洲| 成人伊人色一区二区三区| 国产成人精品高清在线| 国产在线观看第二页| 免费无码在线观看| 伊在人亞洲香蕉精品區| 99久久99这里只有免费的精品| 国产成人啪视频一区二区三区| 亚洲美女AV免费一区| 精品视频一区在线观看| 青青青视频免费一区二区| 少妇极品熟妇人妻专区视频| 伊人蕉久影院| WWW丫丫国产成人精品| 欧美激情网址| 精品成人免费自拍视频| 国产精品熟女亚洲AV麻豆| 国产精品亚洲日韩AⅤ在线观看| 成人夜夜嗨| 久久青草免费91观看| 欧美精品啪啪一区二区三区| v天堂中文在线| 91av成人日本不卡三区| 日韩色图区| 国产精品自在在线午夜| 日韩免费成人| 亚洲视频欧美不卡| 国产91丝袜在线播放动漫| 国产成人调教在线视频| 天天干天天色综合网| 免费看久久精品99| 国产精品99在线观看| 久久青草精品一区二区三区| 国产欧美又粗又猛又爽老| 欧美有码在线| 美美女高清毛片视频免费观看| 99国产在线视频| 综合人妻久久一区二区精品| 91在线日韩在线播放| 久久成人国产精品免费软件 | 国产成人精品日本亚洲77美色| 欧洲欧美人成免费全部视频 | 国产国模一区二区三区四区| 亚洲香蕉久久| 成人国产精品网站在线看| 亚洲一级毛片在线观| 国产免费怡红院视频| 国产麻豆福利av在线播放| 国产精品hd在线播放| 中文字幕日韩欧美| 国产成人高清精品免费软件| 日韩黄色大片免费看| 国产成人一区免费观看| 久热re国产手机在线观看|