Problema Macro in SolidWorks 2013

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#1
Salve a tutti,
giorni fa stavo cercando di stilare il codice VBA per generare uno schizzo completo di una ruota dentata definita dai principali parametri fondamentali (modulo m, numero di denti z, angolo di pressione Alpha in gradi, correzione x).
Purtroppo (e non conosco ancora la causa) Solidworks mi traccia 3 circonferenze e la quarta la sovrappone ad una. In definitiva si vedono 3 cerchi quando dovrebbero essere 4 cerchi distinti nella realtà.

Vi spiego un po' meglio la situazione: le circonferenze da tracciare sono le seguenti:

1) Circonferenza di troncatura interna: Ri = R - 1.25 * m
2) Circonferenza primitiva di taglio: R = m * z * 0.5
3) Circonferenza di troncatura esterna: Re = R + m
4) Circonferenza di base: rho = R * Cos(Alpha_rad)

L'ultima circonferenza viene tracciata sovrapposta alla circonferenza di raggio R (è come se l'argomento del coseno fosse pari a zero).
Sicuramente il problema risiede nella definizione di "rho" perché questo raggio è funzione di altri parametri definiti prima.

Vi allego il file della macro sperando che qualcuno possa mostrarmi l'errore.
Grazie infinite,

kalo86
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#2
Ciao,
ho testato la macro e il risultato sono 4 cerchi distinti.
Vorrei girarti un'immagine, ma sembra che stamattina non si riesca ad allegare, forse è un mio problema.
L'ho testata con i parametri standard, se il problema esce con altri parametri, postali, così proviamo.
Buona giornata
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#3
Ciao,
ho testato la macro e il risultato sono 4 cerchi distinti.
Vorrei girarti un'immagine, ma sembra che stamattina non si riesca ad allegare, forse è un mio problema.
L'ho testata con i parametri standard, se il problema esce con altri parametri, postali, così proviamo.
Buona giornata
Ciao, grazie per aver testato la macro!
Ma allora ho qualche problema con la mia installazione di SolidWorks 2013? Non so più cosa fare...
Che versione di SolidWorks stai utilizzando? Grazie per la disponibilità!
Saluti
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#4
Ciao, grazie per aver testato la macro!
Ma allora ho qualche problema con la mia installazione di SolidWorks 2013? Non so più cosa fare...
Che versione di SolidWorks stai utilizzando? Grazie per la disponibilità!
Saluti
Io utilizzo la 2013 sp.20.
Ma non credo sia quello il problema.
Dammi altri parametri da inserire per la prova e ti faccio sapere.
Ciao
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#5
Ciao, ho installato la versione 2013 SP2.0 ma come al solito la circonferenza di raggio "rho" risulta sovrapposta alla circonferenza di raggio R... A livello visivo si vedono chiaramente 3 circonferenze e non 4... Non so che fare...
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#6
Risultato.png

Allego l'immagine dell'area grafica dopo aver lanciato la macro.
E' quello che dovrebbe uscire? secondo me è corretto.
Fammi sapere
Ciao
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#7
E' perfetto! Non riesco a capire perché nel mio notebook non si ottiene il medesimo (tuo) risultato...
La circonferenza di raggio rho risulta essere pari a quella di raggio R... Potresti darmi una mano? Dovrei settare qualcosa per le API?
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#8
Questo è quello che ottengo non appena eseguo la stessa macro che ho caricato nel primo post:
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#9
Ciao, prova a girarmi il file di parte dell'immagine allegata e i parametri utilizzati, così verifico cosa succede.
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#10
Ciao, innanzi tutto ti ringrazio per l'aiuto che mi stai dando (ormai ti ho dato del tu senza permesso, sono un maleducato!).
Sto utilizzando i parametri che uso di default all'interno della userform, cioè:

z = 16
m = 2
Alpha = 20°
x = 0

Nonostante ciò SolidWorks mi disegna 4 circonferenze, di cui una sovrapposta ad un'altra. Nella realtà dovrebbero essere 4 cerchi distinti in quanto sono definiti da 4 raggi diversi.
Ho fatto numerose prove sia con SolidWorks 2012 SP4.0 x64 che con SolidWorks 2013 SP0.0 x64 e SolidWorks SP3.0 x64.
Inoltre ho fatto la prova a lanciare la macro in questione su un altro PC a 32bit con SolidWorks 2013 SP0.0 x86 ed il problema persiste.
Allego il file della parte anche se si tratta solamente di uno schizzo sul piano frontale.
Saluti e grazie ancora!
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#11
Ciao, ho testato nuovamente la tua macro, l'ho modificata e credo che ora non ti darà più problemi (almeno spero).
Qui sotto, ti riporto le varianti fatte e il loro perchè, che potrà magari diventare argomento di confronto.
Inanzitutto ho portato Pigreco(Pi) come costante nelle dichiarazioni.

Le variabili :

Dim R As Double
Dim Ri As Double
Dim Re As Double
Dim Rho As Double
Dim alpha_rad As Double

