You are on page 1of 12

Fakultet strojarstva i brodogradnje, Kolegij Napredna inenjerska informatika, Seminarski rad

Napredna inenjerska informatika


Solidworks vba: Tolerancije modela

Matej Markulin
0035186575

1
Sadraj

Popis slika ................................................................................................................................................ 3


1 Opis zadatka .................................................................................................................................... 4
2 Opis programa ................................................................................................................................. 4
3 Opis koda programa ........................................................................................................................ 6
4 Reference ...................................................................................................................................... 12

2
Popis slika
Slika 1: Pokretanje 1. nain................................................................................................................... 4
Slika 2: Pokretanje -2. nain .................................................................................................................... 4
Slika 3: Suelje ......................................................................................................................................... 5
Slika 4: Prikaz otvorenog modela u Solidworksu..................................................................................... 5
Slika 5: Suelje nakon pokretanja programa ........................................................................................... 6

3
1 Opis zadatka

Potrebno je napraviti program u Visual Basicu koji e analizirati sve tolerancije u modelu u Solidworks
programskom paketu, zatim ih ispisati zajedno s glavnim dimenzijama, te na kraju prikazati najstrou i
najslobodniju toleranciju. Cilj je da se i prikae model u Solidworksu u kojem moemo vizualizirati
dimenzije i tolerancije.

2 Opis programa

Program se pokree na jedan od 2 priloena naina. Prvi je da se otvori kod u Visual Studio aplikaciji,
te se pritiskom na opciju Start pokrene rad programa kao to je prikazano na Slika 1.

Slika 1: Pokretanje 1. nain

Drugi nain je bitno jednostavniji jer se moramo pokretati nikakav program, nego samo naemo
datoteku imena naziv.exe koja se nalazi u folderu bin--> Debug. U ovom sluaju radi se o datoteci
Tolerance model controller 2000 prikazanoj na Slika 2.

Slika 2: Pokretanje -2. nain

4
Program se sastoji od 4 Buttona, 2 TextBoxa, te jednog DataGridViewa i OpenFileDialoga koji je skriven.
Postoji jo jedan ListBox u koji se unose vrijednosti, ali on je napravljen da ne bude Visiable. Button
Otvori model slui za otvaranje modela u kojem elimo analizirati tolerancije. Klikom na gumb otvora
se model u Solidworksu kao to prikazuje Slika 4.

Slika 3: Suelje

Slika 4: Prikaz otvorenog modela u Solidworksu

Button Pronai tolerancije je gumb koji obavlja veinu posla. On pronalazi sve znaajke, zatim iz njih
sve dimenzije, pa na kraju sve tolerancije. DataGridView predstavlja tablicu u koju se pohranjuju naziv
dimenzije, nominalna vrijednost, te gornja i donja tolerancijska vrijednost. Postoje jo 2 textBoxa,

5
jedan za najstrou, a drugi za najslobodniju toleranciju. Button Zatvori model slui da se model zatvori,
te da se moe otvoriti drugi bez da se gasi program. I naravno jo postoji Button Izlaz koji zatvara
program.

Slika 5 pokazuje program nakon analize modela. Vidljivo je da program je ispunio sve zadatke, te
popunio sva polja. DataGridView je zgodan jer se proiruje koliko broj tolerancija to zahtjeva. Jedan
redak predstavlja sve podatke vezane za jednu dimenziju u modelu. Sve dimenzije su u milimetrima.

Slika 5: Suelje nakon pokretanja programa

3 Opis koda programa

U ovom dijelu e se prikazati i objasniti dio po dio koda, ovisno kakva je njegova namjena. Na kraju e
se dati cjelokupni kod s pripadajuim komentarima. U poetku je potrebno povezati Solidworks i Visual
Basic, a to emo preko naredbe Project-->Add Reference. Tu emo pod opcijom COM nai i selektirati
Solidworks Constant type library i Solidworks 2016 Type library koji se zatim importiraju u kod.

6
Zatim slijedi deklariranje globalnih varijabli:

swApp je varijabla tipa SldWorks.SldWorks, koja povezuje na kod sa instancom Solidworks-


