機(jī)械社區(qū)

標(biāo)題: 關(guān)于solidworks 的二次開發(fā) [打印本頁]

作者: dave1115    時(shí)間: 2011-2-6 21:54
標(biāo)題: 關(guān)于solidworks 的二次開發(fā)
我在其他網(wǎng)站上看到的  覺得挺有價(jià)值  分享下  希望對大家有所幫助!
+ m) N3 d/ Y4 S0 [、
8 v6 l' w) i6 n+ g' h( \1 q7 k% v
9 d$ ^* G% e6 b& X
3 r) w& B7 I7 O: z/ X) \9 h0 引言  O6 V) g6 E  X: i1 f) D2 c
    8 {1 z0 D" N7 ~$ N& W
    SolidWorks是一套基于Windows的CAD桌面集成系統(tǒng),支持參數(shù)化和特征造型技術(shù)。雖然SolidWorks所提供的功能非常強(qiáng)大,但要使其在我國企業(yè)中真正發(fā)揮作用,使常用的或重復(fù)的任務(wù)自動(dòng)化,提高效率,就必須對其進(jìn)行本地化、專業(yè)化的二次開發(fā)工作。本文是在基于軸系結(jié)構(gòu)設(shè)計(jì)系統(tǒng)的研制上產(chǎn)生的,應(yīng)用Solidworks二次開發(fā)來自動(dòng)生成零件,并在Solidworks環(huán)境下完成自動(dòng)裝配。
2 N! y0 O5 I; K) ^( U. @7 ^   
5 Y: k6 |  t# C  l5 r; W# T4 L    1 SolidWorks二次開發(fā)原理) [; r" @$ i% K0 K# C
    0 y, ~6 J- W6 T* n( r: _
    SolidWorks基于COM(Component Object Model,組件對象模型),完全支持OLE(Object Linking and Embed-ding,對象的鏈接與嵌入)標(biāo)準(zhǔn),實(shí)現(xiàn)了OLE自動(dòng)化。為方便用戶進(jìn)行二次開發(fā),SolidWorks提供了幾百個(gè)刪(Application Programming Interface,應(yīng)用程序接口),這些API函數(shù)是SolidWorks的OLE或COM接口。SolidWorks的API接口分為兩種:一種是基于OLE Au-tomation的IDispatch技術(shù),通過IDispatch接口暴露對象的屬性和方法,以便在客戶程序中使用這些屬性并調(diào)用它所支持的方法。另一種開發(fā)方式是基于Windows基礎(chǔ)的COM。
3 u5 c7 c2 V* V% P; p   
( Q. U9 \# z0 g- C8 `/ u* u2 t    SolidWorks API為用戶提供了完全面向?qū)ο蟮念愺w系,是一個(gè)自上而下的多層次的樹型網(wǎng)絡(luò)結(jié)構(gòu),其部分組織結(jié)構(gòu)關(guān)系如圖l所示。它包括對象的類型、屬性和方法。SldWorks是根目錄對象類,位于應(yīng)用程序的底層,是訪問SolidWorks API所有對象的入口。開發(fā)者通過操縱對象的屬性和調(diào)用對象的方法建立自己的應(yīng)用程序。! S$ ]5 ]& S- b* S& @
    9 _) K0 X' j0 E+ g; h+ ^! H0 A
     
, f2 m% o* ?5 p9 d. k6 ~

$ M1 Q& p) ]" K7 ]$ o) s   
5 x8 ^& A5 P& y! q. G    2 SolidWorks二次開發(fā)工具
8 A& I1 R& m' N5 p6 G9 F6 X- @    3 `9 |3 q4 y) C. L# k. P# s
    任何支持COM和OLE的編程語言都可以成為S0lidWorks的開發(fā)工具,如VB、VBA、C、VC++等。開發(fā)者可以根據(jù)自身的條件、工具的特點(diǎn),選擇一種適合的開發(fā)工具.8 a- G+ y! X; u  G9 r
   
