Divertiamoci un po con il M.A.T.

Sezione dedicata esclusivamente a macchine professionali CNC quali Torni cnc, Fresatrici cnc, Brocciatrici cnc, Centri di lavoro cnc, ecc.
Subforum:
Programmazione CNC
Fanuc
Mitsubishi
Heidenhain
Siemens
Haas
Osai
Selca
Fidia
Fagor
WinMax
Mazatrol
Rispondi
badade
Junior
Junior
Messaggi: 166
Iscritto il: mercoledì 5 gennaio 2011, 11:45
Località: Varese

Re: Divertiamoci un po con il M.A.T.

Messaggio da badade » giovedì 19 aprile 2012, 23:55

Si, supponevo tu agissi cosi!
Nel caso, il numero in esame è piccolo, il controllo comunque agisce in pochissimo tempo ed iterare (a vuoto) non implica problemi. La logica comunque deve incontrare una soluzione che sia adeguata ad ogni situazione, senza basarsi su supposizioni. Ii tuo programma funziona? Certo, nessuno lo mette in dubbio! E' logicamente corretto? Non direi! Dato che p98 è variabile il valore di p96 deve assumere la potenza di 10 tale da garantire la lettura di p98. Ora la logica dice che un programma deve essere valido per qualsiasi numero: 5, 1000, 10EXP300 10EXP1000000. In questo ultimo caso, volendo eseguire una singola operazione, il tuo programma gira a vuoto per 10EXP999999 prima di incontrare il valore corretto. Quindi non si tratta di dire che un modo funziona l'altro no, si tratta di logica, di incontrare un metodo universale indipendente dalla scelta fatta. Io con un menu del genere itero 1 singola volta, tu fino a che non incontri la prima cifra.
E' chiaro che nel nostro caso (menu ridotto) non fa molta differenza, ma io esamino la logica non il risultato. Esiste una procedura per determinarlo e quindi tanto vale usarla! Non voglio insistere ma preferisco usare il mio metodo, che trovo logico e semplice.

Si sono d'accordo sul fatto che la routine non debba essere modificata, altrimenti perderemmo gran parte del lavoro svolto che potremmo effettuare con semplici programmi. Comunque non è strettamente essenziale; passando dei parametri alle funzioni, (lavorazioni) potremmo comunque avere un utilizzo dello stesso senza perdita di concretezza o di tempo. Di solito, scrivendo programmi del genere adotto questa filosofia: una modalità  di default, che mi permette di mantenere standardizzata la lavorazione, e una modalità  di eccezione che uso in quei casi dove la prima non può intervenire. Vorrei riflettere sul fatto che questo modo di operare è la base per la realizzazione di quei software visivi e dialogali che si sono diffusi sempre più ultimamente nel mondo cnc. Il controllo vi chiede che tipo di lavorazione volete effettuare, poi vi chiede di inserire ogni sorta di parametro atto a definirla.. e cosi per ogni lavorazione. Questo è il concetto di menu con passaggio di argomenti, reso semplice per l'utilizzatore, ma che in fondo esprime lo stesso concetto: un menu!

Molti sono i metodi per avere un menu di voci superiore a 9, gli esempi che ho postato servivano ad incuriosire. Le iterazioni le conosciamo e le abbiamo applicate, quindi non ci sono problemi particolari. Un metodo che a me piace molto è quello di utilizzare delle matrici, ovvero un insieme di numeri disposti secondo righe e colonne (10*10 per esempio), il che permetterebbe di realizzare un menu di 100 voci utilizzando le 10 cifre. Se poi utilizzassimo la notazione esadecimale le cifre a disposizione diventerebbero 16, il che fa aumentare enormemente le scelte del menu (256), direi sufficienti a coprire una ampia gamma di lavorazioni.

claugo ti è mai passato per la testa che potresti usare una base 100 piuttosto che 10? Il programma che usi (con pochissime variazioni) continuerà  a funzionare con la variante di avere a disposizione un menu molto più vasto.

Adesso mostro l'esempio, ma vorrei spiegare il concetto di base numerica per mostrare che è possibile contare in modi differenti e per definire il significato delle cifre che useremo.

Base 10, quella che noi usiamo. Le cifre sono 10 attraverso le quali scriviamo ogni numero.

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ogni dieci numeri si aggiunge una cifra e si ripete l'operazione
(1) 0, 1, 2, 3, ....
(2) 0, 1, 2, 3, ....