a.
swModel je varijabla tipa ModelDoc2, a u nju "spremamo" otvoreni model koji moe biti
pozicija, sklop, crte, simulacija ili neto drugo.
Varijable errors i warnings su tipa Long i u njih se spremaju kodovi greaka i upozorenja koja
se mogu pojaviti prilikom izvrenja nekih naredbi unutar Solidworks-a, npr. javiti e se
upozorenje ako elimo otvoriti datoteku koja je Read Only.
swPart je varijabla tipa PartDoc i ona definira da je otvoreni model pozicija, a ne neki drugi
tip modela.
swFeature sadri odreenu znaajku iz stabla modela
swDisplayDimension je varijabla u kojoj je dimenzija kao objekt koji sadri vrijednost,
toleranciju, dodatne znakove i ostalo
swDim je varijabla tipa Dimension te je ona vrijednost objekta swDisplayDimension
swDimTol je varijabla u kokjoj je pohranjena tolerancija dimenzije
maxValueValid, odnosno minValueValid, je varijabla u kojoj je pohranjena maksimalna,
odnosno minimalna vrijednost tolerancije, dok maxValue/minValue predstavljaju varijable
koje imaju brojanu vrijednost max/min tolerancije
min, max su varijable pomou kojih emo odrediti najstrou i najslobodniju toleranciju

Odmah po uitavanju forme potrebno je dodati kod koji e u varijablu swApp staviti instancu ve
otvorenog Solidworksa.

Dvoklikom na cmdOtvori kreira se poetni kod za potprogram. Najprije je potrebno na formu te u kod
dodati OpenFileDialog da bismo mogli odabrati datoteku. Nadalje, odabranu datoteku potrebno je
otvoriti, a openita naredba koja to omoguuje je Varijala_modela=varijabla_aplikacije.OpenDoc6.

7
Glavna zadaa programa nalazi se u potprogramu cmdPronai. U ovom dijelu pronalaze se sve
tolerancije, ispisuju se u tablicu, te se pronalazi najstroa i najslobodnija. Prvo se u varijablu swPart
postavlja aktivan dokument. Zatim postavljamo prvu znaajku u varijablu swFeature.

Sada je potrebno pretraiti stablo (eng. design tree) kako bismo nali tolerancije. Kako ne znamo koliko
imamo tolerancija potrebno je pretraiti ih sve. Postupak je sljedei: pretrait emo sve znaajke kako
bismo nali sve dimenzije, a dimenzije pretraujemo da naemo sve tolerancije. Prvo naredbom Do
While Not swFeature Is Nothing pretraujemo sve znaajke. Potom postavljamo prvu dimenziju u
varijablu swDisplayDimension. Vano je naglasiti da to nije samo numerika vrijednost dimenzije ,
nego sve to ide uz nju kao to je tolerancija, kruna ili linijska mjera...Konano postavljamo toleranciju
u varijablu swDimTol. Kako svaka tolerancija ima 2 dimenzije, maksimalnu i minimalnu, pa je jasno da
e postojati 2 varijable. Te 2 varijable u koje se postavljaju max i min vrijednost su maxValueValid i
minValueValid, a njihove numerike vrijednosti su minValue i maxValue. Upravo su nam potrebne te
numerike vrijednosti. Prvo emo ih obje upisati u isti ListBox. Prije naredbe za upis potrebno ih je
pomnoiti s 1 000 da ih pretvorimo u milimetre jer inicijalno u VB mjere su u metrima.

Zatim se odreuju minimalna i maksimalna vrijednost. Za to emo koristiti ve spomenutim ListBox-


om. Naime iz njega emo povui sve brojeve i redom ih usporeivati. Postupak je sljedei: prebrojat e
se koliina brojeva koji su u ListBox-u, definirati e se varijabla brojaa j, te e se rei dok je varijabla
manja od koliine brojeva izvodi petlju. Odreivanje maksimuma funkcionira na principu da uzmemo
prvi broj te ga proglasimo maksimumom. Nakon njega uzmemo drugi i usporedimo ga s prvim ako je
vei on postaje maksimum, a ako nije onda maksimum ostaje onaj prvi. I tako redom do zadnjeg broja.
Minimum se odreuje na isti nain jedino e se na poetak trebati dodati uvjet da se iz ListBoxa uzimaju
samo vrijednosti koje nisu jednake 0. Na kraju se dodaju max, odnosno min broj u odreeni TextBox.
Taj TextBox e se sakriti jer sve dimenzije bit e prikazane u DataGridView tablici.

