Partiamo dallo spiegare che LinuCNC è un qualcosa di strepitoso... espandibile praticamente all'infinito... basta capirci qualcosa!
La logica di funzionamento non è difficile da comprendere.
Si ha un'interfaccia (ce ne sono di diverso tipo) che possiamo personalizzare in modo abbastanza facile...
...e ci sono, essenzialmente, delle SUBROUTINE (e/o MACRO)... ovvero dei pezzi di codice GCODE che usiamo per far fare alla macchina dei movimenti prestabiliti.
Una delle macro più utili, almeno per chi ha poca dimestichezza con il mondo Linux e con LinuxCNC nello specifico, è quello dell'azzeramento del pezzo.
In pratica quello che dobbiamo arrivare ad avere è:
1) accendo la macchina e faccio l'azzeramento degli assi.
2) posiziono il pezzo nel punto in cui mi fa comodo
3) porto la testa della macchina sopra il pezzo
4) posiziono un sensore (basetta di rame di spessore noto collegata all'ingresso probe-in) sul pezzo
5) premo un pulsante e...
6) la testa si abbassa fino a toccare il sensore
7) la macro utilizzata azzererà l'asse Z considerando lo spessore, noto, della nostra basetta.
A questo punto non ci resta che avviare il programma che abbiamo preparato... tenendo bene in mente che questo va preparato con lo zero dell'asse Z posizionato SOPRA il pezzo... quindi con lavorazione che prevedono una Z NEGATIVA verso l'interno del pezzo (e quindi verso il piano).
Per far funzionare la serie di pulsanti sulla destra del programma, sono sufficienti alcune modifiche ad un paio di files di configurazione.
Nel File .INI della nostra configurazione, bisogna aggiungere o modificare le "chiamate" alle macro...
Codice: Seleziona tutto
[DISPLAY]
PYVCP = custom_panel.xml
[RS274NGC]
FEATURES = 30
SUBROUTINE_PATH = ./nc_subroutines
[HAL]
POSTGUI_HALFILE = custom_postgui.hal
[HALUI]
MDI_COMMAND = O <home_position> call
MDI_COMMAND = O <safe_position> call
MDI_COMMAND = O <end_position> call
MDI_COMMAND = O <azzeramento_pezzo> call
MDI_COMMAND = O <azzeramento_utensile> call
[PLATESENSOR]
SECUR_Z = 100
MAXPLATE = 99
THICKNESS = 1.5
FASTFEED = 200
SLOWFEED = 10
Ora creiamo i pulsanti sull'interfaccia grafica. Per farlo bisogna creare o modificare il file "custom_panel.xml":
Codice: Seleziona tutto
<?xml version='1.0' encoding='UTF-8'?>
<pyvcp>
<labelframe text="Movimenti">
<font>("Helvetica",8)</font>
<vbox>
<button>
<halpin>"rapid-to-home"</halpin>
<text>"Home Position"</text>
<font>('Helvetica',8)</font>
</button>
<button>
<halpin>"safe-z"</halpin>
<text>"Safe Z"</text>
<font>('Helvetica',8)</font>
</button>
<button>
<halpin>"end-position"</halpin>
<text>"End Position"</text>
<font>('Helvetica',8)</font>
</button>
</vbox>
</labelframe>
<label>
<text>" "</text>
<font>("Helvetica",10)</font>
</label>
<labelframe text="Azzeramenti">
<font>("Helvetica",8)</font>
<vbox>
<button>
<halpin>"azzeramento_utensile"</halpin>
<text>"Azzeramento UTENSILE"</text>
<font>('Helvetica',8)</font>
</button>
<button>
<halpin>"azzeramento_pezzo"</halpin>
<text>"Azzeramento PEZZO"</text>
<font>('Helvetica',8)</font>
</button>
</vbox>
</labelframe>
</pyvcp>
Bisogna, poi, impostare i comandi affinché l'interfaccia grafica riconosca la pressione del pulsante ed esegua il relativo pezzo di codice...
Per farlo dobbiamo modificare il file "custom_postgui.hal" aggiungendo quanto segue
Codice: Seleziona tutto
net remote-rapid-to-home halui.mdi-command-00 <= pyvcp.rapid-to-home
net remote-safe-z halui.mdi-command-01 <= pyvcp.safe-z
net remote-end-position halui.mdi-command-02 <= pyvcp.end-position
net remote-azzeramento_pezzo halui.mdi-command-03 <= pyvcp.azzeramento_pezzo
net remote-azzeramento_utensile halui.mdi-command-04 <= pyvcp.azzeramento_utensile
Infine bisogna creare le 5 subroutine nella sotto-cartella "nc_subroutines"
HOME POSITION
Codice: Seleziona tutto
O<home_position> SUB
G53 G0 Z#<_ini[AXIS_2]HOME>
G53 G0 X#<_ini[AXIS_0]HOME> Y#<_ini[AXIS_1]HOME>
O<home_position> endsub
M2
Codice: Seleziona tutto
O<safe_position> SUB
G53 G0 Z#<_ini[AXIS_2]HOME>
O<safe_position> endsub
M2
Codice: Seleziona tutto
O<end_position> SUB
G53 G0 Z#<_ini[AXIS_2]HOME>
G53 G0 X#<_ini[AXIS_0]HOME> Y[#<_ini[AXIS_1]MAX_LIMIT>-5]
O<probe_position> endsub
M2
Codice: Seleziona tutto
O<azzeramento_pezzo> SUB
;(MSG, Macro per l'azzeramento sul PEZZO con plate da 1.50 mm)
#<_UseInches> = 0
#<_TravelZ> = #<_ini[PLATESENSOR]SECUR_Z>
#<_TravelFeed> = 1000.0
#<_ProbeFastZ> = #<_ini[PLATESENSOR]SECUR_Z>
#<_ProbeHeight> = #<_ini[PLATESENSOR]THICKNESS>
#<_ProbeMinZ> = [#<_ini[PLATESENSOR]SECUR_Z> - #<_ini[PLATESENSOR]MAXPLATE>]
#<_ProbeRetract> = 1
#<_ProbeFastFeed> = #<_ini[PLATESENSOR]FASTFEED>
#<_ProbeFeed1> = #<_ini[PLATESENSOR]FASTFEED>
#<_ProbeFeed2> = #<_ini[PLATESENSOR]SLOWFEED>
#< Probe_System> = #5220
G92.1
;G49
M70
M5
G21
G28.1 ;(ABSOLUTE Z = #5163)
G90
G40
G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>]
G54 G1 F[#<_ProbeFeed1>] G91
G90
; Azzero la Z rispetto al sensore
G10 L20 P#< Probe_System> Z#<_ProbeHeight>
G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>] ( return to safe level )
M72
O<azzeramento_pezzo> endsub [#5070]
M2
Codice: Seleziona tutto
O<azzeramento_utensile> SUB
questo non ve lo posto perché tanto mi da problemi :(
O<azzeramento_utensile> ENDSUB [1]
M2
Teoricamente è tutto apposto.
Bisogna solo impostare bene le variabili e fare qualche prova (consiglio, come prima prova, di reggere il sensore con una mano tenendolo sollevato dal piano... così se per qualche motivo non dovesse rilevare il contatto, avete tutto il tempo per premere il pulsante di Emergency Stop!
Se avete problemi... chiedete pure che sicuramente risolviamo.
Bernardo