Ora vogliamo realizzare il conteggio utilizzando una base 2, cioè due numeri per contare (di solito si usano i numeri 0 e 1, ma 2 simboli generici fa lo stesso).
0, 1 con due cifre possiamo solo scrivere 0 e 1, poi ripetiamo il ragionamento visto per la base 10, quindi

0, 1, 10, 11, 100, 101, 110, 111, ....ogni due numeri si ripete l'operazione di conteggio

Se volessimo utilizzare una base differente la logica non cambia. esempio base 100
Dovremmo avere 100 simboli differenti per scrivere in questa base, non avendoli useremo le stesse cifre della base 10, considerando però che un numero come
33 non è formato da due cifre bensi è una entità  unica, non scindibile o divisibile. 33 non può essere diviso in quanto entità  unica (come 2, 5). Contare in questa base significa andare da 0 a 99 e ripetere il ragionamento.

0 -> 9 base dieci 0 -> 99 base cento

0, 1, 2, .....98, 99 queste le prime cifre della nostra base (98 non è 90 + 8 ma semplicemente una entità  scritta usando i simboli 9 e 8) poi faremo la stessa cosa fatta per il sistema decimale, una cifra ulteriore ed il conteggio si ripete.
Non ci interessa andare oltre (si creerebbe confusione) ma l'ho mostrato per introdurre il programma in base 100.

claugo, prendi il programma in base 10 e modificalo con la base 100

