Thiết kế tham số và hướng đối tượng trong solidwork

  • Thread starter huysu
  • Ngày mở chủ đề
H

huysu

Author
Đề tài tốt nghiệp của em là Thiết kế tham số trong cơ khí. Hiện em đang học năm thứ 4 DHBK Hà Nội, thời gian còn một năm để thực hiện đề tài này. Đây là vấn đề hay trong ngành cơ điện tử của bọn em. Nội dung chính của đề tài là nếu thông số đầu vào của một bộ phận máy thay đổi, ví dụ như tải trọng, công suất, hành trình thay đổi, thì dựa vào các công cụ tin học như lập trình và solidwork để tạo ra bộ thông số đầu ra và thành sản phẩm ngay trên solid. Trước em có đọc bài của chú Đào Chi Lăng về thiết kế đĩa xích trong solid bằng bảng tính exel. Em có ý tưởng là nhờ các công cụ lập trình để nhập các thông số đầu vào , tu đó có bộ thông số đầu ra, các kích thước này sẽ được nhập vào bảng tính exel và tao thanh chi tiết trên solidwork. Hiện vấn đề này em chưa tìm ra tài liệu. Không biết ai có thể giúp em tìm được các tài liệu liên quan đến vấn đề thiết kế tham số và hướng đối tượng trong cơ khí không. Em xin cảm ơn
 

DCL

<b>Hội đồng Cố vấn</b>
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Tại sao lại cần một công cụ lập trình làm gì, trong khi có thể dùng trực tiếp Excel để nhập dữ liệu và tính toán các tham số rồi điều khiển thiết kế?
 
H

huysu

Author
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Chú Đào Chi Lăng ơi, vậy chú có thể chỉ cho cháu tài liệu về thiết kế tham số bằng ễl trong solidwork ko
Tài liệu tiếng anh cũng được chú ạ. Cháu đang rất cần tài liệu. Nếu chú có tài liệu về riêng việc thiết kế tham số và hướng đối tượng trong cơ khí thì chú chỉ giúp cháu với. Cảm ơn chú nhiều
 
H

huysu

Author
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Anh computer_tsv ơi, có thể nói cuk thể hơn cho em được không, và anh có tài liệu nào hay về những phần anh bảo không, ndduwwocjw anh chỉ cho em với. Cảm ơn anh nhiều
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

mình nghĩ chẳng cần tài liệu gì ghê gớm đâu bạn ah! nếu bạn muốn thiết kế theo bản tính exell thì chỉ cần tìm các hàm của các kích thước theo các thông số muốn thay đổi. có nghĩa là một chi tiết máy sẽ có một bảng tính exell cho riêng nó. cần gì phải nhờ các công cụ lập trình hả bạn!( thật sự không hiểu ý bạn)
 

Hiro

PHAN CHÂU TUẤN
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Tặng một tài liệu nhỏ : Miêu tả chung về Solidworks API


Bạn liên hệ qua mail : phanchautuancokhi@gmail.com tớ sẽ gửi cho bạn

Còn thiết kế chi tiết bằng bảng thiết kế Excel thì tài liệu hướng dẫn hấp dẫn của chú DCL đã có post trong mục SolidWorks và chia sẻ tài liệu_ PM , bạn tìm nhé !