che avevi dichiarato nell'evento Sub CmdParametri_Click(), si distruggono automaticamente all'uscita di questa Sub,
e per questo le ho spostare nell'evento Sub CmdDisegna_Click(), oppure potresti spostarle nelle dichiarazioni.

A parte questo, il problema più grosso sta nella scala della vista del template di parte; (spero di non creare confusione in questo concetto) , ma ho notato che, durante la creazione di cerchi con diametro molto simile, e piu la distanza della vista del disegno aumenta, automaticamnete Solidworks "vede" una coincidenza tra i cerchi, generando il secondo tangente al primo (il tuo file aveva due cechi tangenti).
Per questo nel codice ho inserito dopo il primo cerchio l'ottimizzazione della vista, e una cancellazione delle selezioni.
E' un po quello che succede quando fai la stessa cosa manualmente, e da distante non riesci a dare precisione, toccando l'altro cerchio.

Ps.: Tornando alle varibili descritte sopra, ti trovavi che nella fase di disegno le variabili non erano dimensionate.
Vba, a differenza di VB.net e VB6 dimensiona automaticamente le variabili, ma quasi sempre da problemi.
Se vuoi essere piu sicuro scrivi nella parte delle dichiarazioni, come prima riga:
Option Explicit
così Vba richiede che tutto sia "dichiarato".

Fammi sapere se abbiamo risolto.
Ciao
Jenuary
 

Allegati

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#12
Buongiorno!
Grazie ancora per l'aiuto, ma il risultato della macro è uno schizzo totalmente bianco, senza traccia di alcuna circonferenza.
Secondo me ho problemi di installazione... Ultima spiaggia!
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#13
Ciao, prova a verificare le impostazioni internazionali del sistema, dal pannello di controllo ->Paese e lingua -> Impostazioni aggiuntive -> Separatore decimale
Verifica che sia impostato sul "." e fai una prova.
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#14
Ciao Jenuary, come al solito non mi arrendo facilmente!
Ho verificato che nelle impostazioni Paese e Lingua avevo la virgola come separatore decimale. Dunque ho impostato il punto "." ed ho avviato la macro. Sempre e solo il risultato di prima, quindi il problema persiste.
Inoltre ho provato a scrivere una macro il cui obiettivo è tracciare 4 circonferenze sul piano frontale i cui raggi sono semplicemente numeri e non funzioni. Il risultato funziona alla perfezione, quindi SolidWorks vede bene le differenze (anche minime) tra i raggi di due circonferenze.
Mi spiego meglio: il mio obiettivo è tracciare le 4 circonferenze caratterizzate da 4 raggi tra lori diversi:

1) R = 0.016
2) Ri = 0.0135
3) Re = 0.018
4) rho = 0.01503508193

Se inserisco questi valori di raggi all'interno del codice VBA, la macro riesce a disegnare alla perfezione queste circonferenze.
Se i raggi fossero funzioni di altri parametri ridondanti, la circonferenza "rho" non viene tracciata bene e vorrei capirne il motivo.

La definizione delle circonferenze mi suggerisce che ci sia qualche problema di fondo nelle funzioni composte perché la circonferenza che risulta essere più complessa è (guarda caso) rho.
Infatti:

R = m * z * 0.5
Re = R + m
Ri = R - 1.25 * m
rho = R * Cos(Alpha_deg * Pi / 180)

Ho fatto un ulteriore esperimento: se definissi il raggio rho come segue, SolidWorks disegna bene questa circonferenza:

rho' = R + Cos(Alpha_deg * Pi / 180)

Praticamente la somma di due funzioni le "riconosce bene", il prodotto tra due funzioni invece no!
Stessa cosa dicasi se intendo rho nel seguente modo:

rho'' = R - Cos(Alpha_deg * Pi / 180)

Per disegnare una ruota dentata ci sarebbero da disegnare un bel po' di funzioni, ma se fin dall'inizio non riesco a disegnare 4 cerchi distinti.... Chissà che problemi incontrerò!

