|
我在其他網站上看到的 覺得挺有價值 分享下 希望對大家有所幫助!
2 C0 T) k; K( ?: @- D、
4 T% e5 _0 d0 R% Y
; Q: [( K0 g3 O x. Y) y' x' w7 q! c4 S' ]
0 引言7 V1 I# [, T" o
8 E* O' n/ R" h, H1 w1 p8 }
SolidWorks是一套基于Windows的CAD桌面集成系統,支持參數化和特征造型技術。雖然SolidWorks所提供的功能非常強大,但要使其在我國企業中真正發揮作用,使常用的或重復的任務自動化,提高效率,就必須對其進行本地化、專業化的二次開發工作。本文是在基于軸系結構設計系統的研制上產生的,應用Solidworks二次開發來自動生成零件,并在Solidworks環境下完成自動裝配。1 N5 R7 I/ i5 ^3 ~8 O/ g
7 O9 u. V) X0 M1 F8 R 1 SolidWorks二次開發原理2 J5 `7 @) a. G" ~: z
7 x. V9 ?1 s- `6 G: l2 }2 k; N SolidWorks基于COM(Component Object Model,組件對象模型),完全支持OLE(Object Linking and Embed-ding,對象的鏈接與嵌入)標準,實現了OLE自動化。為方便用戶進行二次開發,SolidWorks提供了幾百個刪(Application Programming Interface,應用程序接口),這些API函數是SolidWorks的OLE或COM接口。SolidWorks的API接口分為兩種:一種是基于OLE Au-tomation的IDispatch技術,通過IDispatch接口暴露對象的屬性和方法,以便在客戶程序中使用這些屬性并調用它所支持的方法。另一種開發方式是基于Windows基礎的COM。% b* R' d+ t3 ?
, R$ M1 }% @0 X' @7 n SolidWorks API為用戶提供了完全面向對象的類體系,是一個自上而下的多層次的樹型網絡結構,其部分組織結構關系如圖l所示。它包括對象的類型、屬性和方法。SldWorks是根目錄對象類,位于應用程序的底層,是訪問SolidWorks API所有對象的入口。開發者通過操縱對象的屬性和調用對象的方法建立自己的應用程序。% w1 y$ S/ G: d: U8 u! c0 d
" i) X: `( _7 D0 v' @! S
8 B+ ^, Z$ i% {# A1 i8 u4 i8 d/ T
0 q( n" E& ~% C/ M e2 r/ b9 a
' V) l+ S4 n4 R/ o0 O7 A6 L/ y3 q. r
2 SolidWorks二次開發工具
; R1 d6 @. B I1 R9 U' M* U* \+ n
' q! n4 x) i3 ?& g. Q 任何支持COM和OLE的編程語言都可以成為S0lidWorks的開發工具,如VB、VBA、C、VC++等。開發者可以根據自身的條件、工具的特點,選擇一種適合的開發工具.
5 x4 Z/ B. P& z9 v% |/ s4 |+ j4 b {/ x1 u
4 H" I* L l0 u7 o Visual Baic(VB)是運行在Windows環境下的一種可視化編程語言,使用面向對象的編程方法(OOP),它所具有的圖形設計工具、結構化的事件驅動編程模式和開放的環境,可以使用戶即快又方便地編寫出Windows下的應用程序.
8 {: J4 m8 V: Z: h8 \8 U1 U) V
/ z6 r9 I2 V8 V 在SolidWorks中通過宏錄制可以記錄SolidWorks用戶的整個產品設計過程,把用戶的界面菜單操作所用到的SolidWorks對象、方法都一一記錄下來,其語法完全符合Visual Basic。根據宏文件中的對象和方法在自己的應用程序中合理調用,通過對變量的控制就可實現產品的參數化設計。在二次開發過程中,宏錄制文件中的許多對象、方法可以直接在Visual Basic應用程序中應用,簡化了開發過程。
; E8 S6 q6 |2 l/ i
2 W! R* Z) i; @8 R; V& l5 R 3 機械零件參數化設計實現+ s9 {+ d% g+ K' d4 z2 s' b; F
7 Z4 s& x/ V$ |, [- C! ~4 L0 P
3.1 零件二次開發的過程主要論述通過VB語言對SolidWorks進行二次開發,其主要流程如下:
! \: {" S8 N" B) X R
; n1 m/ v6 r o: {7 q+ B: E 3.1.1 建立零件的數據庫首先分析機械零件有關數據,利用VB的默認數據庫Access為每一種零件建立數據庫,如齒輪參數數據庫,聯軸器參數數據庫等。在數據庫建成后,可以在應用程序中通過數據控件與特定的數據表連接起來。利用用戶輸入的主參數作為索引,用Findfirst方法即可讀出對應的數據。) L% w1 ]) E* h% _6 F
$ K) }0 N& J) q+ X" i& y X( P 3.1.2 分析零件的結構特征,建立實體模型首先,針對要建立的實體,需要先分析其結構,區別特征的主次,利用SolidWorks建立零件特征,建立宏文件,有些操作宏文件無法記錄,需要調用相關API繪圖函數。實現關鍵數據變量化,如齒輪分度圓自徑、齒輪寬度等,而這些變量的數據來源即為齒輪數據庫下的某種齒輪類型數據表。建模完成后,使用AddComponent4方法即可將零件插入當前裝配圖中.
/ V7 @! E; R4 ^- \+ u1 P; _
0 L+ Y" |) ~0 d' y \4 K 3.1.3 建立應用程序VB開發的程序作為客戶方(client),而SolidWorks作為服務方(server),VB程序可建立與SolidWorks各級對象(object)的關聯;另外,還必須在VB中通過“引用”(reference)JJll載SolidWorks類型庫,使VB識別程序使用的SolidWorks對像類型、屬性和方法。+ V4 D+ S' q8 [8 o, n
+ F' U( w L, G3 d2 I 3.2 齒輪聯軸器二次開發中的關鍵技術
& a! g6 L5 C P2 B& K
: O: q0 b- ]# T" D% b% d% D 以機械零件中的齒輪聯軸器為例介紹二次開發中的關鍵技術。
# Q- j* |" v; ^: ? X
, ^' B: d |( w; g0 X 3.2.1 聯軸器數據庫技術CL6型號齒式聯軸器的部分標準數據如表1所示。
) R6 ?0 S+ @ F& v2 d ! g3 H; \, |2 \
% v8 n2 y" B) H
# a. n# r% c5 Q 建立數據庫,在VB程序中引用數據庫,就可以通過程序查詢聯軸器的國家機械標準信息。選擇聯軸器需要參考聯軸器的轉矩和轉速等信息,需要在程序中將聯軸器的數據信息加載到聯軸器設計的人機界面當中,供設計人員參考。
! \3 P3 C4 U) ]& [1 [1 c, ~! g 7 o7 u z1 a# D$ k( f
" Z, F& @; G6 U) I$ I4 T3 ?" L9 x
齒輪聯軸器需要做到全參數化的有齒數、模數、壓力角、軸徑、鍵槽尺寸及相關安裝尺寸等。$ \: b: q! o& C
+ P' `' g9 y/ [; F9 G4 x
實現模型創建,需通過VB環境下的數學模型計算,得出重要數據。對于齒輪聯軸器,最重要的是齒輪漸開線的計算。在VB環境中,建立漸開線直角坐標方程. 聯立方程組,利用循環語句來實現漸開線的計算。再將數據傳遞給ModelDoc2:SketchSpline方法繪制輪齒草圖, .調用FeatureManager::FeatureExtmsion2方法拉伸輪齒。2 G. A5 N% a5 x
- ~1 a; |: n2 ?
8 J0 l+ o# i. S2 Y* p7 k 圖2 聯軸器數據流程
- h& A4 p* f: F5 U( j4 q0 t A: r) n 3.2.2 零件、裝配文檔的創建SldWorks對象是SolidWorks API中最高級的對象,它提供了SolidWorksAPI中所有對象的直接或間接接口。通過該對象可以控制SolidWorks軟件的執行或退出。在VB中利用Create Object方法來獲得Sldworks對象,利用該對象的activedoc方法可以獲得當前Solidworks文件對象。
0 R# x5 g; l. j! g: P5 |
& Z3 u$ p7 ?! D0 C7 g9 |3.2.3 零件自動建模實現創建了新的零件文檔后,通過定義對象與數據,調用創建草圖、實體的API函數來進行零件參數化建模代碼的編寫。- |, [" ]: [0 {2 @
4 Y, y7 P: `) o# E! V9 A! n! b& S
& w/ `3 q8 ^# J$ N) b. q 3.2.4 自動裝配實現創建了新的裝配文檔后,向裝配體中添加組件。先調用SldWorks::OpenDoc6方法打開所要添加的組件,再使用AssemblyDoc::addcomponent4函數往裝配體中插入零部件。; ~1 ]# x, S8 ^6 P- n7 }
' x2 ~. U( _( m9 o% ]( J8 b8 v, v
在Solidworks中,可以使用變換確定或者移動一個部件在裝配體中的物理位置。所有零件和裝配體都有它們各自的原點,當裝配體空間與部件空間不一致時,要使用變換來設置或獲得部件相對于裝配體的距離和旋轉角度。如果半聯軸節原點與裝配體原點不同且不同軸,那么AddComponent4方法的位置參數必須由半聯軸節中心乘以半聯軸節部件相對于裝配體原點的變換來確定。調用MathUtility:;CreateTransform方法用來創建MathTransform對象,MathTransform對象是用于操作部件變換信息的接口。 R, T7 u+ \8 X( n6 y" B5 t
# b" W1 e& k$ c: d# g6 Y
對零件添加配合關系之前先使用ModelDocExtension::SelectByID方法選中待配合的零件上的幾何元素,然后使用AssemblyDoc::Addmate3方法定義配合關系。如果之前已經定義過相應的用于配合的基準面和基準軸,會使配合時選取待配合元素變得更為容易。做配合時,需要經常選擇到零件的面、線等,所以主要的問題在于如何選擇合適的面、線,同時需要熟練掌握AsemblyDoc::AddMate3函數的使用。在得到一個組件(component)或者一個特征(feature)時,可以使用Igetfaces、Igeflirstface、Igetnextface等方法遍歷一個組件或特征等的各個面,來達到選擇面的目的。9 i7 t* F/ S2 g, u& q
4 D" i' C/ P. W9 W+ k. v+ H, D6 h- S
4 開發人機交互界面及運行結果
, f% {* M2 b" S0 S9 Q5 `6 [0 b* ^ ) I6 s: ^$ n5 R8 z' m7 @/ B) A
本示例基于作者研制的軸系結構設計系統。以Vistud Basic語言為開發平臺通過調用SolidWorks API函數建立齒輪聯軸器模型,操作界面如圖3所示。選擇需要的齒輪聯軸器類型,點擊“三維模型建立”即可實現在SolidWorks中自動創建相應型號的聯軸器模型。重新選擇型號,點擊按鈕,新的模型將在Solidworks環境中重生,程序無需更改。CL6齒式聯軸器裝配操作界面如圖4所示。添加裝配實體,選擇配合元素與方式,即可在Solidworks環境下實現聯軸器零件的自動裝配。
' E0 n- o; |+ c5 o! q! Q
! O% ], I2 l6 v) D8 Y# H
+ w. j9 N( U4 i, \) o! `, W) V/ P8 ]7 \% G/ F
5 結語/ j# |3 r! I2 u
2 V, |+ j0 Y6 F5 z
論述了SolidWorks軟件的二次開發原理,介紹了利用VB語言在SolidWorks環境下實現機械零件自動建模與裝配的可能性及方法,使機械零部件的建模、裝配實現了參數化、自動化。我們研究的SolidWorks的二次開發技術對于減輕設計人員的工作強度、實現工程設計的自動化、開發集成化的CAD系統有很大的作用。
4 S: o9 o, s! G |
|