6 w; `) W2 f5 g( d; }4 h    Visual Baic(VB)是運(yùn)行在Windows環(huán)境下的一種可視化編程語言,使用面向?qū)ο蟮木幊谭椒?OOP),它所具有的圖形設(shè)計(jì)工具、結(jié)構(gòu)化的事件驅(qū)動(dòng)編程模式和開放的環(huán)境,可以使用戶即快又方便地編寫出Windows下的應(yīng)用程序.
- _9 Z9 s# n  {( @3 F- \  Z, R: d    * s  r$ k3 w) f# }3 C0 m
    在SolidWorks中通過宏錄制可以記錄SolidWorks用戶的整個(gè)產(chǎn)品設(shè)計(jì)過程,把用戶的界面菜單操作所用到的SolidWorks對象、方法都一一記錄下來,其語法完全符合Visual Basic。根據(jù)宏文件中的對象和方法在自己的應(yīng)用程序中合理調(diào)用,通過對變量的控制就可實(shí)現(xiàn)產(chǎn)品的參數(shù)化設(shè)計(jì)。在二次開發(fā)過程中,宏錄制文件中的許多對象、方法可以直接在Visual Basic應(yīng)用程序中應(yīng)用,簡化了開發(fā)過程。! E. f' e7 m& ~; ^
    5 _9 s6 F4 V" ~6 m
    3 機(jī)械零件參數(shù)化設(shè)計(jì)實(shí)現(xiàn)
/ q' h7 s( Y/ F3 |    & {) ~2 L9 z0 H
    3.1 零件二次開發(fā)的過程主要論述通過VB語言對SolidWorks進(jìn)行二次開發(fā),其主要流程如下:0 n( A3 ~  V4 ?$ m
      R7 A! f" Y& n) g7 _( @
    3.1.1 建立零件的數(shù)據(jù)庫首先分析機(jī)械零件有關(guān)數(shù)據(jù),利用VB的默認(rèn)數(shù)據(jù)庫Access為每一種零件建立數(shù)據(jù)庫,如齒輪參數(shù)數(shù)據(jù)庫,聯(lián)軸器參數(shù)數(shù)據(jù)庫等。在數(shù)據(jù)庫建成后,可以在應(yīng)用程序中通過數(shù)據(jù)控件與特定的數(shù)據(jù)表連接起來。利用用戶輸入的主參數(shù)作為索引,用Findfirst方法即可讀出對應(yīng)的數(shù)據(jù)。
3 S, R$ g+ W- W6 Y* h- [7 S1 N  z    " ]4 W4 Y# M$ |+ K; ?" u5 {7 L+ S
    3.1.2 分析零件的結(jié)構(gòu)特征,建立實(shí)體模型首先,針對要建立的實(shí)體,需要先分析其結(jié)構(gòu),區(qū)別特征的主次,利用SolidWorks建立零件特征,建立宏文件,有些操作宏文件無法記錄,需要調(diào)用相關(guān)API繪圖函數(shù)。實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)變量化,如齒輪分度圓自徑、齒輪寬度等,而這些變量的數(shù)據(jù)來源即為齒輪數(shù)據(jù)庫下的某種齒輪類型數(shù)據(jù)表。建模完成后,使用AddComponent4方法即可將零件插入當(dāng)前裝配圖中.* f4 x( T# k: a
   
' U+ ^- C+ P* }  t% d5 ]% t8 o    3.1.3 建立應(yīng)用程序VB開發(fā)的程序作為客戶方(client),而SolidWorks作為服務(wù)方(server),VB程序可建立與SolidWorks各級對象(object)的關(guān)聯(lián);另外,還必須在VB中通過“引用”(reference)JJll載SolidWorks類型庫,使VB識別程序使用的SolidWorks對像類型、屬性和方法。5 Y3 T5 K% `% _& i! ]* Z4 }( f
    0 t+ L7 Q  W7 \, @4 U
    3.2 齒輪聯(lián)軸器二次開發(fā)中的關(guān)鍵技術(shù)0 t& U; q% n  K! }$ _
    $ d1 L& y9 X) B# {% f- k1 N, ^8 {& B
    以機(jī)械零件中的齒輪聯(lián)軸器為例介紹二次開發(fā)中的關(guān)鍵技術(shù)。