8
Slijedi popunjavanje tablice, DataGridView, u ovom sluaju nazvanu dgwTol. Prvo je potrebno narediti
programu da odabire dimenzije samo iz Sketch-a, ne iz znaajke jer u tom sluaju bismo imali neke
dimenzije pronaene i upisane 2 puta. A to je omogueno da se izbjegne naredbom ako je
swFeature.GetTypeName<>ProfileFeature. Dalje slijedi popunjavanje tablice s time da Rows je
funkcija brojaa i, a Cells imamo onoliko koliko je tablica iroka, tj. unaprijed je odreeno. Mjerna
jedinica se ispisuje, te se tolerancije mnoe s 1000 kako bi se prikazale u milimetrima. U tablici se
prikazuju naziv dimenzije, brojana vrijednost, maksimalna i minimalna vrijednost tolerancije. Na kraju
se naredbom GetNextDisplayDimension(swDisplayDimension) trai sljedea dimenzija, zatvara se
petlja, zatim se naredbom GetNextFeature trai sljedea znaajka i naravno zatvara se petlja
naredbom Loop.

Da bi se omoguilo promjena modela bez da se zatvara aplikacija bilo je potrebno razviti jedan
potprogram. Za zatvaranje modela potreban nam je naziv tog modela koji emo spremiti u vaijablu
aktivan tipa String.Prije zatvaranja e se obrisati sve vrijednosti iz TextBox-eva, ListBox i DataGridView
tablice. U varijablu swModel traimo od Solidworksa da stavi aktivan model. Nakon toga u varijablu
aktivan stavimo naziv od trenutno otvorenog modela linijom koda aktivan=swModel.GetTitle. I na
kraju traimo od Solidworksa da zatvori datoteku s nazivom u varijabli aktivan:
swApp.CloseDoc(aktivan).

9
Postoji jo i naredba da se gumbom cmdIzlaz zatvori aplikacija.

Cijeli kod koji se koristi u ovoj aplikaciji dan je ispod.

Imports SldWorks
Imports SwConst

Public Class Form1


Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim errors, warnings As Long
Dim swPart As PartDoc
Dim swFeature As Feature
Dim swDisplayDimension As DisplayDimension
Dim swDim As Dimension
Dim DispIn As Object
Dim swDimTol As DimensionTolerance
Dim maxValue As Double
Dim minValue As Double
Dim maxValueValid As Double
Dim minValueValid As Double
Dim min1, min2 As Double
Dim max1, max2 As Double

Private Sub cmdOtvori_Click(sender As Object, e As EventArgs) Handles cmdOtvori.Click

'omoguuje korisniku da odabere datoteku


