亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        MATLAB繪圖窗嵌入.NET項目混合編程

        2015-12-20 06:56:16王文斌剡昌鋒劉朝陽
        計算機工程與設(shè)計 2015年12期
        關(guān)鍵詞:窗體控件調(diào)用

        王文斌,剡昌鋒+,劉朝陽,2,張 凱,3

        (1.蘭州理工大學(xué) 機電工程學(xué)院,甘肅 蘭州730050;2.東南大學(xué) 機械工程學(xué)院,江蘇 南京211189;3.大連理工大學(xué) 機械工程學(xué)院,遼寧 大連116024)

        0 引 言

        在許多研究和商用軟件開發(fā)中,常會遇到C#.NET 與MATLAB混合編程的情況,即利用MATALB中提供的工具箱中函數(shù)和算法實現(xiàn)某些功能的編寫,而主體軟件和界面用VisualC#.NET 進行開發(fā),并通過C#.NET 進行相關(guān)數(shù)據(jù)庫操作等。這樣既結(jié)合了C#編程人員與MATLAB編程人員共同開發(fā)軟件,減少了算法的開發(fā)周期,提高了軟件開發(fā)效率,加快了研究工作的進展,又起到算法保密作用。在MATLAB 與其它語言混編的方式方面,張良等[1]在VB.NET 環(huán) 境 中,利 用ActiveX 調(diào) 用MATLAB 的函數(shù),并結(jié)合Access數(shù)據(jù)庫開發(fā)了等離子體單粒子模擬程序;王海崗等[2]敘述了基于COM 技術(shù)的VC 與MATLAB混合編程的一般鏈接方法,并將其應(yīng)用于圖像處理中,得到較好的結(jié)果;P.Bisták[3]基于C#.NET 技術(shù)與Matlab/Simulink平臺做了遠程實驗室控制系統(tǒng)的開發(fā),并描述了其在液壓系統(tǒng)與磁懸浮系統(tǒng)中的應(yīng)用;焦綱領(lǐng)等[4]介紹了C#.NET 調(diào)用MATLAB 生成的COM 組件的混合編程過程;R.Bayindir等[5]基于C#.NET 與MATLAB,開發(fā)了一套用于分析串口和并口RCL 回路的訓(xùn)練工具;秦健等[6]將C#.NET 與MATLAB 混合編程應(yīng)用于探空數(shù)據(jù)的處理,并以圖形化顯示的方式比較了不同廠家探空儀所得的各項數(shù)據(jù);陳華杰等[7]將VC和MATLAB混合編程技術(shù)應(yīng)用到開合成發(fā)孔徑雷達 (SAR)圖像分類平臺中,實現(xiàn)SAR 圖像分類算法的測試與評估;姚光強等[8]以地理信息系統(tǒng)中常用的空間插值分析為例,比較了C#與MATLAB混合編程的兩種混編方式,其結(jié)論中稱使用MATLAB COM Builder將M 語言文件編譯成COM 組件供C#調(diào)用的方式要比C#使用MATLAB提供的自動化服務(wù)要更好。

        盡管MATLAB與其它語言混合編程的應(yīng)用很多,但是在調(diào)用MATLAB圖窗時,會彈出一個單獨的Figure窗,而不是嵌入在主體軟件界面中,使得軟件的融合性變差,用戶體驗不佳;吳煥瑞等[9]通過圖片流的方式做到了圖像的嵌入顯示,但通過這種方式實現(xiàn)后就失去了MATLAB繪圖窗口的工具使用功能。為此,本文在C#與MATLAB混編中,提出一種C#.NET 調(diào)用MATLAB 時將MATLAB繪圖窗口 (Figure窗口)嵌入WinForm 的方法。并將此方法應(yīng)用到汽輪發(fā)電機組的狀態(tài)監(jiān)測與故障診斷軟件開發(fā)中,進行運行顯示與結(jié)果分析。

        1 C#.NET與MATLAB混編總體概述

        MATLAB通過MATLAB Compiler發(fā)布其代碼或產(chǎn)品如圖1所示,通過MATLAB Bilder產(chǎn)品可以發(fā)布供特定編程環(huán)境調(diào)用的組件。其中,通過MATLAB Builder NE可以將MATLAB中編寫的具有特定功能的*.m 文件編譯成.NET 組件,供C#程序調(diào)用。

        圖1 MATLAB發(fā)布產(chǎn)品

        在進行汽輪發(fā)電機組的狀態(tài)監(jiān)測與故障診斷軟件開發(fā)中,用C#進行軟件的主體開發(fā),即用戶操作界面、用戶和文件管理、數(shù)據(jù)庫操作等,充分利用C#高級開發(fā)語言帶來的方便。而對現(xiàn)場采集的設(shè)備運行信號進行諸如幅值譜、功率譜以及自相關(guān)函數(shù)等頻譜分析和相干分析的算法借助MATLAB,編寫MATLAB 的.m 函數(shù)文件,并通過MATLAB發(fā)布工具生成.NET 組件。在運行過程中,數(shù)據(jù)傳輸和程序調(diào)用的流程如圖2 所示。首先,用C#程序調(diào)用MATLAB發(fā)布的.NET 組件,并導(dǎo)入采集的時域信號數(shù)據(jù)。其 次,MCR (MATLAB component runtime)根 據(jù)所調(diào)用m 函數(shù)文件的功能,做出相應(yīng)的回應(yīng),返回數(shù)值數(shù)據(jù)或者彈出MATALB繪圖窗體 (Figure)。最后,若MCR返回數(shù)值數(shù)據(jù)則傳輸給C#程序做相關(guān)處理,而若是彈出可視的Figure窗,則C#通過調(diào)用Windows操作系統(tǒng)的窗口函數(shù)查詢Figure窗體的句柄,將包含圖譜結(jié)果的Figure窗體句柄返回并傳給C#主程序的WPF用戶控件,作為其的子窗體嵌入到主程序界面中。以此,操作人員可以做信號的監(jiān)視、對比和后續(xù)的處理。

        圖2 數(shù)據(jù)傳輸和程序調(diào)用流程

        2 C#項目調(diào)用MATLAB過程

        本文研究的內(nèi)容都是在MATLAB 2010a環(huán)境下發(fā)布.NET 組件,并在Visual Studio 2010C#環(huán)境中進行主界面開發(fā)和數(shù)據(jù)轉(zhuǎn)換與調(diào)用。

        2.1 從MATLAB環(huán)境生成.NET組件

        MATLAB通過其內(nèi)部開發(fā)工具MATLAB Bilder NE將編寫的.m 文件編譯成.NET 組件,此組件就可以像其它托管代碼一樣在C#.NET 中很方便的進行調(diào)用。從MATLAB生成.NET 組件的主要步驟如下:

        (1)在MATLAB 中編寫好特定功能的算法函數(shù),以*.m 格式保存到指定路徑,并確保程序能在MATLAB 中成功運行。

        (2)在MATLAB的Command Window 里輸入deployment命令,按回車即可彈出部署工程對話框 “Deployment Project”。

        (3)在Deployment Project對話框的Name中輸入要生成的程序集文件的名稱,在Location中選擇程序集輸出路徑,在Type中選擇生成程序集的類型,選擇.NET Assembly,點確定后進入Deployment Tool窗口中。

        (4)點擊 [Add class]添加一個類,并在該類下add files中添加好之前保存好的*.m 文件作為該類的方法,如果有多個m 函數(shù)則可以都添加到此類中,也可以重新建一個類。

        (5)點擊生成按鈕,生成C#.NET 環(huán)境中可以調(diào)用的dll組件文件。如果程序是將來要在沒有安裝MATLAB 的機子上運行,則需要在Package選項卡中添加MCR,點擊打包按鈕就可以將所需的程序集文件和MCR 引擎安裝文件等打包在指定路徑的.exe文件中,雙擊該.exe文件,就可以將所有文件解壓出來。

        2.2 C#項目調(diào)用MATLAB

        從MATLAB生成.NET 組件成功后,在生成路徑下的distrib文件夾中就包含了所需的擴展名為.dll的.NET組件,該類組件在C#中叫做程序集。得到了.dll程序集文件后,在C#項目中添加對其的引用,就可以實現(xiàn)對程序集內(nèi)部方法的調(diào)用。主要步驟如下:

        (1)用Visual Studio 2010創(chuàng)建好C#的Windows窗體應(yīng)用程序。

        (2)引用程序集文件。在所建項目中瀏覽添加前面MATLAB生成的.dll程序集文件和庫文件MWArray.dll的引用。其中MWArray.dll文件起到C#調(diào)用Matlab引擎橋梁的作用,是此種混編方式中所必須的。C#中數(shù)據(jù)類型可以通過MWArray.dll實現(xiàn)同Matlab中數(shù)據(jù)類型的相互轉(zhuǎn)換,該文件位于本機MATLAB 安裝路徑下的\toolbox\dotnetbuilder\bin\ [win32|Win64]\v2.0中。

        (3)在項目中新建一個靜態(tài)類,用來封裝調(diào)用Matlab函數(shù)的方法。要在該類中添加如下兩個引用:using Math-Works.MATLAB.NET.Arrays和using MathWorks.MATLA B.NET.Utility。

        (4)在相應(yīng)的事件處理程序中寫入調(diào)用 (3)中方法的代碼就可實現(xiàn)用MATLAB 函數(shù)進行運算,并可以接受函數(shù)返回的數(shù)據(jù)值。如果該函數(shù)的結(jié)果是在MATLAB 繪圖窗口中,則會彈出一個獨立于C#應(yīng)用程序窗體的MATLAB繪圖窗口。

        3 將Figure嵌入WinForm 中

        如果編寫的m 函數(shù)在運行時,其結(jié)果要在MATLAB繪圖窗口中顯示,則通過C#程序調(diào)用組件中該函數(shù)時,就會彈出一個獨立于C#應(yīng)用程序窗體的由MCR 支持的MATLAB繪圖 (Figure)窗口。為此,在C#的WinForm中添加一個WPF用戶控件,該WPF控件界面中包含一個border控件。C#通過平臺調(diào)用Win32API函數(shù),將Figure窗口的句柄傳給border控件的Child屬性,從而實現(xiàn)整個Figure窗口嵌入Windows窗體設(shè)計界面中。

        3.1 在WinForm 中添加一個WPF用戶控件

        (1)在所創(chuàng)建項目下需要嵌入MATLAB Figure窗口的Windows窗體設(shè)計界面中添加一個ElementHost控件,并設(shè)置好大小。

        (2)在項目中添加一個 “用戶控件 (WPF)”的新項,并設(shè)置好名稱,本文采用其默認名稱UserControl1.xaml。

        (3)在UserControl1.xaml中添加一個WPF 的border控件,并設(shè)置Width 和Height與 (1)中ElementHost的大小一致。將UserControl和Grid 的大小也設(shè)為同樣的大小。

        (4)重新生成項目,并點擊ElementHost控件右上角的智能標簽,將 (2)和 (3)設(shè)置的UserControl1設(shè)置為其所承載的內(nèi)容,使WPF 用戶控件嵌入到Windows 界面中。

        3.2 封裝一個用于捕捉窗口句柄的類

        為了將MATLAB繪圖窗口嵌入WinForm 中,需通過C#調(diào)用Windows操作系統(tǒng)的窗口函數(shù)找到Figure窗體句柄,主要步驟及代碼如下:

        (1)在項目中添加一個用于捕捉窗體并設(shè)置窗體特性的類,名稱可以為ControlHost,并且此類要繼承自系統(tǒng)類HwndHost。

        (2)在ControlHost類中添加以下幾個引用:

        using System.Windows.Interop;

        using System.Runtime.InteropServices;

        using System.Threading;

        using System.Windows;

        (3)捕捉窗體并設(shè)置窗體風(fēng)格時需要用到的Win32 API函數(shù)主要有下面代碼中所示:

        (4)在ControlHost類中重寫HwndHost的HandleRef BuildWindowCore方法,用來創(chuàng)建一個承載窗口,承載捕捉到的Figure窗口。最后將Figure窗口的句柄包裝在一個托管對象中返回,該方法的代碼如下:

        3.3 在WinForm 應(yīng)用程序中添加嵌入子窗體的代碼

        在應(yīng)用程序的指定事件處理程序中寫句柄傳遞的代碼,將捕捉到的MATLAB 繪圖窗口句柄傳遞給border控件的Child屬性,作為其承載元素,實現(xiàn)Figure窗口間接地嵌入Windows窗體界面中。

        4 程序設(shè)計示例

        汽輪發(fā)電機組在電力生產(chǎn)中屬于極其重要設(shè)備,起著舉足輕重的作用,因此,其運行的穩(wěn)定性和可靠性跟整個電力系統(tǒng)乃至整個國民經(jīng)濟穩(wěn)定有著密切的關(guān)系。研究開發(fā)汽輪發(fā)電機組故障診斷專家系統(tǒng),有助于準確高效地對汽輪發(fā)電機組故障進行診斷與預(yù)測,對于汽輪發(fā)電機組保持良好的工作狀態(tài)具有重大的意義[10]。本文結(jié)合C#和SQL Server以及MATLAB 進行汽輪發(fā)電機組狀態(tài)監(jiān)測與故障診斷軟件的綜合開發(fā),圖3是軟件主界面。

        圖3 汽輪發(fā)電機組故障診斷系統(tǒng)

        軟件中狀態(tài)監(jiān)測和信號分析兩個模塊均采用C#與MATLAB混合編程實現(xiàn)的。狀態(tài)監(jiān)測是對于汽輪機機組實現(xiàn)故障診斷的第一步,是故障診斷工作的重要基礎(chǔ)。有效的狀態(tài)監(jiān)測在保證機組安全、穩(wěn)定、高效運行和消除事故方面能發(fā)揮巨大的作用,本模塊主要功能包括——前期處理模塊 (包含時域波形、去直流分量、顯示數(shù)據(jù)、求絕對值)、狀態(tài)監(jiān)測模塊 (包括峰值、峰峰值、均值、均方根值、方差、標準差、峭度、波形因子、峰值因子、峭度、脈沖因子和裕度因子)和狀態(tài)分析模塊 (包括軸心軌跡圖、極坐標圖、頻譜圖、波德圖)。鏈接好數(shù)據(jù)采集系統(tǒng)后,選擇相應(yīng)的分析功能,運行效果如圖4所示。在該圖中,峰值、峰峰值等以列表的方式顯示其值,而時域波形圖、軸心軌跡圖等以圖形化的方式顯示,兩者結(jié)合于同一界面,極大的方便了設(shè)備狀態(tài)的監(jiān)測與分析。

        狀態(tài)信號分析是用來實現(xiàn)對汽輪機組實時監(jiān)測的信號進行分析的,并以圖形界面的形式顯示出來,以方便有關(guān)專家實時分析汽輪機的振動信號,并及時診斷其產(chǎn)生的故障,最終實現(xiàn)故障的修復(fù)。因此,在本模塊中需要做出直觀的狀態(tài)信號分析平臺的顯示界面,并顯示出汽輪機振動信號的分析圖譜,主要進行信號的頻譜分析及相干分析的圖形化顯示。運行效果如圖5所示,從圖中可以看出,汽輪機振動信號的分析圖譜均實現(xiàn)圖形化顯示,使故障的診斷變得直觀,快捷。

        圖4 狀態(tài)監(jiān)測界面

        圖5 狀態(tài)信號分析平臺界面

        兩模塊的開發(fā)過程相類似,只是各自包含的MATLAB算法不同,主要開發(fā)過程如下:

        (1)在MATLAB 中編寫各個子功能的算法,并各自保存為*.m 文件,按照2.1的步驟生成.NET 組件Untitled1.dll。

        (2)按照2.2中 (1)至 (3)的步驟建立起狀態(tài)監(jiān)測界面和狀態(tài)信號分析平臺界面,并設(shè)置好C#調(diào)用MATLAB的配置。其中,在 (3)中所建立的靜態(tài)類為Get-Function.cs。

        (3)以3.1與3.2 中的方式添加好窗體嵌入的程序,將子功能名稱添加到一個Treeview 控件中,并在Treeview控件的雙擊事件中添加調(diào)用GetFunction的方法代碼以及窗體傳遞代碼。其中,狀態(tài)監(jiān)測模塊中一些功能方法,如峰值,返回的是數(shù)值數(shù)據(jù),則以合適的數(shù)據(jù)類型進行接收,并傳遞到文本框中,結(jié)果如圖4所示。在圖譜顯示的功能調(diào)用中,要將Figure窗嵌入主界面中,主要代碼如下:

        GetFunction.Myfft1();//調(diào)用對應(yīng)于Treeview 節(jié)點雙擊事件的圖譜計算方法

        ControlHost listControl=new ControlHost(400,350);

        userControl11.border1.Child=listControl;

        Application.DoEvents();

        從圖4和圖5中可以看出,一個完整的MATLAB繪圖窗體嵌入到了C#開發(fā)的各自界面中,MATLAB繪圖窗體中的所有工具,如放大縮小、移到等,也都可以正常使用,這為狀態(tài)監(jiān)測和后續(xù)的信號處理工作都帶來很大的方便。

        另外,如果混編后的程序或軟件要在沒有安裝相應(yīng)版本的MATLAB與VisualStudio的計算機上運行,則需要安裝 相 應(yīng) 版 本 的 兩 個 組 件:①安 裝 .NET 框 架 (Microsoft.NET framework),以支持C#代碼的編譯;②安裝MCR (MATLAB component runtime)以支持MATLAB程序的運行。

        5 結(jié)束語

        本文提出一種基于C#.NET與MATLAB 混編的Figure窗口嵌入WinForm 方法,通過汽輪發(fā)電機組的狀態(tài)監(jiān)測與故障診斷軟件開發(fā)實例的驗證,本文所提的方法能較好的將Figure窗口嵌入WinForm 中,增強了軟件的融合性,方便了用戶操作。另外,本文所提的方法還可以廣泛用于各類用到C#調(diào)用MATLAB混編的科研與商業(yè)軟件開發(fā)中,縮短開發(fā)周期,提高開發(fā)效率,降低人力成本。

        [1]ZHANG Liang,HE Yexi.Research and application of hybrid programming with Matlab,Access and VB.NET [J].Computer Engineering and Design,2009,30 (5):1232-1235 (in Chinese).[張良,何也熙.Matlab、Access和VB.NET 混合編程方法的研究和應(yīng)用 [J].計算機工程與設(shè)計,2009,30(5):1232-1235.]

        [2]WANG Haigang,ZHANG Kunyu,ZHANG Yanjia,et al.Aplication of mixed programing With VC and MATLAB in image processing [J].Computer Applications and Software,2012,29 (1):273-275 (in Chinese). [王海崗,張坤宇,張雁佳,等.VC 與MATLAB 混合編程在圖像處理中的應(yīng)用[J].計算機應(yīng)用與軟件,2012,29 (1):273-275.]

        [3]Bistak P.Advanced remote laboratory for control systems based on Matlab and.NET platform [C]//IEEE 11th International Conference on Emerging eLearning Technologies and Applications.IEEE,2013:35-39.

        [4]JIAO Gangling,DENG Jianhui,HAN Xiao.Hybrid programming of VisualC#.NET and MATLAB [J].Journal of Naval Aeronautical and Astronautical University,2008,23 (1):109-111 (in Chinese). [焦綱領(lǐng),鄧建 輝,韓嘯.MATLAB與Visual C#.NET 混合編程 [J].海軍航空工程學(xué)院工程學(xué)報,2008,23 (1):109-111.]

        [5]QIN Jian,WANG Ping,TU Xuewei,et al.Application of integrated programming between C#.NET and MATLAB in atmosphere sounding data contrast[J].Meteorological,Hydrologicaland Marine Instruments,2009 (2):56-62 (in Chinese).[秦鍵,王萍,涂雪偉,等.C#.NET 與MATLAB混合編程在探空數(shù)據(jù)對比中的應(yīng)用 [J].氣象水文海洋儀器,2009 (2):56-62.]

        [6]Bayindir R,Kaplan O,Can C.C#.NET and MATLAB based simulation program for basic electrical circuits[C]//International Aegean Conference on Electrical Machines and Power Electronics and Electromotion Joint Conference.IEEE,2011:430-435.

        [7]CHEN Huajie,SHI Junfeng,LIN Yuesong.VC\ Matlab mixed programming based on COM and its application in SAR image classification [J].Journal of Mechanical & Electrical Engineering,2011,28 (11):1377-1381 (in Chinese).[陳華杰,史俊峰,林岳松.基于COM 的VC/Matlab混合編程及其在SAR 圖像分類中的應(yīng)用 [J].機電工程,2011,28 (11):1377-1381.]

        [8]YAO Guangqiang,CHEN Liping.Integrated programming between C#and Matlab based on component object model[J].Computer Engineering,2008,34 (14):87-89 (in Chinese).[姚光強,陳立平.基于COM 技術(shù)的C#與Matlab混合編程[J].計算機工程,2008,34 (14):87-89.]

        [9]WU Huanrui,CHE Zihui.C#.NET calling Matlab on hybrid programming [J].Computer Study,2010 (4):93-94 (in Chinese).[吳煥瑞,車紫輝.C#.NET 調(diào)用Matlab進行混合編程 [J].電腦學(xué)習(xí),2010 (4):93-94.]

        [10]WANG Huibin.Fault diagnostic expert system of turbine generator sets based on rule reasoning and case reasoning [D].Lanzhou:Lanzhou University,2014:1-2 (in Chinese).[王慧濱.基于規(guī)則和案例推理的汽輪發(fā)電機組故障診斷專家系統(tǒng) [D].蘭州:蘭州理工大學(xué),2014:1-2.]

        猜你喜歡
        窗體控件調(diào)用
        核電項目物項調(diào)用管理的應(yīng)用研究
        試談Access 2007數(shù)據(jù)庫在林業(yè)檔案管理中的應(yīng)用
        檔案天地(2019年5期)2019-06-12 05:12:02
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        基于LayeredWindow的異形窗體局部刷新
        中文信息(2014年2期)2014-03-06 23:49:14
        巧設(shè)WPS窗體控件讓表格填寫更規(guī)范
        利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
        就這樣玩會VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        WinCE.net下圖形用戶界面的開發(fā)
        亚洲国产精品久久艾草| 亚洲国产一区二区三区视频在线| 亚洲福利一区二区不卡| 美女视频在线观看亚洲色图 | 久久久精品久久日韩一区综合| 亚洲成AV人片在一线观看| 一卡二卡国产av熟女| 亚洲熟妇无码av在线播放 | 最新国产乱视频伦在线| 在线观看免费人成视频国产| av手机在线观看不卡| 男女做爰猛烈啪啪吃奶动 | 撕开奶罩揉吮奶头视频| 精品一区二区av天堂| 女人天堂av免费在线| 成熟了的熟妇毛茸茸| 国产精品va在线观看无码| 青草青草伊人精品视频| 亚洲男同免费视频网站| 少妇愉情理伦片| 久久中文字幕av一区二区不卡| 日韩人妻中文字幕一区二区| 国产一区二区av免费在线观看| 国产激情久久久久影院老熟女 | 日本不卡在线一区二区三区视频| 国产成人亚洲系列毛片| 国产国产人免费人成免费视频| 亚洲av鲁丝一区二区三区| 无人视频在线播放在线观看免费| 亚洲成人av在线第一页| 国产精品v欧美精品v日韩精品 | 精品一区二区三区长筒靴| av影院在线免费观看不卡| 中国凸偷窥xxxx自由视频| 在线亚洲AV不卡一区二区| 少妇又紧又爽丰满在线视频| 国产精品电影久久久久电影网| 国产一区二区三区观看视频| 国产成人一区二区三区乱| 亚洲av无码精品色午夜在线观看 | 国产精品黑色丝袜在线播放|