吳傳海,胡友民,金 超,吳 波
WU Chuan-hai, HU You-min, JIN Chao, WU Bo
(華中科技大學(xué) 數(shù)字制造裝備與技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,武漢 430074)
隨著現(xiàn)代生產(chǎn)的發(fā)展和科學(xué)技術(shù)的進(jìn)步,設(shè)備的結(jié)構(gòu)越來越復(fù)雜,功能越來越完善,自動化程度也越來越高。由于裝備的故障而帶來的負(fù)面影響越來越多,造成巨大的經(jīng)濟(jì)負(fù)擔(dān),影響企業(yè)的競爭力,設(shè)備狀態(tài)監(jiān)測和故障診斷技術(shù)已經(jīng)受到世界各國技術(shù)人員的高度重視[1]。高速高精數(shù)控機(jī)床的特點(diǎn)是速度快、加速度大,而機(jī)床的力學(xué)特性(如結(jié)構(gòu)、間隙、動靜剛度、摩擦特性、振動等因素)是影響機(jī)床運(yùn)行效率的瓶頸,機(jī)床長期運(yùn)行之后,動態(tài)特性將發(fā)生退化,機(jī)床的穩(wěn)定性及加工精度隨之降低,為了確保機(jī)床的加工質(zhì)量和效率[2],防止機(jī)床動態(tài)特性降低,需要對機(jī)床各項(xiàng)動態(tài)特性指標(biāo)進(jìn)行監(jiān)測診斷。機(jī)械結(jié)構(gòu)的復(fù)雜性決定了機(jī)床加工過程的復(fù)雜性,從而也導(dǎo)致了機(jī)床動態(tài)特性監(jiān)測的復(fù)雜性。機(jī)床動態(tài)特性各部件的狀態(tài)變化周期長,趨勢不明顯,比較方便使用研發(fā)的動態(tài)特性監(jiān)測儀,對機(jī)床狀態(tài)進(jìn)行長期監(jiān)測。故障的診斷與分析是機(jī)床動態(tài)性能監(jiān)測分析系統(tǒng)的核心功能,這部分模塊功能涉及到許多復(fù)雜算法的實(shí)用,而選擇合適的程序開發(fā)方法,對算法功能的實(shí)現(xiàn)有著重要的意義。鑒于VC強(qiáng)大的界面設(shè)計(jì)功能,MATLAB優(yōu)秀的數(shù)值分析與工程計(jì)算特性,所以選擇使用VC與MATLAB混合編程開發(fā)故障診斷與分析模塊。
圖1為機(jī)床狀態(tài)測試分析系統(tǒng)工作流程圖,通過傳感器獲取運(yùn)行設(shè)備的狀態(tài)信息,對采集數(shù)據(jù)進(jìn)行分析處理,識別出設(shè)備當(dāng)前的狀態(tài),通過分析軟件做出診斷決策,進(jìn)而對機(jī)床進(jìn)行技術(shù)調(diào)整,通過這一反饋過程[3],可以提高機(jī)床的特性,從而提高加工質(zhì)量和生成效率。美國NI公司在這個技術(shù)領(lǐng)域處于世界領(lǐng)先水平,圖2為NI PXI-9230實(shí)物圖。
圖1 機(jī)床狀態(tài)分析測試系統(tǒng)流程
圖2 NI PXI-9230
本課題中所開發(fā)的監(jiān)測系統(tǒng)通過采集設(shè)備的振動信號,加速度信號,溫度信號,對設(shè)備進(jìn)行實(shí)時(shí)監(jiān)測,并通過采集得到的數(shù)據(jù)對設(shè)備進(jìn)行特性分析和診斷,根據(jù)數(shù)控機(jī)床動態(tài)特性監(jiān)測分析系統(tǒng)的功能,選擇合適的硬件,包括傳感器,數(shù)據(jù)采集卡,上位機(jī)。最為核心的部分為數(shù)控機(jī)床動態(tài)特性監(jiān)測分析系統(tǒng)軟件的設(shè)計(jì),按功能需要,該系統(tǒng)軟件的總體結(jié)構(gòu)如圖3所示:
圖3 軟件的總體結(jié)構(gòu)圖
系統(tǒng)按工作過程劃分為三個層次:
第1層次:數(shù)據(jù)采集與信號調(diào)理。傳感器獲取的信號較微弱,通過對電流或電壓信號進(jìn)行放大、濾波處理后,用采集設(shè)備將模擬信號轉(zhuǎn)化為數(shù)字信號傳輸給計(jì)算機(jī)保存。
第2層次:實(shí)時(shí)監(jiān)視與狀態(tài)識別。對設(shè)備進(jìn)行信號采集后,即獲得了設(shè)備運(yùn)行狀態(tài)信息,通過便攜式計(jì)算機(jī)實(shí)時(shí)顯示監(jiān)測過程中的振動波型、頻譜分析圖形、軸心軌跡等。在線信號分析過程主要包括常見的典型的時(shí)域、頻域等分析內(nèi)容。
第3層次:在線分析與智能診斷。根據(jù)獲取的設(shè)備運(yùn)行狀態(tài)信息,如典型特征值提取,結(jié)合基于已有的故障診斷方法來評價(jià)設(shè)備當(dāng)前的狀態(tài),如果可能存在故障,能反映出故障的相關(guān)信息。
其中第3層次功能模塊的實(shí)現(xiàn)是本系統(tǒng)設(shè)計(jì)的重點(diǎn)也是難點(diǎn),選擇合適的程序開發(fā)手段是解決這個問題的關(guān)鍵,故障分析與智能診斷模塊功能的核心算法可以選擇使用MATLAB編程語言(M代碼)開發(fā),利用VC可以設(shè)計(jì)出人性化的界面,所以選擇VC與MATLAB混合編程,下面將重點(diǎn)介紹混合編程技術(shù)的研究。
利用MATLAB接口可以在Visual C++中充分發(fā)揮MATLAB的數(shù)值計(jì)算功能,同時(shí)可以利用VC強(qiáng)大的界面開發(fā)功能,這樣可以大大減少編碼工作量[4]。
MATLAB 與C語言的接口技術(shù)即MATLAB與VC混合編程技術(shù), 它是通過應(yīng)用程序接口(API)[5]實(shí)現(xiàn)的。一般而言,MATLAB與VC混合編程的實(shí)現(xiàn)方法有以下三種:
1)通過引擎(Engine)[6],采用客戶機(jī)服務(wù)器的計(jì)算模式,通過Window的ActiveX通道和MATLAB進(jìn)行連接。具體應(yīng)用時(shí),往往在VC中設(shè)計(jì)程序框架,以編譯的程序作為前端客戶機(jī);通過調(diào)用MATLAB引擎在后臺實(shí)現(xiàn)與服務(wù)器的連接,實(shí)現(xiàn)動態(tài)通信;
2)應(yīng)用MATLAB數(shù)學(xué)函數(shù)庫,MATLAB中包含了內(nèi)容豐富的函數(shù)庫,而且還提供了與VC的數(shù)學(xué)函數(shù)接口,用戶可以方便的在VC的IDE(集成開發(fā)環(huán)境)中調(diào)用;
3)通過DLL[7]實(shí)現(xiàn)VC與MATLAB的混合編程。DLL是一個可執(zhí)行的二進(jìn)制文件。把很多通用的功能放在DLL中,可以供多個應(yīng)用程序調(diào)用,這樣可以很好的減少外部存儲空間的占有量,并實(shí)現(xiàn)代碼的共享。
第一種方法對調(diào)用MATLAB的工具箱很實(shí)用,用這種方法進(jìn)行編程開發(fā),方便結(jié)合MATLAB命令窗口調(diào)試程序,能充分發(fā)揮MATLAB編程語言簡潔容易掌握的優(yōu)點(diǎn),可以更好實(shí)現(xiàn)MATLAB工程計(jì)算優(yōu)勢,便于復(fù)雜的數(shù)學(xué)算法在工程實(shí)踐中的應(yīng)用。
第二種方法開發(fā)軟件對程序員要求較高,要同時(shí)對兩款軟件都很熟悉,對于大型復(fù)雜算法來說,這種方法將使程序開發(fā)工作量過大。用戶不能在基于MATLAB、C/C++數(shù)學(xué)函數(shù)庫的應(yīng)用程序中使用eval()和input(),不能調(diào)用MATLAB圖形句柄系統(tǒng)的函數(shù),不能調(diào)用MATLAB工具箱函數(shù),MATLAB中的一些方法在C/C++中得不到支持,這種方法不能發(fā)揮MATLAB的巨大優(yōu)勢。
第三種方法實(shí)用于小型軟件的開發(fā),可以整體減少文件外部存儲空間的占有量,但是對于大計(jì)算量的程序而言,這種方法開發(fā)的軟件穩(wěn)定性差。
介于數(shù)控機(jī)床動態(tài)特性監(jiān)測分析系統(tǒng)的復(fù)雜性,特別是該系統(tǒng)中應(yīng)用到了很多復(fù)雜的故障診斷算法,如粒子群優(yōu)化算法[8],自適應(yīng)共振理論的混合智能診斷算法[9]等等。但是這些繁雜的算法利用MATLAB實(shí)現(xiàn)起來比較方便,采用MATLAB引擎的方式實(shí)現(xiàn)混合編程,使程序開發(fā)工作量明顯減少,便于軟件維護(hù),提高故障監(jiān)測診斷分析的速度與精度。
所謂MATLAB引擎(engine),是指一組MATLAB提供的接口函數(shù),支持C/C++、Fortran等語言,通過這些接口函數(shù),用戶可以在其他編程環(huán)境中實(shí)現(xiàn)對MATLAB的控制??梢詫?shí)現(xiàn)的主要功能有:打開/關(guān)閉一個MATLAB對話;向MATLAB環(huán)境發(fā)送命令字符串;向MATLAB環(huán)境中寫入數(shù)據(jù);從MATLAB環(huán)境中讀取數(shù)據(jù)。調(diào)用引擎之前需要配置編譯器,要在VC中成功編譯,必須包含引擎頭文件engine.h,并引入MATLAB對應(yīng)的庫文件libmx.lib、libmat.lib、libeng.lib。
混合編程中的關(guān)鍵問題及解決方法
1)利用VC啟動MATLAB引擎
先定義一個指針再利用相應(yīng)的接口函數(shù)啟動引擎。具體的實(shí)現(xiàn)代碼如下:
2)建立對話框,利用V C控件實(shí)現(xiàn)對MATLAB計(jì)算程序中相應(yīng)參數(shù)的輸入
主要用到了ClassWizard定義相應(yīng)的變量,再利用Format(),engEvalString()等接口函數(shù)使得VC窗口中輸入的語句在后臺MATLAB中被執(zhí)行。
3)實(shí)現(xiàn)多維數(shù)組數(shù)據(jù)的讀入
利用相應(yīng)的API函數(shù)可以實(shí)現(xiàn)大型數(shù)組的讀入,方法是:先VC中建立一個矩陣,再把VC環(huán)境下的多維數(shù)組數(shù)據(jù)寫入該矩陣,最后利用接口函數(shù)engPutVariable()將矩陣寫入MATLAB。相應(yīng)代碼如下:
4)后臺MATLAB引擎計(jì)算結(jié)果的返回與顯示
利用MATLAB引擎計(jì)算之后,需要將計(jì)算結(jié)果返回并顯示到VC代碼構(gòu)建的窗口中,方法為:先建立一個矩陣用于存放MATLAB引擎的計(jì)算結(jié)果,再利用mxGetPr()函數(shù)讀取引擎中的數(shù)據(jù),最后利用接口函數(shù)mxGetPr將計(jì)算結(jié)果返回到VC窗口界面中。實(shí)現(xiàn)代碼如下:
絲桿驅(qū)動進(jìn)給系統(tǒng)支撐點(diǎn)軸向剛度與阻尼測量模塊是課題所研發(fā)的數(shù)控機(jī)床動態(tài)特性監(jiān)測分析系統(tǒng)中的一個關(guān)鍵模塊。該模塊的核心算法是粒子群優(yōu)化算法,算法程序采用MATLAB編程語言(M語言)編寫,然后利用VC創(chuàng)建一個單文檔應(yīng)用程序,最后在軟件的總體界面上添加一個菜單按扭,并建立相應(yīng)的消息響應(yīng)函數(shù),實(shí)現(xiàn)直接調(diào)用已創(chuàng)建的單文檔對話框,在該對話框的消息響應(yīng)函數(shù)中加入相應(yīng)的代碼,實(shí)現(xiàn)VC調(diào)用MATLAB引擎運(yùn)行相應(yīng)的算法程序,結(jié)合測量數(shù)據(jù),實(shí)現(xiàn)支撐點(diǎn)剛度與阻尼的識別。
開發(fā)以上模塊就能夠應(yīng)用論文中所研究的VC調(diào)用MATLAB引擎的技術(shù)。該模塊的開發(fā)流程如圖4所示。
圖4 模塊開發(fā)流程
圖5為所開發(fā)的數(shù)控機(jī)床動態(tài)特性分析儀的軟件界面圖,圖6為絲桿驅(qū)動進(jìn)給系統(tǒng)支撐點(diǎn)軸向剛度與阻尼測量模塊的運(yùn)行結(jié)果。
圖5 分析儀軟件界面圖
圖6 剛度與阻尼測量模塊計(jì)算界面
實(shí)驗(yàn)過程中如果是第一次調(diào)用此程序,由于需要在計(jì)算機(jī)中啟用MATLAB,所以需要幾秒種的延遲。上圖中計(jì)算結(jié)果相應(yīng)窗口中所顯示的數(shù)據(jù)即為絲桿驅(qū)動進(jìn)給系統(tǒng)支撐點(diǎn)軸向剛度和阻尼。根據(jù)該數(shù)據(jù),結(jié)合相應(yīng)的指標(biāo),對機(jī)床的狀態(tài)特性出做評估與分析,可以實(shí)現(xiàn)對支撐點(diǎn)狀態(tài)特性的識別與預(yù)測。
經(jīng)過實(shí)驗(yàn)研究開發(fā)的成果,可心得出如下結(jié)論:
1)VC調(diào)用MATLAB引擎可以避免編寫煩索的VC代碼,縮短了開發(fā)時(shí)間,提高開發(fā)效率。
2)對于復(fù)雜算法,特別是涉及到大型數(shù)據(jù)計(jì)算時(shí),文中所提的混合編程方法能更好的發(fā)揮MATLAB工程計(jì)算的優(yōu)點(diǎn),同時(shí)也增強(qiáng)了程序整體的穩(wěn)定性。
綜上所述,在涉及大型數(shù)據(jù)計(jì)算的軟件開發(fā)項(xiàng)目中,文章所研究的方法可以提供相應(yīng)的技術(shù)支持。
[1]吳旭東,夏志瀾.狀態(tài)監(jiān)測數(shù)據(jù)管理與故障診斷專家系統(tǒng)研究[J].江蘇船舶,19(3):10-12.
[2]張雪江,何永勇,等.旋轉(zhuǎn)機(jī)械狀態(tài)監(jiān)測與故障診斷系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,25(6):49-51.
[3]楊曉強(qiáng),張梅軍,等.機(jī)械設(shè)備狀態(tài)監(jiān)測系統(tǒng)[J].振動、測試與診斷,19(3):183-186.
[4]劉維.精通MATLAB與C/C++混合程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2008:49-51.
[5]孫鑫,余安萍.VC++深入詳解[M].北方電子工業(yè)出版社,2009:1-3.
[6]杜鴻飛.VC++與MATLAB混合編程之引擎操作詳解[EB/OL].http://dev.yesky.com/300/2343300.shtml.
[7]張欽.基于動態(tài)鏈接庫(DLL)的Visual C++混合編程[M].西安:西安交通大學(xué)出版社,2007:40-45.
[8]胡峰.數(shù)控機(jī)床進(jìn)給系統(tǒng)動態(tài)特性辨析與分析方法研究[D].武漢:華中科技大學(xué)出版社,2009:41-55.
[9]徐增丙.基于自適應(yīng)共振理論的混合智能診斷方法及其應(yīng)用[D].武漢:華中科技大學(xué)出版社,2009:27-33.