# Código G

O Código G, do inglês G-code, é uma linguagem de programação para ordenar máquinas a fazer algo. Foi criada devido à necessidade dos fabricantes industriais terem uma linguagem padronizada em sistemas do tipo Comando Numérico Computadorizado (CNC).
Até então, cada fabricante ficava responsável por criar sua própria linguagem para definir o processo de fabrico. O Código G trouxe a padronização para o processo de fabrico e consequentemente o desenvolvimento da indústria passou a ter uma linguagem universal.
Como complemento do Código Numérico, o Código G tem como função principal instruir a máquina a se mover geometricamente nas três dimensões, x, y e z. É uma linguagem extremamente simples e rudimentar, sendo composta por linhas sequenciais de instruções, cada qual responsável por uma tarefa específica, sendo o programa executado linha por linha até o fim do código.
“Os comandos operacionais, que controlam a máquina são executados automaticamente com uma velocidade impressionante, precisão, eficiência e repetibilidade.”
Com o surgimento das Impressoras 3D, que também se enquadram como máquinas CNC, tornou-se natural a adoção do Código G como linguagem de controle dessas máquinas, prova disso são os Slicers, software utilizado por essas impressoras, que exportam arquivos no formato do Código G.
A popularidade da tecnologia de impressão 3D fez com que mais pessoas tivessem acesso ao Código G, portanto torna-se necessário que os novos usuários dominem esta linguagem para evitar problemas de impressão e conquistarem a autonomia para calibrar a sua própria impressora.

## Aplicação

O Código G tem sua maior área de aplicação em máquinas CNC’s, porém, com o surgimento da Impressão 3D, que tem como base a tecnologia CNC, a mesma linguagem é utilizada pelas aplicações relacionadas a Impressão 3D.
O Código G é interpretado por firmwares desenvolvidos para tal função. O firmware converte o Código G em movimentos nos motores e eixos das máquinas. Existem diversos firmwares de código aberto que podem ser aplicados no uso de Código G, entre eles encontramos:
* GRBL: O interpretador criado para interpretar o Código G, uso mais comum para máquinas CNC’s.
* Repetier e Marlin: Os firmwares mais comuns para Impressoras 3D.

## Sintaxe

“Diferentemente de outras linguagens com padronização oficial e comitês de decisão, o G-Code é uma linguagem extraordinariamente variada, com comandos e até a sintaxe dependendo muito de implementação específica.” - SAMPAIO, Cláudio O Código G não tinha como intenção que todo e qualquer humano, não treinado ou habituado compreendesse o código, portanto os comandos são compactos e representados por uma letra seguida de um número. A sintaxe do código G possui uma estrutura com os seguintes formatos:
* Número de linhas;
* Comandos;
* Parâmetros dos comandos;
* Checksum;
* Comentários.

### Número de Linha

O número da linha é a primeira parte da linha de código, o número deve ser precedido da letra “N” (logo os primeiros campos da linha 1(um) deve ser “N1”, assim como na linha dois os primeiros campos são “N2”, Ex. N1 M109 S220). Atualmente o formato de número da linha está depreciado para a particularidade do código G para impressão 3D, todavia o campo existe e pode ser utilizado.

### Comando

No Código G não é aceite mais de um comando por linha. O comando é uma palavra reservada (letra seguida de um número, Ex. G28) que declara a ação que deve ser executada, podendo também ser acompanhada de argumentos que complementam a ação (Parâmetros). No caso das impressoras 3D os comandos estão limitados a três tipos de palavras reservadas, as iniciadas por G, M e T.

### Parâmetros

Os parâmetros acompanham os comandos, assim como os comandos são representados por palavras reservadas (letras seguidas de números que podem ser positivos ou negativos). Segue lista de parâmetros com maior frequência de utilização:
* S (Speed): No caso das máquinas fresadoras, designa a velocidade de rotação do spindle. Nas lasers, designa a potência do laser, e nas impressoras 3D pode ser considerado um parâmetro genérico (é utilizado para distância ou temperatura).
* R (Retract):' Velocidade adicional ligada à retração, usado apenas em alguns firmwares.
* T : Usado para feedrate de recuperação da retração.O parâmetro T, é utilizado por poucos firmwares ao contrário do comando T que é utilizado por todos os firmwares.
* X, Y e Z: Representam as coordenadas/distâncias podendo ser absolutas ou relativas dependendo do comando em si.
* E: Quantidade de filamento do extrusor.
* A, B e C: Representa as coordenadas ou distâncias angulares, assim como os parâmetros X, Y e Z, podem ser absolutas ou arbitrárias as medidas. Estes parâmetros não são utilizados em impressão 3D.

### Checksum (soma de controle)

É um campo que tem como objetivo a verificação da consistência do código, o checksum é um campo numérico que contém um asterisco e um número entre 0 e 255, o mesmo é utilizado para verificar as demais linhas que chegam à máquina corretamente ou foram afetadas por ruídos no meio. O campo cheksum não é usado em impressão 3D.

### Comentário

No Código G um comentário é representado pelo carácter “;” (ponto e vírgula). As linhas iniciadas por este carácter são totalmente ignoradas pelo interpretador de Código G. As linhas que possuam um carácter ponto e vírgula após o comando também são processadas pelo interpretador no Código G mas apenas até ao carácter ponto e vírgula. Também pode estar dentro de ( ) (parênteses curvos) no sistema ISO, o ponto e vírgula é utilizado muito no sistema alemão heindeihaim.

### Exemplos

O Código G conta com uma lista de mais de 500 comandos, cada comando é específico para uma tarefa e alguns dos comandos são aplicáveis somente a máquinas CNC. Abaixo você encontra uma lista dos comandos mais comuns:
* G28 - Inicio dos eixos.
* M115 - Colhe informação do Firmware e outras capacidades da máquina.
* M104 - Define temperatura alvo do extrusor.
* M140 - Define temperatura alvo da cama de aquecimento.
* G0/G1 - Movimentos lineares dos eixos.
* G90/G91 - Define se o movimento é através de valores absolutos ou relativos.
* O parâmetro G0 é destinado a movimentos rápidos, sem obedecer o valor de F (feedrate), enquanto o G1 leva o parâmetro F (feedrate) em consideração.
Aqui temos um código feito para impressora 3D, comentado para fins didáticos:

## Como o Código G é criado

Um arquivo de Código G pode ser criado a partir de modelos bidimensionais ou tridimensionais que são inseridos em programas chamados fatiadores (slicers), esses programas analisam o modelo, e “então usam de algoritmos para transladar o modelo em camadas individuais e gerar o Código G que será interpretado pela máquina”
Um modelo tridimensional, normalmente de arquivos CAD (Computer Aid Design ou Desenho Assistido por Computador), são usados nas transformações para Código G. Os mais comuns, são os arquivos com extensões STL (Standard Tessellation Language). Um arquivo STL é formado por triângulos que são definidos por 3 vértices e o vetor normal.
O algoritmo base corta cada triângulo com um plano. A interseção desse plano com o triângulo gera o código a ser interpretado.