久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Visual C ++ 調(diào)用MATLAB的方法及其應(yīng)用

 thw_nuaa 2015-07-11

摘要:介紹了MATLABengine的用途、主要庫(kù)函數(shù)及VC調(diào)用MATLAB engine的詳細(xì)步驟,。利用這項(xiàng)技術(shù),,精確故障定位綜合軟件實(shí)現(xiàn)了以VC編寫主界面,調(diào)用MATLAB完成故障分析和波形顯示的功能,,從而縮短了程序開發(fā)周期,,減少了程序員的工作量。最后簡(jiǎn)單介紹了該軟件的其它功能,。

關(guān)鍵詞:Visual C++,;MATLABengine;精確故障定位

 

MATLAB是美國(guó)MathWorks公司自80年代中期推出的數(shù)學(xué)軟件,,它在矩陣運(yùn)算,、二維和三維圖形的繪制、數(shù)值擬合等方面均有極強(qiáng)的功能,,已被廣泛運(yùn)用于數(shù)字信號(hào)處理,、電力系統(tǒng)仿真等各個(gè)領(lǐng)域。MATLAB的突出特點(diǎn)是簡(jiǎn)潔,,它利用其豐富的函數(shù)資源,,給用戶帶來最直觀、最簡(jiǎn)潔的程序開發(fā)環(huán)境[2]

Visual C++是Microsoft公司推出的可視化編程環(huán)境,,它是目前綜合性最高,、最強(qiáng)大、也是最復(fù)雜的軟件開發(fā)工具之一,,應(yīng)用極為廣泛[1],。

精確故障定位綜合軟件是為多端信號(hào)輸電線路故障精確定位系統(tǒng)所設(shè)計(jì)的,它實(shí)現(xiàn)的主要功能為:

(1) GPS同步循環(huán)采樣,;

(2) 嵌入超級(jí)終端應(yīng)用程序,,通過MODEM實(shí)現(xiàn)輸電線路雙端采樣信號(hào)的傳輸;

(3) 分析故障數(shù)據(jù),,判斷故障相別,,精確定位故障點(diǎn)位置;

(4) 根據(jù)采樣數(shù)據(jù)繪制故障電壓,、電流波形以及各相電壓,、電流的頻譜圖,。

本軟件的主界面是采用VC編寫,,而分析計(jì)算故障點(diǎn)位置及波形顯示等功能由MATLAB實(shí)現(xiàn)。VC的圖形界面編程能力強(qiáng)大,,菜單,、工具條、快捷方式等實(shí)現(xiàn)起來很簡(jiǎn)單,,并且生成的應(yīng)用程序可脫離VC編譯環(huán)境獨(dú)立運(yùn)行,,但要完成數(shù)學(xué)計(jì)算功能如傅立葉變換等就需用戶自己編寫函數(shù),繁瑣不便,。而MATLAB有豐富的函數(shù)資源供用戶直接調(diào)用,,且其繪圖功能強(qiáng)大,較之VC其語(yǔ)言更為簡(jiǎn)潔明了,,并且生成的圖形可輕松實(shí)現(xiàn)多種功能,,諸如圖形添加文字說明、縮放,、旋轉(zhuǎn),、坐標(biāo)軸標(biāo)注、曲線說明等,,這些若由VC來實(shí)現(xiàn)將極為復(fù)雜,。MATLAB也有不足之處,比如它不能脫離其編譯環(huán)境運(yùn)行,,其次是它雖有界面編寫功能,,但對(duì)于一個(gè)綜合性的軟件來說其界面尚顯簡(jiǎn)單粗糙,也不及VC編寫直接快捷。因此可各取VC與MATLAB所長(zhǎng),,這就涉及到如何在VC中調(diào)用MATLAB的問題,。

1  關(guān)于MATLAB engine

1.1  MATLAB engine簡(jiǎn)介

MATLAB engine是其它編程語(yǔ)言如C、Fortran與MATLAB的應(yīng)用程序接口,,通過該接口,,我們可以從自己的程序中調(diào)用MATLAB來完成計(jì)算等功能。比如,,若要在自己的程序中完成矩陣計(jì)算,、求逆、LU分解或是進(jìn)行傅立葉變換時(shí),,利用C語(yǔ)言編程可能很復(fù)雜,,而MATLAB是以矩陣和向量為基本數(shù)據(jù)單位的,且有豐富的庫(kù)函數(shù),,調(diào)用MATLABengine來完成這些功能會(huì)很容易,。再比如,要編制一個(gè)雷達(dá)信號(hào)分析綜合軟件,,可用VC作前臺(tái)界面,,而將分析計(jì)算等功能放在后臺(tái)的MATLAB中完成,這樣可縮短程序開發(fā)周期,。

