G-code/it

From RepRap
Revision as of 18:19, 11 October 2018 by Zonalimitatore (talk | contribs)
Jump to: navigation, search


Questa pagina cerca di descrivere il Codice-G che viene usato nei firmware RepRap, e come funzionano. L'obbiettivo principale è la fabbricazione usando i processi FFF. I codici per stampare e per il movimenti della testina seguono lo standard NIST RS274NGC G-code standard, quindi i firmware RepRap sono abbastanza utilizzabili per la fresatura CNC e applicazioni simili. Vedi anche Articolo Wikipedia sul Codice-G.

Ci sono differenti modi di creare un codice G per la stampa. Un metodo sarebbe quello di utilizzare un programma di slicing come Slic3r, Skeinforge o Cura. Questi programmi importano il modello CAD, lo "affettano" in strati, restituendo il Codice-G richiesto per stampare ogni strato. Gli Slicers sono il modo più semplice per avere parti stampabili partendo da un modello 3D , tuttavia l'utente sacrifica una certa flessibilità usandoli. Un altro modo per generarlo è utilizzando una libreria di basso livello come mecode. Le librerie come mecode danno un preciso controllo sul percorso che dovrà fare l'utensile, e quindi sono utili se si deve fare una stampa complessa che non è molto adatta da dare in pasto agli slicer. L'ultima opzione è scrivere tu stesso il Codice-G. Questa potrebbe essere la scelta migliore se hai solo bisogno di eseguire alcune linee di test durante la calibrazione della stampante.

