韋文龍 仲梁維 陳彩鳳
摘 要:干涉檢查與產品設計研發質量有著密切聯系,無論是在組合件裝配體或模型的設計生產過程中,都可能避免不了裝配體中存在干涉的情況。因此,為快速偵測出存在干涉的位置,進而快速修正干涉現象,干涉檢查成為設計人員在建模過程中必不可少的工作。為了在建模裝配過程中給設計人員提供高效、便捷的干涉檢查方式,以VB.NET作為編程設計平臺,結合SQL Server數據庫相關知識,利用SolidWorks為軟件開發平臺,以棱形結構的千斤頂為研究對象,開發了一套動態干涉檢查系統。該系統通過人機交互界面,可實現零部件間動態干涉的快速檢查,從而顯著提升設計效率和產品質量。
關鍵詞:動態干涉檢查;SolidWorks;VB.NET;千斤頂
DOI:10.11907/rjdk.172609
中圖分類號:TP319
文獻標識碼:A 文章編號:1672-7800(2018)004-0144-04
Abstract:Interference check is closely related to the quality of product design, research and development. Interference check exists both in component assembly, model design and manufacuring. Therefore it is indispensable for designers to set up models in interference check and necessary and essential to detect interference loaction rapidly so as to achieve rapid detection. In order to provide designers with an efficient and convenient interference check during the modeling and assembly process, we develop a dynamic interference system in which VB.NET is used as the programming design platform and SolidWorks 2016 as the software development platform, and relevant knowledge of SQL Server database is combined to research on prismatic structure lifting jack through human-computer interaction. Rapid inspection of dynamic interference between parts and components is then realized to significantly improve design efficiency and product quality.
Key Words:dynamic interference checking; SolidWorks; VB.NET; lifting jack
0 引言
在經濟全球化背景下,企業面臨的競爭越來越激烈,設計的產品不僅要滿足客戶要求,還要保證產品安全可靠。為此引進計算機輔助軟件[1],并結合相關編程語言對其進行二次開發,使產品的設計和開發朝著智能化、信息化、快速化的方向發展,從而極大地節約了開發成本和設計時間,增強了企業競爭力。
產品在設計和研發過程中,通常會存在干涉現象。因此,如何快速偵測出干涉,并對其進行有效判斷與快速修正,變得極其重要。本文基于SolidWorks二次開發平臺,以能上下升降的千斤頂為研究對象,設計出能夠實現動態干涉檢查的功能系統,對設計人員快速設計出高質量的產品具有積極作用。
1 SolidWorks二次開發原理
SolidWorks是一套基于Windows的CAD/CAE/CAM/PDM集成系統,集設計、分析、加工與數據管理于一體。而SolidWorks API是SolidWorks的OLE應用程序開發接口,用戶可以利用它并通過支持OLE編程的開發工具,如VB、VBA、C等對其進行二次開發[2]。
圖1為SolidWorks的對象模型層次結構,是一個自上而下的樹型結構。
SolidWorks的OLE對象總共可分為10大類,幾乎涵蓋了所有操作,如建模、修改等基本功能,任何支持OLE和COM的編程語言都可作為SolidWorks的開發工具[3]。SolidWorks二次開發分為兩種,一種是基于自動化的,此技術只能開發EXE形式的程序;另一種是基于COM的,將程序內容以DLL插件形式嵌入到SolidWorks菜單欄中。本文以編程語言VB為開發工具[4],采用基于COM的開發方式,通過編程語言訪問這些API對象,可以輕松向SolidWorks發出操作指令,令其執行特定動作,從而快速建立適合用戶需要的功能模塊。
2 裝配動態干涉檢查系統
2.1 SolidWorks干涉檢查
SolidWorks對于干涉檢查部分,無論是組合件或零部件于靜態、動態環境下都能快速進行干涉檢測,且系統會立即以警示窗口提示存在的干涉情況,從而實現快速修正模型的全方位設計功能。
2.2 動態干涉檢查系統簡介
為解決裝配體干涉問題,以編程語言VB開發了一套簡易的動態干涉檢查系統,可為用戶提供便捷的動態干涉檢查功能模塊[5]。通過調用SolidWorks API,實現了VB與SolidWorks的連接,并通過參數化設計實現動態干涉檢查,最后利用SQI. Server數據庫讀取數據[6],將檢查結果以Excel表格形式導出,使用戶可從“干涉檢查表”中讀取到干涉的詳細信息。
本系統所使用的“動態干涉檢查”不同于SolidWorks自帶的“動態干涉檢查”,主要體現在本方式結合了“靜態干涉”和零部件“位移”的關系,通過程序控制,使零部件位移到指定位置,分別在不同位置進行干涉檢查,并實現了每位移一段距離進行一次干涉檢查的功能。該系統不僅提高了開發人員的設計效率,還提升了產品開發質量。
2.3 系統設計開發過程
利用編程語言VB開發基于SolidWorks的“動態干涉檢查”功能模塊,大致分為兩個階段:第一階段是可視化設計,可利用VB.NET工具箱對界面進行設計,然后通過SolidWorks SDK,在VB與SolidWorks之間建立一座聯系的橋梁,使系統嵌入SolidWorks插件菜單中[7];第二階段是代碼編寫,可通過VB編程語言和API實現。系統開發流程如圖2所示。
3 動態干涉檢查系統應用
3.1 裝配體選擇
“干涉檢查”作為一個功能模塊,需要對一個具體模型進行識別和操作。因此,需要以一個能進行“位移”的裝配體為研究對象。該模型至少包含兩個零部件,并且在運行時要求至少選擇兩個零部件。結合日常生活中的機械設備,本文選擇的對象是“千斤頂”,其不僅用途廣泛,對加工精度要求也很高,最重要的是其工作方式是上下移動的,滿足了本系統開發的基本要求。
3.2 交互式系統界面設計與操作
3.2.1 系統用戶界面
用戶界面是系統的重要部分,主要由啟動模型、位移、干涉檢查等按鈕組成。功能模塊則包括兩種檢查方式,一種是“手動式”動態干涉檢查,另一種是“自動式”動態干涉檢查。
3.2.2 系統基本操作流程
“手動式”:輸入“高度值H”,點擊“位移”按鈕,此時系統檢測輸入的數值是否符合設計要求,如不符合,會提醒用戶再次輸入,如果符合,模型會位移到指定高度;然后點擊“干涉檢查”開始檢查,結果以Excel表格形式輸出,本次檢查結束;再輸入新的“高度值H”,可進行下一次檢查,從而實現裝配體在不同位置的干涉檢查。
“自動式”:本方式更加智能化與參數化[8],只需分別輸入“間隔距離D”和“檢查次數N”,點擊“一鍵檢查”,如果數值符合要求,則開始“動態干涉檢查”,最后得到裝配體在N個位置的干涉檢查結果。
動態干涉檢查系統運行流程如圖4所示。
3.3 動態干涉檢查系統實現
在復雜裝配體中,僅依靠視覺判斷裝配體是否存在干涉十分困難,以VB作為編程設計平臺,依靠API即可實現干涉檢查。本系統的“動態干涉檢查”是指將“干涉檢查”與“位移”結合起來,即在程序中加上一個循環語句,通過調整間隔距離和檢查次數,便可實現模型的自動位移和干涉檢查。
(1)啟動模型。打開SolidWorks,進入系統操作界面[9],在進行干涉檢查前,需要先打開某一裝配體,具體程序如下:
SwApp=CreateObject("sldworks.application")
part=SwApp.OpenDoc("路徑.SLDASM",2,0,"",longstatus,longwarnings)
SwApp.ActivateDoc("模型名稱.SLDASM",False,longstatus)
part=SwApp.ActiveDoc
(2)位移。由于實現“動態干涉檢查”的基本要求是使零部件動起來,并且不能破壞零部件的裝配關系,利用基準面的配合關系,不僅能使零部件動起來,還能設置其位移距離,主要代碼如下:
part.EditUnsuppress()
boolstatus=part.Extension.SelectByID2("基準面","PLANE",0,0,0,False,0,Nothing,0)
part.ActivateSelectedFeature()
……
myDimension=part.Parameter("D1@基準面")
myDimension.SystemValue=Val(310-TextBox3.Text*(O-1))/1000
boolstatus=part.EditRebuild3()
其中,myDimension是關于位移距離的變量,在全局加一個循環語句,通過該變量的賦值,可使模型依次位移到指定位置。
(3)進行動態干涉檢查,通過調用API函數,實現了“干涉檢查”功能,主要程序如下:
nSelCount=swSelMgr.GetSelectedObjectCount
ReDimCompArray(nSelCount-1)
vCompArray=CompArray
swAssy.ToolsCheckInterference2(nSelCount,(vCompArray),False,vIntCompArray,vIntFaceArray)
If (IsNothing(vIntCompArray)) And (IsNothing(vIntFaceArray))
其中If (IsNothing(vIntCompArray)) And (IsNothing(vIntFaceArray))的作用是判斷是否存在干涉,swAssy.ToolsCheckInterference2是進行干涉檢查的關鍵代碼。在模型中的運行效果如圖5所示。
(4)使存在干涉的部分高亮顯示,代碼如下:
……
swFace.Highlight(True)
bRet=swEnt.Select2(True,0)
Next i
For i=0 To UBound(vIntCompArray)
swComp=vIntCompArray(i)
bRet=swComp.Select2(True,0)
Next i
(5)詳細干涉結果。通過以下代碼可得到干涉結果詳細信息:
pIntMgr=swAssemblyDoc.InterferenceDetectionManager
……
pIntMgr.CreateFastenersFolder=True
pIntMgr.IgnoreHiddenBodies=True
pIntMgr.UseTransform=True
pIntMgr.NonInterferingComponentDisplay=value
vInts=pIntMgr.GetInterferences
ret=pIntMgr.GetComponentsAndTransforms(vComps,vTrans)
……
vComps=interference.Components
swApp.SendMsgToUser("干涉序數:"&(i+1)&"干涉的組件個數:共"&interference.GetComponentCount;&"個"&"干涉的總面積:"&(V)&"mm^3")
pIntMgr.Done()
3.4 數據庫應用
在查看干涉結果的方式上,最先采用的是彈窗形式[10],后來考慮到操作的簡便性,以SQL Server提供數據支持,加上程序識別的干涉信息,最后以Excel表格形式列出干涉結果,不僅可一目了然地查看結果,還有利于數據存儲。干涉檢查表樣式如圖6所示。
4 結語
本文以千斤頂為研究對象,以SolidWorks軟件為開發平臺,以VB為編程語言對SolidWorks進行二次開發,研發出一套動態干涉檢查系統,不僅可為開發類似功能的系統提供參考,也為企業未來在虛擬裝配領域的二次開發奠定基礎。本系統功能的實現,不僅提高了開發人員設計效率,避免時間花費大量時間重新設計及建構原型,降低了公司的人力與時間成本,同時提升了產品質量和企業競爭力。
參考文獻:
[1] 湛迪強,孔杰.SolidWorks 2014快速入門、進階與精通[M].北京:電子工業出版社,2014.
[2] 江洪,李仲興,邢啟恩.SolidWorks2003二次開發基礎與實例教程[M].北京:電子工業出版社,2003.
[3] 陳超祥,胡啟登.SolidWorks高級教程簡編[M].北京:機械工業出版社,2015.
[4] 林卓然.VB語言程序設計[M].北京:電子工業出版社,2012.
[5] 錢海軍.Visual Basic項目案例開發實戰[M].北京:清華大學出版社,2016.
[6] 張昊,高晶.SQL Server 2008數據庫原理及應用教程[M].北京:清華大學出版社,2016.
[7] 鮑東,仲梁維.利用參數化設計技術的起重機快速設計研究[J].現代制造工程,2014(1):2-4.
[8] 張峰,李前兆,黃傳真.參數化設計的研究現狀與發展趨勢[J].機械工程師,2002(1):13-15.
[9] 沈斌,宮大.產品廣義參數化設計的研究[J].計算機工程與應用,2006,31(1):94-96.
[10] 孫毅.對稱驅動剪式升降平臺設計及研究[D].昆明:昆明理工大學,2012.
(責任編輯:黃 健)