Saluti a tutti!
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#15
Sinceramente non riesco a caoire dove risieda il problema, a me funziona, ma volevo comunque proporti un'alternativa, che secondo eviterebbe un sacco di problemi nella fase di disegno mediante programmazione.
Io disegnerei all'interno di un file di template, dove al suo interno c'è e il mio schizzo della ruota dentata.
Per schizzo intendo i 4 cerchi e il dente, tutto gia quotato e parametrizzato e legato da equazioni.
Questo dente è poi ripetuto a seconda del mio numero di denti, mediante ripetizione circolare dello schizzo.
La tua macro, in realtà deve eseguire solo i calcoli, e modificare le quote che tra l'altro hanno un nome noto e quindi facilmente identificabile e modificabile.
Al cambio di ogni valore delle quote, non bisogna aggiornare, ma si aggiorna solo alla fine.
Ecco che così dovresti riuscire a creare tutte le ruote dentate a catalogo.
ancora meglio potresti crearti un file tabulato o on file Excel dove metti in ogni riga i valori di ogni ruota.
Nel tuo form crei una datagrid o ona listview importando i dati, al click della riga scelta scateni l'aggiornamento delle quote.
Io lo faccio già con viti, spine, normalizzati vari, ecc; è un po il concetto delle configurazioni.
Credimi che è molto facile da fare.
Ciao Roberto
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#16
Ciao Roberto,
Il tuo concetto è ottimo ma adesso provo a spiegarti il perché della mia preferenza di adottare il metodo della macro.
Ho già un foglio di calcolo Excel che in base ad i soliti 4 parametri mi disegna le 4 circonferenze ed un dente di ruota dentata. Il vero problema è l'impossibilità "immediata" di scegliere quanti punti a piacere si vogliono per tracciare l'arco di evolvente. Quello che disegno non è e non sarà una ruota dentata approssimata ma si tratta di un disegno abbastanza realistico, per tale motivo anche Excel richiederebbe una macro dove al suo interno stabilisci il valore di step o incremento per tracciare la funzione evolvente.
Inoltre, tutto ciò che ha generato Excel io l'ho sempre importato per punti in SolidWorks ed ho tracciato una curva con coordinate XYZ. Stabilire a priori i punti fitti a puacere sarebbe una cosa molto interessante.
Questo è il motivo principale, cioè la necessità di scrivere una macro o in Excel o in Solidworks.
Il secondo motivo è ancora più semplice: faccio tutti i calcoli su Excel, importo curve e dati da Excel per poi buttare tutto dentro in SolidWorks. Ha senso? Direi di no perché anche SolidWorks riesce a gestire bene i dati attraverso una macro. Tanto vale iniziare tutto in un programma unico e flessibile.
Ormai sono in preda all'ultimo esame della triennale, ma dopo giorno 15 starò praticamente 24h su 24h attaccato al pc solo per poter individuare l'errore.
Più che altro, a prescindere dall'esattezza del codice VBA, potresti dirmi come effettuare una installazione sicuramente funzionante di SolidWorks 2013? Probabilmente mi manca uno o più componenti che fanno crashare la macro in esecuzione (perchè quando eseguo la tua macro non va in modalità debug, cioè non si blocca).
Grazie ancora, tanta stima per te e per l'aiuto che mi stai dando.
Saluti,

Kalo
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#17
Ciao Kalo,
prima di installare Sw2013, io disinstallerei l'attuale installazione.
Dalla rel.2012 (mi sembra non dalla 2011), puoi disinstallare solidworks con l'opzione di eliminare anche le chiavi di registro.
Questa bella cosa ripulisce abbastanza bene il disco dalla vecchia installazione e la nuova installa tutto nuovamente.
Ho avuto di recente un problema in fase di programmazione, dove alla riga
GetSelectedObject5
mi dave errore, come se la libreria non esistesse o fosse danneggiata.
Talvolta puo essere sufficiente fare un rispristino di Solidworks, ma per quanto mi riguarda fa ben poco, ma questa è una mia opinione.
Ti consiglio appunto di disinstallare con l'opzione di cancellazione delle chiavi di registro e tutte le cartelle, e poi installare nuovamente.
Ciao
Jenuary
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#18
Ciao Roberto,
Questo tentativo l'ho già fatto ma senza successo.
Ieri stavo pensando se il problema fosse causato da Net Framework 4.5.
Sono molto tentato a fare un bel format C: ed installare tutto da capo.
Ho installato SolidWorks almeno 6 volte, cambiando di volta in volta la versione.
Saluti!
 

kalo86

Utente Junior
Professione: Studente
Software: SolidWorks 2013
Regione: Emilia Romagna
#19
Ciao! Ci sono delle "news" scottanti!
Oggi pomeriggio ho formattato il mio laptop e prima di procedere all'installazione degli aggiornamenti di Windows 7 Professional x64 ho subito installato i driver NVidia e SolidWorks 2013 SP 3.0 x64. Una volta installato SolidWorks, apro la macro, la eseguo e con stupore vedo 4 circonferenze, quindi si può finalmente dire che il problema risiede su qualche file di sistema che si era corrotto.
Procedendo con gli aggiornamenti ed installazione di altri programmi che uso quotidianamente, ho riavviato (come richiesto da Windows Update) e vado subito a lanciare la macro: risultato sconvolgente perché ci sono di nuovo 3 circonferenze e la quarta è sovrapposta a quella più interna.
Dunque mollo ogni tentativo di riscrivere la macro in altro modo (a dir la verità la settimana scorsa ho provato a scrivere 2 macro diverse in C# ed in VB.NET con il medesimo risultato di 3 circonferenze) e più in avanti magari dedicherò una partizione del mio hardisk alla sezione CAD3D.

A questo punto mi è doveroso porti una domanda: che sistema operativo gira sulla tua macchina dove esegui SolidWorks? Probabilmente con Windows 8 si potrebbero risolvere parecchi problemi ma quell'interfaccia Metro senza un Desktop funzionale non mi è per niente semplice e familiare... Preferisco attendere Windows 8.1.
Saluti!
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#20
Ciao Kalo,
io lavoro in Windows 7 a 64bit, e sinceramente mi trovo bene.
Per Windows 8 preferisco apettare almeno un altro anno.
VB.net gira bene e non ho problemi.
Sono contento che hai risolto il problema.
Saluti