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

 找回密碼
 注冊(cè)會(huì)員

QQ登錄

只需一步,快速開始

搜索
查看: 24490|回復(fù): 27
打印 上一主題 下一主題

關(guān)于solidworks 的二次開發(fā)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2011-2-6 21:54:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我在其他網(wǎng)站上看到的  覺得挺有價(jià)值  分享下  希望對(duì)大家有所幫助!' ]! K; Z0 q+ t9 c6 Y* n
、3 [6 e+ k$ I) Q1 D% n' }
; l( ~6 }( I% {$ n1 `* \2 J/ b
1 W' S% N- n+ a
0 引言
* H; g4 u( _# t4 W& a8 N
   
( g! }, D! o1 j# q( J& Q    SolidWorks是一套基于Windows的CAD桌面集成系統(tǒng),支持參數(shù)化和特征造型技術(shù)。雖然SolidWorks所提供的功能非常強(qiáng)大,但要使其在我國(guó)企業(yè)中真正發(fā)揮作用,使常用的或重復(fù)的任務(wù)自動(dòng)化,提高效率,就必須對(duì)其進(jìn)行本地化、專業(yè)化的二次開發(fā)工作。本文是在基于軸系結(jié)構(gòu)設(shè)計(jì)系統(tǒng)的研制上產(chǎn)生的,應(yīng)用Solidworks二次開發(fā)來自動(dòng)生成零件,并在Solidworks環(huán)境下完成自動(dòng)裝配。
; P$ X$ ]3 @( S( D3 }    6 A, q3 y; [: x
    1 SolidWorks二次開發(fā)原理
; {2 |8 p2 X* u5 N) q  m5 @   
  h0 o. m$ ~8 Z; u6 ^0 K: u' b    SolidWorks基于COM(Component Object Model,組件對(duì)象模型),完全支持OLE(Object Linking and Embed-ding,對(duì)象的鏈接與嵌入)標(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接口暴露對(duì)象的屬性和方法,以便在客戶程序中使用這些屬性并調(diào)用它所支持的方法。另一種開發(fā)方式是基于Windows基礎(chǔ)的COM。
$ V) h4 `/ P9 D# H( r) _* u   
/ D  ~3 l9 A# g& j; F    SolidWorks API為用戶提供了完全面向?qū)ο蟮念愺w系,是一個(gè)自上而下的多層次的樹型網(wǎng)絡(luò)結(jié)構(gòu),其部分組織結(jié)構(gòu)關(guān)系如圖l所示。它包括對(duì)象的類型、屬性和方法。SldWorks是根目錄對(duì)象類,位于應(yīng)用程序的底層,是訪問SolidWorks API所有對(duì)象的入口。開發(fā)者通過操縱對(duì)象的屬性和調(diào)用對(duì)象的方法建立自己的應(yīng)用程序。$ D/ y, ~0 ^) _* c/ r$ S) d
    ) t+ g% U5 r1 ~: ]3 C
     
! h9 O# [) }0 A
: M7 U! M5 p8 n, W2 `. M, D5 G
    & @  h; g" f8 D6 Y0 d) s
    2 SolidWorks二次開發(fā)工具  l0 i: h, h+ P! d
    - \4 ~2 d9 L7 \: ~5 \
    任何支持COM和OLE的編程語言都可以成為S0lidWorks的開發(fā)工具,如VB、VBA、C、VC++等。開發(fā)者可以根據(jù)自身的條件、工具的特點(diǎn),選擇一種適合的開發(fā)工具.  |9 r; P* t- h* }. J- t. M
   
6 I8 @5 u' n) |' V) D    Visual Baic(VB)是運(yùn)行在Windows環(huán)境下的一種可視化編程語言,使用面向?qū)ο蟮木幊谭椒?OOP),它所具有的圖形設(shè)計(jì)工具、結(jié)構(gòu)化的事件驅(qū)動(dòng)編程模式和開放的環(huán)境,可以使用戶即快又方便地編寫出Windows下的應(yīng)用程序.
, H9 j& R/ {0 Z; Y9 C    4 @1 x5 J+ n: s
    在SolidWorks中通過宏錄制可以記錄SolidWorks用戶的整個(gè)產(chǎn)品設(shè)計(jì)過程,把用戶的界面菜單操作所用到的SolidWorks對(duì)象、方法都一一記錄下來,其語法完全符合Visual Basic。根據(jù)宏文件中的對(duì)象和方法在自己的應(yīng)用程序中合理調(diào)用,通過對(duì)變量的控制就可實(shí)現(xiàn)產(chǎn)品的參數(shù)化設(shè)計(jì)。在二次開發(fā)過程中,宏錄制文件中的許多對(duì)象、方法可以直接在Visual Basic應(yīng)用程序中應(yīng)用,簡(jiǎn)化了開發(fā)過程。
$ {. P. Q# @$ j4 V5 [2 v   
$ ?: f& o5 E9 K7 ]: k0 [. e    3 機(jī)械零件參數(shù)化設(shè)計(jì)實(shí)現(xiàn)0 J! g, _0 G0 b7 a8 X9 q4 c
    6 r7 M* `* u4 L3 i
    3.1 零件二次開發(fā)的過程主要論述通過VB語言對(duì)SolidWorks進(jìn)行二次開發(fā),其主要流程如下:
