CNC e LinuxCNC e cambio utensile

Sezione dedicata a Linuxcnc
kylotron
Senior
Senior
Messaggi: 993
Iscritto il: mercoledì 17 ottobre 2012, 17:06
Località: Sora

Re: CNC e LinuxCNC e cambio utensile

Messaggio da kylotron » mercoledì 13 marzo 2019, 14:02

Al momento ho implementato questo: https://forum.linuxcnc.org/10-advanced- ... t=30#48235

Riesco a mappare in modo perfetto M6, pertanto ogni volta che viene trovato nel listato, mi si attiva la procedura di cambio utensile gestita dalle subroutine.

Il problema è capire come devo impostare il pezzo nel cam, il postprocessor, linuxcnc e quant'altro, in modo da usare la macchina sempre nello stesso modo!

Nel senso che... io vorrei una condizione come quella della foto seguente:
CNC.jpg
Mentre in realtà ne ho una simile a questa:
CNC2.jpg
E purtroppo non ci sto riuscendo.

Se infatti imposto l'asse X con i valori che voglio, ovvero MIN_LIMIT = 0 e MAX_LIMIT = 100, l'azzeramento in alto non riesco a farlo :(
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
La mia piccolina....

kylotron
Senior
Senior
Messaggi: 993
Iscritto il: mercoledì 17 ottobre 2012, 17:06
Località: Sora

Re: CNC e LinuxCNC e cambio utensile

Messaggio da kylotron » mercoledì 13 marzo 2019, 14:04

ross ha scritto:
mercoledì 13 marzo 2019, 13:28
Potresti provare a lavorare con Z negativo, da 0 a -100 per esempio

Ross

Si, fino ad ora ho lavorato così. Ma non so come farlo capire al CAM/postprocessore! :(
Ultima modifica di Anonymous il mercoledì 13 marzo 2019, 19:19, modificato 1 volta in totale.
Motivazione: riduzione citazione
La mia piccolina....

kylotron
Senior
Senior
Messaggi: 993
Iscritto il: mercoledì 17 ottobre 2012, 17:06
Località: Sora

Re: CNC e LinuxCNC e cambio utensile

Messaggio da kylotron » mercoledì 13 marzo 2019, 14:26

Ok. Gente...

sono riuscito a fare l'impostazione che volevo io.

LinuxCNC ha i 2 parametri... HOME e HOME_OFFSET che vanno impostati in un modo ben preciso. Io li avevo invertiti e non capisco perché!
Ora, dopo aver spostato leggermente il sensore in alto della Z, ho impostato HOME_OFFSET a 104 e HOME a 100, con un MAX_LIM di 105.

In questo modo l'azzeramento mi viene fatto come dico io.
CNC.jpg
Ora passo a fare il resto! :( che fatica!
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
La mia piccolina....

gino
Senior
Senior
Messaggi: 1774
Iscritto il: domenica 11 ottobre 2009, 18:12

Re: CNC e LinuxCNC e cambio utensile

Messaggio da gino » mercoledì 13 marzo 2019, 15:50

bravo Kilotron , ..e solo capire bene il concetto !

nella mia ho i punti Home come da foto ;
dato che con la 5Assi ho lo Zero macchina al centro degli assi rotanti..
tutto e possibile ..basta impostarli correttemente..
-----
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

kylotron
Senior
Senior
Messaggi: 993
Iscritto il: mercoledì 17 ottobre 2012, 17:06
Località: Sora

Re: CNC e LinuxCNC e cambio utensile

Messaggio da kylotron » mercoledì 13 marzo 2019, 16:28

Si, Gino.

ora devo riuscire a capire come fare per avere un fottuto "azzeramento degli utensili" che rispetti ciò che deve fare e la posizione dell'oggetto sulla macchina.

Indicativamente la procedura che sto seguendo è la seguente:

1) azzero la macchina - Tutto ok. La macchina si azzera come dico io!

2) carico il file gocode - Tutto ok... anche se devo sistemare alcuni comandi nel postprocessore e rivedere i vecchi files gcode :(

3) effettuo il touch-off sul pezzo (ma qui già mi incasino, credo...) con la seguente subroutine

Codice: Seleziona tutto

O<touch_to_z> SUB


G21
G91

#< Plate_Thickness> 	= 1.5
#< Probe_Speed>		= 100
#< Probe_System>	= #5220
#< Probe_Retract>	= 1
#< Probe_Movement>	= 1


; Calcolo la distanza massima per il sensore
#< Probe_Distance> = [100 - #< Plate_Thickness>]
;(DEBUG, Probe Distance = #< Probe_Distance>)

; Vado a trovare il sensore con una velocità alta
G38.3 Z-#< Probe_Distance> F#< Probe_Speed>

; Azzero la Z rispetto al pezzo
G10 L20 P#< Probe_System> Z#< Plate_Thickness>
G28.1

; Rialzo l'utensile
G0 Z#< Probe_Retract>

; Sposto l'utensile
G0 X#< Probe_Movement>

; Calcolo la nuova distanza massima per il sensore
#< Probe_Distance> = [#< Plate_Thickness> + 1]
;(DEBUG, Probe Distance = #< Probe_Distance>)

; Vado a trovare il sensore con una velocità MOLTO BASSA
G38.3 Z-#< Probe_Distance> F[#< Probe_Speed> / 20]


; Azzero Nuovamente la Z rispetto al pezzo
G10 L20 P#< Probe_System> Z#< Plate_Thickness>
G28.1

;(DEBUG, #5223)

G90
G53 G0 Z100


O<touch_to_z> endsub [#5070] 
M2
4) avvio il programma e alla linea Txx M6 viene fatto il REMAPPING e richiamata la seguente subroutine:

Codice: Seleziona tutto

O<tool-change> SUB
(------------------------------- CONFIGURATION PARAMETERS ----------------------------------------------)
#<_UseInches> =           0     ( set to 1 to use inches here, or 0 to use millimeters; should match units on tool.tbl dimensions )
#<_TravelZ> =          100.0     ( machine Z coordinate for travelling, typically near max Z to avoid ever hitting the work )
#<_TravelFeed> =     100.0     ( feedrate used for general Z moves when avoiding G0 )
#<_ProbeX> =          670.0     ( machine X coordinate of switch/touch-off plate )
#<_ProbeY> =          459.5     ( machine Y coordinate of switch/touch-off plate )
#<_ProbeFastZ> =       100.0     ( machine Z coord to move to before starting probe, longest tool should not touch switch at this Z )
#<_ProbeMinZ> =       10.0     ( machine Z coord to stop probe, shortest tool must touch switch at this Z, must be > min Z )
#<_ProbeRetract> =      1.0     ( small distance to retract before approaching switch/touch-off plate second time )
#<_ProbeFastFeed> =   200.0     ( feed rate for moving to _ProbeFastZ )
#<_ProbeFeed1> =       100.0     ( feed rate for touching switch/touch-off plate first time )
#<_ProbeFeed2> =       10.0     ( feed rate for touching switch/touch-off plate second time )
#<_ToolChangeX> =     750.0     ( machine X coordinate to pause at for manual tool changing )
#<_ToolChangeY> =      50.0     ( machine Y coordinate to pause at for manual tool changing )
#<_MistOnDuringProbe> =   0     ( set to 1 for mist, or 2 for coolant, or 0 for nothing during probing, to clear switch of swarf )
(-------------------------------------------------------------------------------------------------------)

O100 IF [ EXISTS[#<_ToolDidFirst>] EQ 0 ]
        #<_ToolDidFirst> = 0
O100 ENDIF
O105 IF [ #<_ToolDidFirst> EQ 0 ]
   G49                                         ( clear tool length compensation prior to saving state if this is first time )
O105 ENDIF

M70                                            ( save current modal state )

M9                                             ( turn off coolant, will be restored on return if it was on )
M5                                             ( turn off spindle, cannot be on during the probe )
G21		                               ( use inches or millimeters as required here, units will be restored on return )
G30.1                                          ( save current position in #5181-#5183... )
G49                                            ( clear tool length compensation )
G90                                            ( use absolute positioning here )
G94                                            ( use feedrate in units/min )
G40                                            ( turn cutter radius compensation off here )

G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>]      ( go to high travel level on Z )
G53 G0 X[#<_ToolChangeX>] Y[#<_ToolChangeY>] ( nice place for changing tool )
M6                                             ( do the normal M6 stuff )


O200 IF [ #<_ToolDidFirst> EQ 0 ]
  G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>]      ( go to high travel level on Z )
  G53 G0 X[#<_ProbeX>] Y[#<_ProbeY>]           ( to probe switch )
  G53 G1 F[#<_ProbeFastFeed>] Z[#<_ProbeFastZ>]( move tool closer to switch -- we shouldn't hit it )
  G54 G1 F[#<_ProbeFeed1>] G91                 ( use relative positioning )
  O101 IF [ #<_MistOnDuringProbe> EQ 1 OR #<_MistOnDuringProbe> EQ 2 ]
    M[7 + #<_MistOnDuringProbe> - 1]           ( turn on mist/coolant )
  O101 ENDIF
  G38.2 Z[#<_ProbeMinZ> - #<_ProbeFastZ>] F[#<_ProbeFeed1>]    ( trip switch slowly )
  G0 Z[#<_ProbeRetract>]                       ( go up slightly )
  G38.2 Z[#<_ProbeRetract>*-1.25] F[#<_ProbeFeed2>]   ( trip switch very slowly )
  M9                                           ( turn off mist )
  G90                                          ( use absolute positioning )
  #<_ToolZRef> = #5063                         ( save trip point )
  #<_ToolZLast> = #<_ToolZRef>                 ( save last tool Z position )
  G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>]      ( return to safe level )
  G53 G0 X[#5181] Y[#5182]                     ( return to where we were in X Y)
  G53 G1 F[#<_TravelFeed>] Z[#5183]            ( return to where we were in Z )
  M72                                          ( restore modal state )
  #<_ToolDidFirst> = 1                         ( we have been in this section to set reference value already )
O200 ELSE
  G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>]      ( go to high travel level on Z )
  G53 G0 X[#<_ToolChangeX>] Y[#<_ToolChangeY>] ( nice place for changing tool )
  O107 IF [#<_UseInches> EQ 1 ]
    #<ToolDiamIn> = #5410
    #<ToolDiamMM> = [ #<ToolDiamIn> * 25.4 ]
  O107 ELSE
    #<ToolDiamMM> = #5410
    #<ToolDiamIn> = [ #<ToolDiamMM> / 25.4 ]
  O107 ENDIF
  O102 IF [ #<_current_tool> EQ 0 AND #<ToolDiamIn> EQ 0 ]
    (MSG, Change tool then click Resume )
  O102 ELSE
    #<ToolDiamMM> = [ #<ToolDiamIn> * 25.4 ]
    (DEBUG, Change to tool #<_current_tool> with diameter #<ToolDiamMM>mm, #<ToolDiamIn>in then click Resume )
  O102 ENDIF
  M0                                           ( pause execution )
 
  G53 G0 X[#<_ProbeX>] Y[#<_ProbeY>]           ( to high place directly over switch )
  G53 G1 F[#<_ProbeFastFeed>] Z[#<_ProbeFastZ>]( move tool closer to switch -- we shouldn't hit it )
  G54 G1 F[#<_ProbeFeed1>] G91                 ( use relative positioning )
  O103 IF [ #<_MistOnDuringProbe> EQ 1 OR #<_MistOnDuringProbe> EQ 2 ]
    M[7 + #<_MistOnDuringProbe> - 1]           ( turn on mist/coolant )
  O103 ENDIF
  G38.2 Z[#<_ProbeMinZ> - #<_ProbeFastZ>] F[#<_ProbeFeed1>]     ( trip switch slowly )
  G0 Z[#<_ProbeRetract>]                       ( go up slightly )
  G38.2 Z[#<_ProbeRetract>*-1.25] F[#<_ProbeFeed2>]   ( trip switch very slowly )
  M9                                           ( turn off mist )
  G90                                          ( use absolute positioning )

(debug, #<_ToolZ>)
(debug, #<_ToolZRef>)
(debug, #<_ToolZLast>)

  #<_ToolZ> = #5063                            ( save new tool length )
  G43.1 Z[#<_ToolZ> - #<_ToolZRef>]            ( set new tool length Z offset, we do this now to show operator even though it has to be set again after M72 )
  G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>]      ( return to high travel level )
  G53 G0 X[#5181] Y[#5182]                     ( return to where we were in X Y)
  G53 G1 F[#<_TravelFeed>] Z[#5183 - #<_ToolZLast> + #<_ToolZ>]   ( return to where we were in Z, ajusting for tool length change )
  #<_ToolZLast> = #<_ToolZ>                    ( save last tool length )
  
  M72                                          ( restore modal state )
  G43.1 Z[#<_ToolZ> - #<_ToolZRef>]            ( set new tool length Z offset )
O200 ENDIF

O<tool-change> ENDSUB
M2
A questo punto la testa dovrebbe tornare alla giusta posizione ed iniziare a lavorare.
Il problema è la Z. tutto il piano di lavoro mi si abbassa e la Z andrebbe a sbattere contro il pezzo!


--------------------


Update: ho trovato l'errore

#<_ToolZ> = #5063 ( save new tool length )
G43.1 Z[#<_ToolZ> - #<_ToolZRef>] ( set new tool length Z offset, we do this now to show operator even though it has to be set again after M72 )

Qui... c'è un errore. Devo capire come sistemarlo perché ormai non ci sto capendo più nulla!



Gino, correggimi se sbaglio...

Allora...

Quando la CNC si avvia, la compensazione è ZERO.
Effettua una serie di operazioni. Poi ad un certo punto arriva l'istruzione Txx M6 per il cambio utensile.

Quando la punta del nuovo utensile tocca il sensore, viene calcolata la differenza tra la posizione Z in quell'istante e l'altezza del sensore (nel mio caso è 50mm). Giusto?
A questo punto, tale differenza la devo inserire nel comando G43.1 Z <valore>.

Corretto?
La mia piccolina....

gino
Senior
Senior
Messaggi: 1774
Iscritto il: domenica 11 ottobre 2009, 18:12

Re: CNC e LinuxCNC e cambio utensile

Messaggio da gino » mercoledì 13 marzo 2019, 17:07

si.. il G43.1 H (numero utensile) assegna
al nuovo utensile la differenza..

io ho un cambio utensile semi/automatico
il mio naso mandrino e` il T0 (lunghezza utensile=0)
..ho altri 32 utensili che misuro con presetter fuori macchina
i cui valori di lunghezza imposto in tabella utensile...son tutti diversi..
..al richiamo di un utensile il G43.1 H (numero) assegna il valore
di questo letto in tabella dalla casella lunghezze.
quando l`utensile poi e caricato si aggiorna anche in automatico
l`altezza della Z a rispetto di prima..(quindi Z diversa..)..ma giusta!

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: CNC e LinuxCNC e cambio utensile

Messaggio da shineworld » mercoledì 13 marzo 2019, 17:18

Secondo me devi capire quale tipo di cambio utensile ti interessa:

- cambio utensile con riferimenti lunghezze pre-settate su tabella utensile
- cambio utensile con misura sempre altezza utensile (non usa la tabella utensile)

In base a questa scelta cambia ovviamente la politica di come realizzare tutto il sistema.

kylotron
Senior
Senior
Messaggi: 993
Iscritto il: mercoledì 17 ottobre 2012, 17:06
Località: Sora

Re: CNC e LinuxCNC e cambio utensile

Messaggio da kylotron » mercoledì 13 marzo 2019, 18:11

Il mio mandrino è un semplice Kress al quale applico gli utensili di volta in volta. Quindi non ho modo di fare un presetter della loro lunghezza. :(
Di conseguenza devo optare per un "cambio utensile con misura sempre altezza utensile (non usa la tabella utensile)".

Come devo procedere quindi?
La mia piccolina....

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: CNC e LinuxCNC e cambio utensile

Messaggio da shineworld » mercoledì 13 marzo 2019, 19:18

Domani, se trovo un buco di tempo, provo a fare una macro con la mia e più o meno i codici G sono compatibili.

gino
Senior
Senior
Messaggi: 1774
Iscritto il: domenica 11 ottobre 2009, 18:12

Re: CNC e LinuxCNC e cambio utensile

Messaggio da gino » mercoledì 13 marzo 2019, 19:24

..quindi mi sa che deve applicare un Offset
solo alla Misura del primo utensile misurato.. ed usato

..di cui il primo potrebbe essere sempre il naso mandrino
( nel tuo caso il naso Kress senza la ghiera montata )
si monta primo utensile..tasta..
quindi primo utensile lungo ..50mm
secondo 62mm
..e la Misura di differenza =12mm
in tastatura .. gli altri utensili bisogna che cominciano ad andar piano da un altezza di 65/ 68mm
..se imposti di meno riski colissione con tastatore.
ce da conoscere la linea di minimo e Massimo degli utensili in uso..per la quota giusta.

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: CNC e LinuxCNC e cambio utensile

Messaggio da shineworld » mercoledì 13 marzo 2019, 21:07

Più o meno la tecnica dovrebbe essere:

- Metti il primo utensile della lavorazione
- Vai a contatto sul pezzo e fai lo zero WCS in uso (deve essere il punto di zero usato nel CAD/CAM)
- Avvii il programma e fai il cambio utensile
- il cambio va sul probe e rilevi lo Z macchina
- attivi G43.1 con H0 oppure G49.
- Al successivi cambio utensile rivai sul probe, leggi la z macchina e trovi il delta rispetto la prima misura probe Z (che è quella che ti dà lo zero riferimento pezzo in WCS)
Metti questo delta in G43.1 H≤delta>

Per ogni successivo cambio utensile fai sempre il delta tra la prima misura e quella attuale di Z.

Semplice ;)

kylotron
Senior
Senior
Messaggi: 993
Iscritto il: mercoledì 17 ottobre 2012, 17:06
Località: Sora

Re: CNC e LinuxCNC e cambio utensile

Messaggio da kylotron » giovedì 14 marzo 2019, 10:42

:lol: semplice

:badgrin:

:(
La mia piccolina....

Antoniobar
Junior
Junior
Messaggi: 156
Iscritto il: giovedì 15 dicembre 2016, 23:54
Località: Vigevano

Re: CNC e LinuxCNC e cambio utensile

Messaggio da Antoniobar » giovedì 14 marzo 2019, 13:10

Mi puoi spiegare perché hai bisogno di fare lo zero sul pezzo,è un semilavorato e devi riprendere la lavorazione oppure è un parallelepipedo grezzo ?

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: CNC e LinuxCNC e cambio utensile

Messaggio da shineworld » giovedì 14 marzo 2019, 13:23

E' necessario definire uno zero lavorazione prima di iniziarla con il primo utensile già montato sul mandrino, poichè quello diventerà lo zero di riferimento per tutte le successive operazioni di cambio utensile. Può essere sul pezzo o sul banco, ma deve essere concorde con lo zero usato nel CAM per definire tutte le quote di lavorazione.

Antoniobar
Junior
Junior
Messaggi: 156
Iscritto il: giovedì 15 dicembre 2016, 23:54
Località: Vigevano

Re: CNC e LinuxCNC e cambio utensile

Messaggio da Antoniobar » giovedì 14 marzo 2019, 13:56

Hai ragione... :D la domanda era mal posta.
Volevo sapere se c'erano motivi speciale /particolari per fare lo zero sul pezzo anziché usare le origini macchina.
Io sono un artigiano e sulla mia fresa ho impostato sette origini diverse e sul piano di lavoro ci sono sette riferimenti.in pratica invece di staffare il grezzo dove capita per poi tastare lo posiziono rispetto ai riferimenti.
Ora mi sono costruito una fresa hobbistica ed ho replicato lo stesso sistema,aggiungendo le macro per cambio utensile manuale,mentre nell'altra è automatico.lo zero pezzo lo zero macchina lo zero cad coincidono sempre ad un riferimento e mi sembra il sistema più semplice
Ciao antonio

Rispondi

Torna a “Linuxcnc”