Messaggio
da badade » martedì 9 ottobre 2012, 23:10
Ricordo di aver avuto, qualche tempo fa, un dialogo con Claugo (ciao) in relazione al problema trattato in questo post: allora fui preso alla sprovvista!
Conoscevo l'effettiva possibilità di un richiamo numerico, l'avevo anche usata, ma non la ricordavo dato che oramai sono più di dieci anni che non uso più
il richiamo ai sottoprogrammi, preferisco usare un ciclo WHILE. Poi Claugo mi disse di aver scoperto la 'Q', io mi sentii sollevato del buon risultato raggiunto
e il dialogo terminò.. ma questo riaccese in mè un ricordo!
Qualche giorno dopo, preso dalla curiosità di ricordare, sono andato a recuperare i miei vecchi appunti, scritti su fogli oramai ingialliti dal tempo...
quando li cerchi non li trovi e quando meno te lo aspetti sbucano come funghi! Ho trovato e ricordato come scrivevo anticamente i miei sottoprogrammi!
Avrei dovuto chiamare Claugo... non l'ho fatto!
Approfitto quindi del post per rispondere a lui e a quanti sono interessati sperando di far maggiore chiarezza!
Noi tutti conosciamo la sintassi per richiamare un sottoprogramma, non è univoca, e questo può sconcertare:
possiamo usare una notazione numerica, 'M98 P0101000',
oppure una notazione letterale, 'M98 P1000 L5', 'M98 P1000 K5'.
(Le nostre cnc non sono tutte uguali, non solo varia la serie, ma anche il sistema di codici usato (A B C), ed il formato nastro (10/11 15/16),
la presenza dell'opzione macroistruzioni A o B, ed altre cose come la parametrizzazione che il costruttore decide di imporre al controllo.
Non che la programmazione venga stravolta, si tratta di "piccole" differenze che però a volte lasciano perplessi.
Una sintassi usata su una cnc non è dunque universale ma potrebbe essere una applicazione particolare di una determinata configurazione.)
Il modo di usare l'M98, come quasi tutti conoscono è una forma "ristretta" del richiamo ad una sub o del richiamo ad una sequenza numerica.
Il mio foglietto era ingiallito ma sono riuscito ugualmente a far mente locale!
Il modo "esteso" per il richiamo di una sub (e richiamo di una sequenza numerica), o modo completo se volete, è il seguente M98 P3456 Q200 L34
M98 è il richiamo,
P il sottoprogramma (esterno),
Q il numero di linea (assunto come inizio di programma (esterno) se non specificato),
L il numero di ripetizione (assunto 1 in caso non specificato).
Il richiamo quindi può essere molteplice: di subprogramma, di numero di sequenza, o di ambedue!
E' chiaro che L assume significato solo con la presenza di P o Q, mentre P o Q possono essere presenti singolarmente oppure insieme.
Vediamo alcuni esempi:
M98 P1000 viene richiamato il subprogramma O1000 all'inizio dello stesso
M98 P1000 Q200 viene richiamato il subprogramma O1000 che partirà dalla linea 200 (numerazione che deve essere presente nella sub)
M98 P1000 Q200 L3 viene richiamato il subprogramma O1000 che partirà dalla linea 200 e verrà ripetuto 3 volte
M98 P1000 L3 viene richiamato il subprogramma O1000 che partirà dall'inizio e verrà ripetuto 3 volte
M98 Q100 viene richiamata la sub interna (non un programma esterno) alla linea 100
M98 Q100 L3 viene richiamata la sub interna (non un programma esterno) alla linea 100 e ripetuta per 3 volte
E' chiaro che ogni sub esterna o interna deve terminare con M99.
Il funzionamento di M99 è identico sia per programmi esterni che interni e cioè si ha il ritorno alla linea chiamante, verificata la non presenza di un ciclo
ripetitivo (L=1), il programma continua alla riga successiva. Ricordo inoltre che al M99 può essere associato un numero al fine di ritornare ad una sequenza
numerica prestabilita (M99 P0080 ritorna alla riga 80 del programma chiamante).
Ho potuto sperimentare personalmente la veridicità di queste affermazioni su fanuc 16/18/21/31/32.
Inoltre il richiamo è possibile non solo per un nome programma ma anche per un mome file (M98 <nome programma>, M98<K3456>)
Per i controlli più datati non ho potuto eseguire test, (le vecchie macchine se ne vanno e subentrano quelle nuove),
ma amici mi dicono che non dovrebbero esserci problemi se non riguardo ai parametri (difficolta a trovarli o visualizzarli), ma di questo non posso dare certezze!
Perché non tutte le cnc hanno attiva questa funzione?
Dipende da un parametro macchina, o meglio da un bit di un parametro: parametro 6005, bit 0 (SQC).
Il bit 0 del parametro 6005 (SQC), decide se il richiamo di un sottoprogramma specificando il suo numero di sequenza nella funzione di richiamo (la Q per intenderci),
è abilitato oppure no: 0=disabilitato, 1 abilitato (il bit 0 è quello pià a destra nel byte).
Quindi potete verificare questo parametro e fare le vostre prove!
La procedura la conosciamo: in MDI abilitare la scrittura parametri, entrare in system e cercare il parametro 6005, modificare a 1 il bit 0, disabilitare la scrittura
parametri. La modifica del parametro 6005 prevede lo spegnimento del cnc, fatelo altrimenti non otterrete dei risultati!
(Approfitto del'occasione per esprimere un sentimento che penso accomuni anche altre persone! Mi dispiace, leggere di persone che "litigano" per opinioni differenti. In questo ed in altri post è successo! Ognuno ha le proprie conoscenze e le proprie ignoranze, chi è portato più all'aspetto pratico e chi al teorico. Siamo un piccolo mondo dove convergono persone di ogni sorta... una cosa però deve accomunarci altrimenti non andiamo avanti, perdiamo quella possibilità di comunicazione che dovrebbe essere lo spirito del forum: il confronto! Non voglio spendere mille parole per definire la questione, non sono qui a fare la ramanzina a nessuno! Semplicemente mi premeva esprimere questo sentimento, richiamare l'attenzione di noi tutti al fatto che la conoscenza non è "solo nostra", ma al contrario c'è sempre da imparare (o da insegnare!). E mi dispiace ancor più quando vengono prese decisioni apocalittiche!)