Tài liệu của NSX SolidWorks API ( Lập trình VB, C# , VB.net) : http://www.mediafire.com/?qudtvbf4y596gq8

Chúc vui .
 
Last edited:

computer_tsv

<b>Designer</b>
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Mình xin nói cụ thể thế này :
:70::70::70::70:Nếu vẽ một chi tiết ( hoặc một cụm chi tiết ) mà muốn điều khiển một số thông số đầu vào ( hay các thông số cần thiết ) khiến mô hình 3d trong một phần mềm đồ họa nào đó mà bạn dùng để xây dựng lên sẽ thay đổi theo ý bạn mà không cần phải " vẽ lại ".Xin lưu ý rằng ở đây từ vẽ lại có nghĩa là bạn không phải vẽ từ đầu một bản vẽ 3d để tạo ra một chi tiết giống hệt về các bước vẽ, hình dáng,..với file 3d bạn đã vẽ mà chỉ cần sửa các thông số đầu vào ( mà bạn đã " quy hoạch vào bảng tính exel hay ngay trong bản vẽ) của file bạn đã vẽ rồi.
:70::70::70::70:
Có một cách khác ( chuyên nghiệp hơn - tiện dụng hơn) :
:6::6::6::38::38:
1.Dùng Macro để ghi lại quá trình thao tác cũng như tiến trình vẽ của bạn.Cuối quá trình này ngoài bạn có một file 3D và một file macro.Bạn sẽ sử dụng macro này để tạo ra một bản sao khác của file 3D khi bạn gọi chương trình macro này ra và chạy file này ( cụ thể là trên SolidWorks ).Chú ý rằng bạn cần am hiểu về lập trình đồ họa và vissual bassic để can thiệp vào các lệnh ( chủ yếu vào kích thước mà bạn nhập ) để làm thay đổi bản vẽ 3D của bạn.Tất cả được nằm trong API của SolidWorks.Cụ thể sẽ được nói đến cuối bài viết này.Còn tài liệu các bạn có thể tham khâo ở DVD tutorial của SOlidWorks 2007-2009 trên diễn đàn đã úp rùi. ( www.video-tutorials.net )
:38::38::38::38:
2.DÙng phần mềm lập trình, macro để can thiệp vào một phần mềm đồ họa và tạo ra một số file và được đóng gói thành file exe ( file chạy ) như các phần mềm thông thường. Chỉ khác ở chỗ nó nó chạy trên nền phần mềm đồ họa mà bạn đã can thiệp. Cái này có thể gọi là addin cho phần mềm đồ họa. SolidWorks có rất nhiều addin như : SolidCAM,CĂMorks, Imold,Simpoe,HSM, Hypermill,MoldWorks, SplitWorks,....Đây chỉ là ví dụ để các bạn hiều hơn thui. còn cụ thể cái các bạn làm thì nhỏ hơn các phân mềm addin trên.Để làm đươc các addin thì cần am hiều IT, đồ họa, CAD,...thì mới làm được các addin như vậy.CÒn chỉ làm một file addin nho nhỏ để vẽ ra các chi tiết đơn giản thì các bạn có thể làm được.File ví dụ sẽ được gửi đến các bạn tham khảo sau nhé .!
:6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6::6:

Một ví dụ nho nhỏ về API ( macro ) trên SolidWorks :
Bước 1 : mở SolidWorks ra và làm theo ảnh

Bước 2 : bạn hãy vẽ mô hình mình cần trên solid ( khi nào có vướng mắc các bạn có thể pause quá trình ghi macro lại, khi nào tiếp tục có thể lại khi bạn tiếp tục ( chú ý chỉ sử dụng được khi bạn vẫn đang mở file 3d mà bạn đang vẽ - và chỉ là tạm nghỉ do mỏi tay hay bận việc đi ra ngoài thui nha ).
Bước 3 :

Bước 4 : bây giờ bạn dùng quá trình ghi macro này nó sẽ yêu cầi bạn lưu file với đuôi : swp.
Bây giờ bạn muốn gọi file này ra để cho nó tụ động chạy vẽ ra file 3D bạn đã vẽ thì chỉ cần vào tool>macro>run tìm đến nơi để file macro đuôi swp mà bạn để là có thể tự động vẽ file 3d rùi.
Chúc các bạn thành công.!
Còn muốn can thiệp vào file macro này các bạn cần am hiểu về vissual bassic -API. Video học APi ( ảnh tham khảo ) ;

File ví dụ đi kèm : SolidWorks và Cơ Khí Là Niềm Đam Mê Của Đời Tôi
 
Last edited:

computer_tsv

<b>Designer</b>
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Một ví dụ cụ thể nè :
Đây là một đoạn code trong file macro ( ghi chú đơn vị đo lường trong macro là mét ) :

""""[]Set myDimension = Part.Parameter("D1@Sketch1")
myDimension.SystemValue = 2
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0.1802499994686, 0.004866306133236, 0, False, 0, Nothing, 0)
Set myDisplayDim = Part.AddDimension2(0.185923567571, -0.3412213481127, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("D1@Sketch1@Part1.SLDPRT", "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
""""
Bạn có thể chỉ cần thay đổi số 2 trong dòng bôi đỏ ở trên là có thể tạo ta một file khác với kích thước bạn muốn
Các file ví dụ đi kèm : chúc vui vẻ
còn cách mở file swp để can thiệp các bạn chỉ cần vào tool > macro > edit tìm đến file có đuôi swp mà các bạn lưu. Sau đó màn hình của Microsoft Visual Basic hiện ra thế này :




' ******************************************************************************
' C:\Documents and Settings\Administrator\Local Settings\Temp\swx4028\Macro1.swb - macro recorded on 08/30/10 by Administrator
' ******************************************************************************
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.NewDocument("C:\Documents and Settings\All Users\Application Data\SolidWorks\SolidWorks 2010\templates\Part-mm-inox201.prtdot", 0, 0, 0)
swApp.ActivateDoc2 "Part1", False, longstatus
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Part.ClearSelection2 True
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.274454, 0#, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.274454, 0#, 0#, 0.274454, 0.358245, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.274454, 0.358245, 0#, 0#, 0#, 0#)
Part.ClearSelection2 True
Part.SetPickMode
Part.SetPickMode
Part.SetPickMode
boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0.2712745513842, 0.1201849278284, 0, False, 0, Nothing, 0)
Dim myDisplayDim As Object
Set myDisplayDim = Part.AddDimension2(0.3536870733237, 0.1705481356803, 0)
Part.ClearSelection2 True
Dim myDimension As Object
Set myDimension = Part.Parameter("D1@Sketch1")
myDimension.SystemValue = 2
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0.1802499994686, 0.004866306133236, 0, False, 0, Nothing, 0)
Set myDisplayDim = Part.AddDimension2(0.185923567571, -0.3412213481127, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("D1@Sketch1@Part1.SLDPRT", "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Set myDimension = Part.Parameter("D2@Sketch1")
myDimension.SystemValue = 0.25
Part.SetPickMode
Part.ClearSelection2 True
Part.SetPickMode
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0.1432335427088, 1.361642281285, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Unknown", "MANIPULATOR", 0.01295574414159, -0.06676072443441, 0, False, 0, Nothing, 0)
Part.EditDelete
Part.SketchManager.SketchConstraintsDel 1, "sgCOINCIDENT"
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0.07344186490495, 0.4217810201928, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Point1", "SKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0.02226130118211, 0.407822684632, 0, False, 0, Nothing, 0)
Part.EditDelete
boolstatus = Part.Extension.SelectByID2("Point1", "SKETCHPOINT", 0, 0.1612254230583, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Point1@Origin", "EXTSKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0)
Part.SketchAddConstraints "sgCOINCIDENT"
Part.ClearSelection2 True
................................................
longstatus = Part.SaveAs3("C:\Documents and Settings\Administrator\Desktop\API for.SLDPRT", 0, 2)
End Sub
Còn để can thiệp sau hơn vào API các bạn cần am hiểu đồ họa và Visual Basic ( như tôi đã đề cập ở trên ). Ghi chú đây chỉ là vẽ ra mô hình thui còn muốn làm ra file có thể sử dụng được ( có ý nghĩa thực tiện và trong sản xuất thì còn cần am hiểu về mặt kỹ thuật nữa )

vui vui vậy thui ! chứ mình còn gà lắm !
 
Last edited:
H

huysu

Author
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Cảm ơn anh computer_tsv nhiều. Hy vọng anh chia sẻ với em nhiều, Em cũng mới bước vào vấn đề này thôi, nên còn phải học hỏi nhiều
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Anh có tài liệu học SW API share cho bọn em với. Em cũng mới học. Mà cho em hỏi luôn là mình có thể tạo 1 file Macro từ một file 3D đã vẽ rồi đc ko ạ.
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Tài liệu trong solidwork help là đẩy đủ nhất đấy bạn.
bạn có một loạt các chi tiết đồng dạng với nhau, chỉ khác nhau kích thước, thì bạn có thể làm macro để vẽ
hoặc bạn muốn các kích thước sẽ thay đổi tùy theo điều kiện đầu vào, bạn cũng có thể làm macro để điều chỉnh kích thước
nói chung record macro thì nó chỉ ghi lại các thao tác của bạn thôi, còn để biến nó thành một chương trình thì bạn phải sửa/thêm một vài (một cơ số) lệnh.
đôi khi mình record xong rồi excute lại nó chẳng chạy gì cả, vì có một số hành động nó ko record(ko biết tại sao)
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Chào mesians
tranh thủ lúc rảnh rỗi mình sẽ làm một macro để thay đổi các kích thước của chi tiết.
bạn nào quan tâm thì cùng tham gia với mình nhé. background là như thế này:
- bạn có một chi tiết đẩy đủ kích thước
- vì lý do nào đó bạn cần thay đổi các kích thước của nó (một vài hoặc tất cả)
- hoặc bạn có một loạt các chi tiết như vậy nhưng kích thước khác nhau
giống như một thư viện, nơi mà mã chi tiết và kích thước được lưu thành những bản ghi trong một table, cần cái nào thì lấy cái đó ra
- macro này cần phải tổng quát, nghĩa là dùng cho một chi tiết bất kỳ
Macro này sẽ giúp các bạn tạo ra thư viện các chi tiết thậm chí không cần lưu file sldprt mẫu
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

mình nghĩ macro sẽ gồm hai phần
- phần mã sửa đổi kích thước
nhiệm vụ là đọc các giá trị kích thước từ một file excel, và thay đổi kích thước tương ứng của part hiện hành theo kích thước trong file
- phần giao diện:
nhiệm vụ là hiện lên một bảng liệt kê các chi tiết, kích thước để chọn
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Chào mesians
mình sẽ làm phần mã trước
phần này sẽ cần một số hàm (function) và thủ tục (sub) như sau
- một hàm đọc dữ liệu từ file, tham số là đường dẫn file, trả về một mảng 2 dòng n cột
dòng 1 là tên của kích thước
dòng 2 là giá trị mới của kích thước
- một hàm lấy danh sách các kích thước của file part cần thay đổi, tham số là (pointer) part, trả về một mảng 2 dòng n cột
dòng 1 là tên của kích thước, (dùng để so sánh với tên kích thước trong file dữ liệu)
dòng 2 là tên đầy đủ của kích thước, ví dụ ChieuCao@sketch1@ChiTiet1.part, (dùng để trỏ đến kích thước cần thay đổi)
- một thủ tục đổi giá trị kích thước, 2 tham số là file part và list kích thước-giá trị
- vài hàm phụ trợ

chú ý: kích thước trong solidwork có tên xác định, khi bạn đo một kích thước, solidwork đánh tên mặc định là D1@..., D2@..., vv
trong đó D1, D2,.. là tên ngắn gọn, ta có thể thay đổi được tên này, và nên thay đổi bởi vì
- dễ nhận biết, ví dụ thay vì tên D1 ta đặt là "ChieuCao", "ChieuRong", "GocNghieng", "BanKinhUon",...
- tên này được ghi trong file text dữ liệu và là cơ sở để nhận biết kích thước nào sẽ thay đổi
- nếu không thay đổi thì ở các sketch khác nhau có thể có các kích thước trùng tên, do đó macro sẽ thay đổi chúng giống nhau
phần lớn trường hợp ta không muốn điều đó xảy ra
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Chào mesians
mình đã viết xong hàm đầu tiên

Function getdimensionlistfromcsvfile (byval csvfilepath as string) as variant
'file text này cần có định dạng csv:
' tên_kích_thước , giá_trị
' tên_kích_thước, giá_trị
'bạn có thể edit file này bằng excel (hoặc notepad)

dim result() as string
dim col as integer
open csvfilepath for input as #1
col = 0
do while not eof(1)
col=col+1
redim preserve result(2,col)
input #1,result(1,col),result(2,col)
loop
close #1
getdimensionlistfromcsvfile = result
end function


có thể test function này như sau

option explicit
option base 1
sub main()
dim inputfile as string
inputfile ="E:\test.txt"
dim result as variant
result = getdimensionfromcsvfile(inputfile)
'in ra ket qua
dim col as integer
for col = lbound(result,2) to ubound(result,2)
debug.print result(1,col) & " = " & result(2,col)
next col
end sub
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Chào mesians
đây là hàm lấy danh sách kích thước

function getdimensionlistofpart(byref swpartdoc as sldworks.partdoc) as variant
dim swfeature as sldworks.feature
dim swsubfeature as sldworks.feature
dim swdispdim as sldworks.displaydimension
dim swdim as sldworks.dimension
dim result() as string
dim col as integer, col2 as integer
dim temp() as string

set swfeature =swpartdoc.firstfeature
col=0
col2=0
do while not swfeature is nothing
set swdispdim =swfeature.getfirstdisplaydimension
do while not swdispdim is nothing
set swdim=swdispdim.getdimension
col2=col2+1
redim preserve temp(col2)
if lsearch(temp,swdim.fullname)=0 then
col=col+1
redim preserve result(2,col)
result(1,col)=swdim.name
result(2,col)=swdim.fullname
endif
temp(col2)=swdim.fullname
set swdispdim=swfeature.getnextdisplaydimension(swdispdim)
loop
set swsubfeature=swfeature.getfirstsubfeature
do while not swdubfeature is nothing
set swdispdim=swsubfeature.getfirstdisplaydimension
do while not swdispdim is nothing
set swdim=swdispdim.getdimension
col2=col2+1
redim preserve temp(col2)
if lsearch(temp,swdim.fullname)=0 then
col=col+1
redim preserve result(2,col)
result(1,col)=swdim.name
result(2,col)=swdim.fullname
endif
temp(col2)=swdim.fullname
set swdispdim=swsubfeature.getnextdisplaydimension(swdispdim)
loop
set swsubfeature=swsubfeature.getnextsubfeature
loop
set swfeature=swfeature.getnextfeature
loop
getdimensionlistofpart=result
end function

hàm trên sử dụng một hàm phụ để kiểm tra xem một kích thước nào đó đã lưu vào kết quả chưa,
bởi vì trong quá trình lặp trên từng feature, các kích thước có thể bị lấy lặp lại khiến cho mảng result chứa các phần tử giống nhau. vì vậy cần một hàm phụ để loại bỏ sự lặp lại
function lsearch(byref list as variant,byval value as variant) as integer
dim index as integer, result as integer
index=0
dim item as variant
for each item in list
index=index+1
if item=value then
result=index
exit for
endif
next
lsearch=result
end function
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Hi mesians
đây là hàm đổi giá trị kích thước

sub changedimensionofpart(byref swpartdoc as sldworks.modeldoc2, byref dimensionvaluelist as variant)
dim swmodifyingdim as sldworks.dimension
dim col as integer
dim errors as long
for col=lbound(dimensionvaluelist,2) to ubound(dimensionvaluelist,2)
set swmodifyingdim=swpartdoc.parameter(dimensionvaluelist(1,col))
errors=swmodifyingdim.setvalue3(dimensionvaluelist(2,col),swsetvalue_inthisconfiguration,empty)
next
swpartdoc.editrebuild3
endsub


đến đây, chương trình đã hoàn thiện phần mã chính
sắp tới mình sẽ viết mã cho phần giao diện
hy vọng sẽ thú vị hơn :)
 
Ðề: Thiết kế tham số và hướng đối tượng trong solidwork

Hi mesians
phần giao diện mình thiết kế như sau
một form (formMain) - 1
một text hiển thị file thư viện được chọn - 2 (kèm theo button chọn file "browser")
một list hiển thị tên các part trong thư viện - 3
một khung ảnh để hiển thị hình ảnh đại diện của part, hoặc bản vẽ mô tả - 4
một combo dùng để liệt kê các kích thước của part - 5
một text dùng để hiển thị và thay đổi giá trị cho kích thước - 6
hai button "generate" và "exit"
để dự trữ không gian cho các chức năng khác trong tương lai, mình để các nội dung trên vào trong một tab "Part List"
sau này cần thêm chức năng gì thì mình sẽ mở thêm tab khác

image gratuite à télécharger
 
Top