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

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

2015-12-20 06:56:16王文斌剡昌鋒劉朝陽
計算機工程與設計 2015年12期
關鍵詞:界面程序

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

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

0 引 言

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

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

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ù)等頻譜分析和相干分析的算法借助MATLAB,編寫MATLAB 的.m 函數(shù)文件,并通過MATLAB發(fā)布工具生成.NET 組件。在運行過程中,數(shù)據(jù)傳輸和程序調(diào)用的流程如圖2 所示。首先,用C#程序調(diào)用MATLAB發(fā)布的.NET 組件,并導入采集的時域信號數(shù)據(jù)。其 次,MCR (MATLAB component runtime)根 據(jù)所調(diào)用m 函數(shù)文件的功能,做出相應的回應,返回數(shù)值數(shù)據(jù)或者彈出MATALB繪圖窗體 (Figure)。最后,若MCR返回數(shù)值數(shù)據(jù)則傳輸給C#程序做相關處理,而若是彈出可視的Figure窗,則C#通過調(diào)用Windows操作系統(tǒng)的窗口函數(shù)查詢Figure窗體的句柄,將包含圖譜結果的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窗體應用程序。

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

3 將Figure嵌入WinForm 中

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

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

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

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

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

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

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

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

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

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

using System.Windows.Interop;

using System.Runtime.InteropServices;

using System.Threading;

using System.Windows;

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

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

3.3 在WinForm 應用程序中添加嵌入子窗體的代碼

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

4 程序設計示例

汽輪發(fā)電機組在電力生產(chǎn)中屬于極其重要設備,起著舉足輕重的作用,因此,其運行的穩(wěn)定性和可靠性跟整個電力系統(tǒng)乃至整個國民經(jīng)濟穩(wěn)定有著密切的關系。研究開發(fā)汽輪發(fā)電機組故障診斷專家系統(tǒng),有助于準確高效地對汽輪發(fā)電機組故障進行診斷與預測,對于汽輪發(fā)電機組保持良好的工作狀態(tài)具有重大的意義[10]。本文結合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)故障診斷的第一步,是故障診斷工作的重要基礎。有效的狀態(tài)監(jiān)測在保證機組安全、穩(wěn)定、高效運行和消除事故方面能發(fā)揮巨大的作用,本模塊主要功能包括——前期處理模塊 (包含時域波形、去直流分量、顯示數(shù)據(jù)、求絕對值)、狀態(tài)監(jiān)測模塊 (包括峰值、峰峰值、均值、均方根值、方差、標準差、峭度、波形因子、峰值因子、峭度、脈沖因子和裕度因子)和狀態(tài)分析模塊 (包括軸心軌跡圖、極坐標圖、頻譜圖、波德圖)。鏈接好數(shù)據(jù)采集系統(tǒng)后,選擇相應的分析功能,運行效果如圖4所示。在該圖中,峰值、峰峰值等以列表的方式顯示其值,而時域波形圖、軸心軌跡圖等以圖形化的方式顯示,兩者結合于同一界面,極大的方便了設備狀態(tài)的監(jiān)測與分析。

狀態(tài)信號分析是用來實現(xiàn)對汽輪機組實時監(jiān)測的信號進行分析的,并以圖形界面的形式顯示出來,以方便有關專家實時分析汽輪機的振動信號,并及時診斷其產(chǎn)生的故障,最終實現(xiàn)故障的修復。因此,在本模塊中需要做出直觀的狀態(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)信號分析平臺界面,并設置好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ù)類型進行接收,并傳遞到文本框中,結果如圖4所示。在圖譜顯示的功能調(diào)用中,要將Figure窗嵌入主界面中,主要代碼如下:

GetFunction.Myfft1();//調(diào)用對應于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ù)的信號處理工作都帶來很大的方便。

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

5 結束語

本文提出一種基于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 混合編程方法的研究和應用 [J].計算機工程與設計,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 混合編程在圖像處理中的應用[J].計算機應用與軟件,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). [焦綱領,鄧建 輝,韓嘯.MATLAB與Visual C#.NET 混合編程 [J].海軍航空工程學院工程學報,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ù)對比中的應用 [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 圖像分類中的應用 [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 技術的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].電腦學習,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].蘭州:蘭州理工大學,2014:1-2.]

猜你喜歡
界面程序
國企黨委前置研究的“四個界面”
當代陜西(2020年13期)2020-08-24 08:22:02
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
基于FANUC PICTURE的虛擬軸坐標顯示界面開發(fā)方法研究
“程序猿”的生活什么樣
空間界面
金秋(2017年4期)2017-06-07 08:22:16
英國與歐盟正式啟動“離婚”程序程序
電子顯微打開材料界面世界之門
人機交互界面發(fā)展趨勢研究
創(chuàng)衛(wèi)暗訪程序有待改進
主站蜘蛛池模板: 成人另类稀缺在线观看| 国产在线第二页| 久久精品人人做人人综合试看| 欧洲在线免费视频| 亚洲精品免费网站| 久久99国产综合精品1| 亚洲中文在线视频| 九九九久久国产精品| 91久久精品国产| 国产高清无码麻豆精品| 亚洲精品欧美重口| 精品国产免费观看一区| 911亚洲精品| 人人看人人鲁狠狠高清| 日本人妻一区二区三区不卡影院 | 国产新AV天堂| 香蕉视频在线观看www| 国产国产人成免费视频77777| 国内精品免费| 亚洲成人网在线播放| 毛片在线播放a| 理论片一区| 中文无码伦av中文字幕| 国产精品不卡片视频免费观看| 超碰精品无码一区二区| 国产偷国产偷在线高清| 国产男女免费完整版视频| 国产91无毒不卡在线观看| 国产成人免费高清AⅤ| 国产精品亚洲日韩AⅤ在线观看| 一区二区自拍| 亚洲一区二区三区国产精华液| 精品久久国产综合精麻豆| 欧美综合成人| 欧美视频免费一区二区三区| 欧洲精品视频在线观看| 超清无码一区二区三区| 欧美国产日产一区二区| 国产第一页免费浮力影院| 狠狠色成人综合首页| 午夜福利视频一区| 国产主播一区二区三区| 高清不卡一区二区三区香蕉| 久久精品66| 美女一区二区在线观看| 国产精欧美一区二区三区| 国产女人在线视频| 在线观看国产一区二区三区99| 免费观看亚洲人成网站| 色婷婷电影网| 国产综合网站| 精品久久人人爽人人玩人人妻| 亚洲成人精品在线| 国产在线精品99一区不卡| 日a本亚洲中文在线观看| 国产真实乱子伦精品视手机观看| 国产丝袜第一页| julia中文字幕久久亚洲| 成年女人a毛片免费视频| 亚洲欧美一区在线| 国产三级毛片| 中文字幕亚洲精品2页| 亚洲一区网站| 白丝美女办公室高潮喷水视频| 国产免费久久精品99re不卡| 最新精品久久精品| www.日韩三级| 国产精品极品美女自在线看免费一区二区| 伊人久热这里只有精品视频99| 日韩精品少妇无码受不了| 国产91线观看| 久久精品欧美一区二区| 东京热av无码电影一区二区| 久久久久国产精品熟女影院| 无码一区二区波多野结衣播放搜索| 91破解版在线亚洲| 99精品国产自在现线观看| 国产v精品成人免费视频71pao | 国产精品美女在线| 欧美午夜在线播放| 91精品国产情侣高潮露脸| 在线视频一区二区三区不卡|