OpenFileDialog1.ShowDialog()
'openita naredba za otvaranje datoteke
swModel = swApp.OpenDoc6(OpenFileDialog1.FileName, swDocumentTypes_e.swDocPART,
swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", errors, warnings)
'Solidworks se otvara i prikazuje (ne radi samo u pozadini)
swApp.Visible = True
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


'u varijablu se stavlja istanca ve otvorenog solidworksa
swApp = New SldWorks.SldWorks
End Sub

10
Private Sub cmdPronadi_Click(sender As Object, e As EventArgs) Handles
cmdPronadi.Click

Dim i As Integer
'postavlja se vrijednost u trenutno otvoreni dokument
swPart = swApp.ActiveDoc
'u varijablu stavimo prvu znaajku koja se nalazi u stablu
swFeature = swPart.FirstFeature
'postavljamo petlju da pretrai sve znaajke u stablu dok nije preostala niti jedna

Do While Not swFeature Is Nothing


'nalazimo prvu dimenziju u znaajci
swDisplayDimension = swFeature.GetFirstDisplayDimension
'postavljamo petlju da pretrai sve dimenzije u stablu dok nije preostala niti jedna

Do While Not swDisplayDimension Is Nothing


'u varijablu postavljamo vrijednost dimenzije
swDim = swDisplayDimension.GetDimension
'u varijablu postavljamo vrijednost tolerancije
swDimTol = swDim.Tolerance
'postavlja se vrsta tolerancije
swDimTol.Type = swTolType_e.swTolFITWITHTOL
swDimTol.FitType = swFitType_e.swFitTRANSITIONAL
'trai se maksimalna i minimalna vrijednost tolerancije
maxValueValid = swDimTol.GetMaxValue2(maxValue)
ListBox1.Items.Add(maxValue * 1000)
minValueValid = swDimTol.GetMinValue2(minValue)
ListBox1.Items.Add(minValue * 1000)

Dim j As Integer = 1
Dim lstSize As Integer = ListBox1.Items.Count
Dim max As Double = ListBox1.Items(0)
Dim min As Double = ListBox1.Items(0)
Do While (j < lstSize - 1)

If (Math.Abs(CDbl(ListBox1.Items(j))) > Math.Abs(max)) Then


max = CDbl(ListBox1.Items(j))
End If
If Math.Abs(CDbl(ListBox1.Items(j))) <> 0 Then
If (Math.Abs(CDbl(ListBox1.Items(j))) < Math.Abs(min)) Then
min = CDbl(ListBox1.Items(j))
End If
End If
j = j + 1
Loop
txtMin.Text = min
txtMax.Text = max

'uvjet da se ne povlae dimenzije iz znaajki, nego samo iz sketch-a


If swFeature.GetTypeName <> "ProfileFeature" Then

'dodavanje u DataGridview redom:imena dimenzije, vrijednosti dimenzije, maksimalne


i minimalne vrijednosti tolerancije te dimenzije
dgwTol.Rows.Add()
dgwTol.Rows(i).Cells(0).Value = i + 1 & " " & swDim.FullName & " [mm]"
dgwTol.Rows(i).Cells(1).Value = swDim.Value & " [mm]"
dgwTol.Rows(i).Cells(2).Value = maxValue * 1000 & " [mm]"
dgwTol.Rows(i).Cells(3).Value = minValue * 1000 & " [mm]"
'postavljanje brojaa za redove DataGridView tablice
i = i + 1

11
End If

'trazi se nova dimenzija


nswDisplayDimension = swFeature.GetNextDisplayDimension(swDisplayDimension)

Loop
'trai se nova znaajka
swFeature = swFeature.GetNextFeature
Loop
End Sub

Private Sub cmdZatvori_Click(sender As Object, e As EventArgs) Handles


cmdZatvori.Click

'postavlja se varijabla aktivan u koju e se spremiti naziv modela


Dim aktivan As String
'oiste se vrijednosti iz tablica, TextBoxeva i ListBoxa
dgwTol.Rows.Clear()
txtMax.Text = ""
txtMin.Text = ""
ListBox1.Items.Clear()
'traimo od solidworksa da postavi aktivan dokument u varijablu swModel
swModel = swApp.ActiveDoc
'trazimo da da naziv modela u varijablu aktivan
aktivan = swModel.GetTitle
'zatvaranje dokumenta s nazivom u varijabli
swApp.CloseDoc(aktivan)
End Sub

Private Sub cmdIzlaz_Click(sender As Object, e As EventArgs) Handles cmdIzlaz.Click


End
End Sub
End Class

4 Reference

[1] Jasmin Jurani: Povezivanje Visual Basic-a sa Solidworks-om 2014, Programiranje i


algoritmi Podloge za vjebe
[2] N. Bojeti, N. Pavkovi, R. Todi, D. Dekovi, D. Marjanovi, D. Rohde: PROGRAMIRANJE I
ALGORITMI - Podloge za vjebe programiranje
[3] API Solidworks 2016
[4] Visual Studio 2012
[5] Solidworks 2016

12

You might also like