1 |- j0 k( S8 f6 u+ q" H    ' `2 I5 Q; z* X* {" f6 Q/ x  p* R
    3.2.1 聯(lián)軸器數(shù)據(jù)庫技術(shù)CL6型號齒式聯(lián)軸器的部分標(biāo)準(zhǔn)數(shù)據(jù)如表1所示。
+ T8 M, _% |" e' G  ~  }    + ^3 \: C: q6 P# q4 o7 J

% U0 O& m- A; Q' x" q$ R2 l" H    $ c5 N$ B  o- Z: m
    建立數(shù)據(jù)庫,在VB程序中引用數(shù)據(jù)庫,就可以通過程序查詢聯(lián)軸器的國家機(jī)械標(biāo)準(zhǔn)信息。選擇聯(lián)軸器需要參考聯(lián)軸器的轉(zhuǎn)矩和轉(zhuǎn)速等信息,需要在程序中將聯(lián)軸器的數(shù)據(jù)信息加載到聯(lián)軸器設(shè)計(jì)的人機(jī)界面當(dāng)中,供設(shè)計(jì)人員參考。
! a0 ^" L( M2 ?   
/ B. a8 P$ E0 Y; n$ _$ `# z7 k2 I

) u  D! M) p2 W: t( k/ C& C! l. P7 {' L    齒輪聯(lián)軸器需要做到全參數(shù)化的有齒數(shù)、模數(shù)、壓力角、軸徑、鍵槽尺寸及相關(guān)安裝尺寸等。- N+ j; F) Q. b' K# v5 I
   
( }; X! O' d0 J8 e9 i    實(shí)現(xiàn)模型創(chuàng)建,需通過VB環(huán)境下的數(shù)學(xué)模型計(jì)算,得出重要數(shù)據(jù)。對于齒輪聯(lián)軸器,最重要的是齒輪漸開線的計(jì)算。在VB環(huán)境中,建立漸開線直角坐標(biāo)方程. 聯(lián)立方程組,利用循環(huán)語句來實(shí)現(xiàn)漸開線的計(jì)算。再將數(shù)據(jù)傳遞給ModelDoc2:SketchSpline方法繪制輪齒草圖, .調(diào)用FeatureManager::FeatureExtmsion2方法拉伸輪齒。
/ h$ C1 ]9 l! I* y. ^   
: q2 p, x) N* D& O

) ]1 @9 l; `9 j. P6 T    圖2 聯(lián)軸器數(shù)據(jù)流程
   
( l( b5 N+ F/ j0 u2 _7 [    3.2.2 零件、裝配文檔的創(chuàng)建SldWorks對象是SolidWorks API中最高級的對象,它提供了SolidWorksAPI中所有對象的直接或間接接口。通過該對象可以控制SolidWorks軟件的執(zhí)行或退出。在VB中利用Create Object方法來獲得Sldworks對象,利用該對象的activedoc方法可以獲得當(dāng)前Solidworks文件對象。
+ r, g' ?/ N7 N* E    * G) g6 g3 l1 C* x6 c" E" u' }
3.2.3 零件自動(dòng)建模實(shí)現(xiàn)創(chuàng)建了新的零件文檔后,通過定義對象與數(shù)據(jù),調(diào)用創(chuàng)建草圖、實(shí)體的API函數(shù)來進(jìn)行零件參數(shù)化建模代碼的編寫。7 m; Y# n: Z' j% }
    7 y& ?6 p4 O- \8 K; W2 E

+ }/ ~: J6 [% F3 S4 j1 i5 ^. y    3.2.4 自動(dòng)裝配實(shí)現(xiàn)創(chuàng)建了新的裝配文檔后,向裝配體中添加組件。先調(diào)用SldWorks::OpenDoc6方法打開所要添加的組件,再使用AssemblyDoc::addcomponent4函數(shù)往裝配體中插入零部件。
' c$ v1 ?  Y* ]3 {   
2 V( g* s/ t- T) A* u    在Solidworks中,可以使用變換確定或者移動(dòng)一個(gè)部件在裝配體中的物理位置。所有零件和裝配體都有它們各自的原點(diǎn),當(dāng)裝配體空間與部件空間不一致時(shí),要使用變換來設(shè)置或獲得部件相對于裝配體的距離和旋轉(zhuǎn)角度。如果半聯(lián)軸節(jié)原點(diǎn)與裝配體原點(diǎn)不同且不同軸,那么AddComponent4方法的位置參數(shù)必須由半聯(lián)軸節(jié)中心乘以半聯(lián)軸節(jié)部件相對于裝配體原點(diǎn)的變換來確定。調(diào)用MathUtility:;CreateTransform方法用來創(chuàng)建MathTransform對象,MathTransform對象是用于操作部件變換信息的接口。
/ }. @8 f  h7 s2 j: v  j6 M1 o    ) Q! b) p, \2 u- X- X3 K- ^; n
    對零件添加配合關(guān)系之前先使用ModelDocExtension::SelectByID方法選中待配合的零件上的幾何元素,然后使用AssemblyDoc::Addmate3方法定義配合關(guān)系。如果之前已經(jīng)定義過相應(yīng)的用于配合的基準(zhǔn)面和基準(zhǔn)軸,會使配合時(shí)選取待配合元素變得更為容易。做配合時(shí),需要經(jīng)常選擇到零件的面、線等,所以主要的問題在于如何選擇合適的面、線,同時(shí)需要熟練掌握AsemblyDoc::AddMate3函數(shù)的使用。在得到一個(gè)組件(component)或者一個(gè)特征(feature)時(shí),可以使用Igetfaces、Igeflirstface、Igetnextface等方法遍歷一個(gè)組件或特征等的各個(gè)面,來達(dá)到選擇面的目的。3 q! P$ A( `! q& J2 w; ~; k
   
* H7 x8 i7 @! @9 w1 ]- s6 c
7 h4 @+ B: ]! L* l( E
    4 開發(fā)人機(jī)交互界面及運(yùn)行結(jié)果
5 h  U3 \, o3 @4 \3 m$ C, R8 u   
' j( l4 ?. \4 y+ E- }    本示例基于作者研制的軸系結(jié)構(gòu)設(shè)計(jì)系統(tǒng)。以Vistud Basic語言為開發(fā)平臺通過調(diào)用SolidWorks API函數(shù)建立齒輪聯(lián)軸器模型,操作界面如圖3所示。選擇需要的齒輪聯(lián)軸器類型,點(diǎn)擊“三維模型建立”即可實(shí)現(xiàn)在SolidWorks中自動(dòng)創(chuàng)建相應(yīng)型號的聯(lián)軸器模型。重新選擇型號,點(diǎn)擊按鈕,新的模型將在Solidworks環(huán)境中重生,程序無需更改。CL6齒式聯(lián)軸器裝配操作界面如圖4所示。添加裝配實(shí)體,選擇配合元素與方式,即可在Solidworks環(huán)境下實(shí)現(xiàn)聯(lián)軸器零件的自動(dòng)裝配。
4 b/ Y8 B' d+ _; K3 T  |     
9 D8 E2 I: [/ H  g2 Q2 w* F/ X" f& w
# F3 A1 e0 i/ c9 @) u

2 X$ X- E* ?  r6 ^4 z    5 結(jié)語
; V8 I# k6 d# V1 ~* X% v" R  x
   
  m3 [( [+ G$ U        論述了SolidWorks軟件的二次開發(fā)原理,介紹了利用VB語言在SolidWorks環(huán)境下實(shí)現(xiàn)機(jī)械零件自動(dòng)建模與裝配的可能性及方法,使機(jī)械零部件的建模、裝配實(shí)現(xiàn)了參數(shù)化、自動(dòng)化。我們研究的SolidWorks的二次開發(fā)技術(shù)對于減輕設(shè)計(jì)人員的工作強(qiáng)度、實(shí)現(xiàn)工程設(shè)計(jì)的自動(dòng)化、開發(fā)集成化的CAD系統(tǒng)有很大的作用。
8 X1 N9 ^4 h4 {% C7 Z" v
作者: ZX0839    時(shí)間: 2011-2-7 00:15
問了好幾天,總算有大俠回應(yīng)啦) k7 d9 E) o5 S0 o; q8 p7 |
只是市面上這樣的書籍資料很難找到) ]1 B8 Y  L4 r# D& I9 c( c
而且做的話自己VB或VC++能力不能差,挺糾結(jié)的
作者: tigerguo1975    時(shí)間: 2011-2-10 09:11
不用糾結(jié),找人做就行了啊。
作者: dave1115    時(shí)間: 2011-2-11 19:05
對啊。。。這種東西一般都不會是單人搞的。。。要么是企業(yè)要么是團(tuán)隊(duì)。。。。做好自己所擅長的才是正道!
作者: ZX0839    時(shí)間: 2011-2-11 22:48
我認(rèn)識的人里至少有5,6個(gè)會SOLIDWORKS二次開發(fā),他們都是在校研究生
作者: anotheranother    時(shí)間: 2011-5-19 16:28
求助:怎么調(diào)用solidworks自帶的“工具-方程式”功能,就是我點(diǎn)個(gè)按鈕,彈出的對話框和點(diǎn)擊方程式菜單一模一樣。謝謝了!
作者: dave1115    時(shí)間: 2011-5-23 22:25
謝謝各位的回答!!
作者: chidiandong    時(shí)間: 2011-5-28 17:40
專業(yè)計(jì)算機(jī)學(xué)的不是很好,不過也想學(xué)學(xué)。
作者: 綻放夢想    時(shí)間: 2011-10-13 21:33
現(xiàn)在關(guān)系到一個(gè)課題,不知道對于任意空間曲線(任意比較簡單的三維曲線即可)的solidworks模型,能否提取出曲線的方程或者根據(jù)自己的需要,每個(gè)一定的間隔取一個(gè)點(diǎn)得坐標(biāo),這個(gè)間隔要比較小,并且可以任意調(diào)節(jié)就最好。0 F5 H3 p0 V4 o, ]% @8 U4 j
例如:已知曲面A和曲面B的交線,如何從solidworks中提取這條交線的方程或者在這條交線上,我自己設(shè)定每個(gè)1mm或者0.1mm的距離上,我取一個(gè)點(diǎn)得坐標(biāo),從而得到這條曲線上的N個(gè)點(diǎn)的坐標(biāo)值。
2 x8 m- u1 x6 F; x8 v出了solidworks,其他軟件要是能實(shí)現(xiàn)此功能也可以,比如CAD/PROE/UG等。2 v% x" R, B5 i4 {
聯(lián)系方式:QQ782355668。) e( I( V% b8 |
不甚感激!
作者: 宛如青空    時(shí)間: 2012-3-11 12:58
目前正在學(xué)習(xí)中,感謝分享
作者: shudapeng    時(shí)間: 2012-3-11 16:36
目前正在學(xué)習(xí)中,感謝分享
# N, q/ {- p1 `& F' H# D
作者: hdyq2060396    時(shí)間: 2012-4-13 12:43
學(xué)習(xí)學(xué)習(xí)。。。。!
作者: 哈爾濱-汪歡    時(shí)間: 2012-4-27 13:45
以機(jī)械零件中的齒輪聯(lián)軸器為例介紹二次開發(fā)中的關(guān)鍵技術(shù)。
3 D0 z/ q9 w% R0 ]$ h4 T
作者: 海邊日出HY    時(shí)間: 2012-4-27 21:50
學(xué)習(xí)下!
作者: 姣兒寶貝87    時(shí)間: 2012-6-11 15:08
樓主,您對solidworks二次開發(fā)有研究嗎?最近學(xué)習(xí)遇到問題,想請指教一下。
作者: 水底的妖嬈海妖    時(shí)間: 2012-10-18 10:17
不是很看得懂!糾結(jié)中。
作者: charles006    時(shí)間: 2013-6-19 16:37
學(xué)習(xí)一下
作者: 笨小孩啦    時(shí)間: 2013-6-20 19:07
看不懂
" U' t3 `  C1 j, J% l& s7 Z" f" |# J
作者: yuanyyhi    時(shí)間: 2013-9-16 08:44
非常感謝樓主分享
作者: yifeng0904    時(shí)間: 2013-9-16 15:51
這東西,有意思!向往學(xué)習(xí)!
作者: 天涯唯我    時(shí)間: 2013-12-9 16:20
貌似這篇帖子,已經(jīng)很久了才看到因?yàn)樽约涸谧龆伍_發(fā),,單超   很累  ,,而且沒效率、。。
作者: 陽仔    時(shí)間: 2014-8-11 23:42
大俠,能不能把程序傳上來看看
作者: 文川九一    時(shí)間: 2014-8-27 15:21
從來都沒有各一個(gè)講完整工程的
作者: xuanyue0910    時(shí)間: 2014-10-24 15:58
最近也想搞這個(gè),本來以為在設(shè)計(jì)表里面改excle表就可以了,沒想到要用到宏文件!
作者: jiabahanzi    時(shí)間: 2014-11-13 19:37
開發(fā)工具用什么編程工具好呢?樓主推薦一下
作者: lijun1226    時(shí)間: 2016-1-9 20:17
我是在讀研究生,課題是非圓齒輪在solidworks中的二次開發(fā),不過現(xiàn)在對這個(gè)課題全然不懂。那位好心人能指點(diǎn)迷津。我現(xiàn)在還不知道在solidwork中那個(gè)界面下做呀。請好心人能指點(diǎn)迷精,不勝感激。
作者: lijun1226    時(shí)間: 2016-1-9 20:21
有沒有人正在學(xué)solodworkser二次開發(fā)呀。我加他好友。大家有問題商量一下。# x- D& e7 f; q. b* l4 ~' k2 \* h! d3 b: a

作者: 塵封JKANG    時(shí)間: 2016-1-10 22:17
感謝




歡迎光臨 機(jī)械社區(qū) (http://mg7058.com/) Powered by Discuz! X3.4