%
<K0500>(PROVA MENU)
(1 CENTRINO)
(2 FORATURA)
(3 MASCHIO)
(4 LAMATURA)
(5 SMUSSO)
(44 ------)
(67 ------)
(97 ------)
#100=11123445677193 ( SCELTA DAL MENU #100=(11)(12)(34)(45)(67)(71)(93) )
#101=100 (BASE 100 PER CALCOLO)
#102=1 (CONTATTORE CIFRE SCELTA MENU)
DO1
IF[[#100/#101]LT100]GOTO100
#102=[#102+1]
#101=[#101*100]
END1
N100#101=[#101/100]
DO2
#104=FIX[#100/#101]
M98P[1000+#104]
#100=[#100-[#104*#101]]
IF[#100LT100]GOTO200
#101=[#101/100]
END2
N200M30
%

Il concetto è sempre lo stesso, ma cambia la base e quindi ogni relazione diretta con questa. Il p98 (#100) dovrà  essere formato da un numero di cifre in base 100 (due cifre decimali per ogni lavorazione) Nell'esempio non considero lo 0 (dato che a te è cosi caro), ma nulla vieta di usarlo!
La prima lavorazione è 11, la seconda 12, ec.. Questo programma funziona per ogni base e non presenta problemi particolari. Se noi prendiamo un numero (1234) e lo dividiamo per 100 (base 100) otteniamo (nell'esempio) due "cifre" o meglio entità  (12 e 34) che rappresentano le lavorazioni da eseguire. poi il programma segue fedelmente il ragionamento precedente con l'accortezza di usare sempre la base 100. Quindi moltiplicazioni e divisioni devono essere fatte con 100 e non con 10

Ecco una relazione tra le basi

base 100: 11 23 45 56 78 99 (11, 23, 45, sono singole entità  in base 100)
base 10: 1 2 4 6 8 9 (1, 2, 4, sono singole entita in base 10)

Se pensi in base 100 sicuramente creerai un menu più grande!


Questi argomenti mi affascinano, ma non vorrei esagerare, esporre idee personali che forse poco interessano.
Penso sempre ci sia qualcuno (tra cui anche io) che possa avere beneficio, ma mi rendo conto che non è di tutti i giorni lavorare e pensare in
questa ottica. Personalmente è una sfida a me stesso, ma anche la voglia di lanciare nuove motivazioni a voi tutti
(magari più semplici, vero? rivolgetevi a claugo! ops!). Comunque dico sempre che tutto nasce da una idea, pensare e poi realizzare...
dopo tutto è il pensiero l'unica cosa che nessuno potrà  mai toglierci!
(claugo, cosa hai in programma adesso?)

claugo
Junior
Junior
Messaggi: 94
Iscritto il: sabato 24 dicembre 2011, 12:43
Località: modena

Re: Divertiamoci un po con il M.A.T.

Messaggio da claugo » venerdì 20 aprile 2012, 10:52

La base 100 è fattibile e interessante, anche se io sono dell'idea che la lettura deve essere veloce e semplifcata per avere sempre sott'occhio ciò che si fa.

Di fatto un menù di 9 opzioni potrebbe essere piccolo ma se io cercassi di decifrare al volo la sequenza dei numeri P98=156387924 farei meno fatica che decifrare P98=112354765532473665.
Non sono sicuro poi che il controllo riesca a gestire una tale cifra.

Ok... vediamo questa semplice Routine trigonometrica.

Lo scopo del programmatore è quello di adeguarsi velocemente alle esigenze della ditta per cui lavora, e riuscire ad abbattere i tempi di lavorazione grazie ad una programmazione adeguata.

Mi è capitato di lavorare per una ditta che utilizzava dei bulini raggiati, affilati a mano, e utilizzava un vecchio presetting per determinarne il raggio effettivo.

Il ciclo era questo... Affilatura Bulino, Lavorazione profondità  2mm = Determino sul presetting il raggio sulla profondità  di lavoro e lo carico in macchina nella compensazione raggio.

Cambio profondità  2,5mm... Non c'è bisogno di affilare il bulino perchè ancora buono, ma l'operatore
prende il cono con il bulino, lo mette sotto il presetting e ne rileva il raggio alla profondità  di 2,5mm.

Ok... vediamo come risolvere la cosa senza dover smontare il cono tutte le volte che cambiamo profondità ..

P1=2 ( Profondità  che andiamo a rilevare la prima volta e cioè subito dopo aver affilato il bulino)
P2=R ( Raggio effettivo rilevato dal presetting sulla profondità  di P1)
P3=(P2*P2/P1)+P1 (Formula di Euclide)
( questi dati adesso ce li scordiamo fino alla prossima affilatura)

P0=2 Profondità  di lavoro
P10=SQR((P3-P0)*P0)) (Formula di Pitagora)
A questo punto se io cambio P0 in automatico mi cambia anche la compensazione raggio.

Meditate Gente Meditate

Ciao a Tutti

badade
Junior
Junior
Messaggi: 166
Iscritto il: mercoledì 5 gennaio 2011, 11:45
Località: Varese

Re: Divertiamoci un po con il M.A.T.

Messaggio da badade » venerdì 20 aprile 2012, 20:27

Devo fare una rettifica.
Ho modificato il programma passando dalla base 10 a quella 100, ho modificato le moltiplicazioni, le divisioni e cosi anche le comparazioni (1).
Ora tutto filava liscio quando mi sono ricordato che claugo non usava la cifra 0 e di conseguenza dovevo modificare l'entità  di comparazione (1) in 10: ho scritto invece 100.
Le linee
IF[[#100/#101]LT100]GOTO100
IF[#100LT100]GOTO200
devono essere modificate in
IF[[#100/#101]LT10]GOTO100
IF[#100LT10]GOTO200
E' cosi!
claugo il controllo riesce a gestire cifre fino a 10EXP308, non vedo perchè dovrebbe avere problemi con 112354765532473665 (io ho provato questo programma).
Io ti ho mostrato un modo semplice per gestire un menu di voci superiore a 9, se poi ritieni difficoltosa la lettura penso sia una questione personale. 12345678, 1122334455667788... non vedo nessuna differenza!

badade
Junior
Junior
Messaggi: 166
Iscritto il: mercoledì 5 gennaio 2011, 11:45
Località: Varese

Re: Divertiamoci un po con il M.A.T.

Messaggio da badade » sabato 21 aprile 2012, 22:37

Vediamo questo problema, inquadriamolo per bene!
Quando lavoriamo con utensili raggiati, il principale problema è determinare il raggio di lavoro, dato che non essendo l'utensile piatto, questo è in funzione
dell'altezza di lavoro.Il problema considera quindi la possibilità  di calcolare il raggio effettivo in funzione dell'altezza di lavoro avendo predeterminato, tramite procedura di presetting un certo valore di profondità  ed il corrispondente raggio effettivo. Prendiamo un bulino sferico, misuriamo ad una data altezza il valore del raggio da usare per il programma e lavoriamo. Se volessimo modificare la profondità  di lavoro è possibile determinare il nuovo raggio senza effettuare una nuova procedura di presetting? E' possibile da programma trovare il nuovo raggio? (naturalmente l'utensile non deve essere stato affilato).
E' qui che bisogna dare una piccola spiegazione a dimostrazione delle proprie teorie o applicazioni!
Per risolvere il problema faremo uso di un postulato (parolone per indicare una constatazione verificata matematicamente o geometricamente) e di una formula.
- Il postulato è relativo ad un triangolo inscritto in un cerchio e dice:
un triangolo la cui ipotenusa è il diametro di una circonferenza, presenta sempre l'angolo inscritto di 90°, ovvero se disegnate un qualsiasi triangolo (provate
con un CAD), l'angolo formato dai cateti è sempre di 90° (fig A).
- La formula che andremo ad usare è il secondo teorema di Euclide: (fig B) il valore dell'altezza relativa all'ipotenusa (H) al quadrato, è pari al prodotto
delle proiezioni dei cateti (m, n) sulla stessa. Questo teorema è applicabile ai triangoli rettangoli, ecco perché il primo postulato relativo al triangolo
inscritto ad una circonferenza, se cosi non fosse il teorema non sarebbe applicabile.
Bene, o male... E allora?
Il discorso non è difficle, seguitemi con un disegnino!
Consideriamo la parte finale del nostro utensile, quella raggiata e disegnamo due triangoli aventi la stessa ipotenusa passante per l'asse Z (fig C).
Il primo postulato (relativo all'angolo di 90°) è quindi soddisfatto! Immaginiamo che il punto B sia il punto in cui abbiamo effettuato il presetting, conosciamo
quindi il valore di EB (raggio effettivo) e di AE (profondità  di lavoro). Adesso supponete di modificare l'altezza di lavoro, per esempio la linea passante per
il punto D. Il valore di AF è determinato da noi in quanto rappresenta il nuovo valore di profondità : come è possibile trovare il valore di DF che rappresenta il
nuovo raggio efettivo? Notiamo che i due triangoli hanno l'ipotenusa in comune e quindi se conosciamo una relazione (formula) che usa l'ipotenusa siamo a buon
punto. Il teorema di Euclide usa proprio l'ipotenusa nella sua relazione e quindi fa proprio al caso nostro. Quello che faremo è determinare le proiezioni dei cateti sull'ipotenusa perchè Euclide esprime una relazione tra queste entità  e lìaltezza relativa all'ipotenusa; trovate queste potremo calcolare l'altezza (DF) del triangolo e quindi il raggio effettivo.

Applichiamo Euclide ai triangoli

triangolo ABC AE*EC=EB*EB
triangolo ADC AF*FC=DF*DF

Ricordiamo che noi conosciamo i valori di AF, AE, EB e che le ipotenuse sono uguali (AC).
Dobbiamo determinare CF che ci permette di applicare Euclide per trovare DF (raggio effettivo).
Dalla prima formula ricaviamo EC=(EB*EB)/AE
Se sommiamo AE+EC otteniamo il valore dell'ipotenusa dei triangoli (diametro circonferenza).
Il valore dell'ipotenusa ci permette di calcolare FC come differenza tra AC e AF FC=AC-AF
Ora conosciamo sia AF che FC e quindi applicando Euclide possiamo calcolare DF che è poi il nuovo valore de raggio effittivo DF=SQRT(AF*FC)
Devo dissentire con claugo, ma a me non sembra che la seconda formula incontrata sia il teorema di Pitagora, quando Euclide stesso!
Se ponete il tutto sotto forma di parametri otterrete le relazioni di claugo.

p1=AE p2=EB p3=AC p0=AF p10=DF=SQRT(p0*(p3-p0))

La soluzione incontrata si applica a qualsiasi utensile raggiato o torico. Nel primo caso applicherete le formule incontrate, nel secondo dovrete aggiungere
la parte piatta dell'utensile. Ogni volta che usate utensili del genere questo metodo è utile per determinare il nuovo raggio senza dover ricorre al presetting
o dover rifare il programma. Naturalmente il metodo è valido partendo anche da un utensile definito (conosciuto): voglio lavorare a Z-0.5, quale raggio effettivo devo usare utilizzando una fresa sferica diametro 3?, E se fosse D=12R2? Applicate le relazioni trovate!

La problematica espsosta da claugo non è dunque astratta, non si tratta di risolvere un problema matematico e basta, ma offre la concreta possibilità  di poter agire attraverso il programma al fine di ottenere un risultato che richiederebbe una certa perdita di tempo (vuoi con presetting vuoi con CAD).
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

Rispondi

Torna a “Macchine utensili professionali CN/CNC”