Esistono molti firmware diversi e i loro sviluppatori tendono a implementare nuove funzionalità senza discutere strategie o guardare ciò che gli altri hanno fatto prima di loro, Diversi tipi di varianti sono stati sviluppati nel corso degli anni,specifici per la stampa 3D. Questa particolare pagina è la pagina "maestro" per RepRap. Da nessuna parte qui dovrebbe essere usato lo stesso codice per due cose diverse; ci sono sempre più numeri da usare ... La regola è: 'aggiungi qui il tuo nuovo codice, quindi implementalo' .Sfortunatamente, essendo la natura umana quella che è, le migliori procedure non sono sempre seguite, quindi esistono più usi dello stesso codice. La regola da seguire è che le nuove apparizioni di un codice su questa pagina (più tardi rispetto all'uso originale di un codice), sono deprecate e dovrebbero essere cambiate, a meno che non ci sia un buon motivo tecnico (come lo standard Codice-G) perché un'istanza successiva dovrebbe essere preferita. Nota che la chiave data qui è l'aspetto, non l'implementazione.

Introduzione

Una tipica stringa di Codice-G usato in RepRap può essere così:

N3 T0*57
N4 G92 E0*67
N5 G28*22
N6 G1 F1500.0*82
N7 G1 X2.0 Y2.0 F3000.0*85
N8 G1 X3.0 Y3.0*33

Il Codice-G può anche essere messo su schede SD. Un file che contiene il Codice-G RepRap ha solitamente l'estensione .g, .gco o .gcode. I file per BFB/RapMan hanno come estensione .bfb. Un file prodotto da un slicer potrebbe assomigliare a questo:

G92 E0
G28
G1 F1500
G1 X2.0 Y2.0 F3000
G1 X3.0 Y3.0

Il significato di tutti i simboli e numeri (ed altro) è spiegato sotto.

Gli slicers potranno (opzionalmente) aggiungere scripts all'inizio e alla fine al file finale,per fare specifiche azioni prima e/o dopo ogni stampa,come azzerare l'asse Z al piano di stampa, riscaldare/raffreddare il piano o l'hotend, l'esecuzione di routine "pulizia ugello" all'inizio , cambiare lo stato on/off, ed eventualmente "espellere" parti. Più informazioni in Start GCode routines e End GCode routines .

Per scoprire quali specifici Gcode sono implementati in un determinato firmware, ci sono alcune tabelle allegate alle descrizioni dei comandi, come questa:

Support Marlin RepRapFirmware Klipper Prusa Buddy Repetier Smoothie Druid MK4duo
Partial ??? ??? ??? ??? Experimental Deprecated ??? Partial
grbl Sprinter BFB FiveD Machinekit Redeem Teacup Yaskawa MakerBot
??? No ??? Yes ??? Yes Automatic ??? ???

Che significa:

{{si}}
Il Codice-G è completamente supportato dal firmware.
{{partial}} or {{experimental}}
C'è un po di supporto per il Codice-G. Spesso è necessario controllare il codice sorgente del firmware (di solito memorizzato in un sorgente diverso) o capovolgere gli interruttori di configurazione sulla scheda madre.
{{automatico}}
Il firmware gestisce questo Codice-G automaticamente, quindi non è necessario inviare il comando. Un esempio è l'accensione / spegnimento dell'alimentatore Codice-G (M80 / M81) nel firmware Teacup.
{{???}}
Non è noto se il firmware supporta questo Codice-G. Si consiglia di testarlo da soli prima di utilizzarlo in produzione.
{{no}}
Il firmware non supporta questo Codice-G.
{{deprecato}}
Il firmware ha deprecato questo Codice-G. Gli autori del firmware dovrebbero modificare il codice-G deprecato in questa pagina con soluzioni alternative (se necessario) e l'ultima versione del firmware supportata che accetterà questo Codice-G.

Per gli utenti più "tecnici", le terminazioni di linea del Codice-G sono Unix Line Endings ( \ n </ code>), ma accetteranno i fine linea di Windows (<code> \ r \ n </ code>), quindi non è necessario preoccuparsi della conversione tra i due, ma è preferibile utilizzare Unix Line Endings ove possibile.

Campi

Un Codice-G RepRap è un elenco di campi separati da spazi bianchi o interruzioni di riga. Un campo può essere interpretato come un comando, parametro, o per qualsiasi altro scopo speciale. Consiste di una lettera seguita direttamente da un numero o può essere solo una lettera autonoma (Flag). La lettera fornisce informazioni sul significato del campo (vedere l'elenco di seguito in questa sezione). I numeri possono essere numeri interi (128) o frazionari (12.42), a seconda del contesto. Ad esempio, una coordinata X può assumere numeri interi (<code> X175 </ code>) o frazionali (<code> X17.62 </ code>), ma selezionare il numero di estrusore 2.76 non avrebbe senso. In questa descrizione, i numeri nei campi sono rappresentati da <code> nnn </ code> come segnaposto.

Nel firmware RepRap, alcuni parametri possono essere seguiti da più di un numero, con i due punti utilizzati per separarli. Tipicamente questo è usato per specificare i parametri dell'estrusore, con un valore fornito per estrusore. Se viene fornito un solo valore in cui è necessario un valore per ciascun estrusore, tale valore viene applicato a tutti gli estrusori.

Lettera Significato
Gnnn Comando Codice-G standard, come movimento in un punto
Mnnn Comando definito da RepRap, come accendere una ventola
Tnnn Selezione strumento nnn. In RepRap, uno strumento è in genere associato a un ugello, che può essere alimentato da uno o più estrusori.
Snnn Comando parametro, come tempo in seconndi; temperature; voltaggio da mandare al motore
Pnnn Comando parametro, come tempo in millisecondi; proporzionale (Kp) in PID Tuning
Xnnn Una coordinata X, solitamente da muovere. Questo può essere un numero intero o un numero frazionario.
Ynnn Una coordinata Y, solitamente da muovere. Questo può essere un numero intero o un numero frazionario.
Znnn Una coordinata Z, solitamente da muovere. Questo può essere un numero intero o un numero frazionario.
U,V,W Coordinate di assi aggiuntivi (RepRapFirmware)
Innn Parametro - X-offset in un movimento ad arco; integrale (Ki) in PID Tuning
Jnnn Parametro - Y-offset in un movimento ad arco
Dnnn Parametro - usato per il diametro; derivato (Kd) in PID Tuning
Hnnn Parametro - utilizzato per il numero di riscaldatore in PID Tuning
Fnnn Avanzamento (feedrate) in mm al minuto. (Velocità del movimento della testina di stampa)
Rnnn Parametro - usato per le temperature
Qnnn Parametro - attualmente non usato
Ennn Lunghezza da estrudere. Esattamente come X, Y e Z, ma per la lunghezza del filamento da consumare.
Nnnn Numero di linea. Utilizzato per richiedere la ripetizione della trasmissione in caso di errori di comunicazione.
*nnn Checksum. Usato per controllare errori nella comunicazione.

Case sensitivity

Lo standard originale NIST Codice-G richiede che l'interprete del Codice-G sia case-insensitive, tranne per i commmenti. Tuttavia, non tutti i firmware di stampanti 3D sono conformi a questo e alcuni riconoscono solo lettere di comando in maiuscolo e parametri.

Firmwares che son conosciuti come case-insensitive
RepRapFirmware versione 1.19 e successive (tranne all'interno di stringhe citate)
Firmwares che son conosciuti come case-sensitive
RepRapFirmware version 1.18 e precedenti

Stringhe Quotate

Nel firmware RepRap, alcuni comandi supportano la stringa quotata quando si forniscono nomi di file e altri parametri di stringa. Questo permette nomi di file, WiFi password etc. di contenere spazi, semicolonne e altri caratteri che non sarebbero permessi. I caratteri a doppia virgola vengono utilizzati per delimitare la stringa e ogni carattere in doppia virgoletta all'interno della stringa deve essere ripetuto.

Sfortunatamente, alcuni programmi che mandano il Codice-G convertono tutti i caratteri in maiuscolo non permettendo di cambiare questa funzione. Pertanto, all'interno di una stringa quotata, il carattere a virgoletta singola viene utilizzato come flag per forzare il seguente carattere in lettere minuscole. Se si desidera includere un carattere in virgoletta singola nella stringa, utilizzare due virgolette singole per rappresentare un singolo carattere di virgoletta.

Esempio: per aggiungere SSID MYROUTER con la password <code>ABCxyz;" 123 alla lista delle reti WiFi, usa il comando:

M587 S"MYROUTER" P"ABCxyz;"" 123"

o se non puoi mandare caratteri minuscoli:

M587 S"MYROUTER" P"ABC'X'Y'Z;"" 123"

Commenti

I commenti nel Codice-G, iniziano con un punto e virgola e terminano alla fine della riga:

N3 T0*57 ; Questo è un commento
N4 G92 E0*67
; Quindi è così
N5 G28*22

Alcuni firmware obbediscono anche allo standard Codice-G del CNC, che consiste nel racchiudere i commenti tra parentesi tonde. I commenti di questo modulo devono iniziare e terminare sulla stessa riga:

(Origine assi)
G28 (qui l'asse da mandare a fare lo zero) X Y

Commenti e spazi bianchi saranno ignorati dalla tua stampante RepRap. È meglio lasciarli sul computer host prima di inviare il Codice-G alla stampante, in quanto ciò consente di risparmiare larghezza di banda.

Campi Speciali

N: Line number

Support Marlin RepRapFirmware Klipper Prusa Buddy Repetier Smoothie Druid MK4duo
Yes Yes ??? ??? ??? Yes ??? ??? Yes
grbl Sprinter BFB FiveD Machinekit Redeem Teacup Yaskawa MakerBot
??? Yes ??? Yes Yes Yes Yes ??? ???
Esempio
N123

Se presente, il numero di riga dovrebbe essere il primo campo di una riga. Per il codice G memorizzato nei file su schede SD, il numero di riga viene generalmente omesso.

Se il controllo è supportato, il firmware RepRap prevede che i numeri di riga aumentino di 1 ogni riga e, se ciò non accade, viene contrassegnato come un errore. Ma puoi resettare il conteggio usando M110 </ code> (vedi sotto).

Sebbene supportato, l'utilizzo di N in Machinekit è scoraggiato in quanto non serve a nulla.

*: Checksum

Support Marlin RepRapFirmware Klipper Prusa Buddy Repetier Smoothie Druid MK4duo
Yes Yes ??? ??? ??? Yes ??? ??? Yes
grbl Sprinter BFB FiveD Machinekit Redeem Teacup Yaskawa MakerBot
??? Yes ??? Yes ??? No Yes ??? ???

Esempio: <code>*71

Se presente, il checksum dovrebbe essere l'ultimo campo di una riga, ma prima di un commento. Per il codice G memorizzato nei file su schede SD, il checksum viene generalmente omesso.

Il firmware confronta il checksum con un valore calcolato localmente. Se differiscono, richiede una ripetizione della trasmissione della linea.

Checking

Support Marlin RepRapFirmware Klipper Prusa Buddy Repetier Smoothie Druid MK4duo
Yes Yes ??? ??? ??? Yes ??? ??? Yes
grbl Sprinter BFB FiveD Machinekit Redeem Teacup Yaskawa MakerBot
??? Yes ??? Yes ??? No Yes ??? ???
}
Esempio
N123 [...G Code qui...] *71

Il firmware RepRap controlla il numero di riga e il checksum. Puoi lasciare entrambi fuori - RepRap funzionerà ancora, ma non controllerà. Devi avere entrambi o nessuno dei due però. Se appare solo uno, produce un errore.

Il checksum "cs" per una stringa Codice-G "cmd" (compreso il suo numero di riga) viene calcolato esorizzando i byte nella stringa fino a e non includendo il carattere * come segue:

int cs = 0;
for(i = 0; cmd[i] != '*' && cmd[i] != NULL; i++)
   cs = cs ^ cmd[i];
cs &= 0xff;  // Programmazione difensiva...

e il valore viene aggiunto come intero decimale al comando dopo il carattere *.

Buffering

Support Marlin RepRapFirmware Klipper Prusa Buddy Repetier Smoothie Druid MK4duo
Yes Yes ??? ??? ??? ??? ??? ??? Yes
grbl Sprinter BFB FiveD Machinekit Redeem Teacup Yaskawa MakerBot
Yes ??? ??? Yes ??? Yes Yes ??? ???

Se è supportato il buffering, il firmware RepRap memorizza internamente alcuni comandi in un ring buffer per l'esecuzione. Ciò significa che non vi è alcun ritardo (apprezzabile) mentre un comando viene riconosciuto e il successivo trasmesso. A sua volta, ciò significa che le sequenze di segmenti di linea possono essere tracciate senza una pausa tra l'una e l'altra. Non appena viene ricevuto uno di questi comandi buffer, viene riconosciuto e memorizzato localmente. Se il buffer locale è pieno, il riconoscimento viene ritardato finché non è disponibile spazio per la memorizzazione nel buffer. Ecco come si ottiene il controllo del flusso.

In genere, i seguenti comandi di spostamento sono memorizzati nel buffer: G0-G3 e G28-G32. Il Teacup Firmware fa da buffer anche questi comandi: G20, G21, G90 e G91. Tutti gli altri G, M o T non vengono bufferati.

RepRapFirmware implementa anche una coda interna per garantire che determinati codici (come M106) siano eseguiti nell'ordine corretto e non quando l'ultima mossa è stata aggiunta alla coda look-ahead.

Quando viene ricevuto un comando senza buffer, viene memorizzato, ma non viene riconosciuto all'host fino a quando il buffer non viene esaurito e quindi il comando è stato eseguito. Quindi l'host si fermerà su uno di questi comandi finché non sarà stato eseguito. Brevi pause tra questi comandi e quelli che potrebbero seguirli non influiscono sulle prestazioni della macchina.


Comandi-G

G0 & G1: Movimento

Support Marlin RepRapFirmware Klipper Prusa Buddy Repetier Smoothie Druid MK4duo
Yes Yes ??? ??? ??? Yes Yes ??? Yes
grbl Sprinter BFB FiveD Machinekit Redeem Teacup Yaskawa MakerBot
Yes Yes Yes Yes Yes Yes Yes ??? Yes


  • G0 : Movimento rapido lineare
  • G1 : Movimento lineare
Uso
G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn
G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn
Parametri
Not tutti i parametri hanno bisogno di essere usati, ma almeno uno dev'essere usato
Xnnn La posizione in cui spostarsi sull'asse X
Ynnn La posizione in cui spostarsi sull'asse Y
Znnn La posizione in cui spostarsi sull'asse Z
Ennn La quantità da estrudere tra il punto iniziale e il punto finale
Fnnn L'avanzamento al minuto del movimento tra il punto iniziale e il punto finale (se fornito)
Snnn Contrassegna per verificare se è stato toccato un fine corsa (S1 controllare, S0 ignorare, S2 vedi nota, il valore predefinito è S0)1
Esempi
G0 X12               ; Muovi di 12mm sull'asse X
G0 F1500             ; Imposta l'avanzamento a 1500mm/minuto
G1 X90.6 Y13.8 E22.4 ; Muovi di 90.6mm sull'asse X e 13.8mm sulla Y mentre estrudi 22.4mm di materiale

Le specifiche del firmware RepRap considerano G0 e G1 come lo stesso comando, poiché è altrettanto efficiente che non farlo. 2

La maggior parte dei firmware RepRap fa cose sottili con gli avanzamenti

G1 F1500           ; Imposta avanzamento a 1500mm/m
G1 X50 Y25.3 E22.4 ; Muovi ed estrudi

Nell'esempio sopra, per prima cosa impostiamo la velocità di avanzamento su 1500mm / m, quindi spostiamoci su 50mm su X e 25.3mm su Y mentre estrai 22.4mm di filamento tra i due punti.

G1 F1500                 ; Avanzamento 1500mm/m
G1 X50 Y25.3 E22.4 F3000 ; Accelerazione a 3000mm/m

Tuttavia, nell'esempio sopra, impostiamo una velocità di avanzamento di 1500 mm / m, quindi eseguiamo la stessa mossa, ma accelerando a 3000 mm / m. Tutto rimane sincronizzato, quindi l'estrusione accelera proprio con il movimento X e Y.

La specifica RepRap considera l'avanzamento come semplicemente un'altra variabile (come X, Y, Z ed E) da interpolare linearmente. Ciò consente il controllo completo dell'accelerazione e della decelerazione della testina della stampante in modo tale da garantire che tutto si muova armoniosamente e il giusto volume di materiale venga estruso in tutti i punti. 3

Per invertire l'estrusore di una certa quantità (ad esempio per ridurne la pressione interna mentre fa un movimento in aria in modo da non dribblare) usa semplicemente G0 o G1 per inviare un valore E inferiore alla lunghezza attualmente estrusa.

Note

1Alcuni firmware consentono a RepRap di abilitare o disabilitare il "rilevamento" di fermi durante una mossa. Si prega di verificare quale firmware si sta utilizzando per vedere se supporta il parametro <codice>S</code> in questo modo, in quanto si può verificare un danno se si assume erroneamente. In RepRapFirmware, l'utilizzo del parametro S1 o S2 su una stampante delta fa sì che i parametri XYZ facciano riferimento alle singole posizioni del motore della torre anziché alla posizione testina, e per abilitare il rilevamento endstop anche se il parametro è S1

2Nella specifica RS274NGC, G0 è Movimento Rapido, che è stato utilizzato per spostarsi tra il punto corrente nello spazio e il nuovo punto nel modo più rapido ed efficiente possibile ed G1 è Movimento Controllato, che è stato utilizzato per spostarsi tra il punto corrente nello spazio e il nuovo punto nel modo più preciso possibile

3Alcuni firmware potrebbero non supportare l'impostazione della velocità di avanzamento in linea con un movimento.

4RepRapFirmware fornisce un Parametro aggiuntivo 'R1' per dire alla macchina di tornare alle coordinate su cui una stampa era stata precedentemente messa in pausa. Se si utilizza questo parametro e il codice contiene lettere di assi, verrà aggiunto un offset alle coordinate di pausa (e.g. G1 R1 Z5).

Alcune macchine più vecchie, CNC o meno, si muovevano più velocemente se non si muovevano in linea retta. Questo vale anche per alcune stampanti non cartesiane, come quelle delta o polari, che si muovono più facilmente e più velocemente in una curva.