MATLAB engine可作為程序中一個(gè)獨(dú)立的過程在后臺(tái)運(yùn)行,,這種特性有如下優(yōu)點(diǎn):

(1) 在UNIX上,MATLAB engine可運(yùn)行在我們自己的計(jì)算機(jī)上,,也可運(yùn)行在工作站內(nèi)任意一臺(tái)機(jī)上,,即便二者機(jī)型不同。這樣,,我們就可實(shí)現(xiàn)用戶與工作站的接口并在工作站內(nèi)速度較快的計(jì)算機(jī)上實(shí)現(xiàn)運(yùn)算功能,。

(2) 在使用MATLAB engine時(shí),我們的程序只需與較小的engine庫(kù)連接,,而不必要與整個(gè)MATLAB相連,,從而節(jié)省內(nèi)存空間。

1.2  MATLAB engine庫(kù)函數(shù)

MATLAB engine庫(kù)中主要函數(shù)如下,,這里只是粗略介紹,,未涉及到在UNIX中的應(yīng)用。具體例子可參考Matlab/extern/examples下engwindemo.c(windows),。

(1) engOpen

作用:?jiǎn)?dòng)MATLAB engine,。

語(yǔ)法:

#include“engine.h”

Engine * engOpen(const char* startcmd);

其中,,startcmd為一字符串,,用于啟動(dòng)MATLAB過程,。在Windows中,startcmd必須為NULL.

返回值:

為一指向Engine句柄的指針,。

說明:

在PC機(jī)的Windows操作系統(tǒng)下,,engOpen實(shí)質(zhì)上打開了一個(gè)通往MATLAB的ActiveX通道。MATLAB5.3版支持ActiveX Automation,,即允許1個(gè)應(yīng)用程序(控制端)去控制另1個(gè)應(yīng)用程序(服務(wù)端)的服務(wù)器協(xié)議,。MATLAB安裝完畢后,在DOS命令下鍵入:matlab/regserver,即可在Windows的注冊(cè)表中登錄關(guān)于MATLAB的ActiveX項(xiàng),。

(2) engClose

作用:退出MATLAB engine,。

語(yǔ)法:

#include“engine.h”

int engClose(Engine * ep);

其中,,ep是指向Engine的指針,。

說明:

engClose發(fā)出退出MATLAB命令,成功返回時(shí)其值為0,,否則為1,。

(3) engEvalString

作用:執(zhí)行表達(dá)式中的字符串命令。

語(yǔ)法:

#include“engine.h”

int engEvalString(Engine *ep,const char * string),;

其中,,ep是指向engine的指針,string是命令字符串,,凡可在MATLAB命令窗口中執(zhí)行的命令均可以字符串形式執(zhí)行,。例如,,繪制0~2π間的正弦曲線,,可用如下命令:

engEvalString(ep,”x=0:0.01:2 * pi;y=sin(x),;plot(x,y),;”);

(4) engGetArray

作用:從MATLAB engine工作空間內(nèi)拷貝變量值,。

語(yǔ)法:

#include“engine.h”

mxArray * engGetArray(Engine* ep,const char * name),;

其中,ep為指向engine的指針,,name是從engine中得到的mxArray名,。

說明:

engGetArray 從ep所指向的engine中讀取mxArray變量,正確返回時(shí)其值為一指向新分配的mxArray類型結(jié)構(gòu)的指針,,否則為NULL.

(5) engPutArray

作用:將變量放入MATLAB engine的工作空間,。

語(yǔ)法:

#include“engine.h”

int engPutArray(engine *ep,const mxArray * mp);

其中,,ep為指向engine的指針,,mp為指向mxArray的指針。

說明:

engPutArray將mxArray寫入engineep。如果工作空間中mxArray不存在,,則被創(chuàng)建,。若有同名的mxArray存在,它將被一新的mxArray取代,。

2  軟件編寫詳細(xì)步驟

本軟件編制的環(huán)境:

pwin98,VC++6.0,,MATLAB5.3,假設(shè)VC與MATLAB均裝在C盤下,。

(1) 生成幾個(gè)連接庫(kù)文件

VC++要成功調(diào)用MATLABengine,,還需要庫(kù)文件的支持。

目錄c:\Matlab\extern\include下有如下文件:libeng.def,,libmx.def,,libmat.def。

在DOS命令下生成如下庫(kù)文件:

c:\>cd\Matlab\extern\include\

c:\Matlab\extern\include>lib/def:libeng.def/out:libeng.lib

同樣,,可生成libmat.lib,libmx.lib,。

把生成的這三個(gè)庫(kù)文件加入VC中的project->settings->link->object/librarymodules項(xiàng)。

(2) 編寫.mat文件

