中文字幕视频在线免费_日韩在线精品_日韩视频免费看_中文字幕在线三区_午夜免费视频_日韩在线大片

基于VC++和MATLAB混合編程的數(shù)控軟件開發(fā)

來源:互聯(lián)網(wǎng)

點(diǎn)擊:1444

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞:MATLAB混合編程 數(shù)控軟件

      Visual C++編程環(huán)境作為一個(gè)具有卓越性能和可視化編譯環(huán)境的程序開發(fā)工具,可以開發(fā)從底層系統(tǒng)級(jí)到高層用戶級(jí)的各種數(shù)控軟件。但VC++在圖象處理、工程計(jì)算和圖形顯示方而的應(yīng)用復(fù)雜而麻煩。

      MATLAB編程語言將數(shù)值分析、矩陣運(yùn)算、信號(hào)處理等高性能的數(shù)值計(jì)算與圖形可視化集成在一起,非常有利于工程技術(shù)人員史方便地解決問題,從而大量用于科學(xué)研究和工程領(lǐng)域,然而,MATLAB還存在一些小足:MATLAB編寫的程序小能脫離MATLAB環(huán)境執(zhí)行,以行解釋方式執(zhí)行代碼的機(jī)制限制了代碼執(zhí)行速度,程序源代碼的裸露也小利于知識(shí)產(chǎn)權(quán)的保護(hù)。

      近幾年,在科學(xué)計(jì)算數(shù)控軟件的開發(fā)中,Visual C++和MATLAB混編技術(shù)越來越受到關(guān)注,采用VC++和MATLAB混編技術(shù)能夠充分發(fā)揮VC++開發(fā)平臺(tái)優(yōu)勢(shì),同時(shí)又結(jié)介了MATLAB在科學(xué)計(jì)算上的優(yōu)點(diǎn),例如矩陣運(yùn)算、大量?jī)?yōu)秀的工具箱函數(shù)等,對(duì)于數(shù)控軟件的開發(fā)創(chuàng)造了便捷而可靠的方式。

    1 VC和MATLAB集成方式

      MATLAB為了改善自身的小足小斷推出應(yīng)用程序接口組件(mex,ma},engine) ,MATLAB編譯器(mcc) , MATLAB運(yùn)行時(shí)服務(wù)器(MATLAB RuWime Server)等技術(shù),其中應(yīng)用程序接口組件(mex , mat , engine)應(yīng)用方便,但是小能脫離MATLAB環(huán)境,MATLAB運(yùn)行時(shí)服務(wù)器(MATLAB Runtime Server)仍然是命令解釋執(zhí)行方式,在運(yùn)行效率上無法與VC等一類基于代碼編譯環(huán)境的編程工具相比。小適用于計(jì)算量大的工程,其中MATLAB編譯器(mcc )可以將MATLAB的m文件(MATLAB源程序)翻譯為C++文件,插入到C\C++編譯器中(如圖1所示),是靈活實(shí)現(xiàn)VC++脫離MATLAB環(huán)境調(diào)用MATLAB功能的方法,正越來越多地應(yīng)用到科學(xué)計(jì)算數(shù)控軟件的開發(fā)中,雖然很多人開始了解通過mcc編譯器使VC十十調(diào)用MATLAB文件的方法,但調(diào)用過程中山于MATLAB文件自身的特點(diǎn)而引起了程序開發(fā)的一些問題,使得很多人并小能真正很好地使用這一方式,本文結(jié)介具體課題中的一個(gè)實(shí)例對(duì)VC++和MATLAB混編中的一些難點(diǎn)進(jìn)行分析和解決。MATLAB提供的MATLAB Add_in宏的工具條可以史方便地在VC環(huán)境中自接調(diào)用m文件,省掉了編譯和加入工程的手工步驟.但原理還是應(yīng)用了mcc編譯器,性質(zhì)相同,為了方便說明,本文中仍采用mcc編譯器的方法說明。2 混介編程的過程

      在某項(xiàng)國防基礎(chǔ)科研項(xiàng)目中,為解決數(shù)控加工過程中加工工藝參數(shù)的選擇和優(yōu)化問題,在對(duì)銑削加工過程相關(guān)動(dòng)力學(xué)仿真技術(shù)進(jìn)行充分研究的基礎(chǔ)上設(shè)計(jì)和開發(fā)了一套基于數(shù)控銑削過程的動(dòng)力學(xué)仿真優(yōu)化應(yīng)用數(shù)控軟件SimuCut。整個(gè)仿真系統(tǒng)的開發(fā)是基于動(dòng)力學(xué)仿真分析與研究的前提下,對(duì)銑削過程中所涉及到的主要物理量(銑削力,轉(zhuǎn)矩,功率,刀具和工件振動(dòng)情況,工件表而形貌,顫振穩(wěn)定域和刀具磨損等方而)給出了仿真計(jì)算,數(shù)控軟件的開發(fā)若在MATLAB下實(shí)現(xiàn),雖然能夠充分利用Ma[lah強(qiáng)大的圖形處理功能和數(shù)值計(jì)算優(yōu)勢(shì),但仿真運(yùn)算速度慢,源代碼沒有進(jìn)行編譯,并且依賴MATLAB平臺(tái),獨(dú)立性、移植性差。而在VC環(huán)境下開發(fā)則過于繁瑣,采用混編的方式就快捷多了。例如仿真系統(tǒng)軟件中一個(gè)子功能是銑削力系數(shù)的辨識(shí),需要以實(shí)測(cè)的銑削力數(shù)據(jù)以及工況條件用多元線性回歸的方法辨識(shí)出銑削力公式的系數(shù),多元線性回歸也可用C++代碼實(shí)現(xiàn),但要麻煩得多,然而MATLAB環(huán)境下只要幾個(gè)函數(shù)就可解決了,類似這樣的情況小少,考慮到一些復(fù)雜的功能可以山MATLAB工具箱的豐富數(shù)學(xué)函數(shù)輕松解決,因此充分利用MATLAB的工具箱函數(shù)可以使軟件的開發(fā)史加便捷,史加可靠。下而以具體實(shí)例說明混介編程的過程:

      (1)編寫m文件

      在MATLAB中編寫名為CEOF.m函數(shù)文件,且文件名與函數(shù)名相同,本例中CE()F川的內(nèi)容就是一個(gè)函數(shù)[K_rc,K_,,e,K_tCc,K_te,K_ac,K_ae]=CEOF(N,c,a,F(xiàn)x,F(xiàn)y,F(xiàn)z)

      其中函數(shù)參數(shù)均為數(shù)組,函數(shù)返回值是6個(gè)實(shí)數(shù),函數(shù)的功能是根據(jù)輸入的數(shù)據(jù)用多元線性回歸方法辨識(shí)出[K_rc,K_,,e,K_tCc,K_te,K_ac,K_ae]6個(gè)系數(shù),其中用到了MATLAB預(yù)估計(jì)控制工具箱的多元線性回歸函數(shù)mlr()。

      (2)編譯m文件為C++代碼

      用mcc編譯器編譯CEOF.m文件,編譯前需要設(shè)置MATLAB和VC的編譯鏈接環(huán)境,在MATLAB開發(fā)環(huán)境中鍵入mex-se[up和mhuild-setup指令分別按照它的指示進(jìn)行即可完成。

      用以下命令編譯CEOF.m文件,mcc編譯器各參數(shù)用法見文獻(xiàn)。

      mcc-B SgLcpp CEOF;

      (3)在C++編譯器中調(diào)用m函數(shù)

      打開要插入m文件功能的vC工程,把*.cpp和*.hpp以及bin文件夾拷入vC工程中,并把*.cpp加入工程,對(duì)VC編譯環(huán)境和工程本身進(jìn)行必要的設(shè)置見文獻(xiàn)。

      本例在程序界而上一個(gè)按鈕的回調(diào)函數(shù)里調(diào)用對(duì)應(yīng)的CEOF函數(shù),山于VC和MATLAB的數(shù)據(jù)類型小能通用,還需要調(diào)用m文件函數(shù)前后進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,MATLAB特定數(shù)據(jù)類型為mxArray相關(guān)函數(shù)參見文獻(xiàn),調(diào)用CEOF函數(shù)的部分代碼示例如下:結(jié)果顯示如下:

      圖2數(shù)控軟件界而上顯示系數(shù)K_re,K_re,K_tCc,K_te,K_ac,K_ae,的擬和數(shù)據(jù)值,圖3顯示K_re,K_re擬和值作為系數(shù)計(jì)算得到的估計(jì)值和實(shí)測(cè)值的對(duì)比曲線以及估計(jì)值和實(shí)測(cè)值的差值曲線。

    3 混編過程中的關(guān)鍵技術(shù)

      混編過程中,由于調(diào)用了MATLAB的動(dòng)態(tài)鏈接庫,可能產(chǎn)生如下問題:

      (1)C運(yùn)行時(shí)庫和MFC庫沖突造成重復(fù)定義錯(cuò)誤

      編譯過程有時(shí)會(huì)出現(xiàn)類似下而的錯(cuò)誤,如:NAFXC}'.LIB : error LNK2005: "void_cdecl operator delete (void*)”(??3@YAXPAX@Z) already defined in LIBCMT.Iib (delete.ob.l )。其中NAFXC}'.LIB是MFC靜態(tài)連接庫,而LIBCMT.lib靜態(tài)鏈接的C運(yùn)行時(shí)庫。

      這種情況主要是C運(yùn)行時(shí)庫和MFC的庫沖突造成的。山于第三方庫如MATLAB動(dòng)態(tài)庫的加入,使得在MFC庫運(yùn)行之前已經(jīng)運(yùn)行了C運(yùn)行時(shí)庫,造成了重復(fù)定義,解決的辦法就是將那個(gè)提示出錯(cuò)的庫放到另外一個(gè)庫的前而,這樣就可以避開這個(gè)鏈接錯(cuò)誤,在VC菜單Project->Setings->Link->Calagory選擇Input,在Objeclllibrary Modules欄中按順序添入庫的名字,且作為命令行中的前兩個(gè)庫,使各個(gè)庫按照設(shè)定的順序鏈接。例如:nafxcw.lib LIBCMT.Iib。

      (2)C運(yùn)行時(shí)庫沖突造成重復(fù)定義錯(cuò)誤

      VC工程中設(shè)置選項(xiàng)Use run-lime library用來指定程序運(yùn)行時(shí)使用的C運(yùn)行時(shí)庫(CRT Lib)單線程或多線程,靜態(tài)或動(dòng)態(tài)鏈接,Debug版本或Release版本),當(dāng)有第三方庫((Third party library )存在時(shí),很容易發(fā)生類似下而這樣的錯(cuò)誤:MSVCRT.Iib(MSVCRT.dII):error LNK2005:free already defined in LIBCMT.Iib(free.obj),這說明你的工程使用了小同類型的CRT Lib。

      由于VC對(duì)重復(fù)定義的要求比較嚴(yán)格,用第三方庫時(shí),如果用多種方法都小能解決,可以通過設(shè)置強(qiáng)制忽略重復(fù)定義,在IDE下Project->SeUings ->Link頁,選caLegroy為custom,選用force file output項(xiàng),重復(fù)定義雖然會(huì)有警告但被忽略,并只運(yùn)用第一次的定義。

      (3)標(biāo)準(zhǔn)化頭文件引起的沖突

      工程中調(diào)用了m文件,要注意有可能標(biāo)準(zhǔn)化頭文件和調(diào)用的m文件翻譯過來的C++文件中定義引起沖突,C++標(biāo)準(zhǔn)化以后的標(biāo)準(zhǔn)頭文件把標(biāo)準(zhǔn)C++庫的組件放在一個(gè)名為std的名字空問(namespace)里而,使用時(shí)要使用。sing namespace std語句使std空問中所有定義的標(biāo)識(shí)符暴露在全局空問中,一般要確定全局空問沒有重名的對(duì)象才能這么做。但并小需要特意閱讀和修改的山m文件翻譯過來的C++文件經(jīng)常會(huì)被忽略掉,如果在m文件翻譯過來的C++文件使std名字空問可見,則兩個(gè)文件里的相同名稱的標(biāo)識(shí)符都暴露在可見的名字空問里,這樣標(biāo)準(zhǔn)程序庫中類名和函數(shù)名與MATLAB庫中的類名或是函數(shù)名就有可能發(fā)生名字沖突,從而會(huì)引起ambiguous symbol(小確定的識(shí)標(biāo)符)錯(cuò)誤。解決方法是避免usingnamespace std這類語句放在可能被翻譯過來的C++文件包含的頭文件中,例如預(yù)編譯頭文件sLdafx.h等。

      (4)程序的運(yùn)行與發(fā)布的問題

    當(dāng)調(diào)用的m文件內(nèi)包含咚}形功能時(shí),程序運(yùn)行時(shí)可能出現(xiàn)只能執(zhí)行一次的情況,報(bào)錯(cuò):runtime error,abnormal program Lerminalion。這是因?yàn)镸ATLAB中函數(shù)的操作一定要在初始化MATLAB函數(shù)庫和圖像函數(shù)庫后才能調(diào)用,小然會(huì)出現(xiàn)需要C/C++函數(shù)庫”的錯(cuò)誤提示,而數(shù)學(xué)庫的啟動(dòng)和關(guān)閉要保證程序的執(zhí)行過程中它們分別只被調(diào)用1次,第二次調(diào)用就會(huì)出錯(cuò),所以最好將數(shù)學(xué)庫的啟動(dòng)和關(guān)閉語句放在程序的初始化和程序徹底退出函數(shù)中。

      由于程序中調(diào)用了MATLAB數(shù)學(xué)函數(shù)庫或圖形庫中的函數(shù),所以需要附帶MATLAB的這些函數(shù)庫才能在沒有安裝MATLAB的機(jī)器上運(yùn)行,mglinsLaller.exe解壓出的bin\win32目錄下的所有鏈接庫拷到開發(fā)程序的所在目錄中并隨程序一起移植即可。

    4 結(jié)束語

      本文討論的動(dòng)力學(xué)仿真數(shù)控軟件開發(fā)實(shí)例是在VisualC++6.0和MATLAB6.1的平臺(tái)上編譯運(yùn)行的,通過VisualC++和MATLAB混編技術(shù)可以結(jié)介Visual C++的強(qiáng)大開發(fā)能力和MATLAB的豐富的工具箱快速開發(fā)出融介大量科學(xué)計(jì)算功能的應(yīng)用程序,這種混編技術(shù)的研究和開發(fā)在圖象處理、信號(hào)處理等需要大量計(jì)算、可視化界而的工程應(yīng)用領(lǐng)域有廣泛的應(yīng)用價(jià)值。靈活運(yùn)用這種聯(lián)介編程方法,能夠開發(fā)出界而友好、功能強(qiáng)大、小依賴于MATLAB環(huán)境的應(yīng)用程序數(shù)控軟件,并有效地提高應(yīng)用系統(tǒng)的精確度和穩(wěn)定性。

    (審核編輯: 智匯胡妮)

    聲明:除特別說明之外,新聞內(nèi)容及圖片均來自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請(qǐng)聯(lián)系我們刪除。

    主站蜘蛛池模板: 色天天综合久久久久综合片 | 色成人免费网站 | 国产精品无码久久久久 | 国产福利视频在线观看 | 欧美成人久久 | 亚洲成人久久久久 | 日韩色| av短片在线| 日韩欧美中文字幕在线视频 | 日韩精品免费一区二区夜夜嗨 | 午夜国产影院 | 成人免费毛片aaaaaa片 | 亚洲精品久久久一区二区三区 | 成人九九视频 | 亚洲 欧美 日韩在线 | 久久精品久久久久久 | 久久com | 久久精品无码一区二区日韩av | 亚洲综合日韩 | 欧美国产一区二区三区 | 野狼在线社区2017入口 | 国产日韩欧美不卡 | 久久精品国产99国产精品 | 国产精品久久久久久福利一牛影视 | 一区二区三区在线播放 | 久久成人国产精品 | 伊人色私人影院蜜桃va | 成人精品一区亚洲午夜久久久 | 国产精品视频一区二区三区不卡 | 在线观看日韩精品 | 欧美精品成人一区二区三区四区 | 久久草在线视频 | 国产99久久 | 伊人短视频 | 精品中文字幕一区 | 午夜成人免费电影 | 国产成人免费 | 久久久久久综合 | 国产一区二区三区免费看 | 中文字幕1区2区3区 日韩免费高清视频 | 日韩激情一区二区三区 |