楊 林,程 濤,宋小春
(1湖北工業(yè)大學(xué)機械工程學(xué)院,湖北 武漢430068;2湖北省現(xiàn)代制造質(zhì)量工程重點實驗室,湖北 武漢430068)
漏磁無損檢測方法具有檢測靈敏度高、檢測速度快以及對鐵磁性材料內(nèi)外表面缺陷均有較好檢測能力等優(yōu)點,在鋼管、鋼板等鐵磁性構(gòu)件的快速自動化檢測方面表現(xiàn)出顯著優(yōu)勢[1-3].其中,磁化是漏磁檢測的前提,如果構(gòu)件沒有被磁化到合適的程度,缺陷就很難在其表面形成可被檢出的漏磁場,或者因形成的漏磁場很弱而被噪聲淹沒,影響到漏磁檢測系統(tǒng)的檢測精度和靈敏度.因此,進(jìn)行漏磁檢測系統(tǒng)設(shè)計前,一般需根據(jù)檢測對象的結(jié)構(gòu)尺寸,仿真計算并分析外加勵磁場對檢測對象磁化飽和程度的影響,以優(yōu)化勵磁裝置磁路結(jié)構(gòu)并確定其參數(shù).由于ANSYS軟件具有計算精度高、結(jié)果顯示方式靈活多樣等優(yōu)點,因此,其磁場分析模塊在漏磁檢測有限元分析方面得到廣泛應(yīng)用[4-5],特別是其提供的參數(shù)化設(shè)計語言(ANSYS Para metric Design Language,APDL)功能為模型參數(shù)修改和重復(fù)計算提供了極大的方便.然而,由于漏磁檢測對象多樣,其建模和網(wǎng)格劃分方法各異,對勵磁裝置進(jìn)行優(yōu)化時需反復(fù)更改結(jié)構(gòu)參數(shù),計算并分析結(jié)果,因此,提高有限元軟件的操作友好性和計算效率,是有限元軟件用戶關(guān)注的主要問題.為此,本文根據(jù)漏磁檢測有限元分析實際需要,分析了基于ANSYS參數(shù)化設(shè)計語言、數(shù)據(jù)庫技術(shù)和VC++程序設(shè)計方法的有限元軟件二次開發(fā)技術(shù),設(shè)計并實現(xiàn)了一套仿真計算過程對用戶透明的漏磁檢測有限元計算軟件.
軟件的基本架構(gòu)主要包括對用戶透明的運算系統(tǒng)、文件系統(tǒng)以及可視化用戶界面等(圖1).其中,軟件的運算系統(tǒng)由大量抽象的APDL模版文件組成,每個APDL模版文件主要包括數(shù)值計算以及ANSYS命令封裝.根據(jù)檢測對象(管、桿、板材等)、磁化方式(周向和軸向)等不同,每個APDL模版文件對應(yīng)著一種具體的漏磁檢測有限元分析模型;用戶界面包括用戶參數(shù)輸入界面和有限元計算結(jié)果顯示界面.通過VC++與ANSYS軟件之間的通訊,實現(xiàn)模版文件選擇、參數(shù)設(shè)置與傳遞、有限元計算和結(jié)果顯示等.
圖1 軟件基本架構(gòu)
軟件運行時,首先對用戶設(shè)置的參數(shù)進(jìn)行后臺處理,生成APDL計算模版文件,即漏磁檢測有限元分析的參數(shù)化設(shè)計代碼;然后,通過VC++程序設(shè)計的界面,輸入相關(guān)參數(shù),并更新模版文件中的特定參數(shù),從而獲得ANSYS可執(zhí)行的命令流批處理文件.程序運行流程如圖2所示.
圖2 程序運行流程
APDL是一種解釋性的高級程序語言,提供一般程序語言的功能,如數(shù)值運算、邏輯運算、重復(fù)執(zhí)行命令和用戶程序以及訪問ANSYS有限元數(shù)據(jù)庫等.抽象模版文件通過APDL完成參數(shù)化建模、材料定義、網(wǎng)格劃分、載荷和邊界條件定義、分析控制和求解以及參數(shù)化后處理結(jié)果的顯示等,從而實現(xiàn)參數(shù)化有限元分析的全過程.ANSYS自動生成的日志文件(文件格式為*.log)是模版文件設(shè)計的基礎(chǔ).抽象模版文件由于缺乏具體的參數(shù)數(shù)值,沒有指定求解方式等具體內(nèi)容,因此只有通過用戶界面交互操作,輸入具體的參數(shù),才能在VC++程序中組合形成分析流程完整的模版文件.
將漏磁檢測有限元分析輸出的日志文件進(jìn)行修改和簡化,并對待定參數(shù)進(jìn)行特殊標(biāo)記,即可得到用于漏磁檢測有限元分析的APDL模版文件.該模版文件主要包括8個部分:定義單元類型;定義檢測對象、磁體、銜鐵及空氣材料屬性;建立漏磁檢測有限元分析幾何模型;規(guī)劃模型的網(wǎng)格劃分;劃分網(wǎng)格;確定邊界條件;選擇求解類型;后處理定義(結(jié)果顯示以及輸出).在使用過程中,VC編寫程序通過逆向原理,將用戶輸入的具體數(shù)值自動替換待定參數(shù),即可生成具體可運行的APDL命令流.
本系統(tǒng)采用參數(shù)化設(shè)計方法,使用APDL語言編寫漏磁檢測有限元分析程序,基于Visual Studio2005編寫自主軟件平臺,實現(xiàn)參數(shù)的傳遞和結(jié)果的顯示.因此,VC++與ANSYS軟件之間的通訊需完成以下任務(wù):使用VC++編寫的自主化軟件調(diào)用ANSYS、自主化軟件讀取APDL文件、存儲及調(diào)用用戶每次計算輸入的參數(shù)組.有關(guān)VC++調(diào)用ANSYS軟件的方法在ANSYS幫助文件[6]中都有所表述,其程序設(shè)計邏輯流程見圖3.首先是確定程序運行的工作目錄,并獲取ANSYS的安裝目錄,以便調(diào)用ANSYS程序及其附屬參數(shù),為后續(xù)運行做準(zhǔn)備.需要說明的是:
1)應(yīng)該正確選用產(chǎn)品特征碼,因為不同的分析類型選用不同的產(chǎn)品特征碼,漏磁檢測屬于電磁場分析,因此其選擇的特征碼應(yīng)為emag;
2)因為ANSYS軟件讀取命令流的字符要求為ASCII,因此模版代碼或者生成的具體APDL運行文件須保存為ASCII格式;
3)參數(shù)化設(shè)計語言中的部分命令在安裝目錄下才有效,若程序預(yù)處理時將其定義其他目錄,則該命令會失效,如命令流中/show語句只能在程序目錄中生成圖形文件,否則,鋼管及銜鐵中的磁力線分布、漏磁場的磁通密度等將均無法顯示;
4)在調(diào)用ANSYS前,需配置資源目錄,如模版文件的存放地址、現(xiàn)有分析方案的參數(shù)數(shù)據(jù)庫等,如果不進(jìn)行配置,則程序后續(xù)運行毫無意義.
圖3 VC++調(diào)用ANSYS軟件流程
相比傳統(tǒng)的可視化界面,F(xiàn)lash界面美觀且開發(fā)周期短.相同效果的軟件界面,F(xiàn)lash還可以節(jié)約代碼編寫量.為此,本文主要分析VC++與Flash之間的數(shù)據(jù)交換、Flash在VC++程序中的右鍵屏蔽以及Flash窗口控制命令向VC++程序傳遞等問題.
1.4.1 VC++與Flash軟件之間的數(shù)據(jù)交換VC++編譯器通常會給Active X控件提供相應(yīng)的封裝包,該包提供當(dāng)前控件的所有功能.針對Flash,VC++提供了CWnd封裝包——CShockwaveFlash.在Flash腳本語言2.0版本中,F(xiàn)lash與VC++程序之間的命令傳遞只有FSCo mmand,這種方式無法傳遞參數(shù)及數(shù)據(jù).而在本系統(tǒng)中,因為軟件要選擇分析類型,調(diào)用有限元分析參數(shù)庫,并且還要返回數(shù)據(jù)組成APDL文件,所以使用該版本無法滿足其界面交互要求.
而As3.0提供了外部應(yīng)用程序接口,能異步調(diào)用且返回調(diào)用參數(shù)值,其Exter nal Interf ace方式給程序設(shè)計帶來了極大的便利.這樣,F(xiàn)lash程序通過Exter nal Interf ace即能與CShock waveFlash進(jìn)行通訊,其過程如圖4所示.
圖4 Flash與VC++通訊過程
VC++軟件編譯器通過CShock waveFlash控件,為Exter nal Interface提供了一個事件接收器Flash Call.Flash Call事件的響應(yīng)參數(shù)為request,其在External Interface的調(diào)用過程中,讀取的數(shù)據(jù)以XML方式進(jìn)行封裝.Flash為了獲取調(diào)用Exter nal Interface的方法名和參數(shù),需先解析request封裝的XML包.本系統(tǒng)處理Flash Call事件采用void方法,返回數(shù)據(jù)使用Set Ret ur n Val ue方法.其中,返回的數(shù)據(jù)也必須是符合Flash規(guī)范的XML格式.例如,要返回X ML數(shù)據(jù)組,把XML添加到〈string〉〈/string〉中,最后Flash平臺通過new XML(str)的方法動態(tài)生成數(shù)據(jù)項.
1.4.2 屏蔽軟件界面的右鍵信息 自主開發(fā)的軟件在使用過程中,往往不希望用戶在軟件界面中右鍵彈出Flash屬性菜單.雖然VC++控件提供的Set Menu方法能屏蔽絕大部分菜單,但Flash版權(quán)信息無法消除.為此,可以截獲組件的 WM_RBUTTONDOWN消息實現(xiàn)對Flash右鍵菜單的屏蔽.這樣,軟件操作時可以監(jiān)聽并截獲用戶的右鍵消息,并將消息傳遞到其他類,而不傳遞到Flash控件中去.
在VC++8.0平臺中實現(xiàn)方法如下:CShockwaveFlash派生新的類dull,然后監(jiān)聽WM_RBUTTONDOWN消息,直接在消息處理函數(shù)中注釋掉父類,最后將Flash對象的類修改為新的派生類Dull即可.
1.4.3 Flash控制命令的傳遞 Flash通過使用fsco mmand命令可以實現(xiàn)退出等功能.但是,由于VC++設(shè)計的軟件平臺將Flash嵌入軟件內(nèi)部,因此Flash的退出命令不能直接控制軟件窗體的整體退出.為此,可以在工程項目的對話框CUIShow Dlg類聲明中添加DECLARE_EVENTSINK MAP()和消息映射
af x_msg void On FSCo mmand Flash(LCTSTR co mmand.LCTSTR ar gs);
這樣,當(dāng)用戶進(jìn)行窗口最大化、最小化操作時,工程文件中CUIShow Dlg的 WM_SIZE響應(yīng)通常會把Flash控件布滿整個窗口.不過,這種實現(xiàn)方式可能會造成Flash界面頻繁閃爍.為此,系統(tǒng)采用先重載控件和對話框擦除背景事件,再用代碼防止控件重繪自身的方式來實現(xiàn)窗口控制.
基于上述方法設(shè)計的漏磁檢測有限元分析軟件界面如圖5所示.
圖5 軟件系統(tǒng)操作界面
首先,用戶可以根據(jù)實際的漏磁檢測物理模型選擇磁化方式和檢測方案;然后,系統(tǒng)根據(jù)用戶的選項,從后臺讀取相關(guān)APDL模版文件,并提示用戶輸入模版文件中的待定參數(shù);接著,軟件開始進(jìn)行有限元計算,并可根據(jù)用戶需要以多種形式顯示計算結(jié)果,圖6所示即為鋼管周向磁化漏磁檢測有限元計算結(jié)果的兩種顯示方式.
圖6 計算結(jié)果顯示
由于軟件的核心計算功能是通過ANSYS完成的,因此其計算結(jié)果具有一定的準(zhǔn)確性和可靠性.同時,通過全中文化的界面,用戶只需進(jìn)行簡單的方案選擇和參數(shù)設(shè)置即可完成從有限元建模到數(shù)值計算、結(jié)果顯示等全過程,其不僅極大地簡化了有限元計算過程,還提高了計算效率,使初學(xué)者或一般工程技術(shù)人員都能有效進(jìn)行漏磁檢測有限元分析.
根據(jù)漏磁檢測有限元計算原理,基于ANSYS參數(shù)化設(shè)計語言、數(shù)據(jù)庫技術(shù)和VC++程序設(shè)計方法,開發(fā)了一套漏磁檢測有限元專用分析軟件.運行結(jié)果表明,該軟件不僅簡化了漏磁檢測有限元分析過程,提高有限元計算效率,而且計算結(jié)果準(zhǔn)確可靠,為漏磁檢測系統(tǒng)勵磁裝置和傳感器優(yōu)化設(shè)計提供了一種有效的仿真分析工具.
[1]康宜華,石曉鵬.基于單一軸向磁化的鋼管高速漏磁檢測方法[J].機械工程學(xué)報,2010,46(10):8-13.
[2]宋小春,黃松嶺,趙 偉,等.高清晰度儲罐底板漏磁檢測器的研制[J].化工自動化及儀表,2007,34(1):77-80.
[3]宋小春,黃松嶺,趙 偉.天然氣長輸管道裂紋的無損檢測方法[J].天然氣工業(yè),2006,26(7):103-106.
[4]李路明,張家駿,李振星,等.用有限元方法優(yōu)化漏磁檢測[J].無損檢測,1997,19(6):154-158.
[5]李鶯鶯,靳世久,魏茂安.管道漏磁法檢測的ANSYS仿真研究[J].無損檢測,2005,27(2):72-76.
[6]博嘉科技.有限元分析軟件——ANSYS融會與貫通[M],北京:中國水利水電出版社,2002.