在MATLAB編譯環(huán)境下,,生成函數(shù)文件[2],。例如,本軟件中實(shí)現(xiàn)波形分析功能,,繪電壓波形時(shí),,從采樣程序自動(dòng)生成的故障數(shù)據(jù)文件中讀取數(shù)據(jù)至矩陣C,abc三相電壓分別對(duì)應(yīng)于矩陣C的第一,、二,、三列,以電壓為縱坐標(biāo),,時(shí)間t為橫坐標(biāo),,于是用plot語(yǔ)句即可作出電壓波形。電流,、頻譜圖也可用同樣的方法分別作出,。圖1為一m側(cè)故障電壓波形示例圖。

 

 

(3) 生成VC主界面

VC的界面編寫很容易,,可加入菜單,、快捷方式和工具條,并設(shè)計(jì)一新圖標(biāo)[1],,如圖2所示,。

 

 

(4) 將(2)中生成的.M文件加入VC工程中

利用engine可將(2)中生成的.M文件加入VC工程中。

首先,,在調(diào)用engine的文件開頭加入:#include“engine.h”,。

其次,,在CmainFrame的構(gòu)造函數(shù)中加入如下代碼:

Engine * ep;

if (!(ep=engOpen(NULL)))

MessageBox(“Can't start MATLAB engine”,NULL,MB_OK),;

Return 0,;

并在析構(gòu)函數(shù)中加入代碼:

engClose(ep)

而對(duì)應(yīng)于菜單波形分析->電壓波形,只需加入:

engEvalString(ep,“vv”)即可,。

其中,,vv是在第(2)步MATLAB中編制的繪電壓圖的函數(shù)文件。

其它如電流圖,、頻譜圖,、故障分析功能的實(shí)現(xiàn)也與上述類似。

(5) 設(shè)置其它編譯項(xiàng)

其它相關(guān)設(shè)置還包括:

在DOS命令下運(yùn)行Matlab/regserver

Project->C/C++->Preprocessor->Preprocessordefinitions加上:MATLAB_MEX_FILE

Tools->Options->Directories

Include files添加:c:\Matlab\extern\include

Library files添加:c:\Matlab\extern\include

3  本軟件其它功能

本軟件還實(shí)現(xiàn)了采樣,、通訊等功能,,現(xiàn)簡(jiǎn)要分述如下:

(1) 采樣

由于本系統(tǒng)需在與輸電線路相關(guān)的多端母線處采集電流、電壓信號(hào),,并且這些信號(hào)必須是同時(shí)同步采集到的,,故采用了基于GPS的同步采樣。GPS的特點(diǎn)是可為全球各地隨時(shí)提供一個(gè)高精度的時(shí)鐘,,并能保證各地之間的時(shí)間誤差在1 μs以內(nèi),,這樣就保證了各端信號(hào)的同步[3]。采樣程序是預(yù)先用C語(yǔ)言編制的,,可將其在VC下生成可執(zhí)行文件,,再用SDK函數(shù)CreatProcess嵌入VC運(yùn)行。

(2) 通訊

使用調(diào)制解調(diào)器(MODEM)通過通信通道,,可實(shí)現(xiàn)輸電線路各側(cè)信號(hào)的交換,。將Windows附件中的超級(jí)終端應(yīng)用程序嵌入VC,運(yùn)行時(shí)新建一連接,,手動(dòng)撥號(hào)即可實(shí)現(xiàn)信號(hào)傳輸與交換,。

(3) 幫助

為方便用戶的使用,,本軟件還編寫了幫助文件,,用戶可通過目錄和索引方便地查詢軟件運(yùn)行環(huán)境、軟件功能及各菜單項(xiàng)使用方法及用途等,。

4  結(jié)束語(yǔ)

本軟件實(shí)現(xiàn)了多端信號(hào)精確定位故障系統(tǒng)的功能,。采用VC編制界面使得人機(jī)界面友好,操作簡(jiǎn)單方便,,一目了然,。而計(jì)算及繪圖功能MATLAB由MATLAB后臺(tái)運(yùn)行,用戶只需按照提示操作,,比如在彈出的對(duì)話框中選擇數(shù)據(jù)文件名即可看到需要的波形或故障分析結(jié)果,。當(dāng)然,,本軟件還有待進(jìn)一步改進(jìn)和完善。

 

 

 

參考文獻(xiàn)

 

[1] Kate Gregory.白軍,,譚力,,劉明輝譯.Visual C++5開發(fā)使用手冊(cè).北京:機(jī)械工業(yè)出版社,1998.

[2] 張宜華.精通MATLAB 5.北京:清華大學(xué)出版社,,1998.

[3] Qingwu Gong,Yunping Chen,Chengxue Zhang,Zhimei Wang.A Study ofthe Accurate Fault Location System for Transmission Line Using Multi TerminalSignals.Proceedings of IEEE PES Winter Meeting 2000.

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多