• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2012-05-03 09:11:00李丹陽
      中國測試 2012年1期
      關鍵詞:函數(shù)庫編譯器調用

      李丹陽,朱 賽

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

      0 引 言

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

      LabWindows/CVI與Matlab的混合編程可以充分發(fā)揮兩者的優(yōu)點,以LabWindows/CVI完成儀器的操作和用戶界面的編寫,Matlab進行高級數(shù)據(jù)處理,提高測試診斷軟件編寫速度。本文介紹了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提供的接口函數(shù),支持C語言,可以在LabWindows/CVI中調用,實現(xiàn)對Matlab Engine的控制。

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

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

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

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

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

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

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

      2 基于COM組件的混合編程

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

      2.1 使用M atlab Builder制作COM組件

      MathWorks公司在Matlab 6.5及其以后版本中推出了將Matlab中的M函數(shù)編譯為COM組件的工具COM Builder,它把Matlab開發(fā)的.m函數(shù)連同相關的支撐函數(shù)庫一起打包生成組件。生成的組件是進程內組建,以DLL形式存在,可以脫離Matlab環(huán)境獨立運行,在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)設置系統(tǒng)路徑。在我的電腦-屬性-高級-環(huán)境變量-用戶變量,分別選擇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”添加導出函數(shù)的m文件,點擊Shared Resource and Helper Files中的“Add files/directories”添加導出函數(shù)調用的內部函數(shù)的m文件或資源文件。添加完所需文件后,點擊“Builder”,生成COM組件。在當前工作目錄下生成一個與組件同名的文件夾,文件夾下有名為src和distrib兩個文件夾,sec文件夾中存放的為中間文件,distrib文件夾中存放的是動態(tài)鏈接庫(DLL)形式的COM組件。

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

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

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

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

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

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

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

      varVal=CA_VariantInt(intVal);

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

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

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

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

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

      3 實驗驗證

      為了驗證本文所述內容,使用上述方法進行經驗模態(tài)分解(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為導出函數(shù)的m文件,其余為內部函數(shù)的m文件。

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

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

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

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

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

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

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

      4 結束語

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

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

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

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

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

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

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

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

      猜你喜歡
      函數(shù)庫編譯器調用
      用于優(yōu)化雷達信號處理的VSIPL函數(shù)庫
      基于Python的開源GIS應用開發(fā)
      Scratch求最值和平均值
      電腦報(2020年34期)2020-09-12 14:03:42
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
      核電項目物項調用管理的應用研究
      基于BB60C的IQ數(shù)據(jù)采集與存儲系統(tǒng)設計
      LabWindows/CVI下基于ActiveX技術的Excel調用
      測控技術(2018年5期)2018-12-09 09:04:46
      基于系統(tǒng)調用的惡意軟件檢測技術研究
      通用NC代碼編譯器的設計與實現(xiàn)
      利用RFC技術實現(xiàn)SAP系統(tǒng)接口通信
      衡南县| 麟游县| 永胜县| 淮阳县| 平邑县| 阳原县| 尉氏县| 凌云县| 天祝| 大港区| 莱州市| 莱阳市| 大厂| 于田县| 瑞金市| 崇阳县| 高陵县| 三穗县| 梁河县| 桃园县| 双江| 襄垣县| 马公市| 珠海市| 大渡口区| 米易县| 梧州市| 阳东县| 施甸县| 宁都县| 宜兴市| 华容县| 马鞍山市| 平潭县| 鹰潭市| 汝阳县| 申扎县| 余江县| 郴州市| 渭源县| 凌源市|