* h% N- x2 ?. y7 x   
5 F# ?6 Q. B' @' q    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方法即可讀出對(duì)應(yīng)的數(shù)據(jù)。
" F) A4 m) p) D- a/ J   
9 m) V9 W9 }. C! V    3.1.2 分析零件的結(jié)構(gòu)特征,建立實(shí)體模型首先,針對(duì)要建立的實(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)前裝配圖中.( i  h4 Z! E2 m8 F$ @
   
: w' {+ S+ M# g1 F7 `6 {& \- x  R    3.1.3 建立應(yīng)用程序VB開發(fā)的程序作為客戶方(client),而SolidWorks作為服務(wù)方(server),VB程序可建立與SolidWorks各級(jí)對(duì)象(object)的關(guān)聯(lián);另外,還必須在VB中通過“引用”(reference)JJll載SolidWorks類型庫,使VB識(shí)別程序使用的SolidWorks對(duì)像類型、屬性和方法。
, _8 k! }/ l: B8 A7 ]( K8 m    ! r/ ]) ]" N: r% D
    3.2 齒輪聯(lián)軸器二次開發(fā)中的關(guān)鍵技術(shù)
/ _* v' S4 k: f    ) n; |1 H$ x& s
    以機(jī)械零件中的齒輪聯(lián)軸器為例介紹二次開發(fā)中的關(guān)鍵技術(shù)。
5 D+ X' @! I. ]* ^) \) E   
* @; L) r# |, H) ]; P' K6 W    3.2.1 聯(lián)軸器數(shù)據(jù)庫技術(shù)CL6型號(hào)齒式聯(lián)軸器的部分標(biāo)準(zhǔn)數(shù)據(jù)如表1所示。
! d8 ]$ [4 |3 |) f# x. A    : I4 i& g* X' |
( g# k: m) w- u8 ^
    & R4 Y' f! s* f+ L( [
    建立數(shù)據(jù)庫,在VB程序中引用數(shù)據(jù)庫,就可以通過程序查詢聯(lián)軸器的國(guó)家機(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ì)人員參考。
" d/ c" @+ C: ~. ^# a9 {  U) a# l    ' r4 u* j! j5 H6 U; s

4 m. V. q2 {  H& ], @" l  S8 @+ O    齒輪聯(lián)軸器需要做到全參數(shù)化的有齒數(shù)、模數(shù)、壓力角、軸徑、鍵槽尺寸及相關(guān)安裝尺寸等。
3 j, ~& x# _$ H' m9 F0 D4 [    2 H4 Z) _% K( O; b
    實(shí)現(xiàn)模型創(chuàng)建,需通過VB環(huán)境下的數(shù)學(xué)模型計(jì)算,得出重要數(shù)據(jù)。對(duì)于齒輪聯(lián)軸器,最重要的是齒輪漸開線的計(jì)算。在VB環(huán)境中,建立漸開線直角坐標(biāo)方程. 聯(lián)立方程組,利用循環(huán)語句來實(shí)現(xiàn)漸開線的計(jì)算。再將數(shù)據(jù)傳遞給ModelDoc2:SketchSpline方法繪制輪齒草圖, .調(diào)用FeatureManager::FeatureExtmsion2方法拉伸輪齒。) }% L! L3 h  ?5 t$ S# X
    : Q* B$ S0 K0 m% H; _
7 a/ a+ h8 M4 T2 P+ e1 ]
    圖2 聯(lián)軸器數(shù)據(jù)流程
   
- W/ @+ X! n+ N. Y& P" L    3.2.2 零件、裝配文檔的創(chuàng)建SldWorks對(duì)象是SolidWorks API中最高級(jí)的對(duì)象,它提供了SolidWorksAPI中所有對(duì)象的直接或間接接口。通過該對(duì)象可以控制SolidWorks軟件的執(zhí)行或退出。在VB中利用Create Object方法來獲得Sldworks對(duì)象,利用該對(duì)象的activedoc方法可以獲得當(dāng)前Solidworks文件對(duì)象。/ U0 w" y( n6 J1 M, w
    ; \- `' T1 d; z  t6 x6 F' @
3.2.3 零件自動(dòng)建模實(shí)現(xiàn)創(chuàng)建了新的零件文檔后,通過定義對(duì)象與數(shù)據(jù),調(diào)用創(chuàng)建草圖、實(shí)體的API函數(shù)來進(jìn)行零件參數(shù)化建模代碼的編寫。
$ ^% N8 g  P8 l/ C# v- Q   
1 v9 u; W& W5 i/ h& d$ P

9 J+ Y" G0 F$ [3 e5 Z0 f8 m    3.2.4 自動(dòng)裝配實(shí)現(xiàn)創(chuàng)建了新的裝配文檔后,向裝配體中添加組件。先調(diào)用SldWorks::OpenDoc6方法打開所要添加的組件,再使用AssemblyDoc::addcomponent4函數(shù)往裝配體中插入零部件。- }% [$ k. u: x+ T3 ^* V" X" z
   
5 ]+ u2 [: R: i% a6 ]2 |    在Solidworks中,可以使用變換確定或者移動(dòng)一個(gè)部件在裝配體中的物理位置。所有零件和裝配體都有它們各自的原點(diǎn),當(dāng)裝配體空間與部件空間不一致時(shí),要使用變換來設(shè)置或獲得部件相對(duì)于裝配體的距離和旋轉(zhuǎn)角度。如果半聯(lián)軸節(jié)原點(diǎn)與裝配體原點(diǎn)不同且不同軸,那么AddComponent4方法的位置參數(shù)必須由半聯(lián)軸節(jié)中心乘以半聯(lián)軸節(jié)部件相對(duì)于裝配體原點(diǎn)的變換來確定。調(diào)用MathUtility:;CreateTransform方法用來創(chuàng)建MathTransform對(duì)象,MathTransform對(duì)象是用于操作部件變換信息的接口。8 q3 B- I8 y1 F- C4 d/ A
    6 S, R# w9 |, u- ]+ @( O: `
    對(duì)零件添加配合關(guān)系之前先使用ModelDocExtension::SelectByID方法選中待配合的零件上的幾何元素,然后使用AssemblyDoc::Addmate3方法定義配合關(guān)系。如果之前已經(jīng)定義過相應(yīng)的用于配合的基準(zhǔn)面和基準(zhǔn)軸,會(huì)使配合時(shí)選取待配合元素變得更為容易。做配合時(shí),需要經(jīng)常選擇到零件的面、線等,所以主要的問題在于如何選擇合適的面、線,同時(shí)需要熟練掌握AsemblyDoc::AddMate3函數(shù)的使用。在得到一個(gè)組件(component)或者一個(gè)特征(feature)時(shí),可以使用Igetfaces、Igeflirstface、Igetnextface等方法遍歷一個(gè)組件或特征等的各個(gè)面,來達(dá)到選擇面的目的。+ s3 b" V0 V. ^, o8 k+ p
   
3 Z" ~7 y5 ]  A, y9 ~

2 ]: }9 J0 D- k  D    4 開發(fā)人機(jī)交互界面及運(yùn)行結(jié)果& L8 n% B- M& ]! p3 s
    ; `5 c" K6 L2 U& I; W2 o1 {. l$ G
    本示例基于作者研制的軸系結(jié)構(gòu)設(shè)計(jì)系統(tǒng)。以Vistud Basic語言為開發(fā)平臺(tái)通過調(diào)用SolidWorks API函數(shù)建立齒輪聯(lián)軸器模型,操作界面如圖3所示。選擇需要的齒輪聯(lián)軸器類型,點(diǎn)擊“三維模型建立”即可實(shí)現(xiàn)在SolidWorks中自動(dòng)創(chuàng)建相應(yīng)型號(hào)的聯(lián)軸器模型。重新選擇型號(hào),點(diǎn)擊按鈕,新的模型將在Solidworks環(huán)境中重生,程序無需更改。CL6齒式聯(lián)軸器裝配操作界面如圖4所示。添加裝配實(shí)體,選擇配合元素與方式,即可在Solidworks環(huán)境下實(shí)現(xiàn)聯(lián)軸器零件的自動(dòng)裝配。7 s3 q& W: F' H6 |6 m, R' _; O$ ~! K
     
2 {5 T, j) ]. Y" `% H9 Q. ~
' y! a! J  L' t1 u- [. n# `0 G/ h% W
  J; `# T0 A1 X3 S2 I
    5 結(jié)語
& @+ u4 {5 N' h& w, d! m) I
    - c, d+ s/ j1 @/ _+ |1 P
        論述了SolidWorks軟件的二次開發(fā)原理,介紹了利用VB語言在SolidWorks環(huán)境下實(shí)現(xiàn)機(jī)械零件自動(dòng)建模與裝配的可能性及方法,使機(jī)械零部件的建模、裝配實(shí)現(xiàn)了參數(shù)化、自動(dòng)化。我們研究的SolidWorks的二次開發(fā)技術(shù)對(duì)于減輕設(shè)計(jì)人員的工作強(qiáng)度、實(shí)現(xiàn)工程設(shè)計(jì)的自動(dòng)化、開發(fā)集成化的CAD系統(tǒng)有很大的作用。; D5 Z3 F: \$ H4 ]
回復(fù)

使用道具 舉報(bào)

2#
發(fā)表于 2011-2-7 00:15:42 | 只看該作者
問了好幾天,總算有大俠回應(yīng)啦
' \8 r9 C  d+ S5 l( ]只是市面上這樣的書籍資料很難找到) |' k0 B1 [" j. @
而且做的話自己VB或VC++能力不能差,挺糾結(jié)的
3#
發(fā)表于 2011-2-10 09:11:34 | 只看該作者
不用糾結(jié),找人做就行了啊。
4#
 樓主| 發(fā)表于 2011-2-11 19:05:55 | 只看該作者
對(duì)啊。。。這種東西一般都不會(huì)是單人搞的。。。要么是企業(yè)要么是團(tuán)隊(duì)。。。。做好自己所擅長(zhǎng)的才是正道。
5#
發(fā)表于 2011-2-11 22:48:47 | 只看該作者
我認(rèn)識(shí)的人里至少有5,6個(gè)會(huì)SOLIDWORKS二次開發(fā),他們都是在校研究生
6#
發(fā)表于 2011-5-19 16:28:16 | 只看該作者
求助:怎么調(diào)用solidworks自帶的“工具-方程式”功能,就是我點(diǎn)個(gè)按鈕,彈出的對(duì)話框和點(diǎn)擊方程式菜單一模一樣。謝謝了!

點(diǎn)評(píng)

北京愛情故事 http://www.kk321.cc/aiqing/20348/ 星月傳奇 http://www.kk321.cc/dalu/20470/  發(fā)表于 2013-12-30 22:16
7#
 樓主| 發(fā)表于 2011-5-23 22:25:11 | 只看該作者
謝謝各位的回答!!
8#
發(fā)表于 2011-5-28 17:40:08 | 只看該作者
專業(yè)計(jì)算機(jī)學(xué)的不是很好,不過也想學(xué)學(xué)。
9#
發(fā)表于 2011-10-13 21:33:33 | 只看該作者
現(xiàn)在關(guān)系到一個(gè)課題,不知道對(duì)于任意空間曲線(任意比較簡(jiǎn)單的三維曲線即可)的solidworks模型,能否提取出曲線的方程或者根據(jù)自己的需要,每個(gè)一定的間隔取一個(gè)點(diǎn)得坐標(biāo),這個(gè)間隔要比較小,并且可以任意調(diào)節(jié)就最好。3 R$ o0 B5 O. N# {
例如:已知曲面A和曲面B的交線,如何從solidworks中提取這條交線的方程或者在這條交線上,我自己設(shè)定每個(gè)1mm或者0.1mm的距離上,我取一個(gè)點(diǎn)得坐標(biāo),從而得到這條曲線上的N個(gè)點(diǎn)的坐標(biāo)值。7 |3 o7 O; M, z, N* ?/ V8 T4 F0 T
出了solidworks,其他軟件要是能實(shí)現(xiàn)此功能也可以,比如CAD/PROE/UG等。
8 M8 P% o. U. d. T$ z* v' I( @' u聯(lián)系方式:QQ782355668。
5 g1 u/ u4 u% D, O; ~; {7 S7 L不甚感激!
10#
發(fā)表于 2012-3-11 12:58:31 | 只看該作者
目前正在學(xué)習(xí)中,感謝分享

本版積分規(guī)則

小黑屋|手機(jī)版|Archiver|機(jī)械社區(qū) ( 京ICP備10217105號(hào)-1,京ICP證050210號(hào),浙公網(wǎng)安備33038202004372號(hào) )

GMT+8, 2024-9-28 17:26 , Processed in 0.060925 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表