Dominando a Programação CNC: Linguagem, Estrutura e Códigos G/M
Objetivo
Após concluir esta unidade, você deverá ser capaz de:
- Identificar as instruções da lista do programa.
- Entender o Formato do Programa.
- Descrever códigos de Comando de Endereço por Letra (Letter Address Commands).
- Descrever definições de Códigos de Caracteres Especiais.
- Entender os Códigos G e M.
Programas CNC listam instruções a serem executadas na ordem em que são escritas. Lêem-se como um livro, da esquerda para direita e de cima para baixo. Cada frase em um programa CNC é escrita em linha separada, chamada Bloco. Blocos são arranjados em sequência específica que promove segurança, previsibilidade e legibilidade, por isso é importante aderir a uma estrutura padrão de programa.
Os blocos são arranjados na seguinte ordem:
- Início do Programa
- Carregar Ferramenta
- Fuso Ligado
- Refrigerante Ligado
- Posicionamento Rápido acima da peça
- Operação de usinagem
- Refrigerante Desligado
- Fuso Desligado
- Mover para posição segura
- Fim do programa
Os passos acima representam o tipo mais simples de programa CNC, onde apenas uma ferramenta e uma operação são usadas. Programas que usam múltiplas ferramentas repetem passos dois a nove para cada uma.
Tabelas 3 e 4 na seção Códigos G e M mostram os códigos G e M mais comuns que devem ser memorizados se possível.
Como qualquer linguagem, a linguagem G-code tem regras. Por exemplo, alguns códigos são modais, significando que não precisam ser repetidos se não mudarem entre blocos. Alguns códigos têm significados diferentes dependendo de como e onde são usados.
Embora estas regras sejam cobertas neste capítulo, não se preocupe em aprender cada nuance. É trabalho do Post-Processador do software CAD/CAM formatar e escrever o programa CNC corretamente.
Formato do Programa
O programa na Tabela 1 abaixo usina um contorno quadrado e fura um furo.
| Bloco | Descrição | Propósito |
|---|---|---|
| % O1234 (T1 0.25 END MILL) G17 G20 G40 G49 G80 G90 |
Início do programa. Número do programa (Nome). Descrição da ferramenta para operador. Bloco de segurança para garantir modo seguro. |
Iniciar Programa |
| T1 M6 S9200 M3 |
Carregar Ferramenta #1. Velocidade do fuso 9200 RPM, Sentido Horário (CW). |
Trocar Ferramenta |
| G54 M8 G00 X-0.025 Y-0.275 G43 Z1. H1 Z0.1 G01 Z-0.1 F18. |
Usar Offset de Fixação #1. Refrigerante Ligado. Posicionamento rápido acima da peça. Rápido para plano de segurança, usar TLO #1. Rápido para plano de avanço. Movimento linear até profundidade de corte a 18 IPM. |
Mover para Posição |
| G41 Y0.1 D1 F36. Y2.025 X2.025 Y-0.025 X-0.025 G40 X-0.4 G00 Z1. |
Compensação de Diâmetro (CDC) Esquerda, entrada linear, Offset Diâmetro #1, 36 IPM. Movimento linear. Movimento linear. Movimento linear. Movimento linear. Desliga CDC com movimento de saída. Rápido para plano de segurança. |
Usinar Contorno |
| M5 M9 (T2 0.25 DRILL) T2 M6 S3820 M3 |
Fuso Desligado. Refrigerante Desligado. Descrição ferramenta para operador. Carregar Ferramenta #2. Velocidade fuso 3820 RPM, CW. |
Trocar Ferramenta |
| M8 X1. Y1. G43 Z1. H2 Z0.25 |
Refrigerante Ligado. Rápido acima do furo. Rápido para plano segurança, usar TLO #2. Rápido para plano de avanço. |
Mover para Posição |
| G98 G81 Z-0.325 R0.1 F12. G80 Z1. |
Ciclo de furação simples (enlatado), Profundidade Z-.325, F12. Cancela ciclo de furação. Rápido para plano segurança. |
Furar Furo |
| M5 M9 G91 G28 Z0 G91 G28 X0 Y0 G90 M30 % |
Fuso Desligado. Refrigerante Desligado. Retornar Home máquina em Z. Retornar Home máquina em XY. Reset para modo posicionamento absoluto (segurança). Reset programa para início. Fim do Programa. |
Fim do Programa |
Códigos de Comando de Endereço por Letra (Letter Address Commands)
O bloco de comando controla a ferramenta de máquina através de comandos de endereço por letra. Alguns são usados mais de uma vez, e seu significado muda baseando-se no G-code que aparece no mesmo bloco.
Códigos são modais (permanecem em efeito até cancelados ou alterados) ou não-modais (efetivos apenas no bloco atual). Muitos endereços são escolhidos logicamente (T para ferramenta, S para fuso, F para avanço, etc.).
A tabela abaixo lista os códigos de endereço por letra mais comuns.
| Variável | Descrição | Definições |
|---|---|---|
| A | Posição absoluta ou incremental do eixo A (eixo rotativo em torno de X) | A,B,C – Movimento Rotativo 4º/5º Eixo. Rotação sobre eixos X, Y ou Z. Ângulo em graus até 3 casas decimais. G01 A45.325 B90. |
| B | Posição absoluta ou incremental do eixo B (rotativo em torno de Y) | Igual a A |
| C | Posição absoluta ou incremental do eixo C (rotativo em torno de Z) | Igual a B |
| D | Define offset de diâmetro ou radial para compensação de corte | Compensa desgaste e deflexão do diâmetro da ferramenta. Acompanhado de inteiro igual ao número da ferramenta (T5 usa D5). Sem ponto decimal. Sempre usado com G41/G42 e movimento XY (nunca arco). Controlador lê registrador e desloca caminho esquerda (G41) ou direita (G42) pelo valor no registrador. G01 G41 X2. D1 |
| E | Taxa de avanço de precisão para rosqueamento em tornos | |
| F | Define taxa de avanço (feed rate) | Define avanço ao usinar linhas, arcos ou ciclos de furação. Avanço em Polegadas/Min (modo G94) ou Tempo Inverso (G93). Até 3 casas decimais (para ciclos de rosqueamento) e requer ponto decimal. G01 X2. Y0. F30. |
| G | Endereço para comandos preparatórios | G-codes dizem ao controle que tipo de movimento é desejado (ex: posicionamento rápido, avanço linear, circular, ciclo fixo) ou qual valor de offset usar. G02 X2. Y2. I.50 J0. |
| H | Define offset de comprimento de ferramenta; eixo incremental correspondente a C (ex: em turn-mill) | Chama registrador de offset de comprimento (TLO) no controle. Controle combina TLO e Offset de Fixação Z para saber onde ferramenta está em relação ao datum da peça. Sempre acompanhado de inteiro (H1, H2), G43 e coordenada Z. G43 H1 Z2. |
| I | Define tamanho do arco no eixo X para G02/G03. Também parâmetro em ciclos fixos. | Para movimentos de arco (G2/G3), distância incremental X do ponto inicial do arco ao centro. Certos ciclos de furação usam I como parâmetro opcional. G02 X.5 Y2.500 I0. J0.250 |
| J | Define tamanho do arco no eixo Y para G02/G03. Também parâmetro em ciclos fixos. | Para arcos (G2/G3), distância incremental Y do ponto inicial ao centro. Certos ciclos usam J como opcional. G02 X.5 Y2.500 I0. J0.250 |
| K | Define tamanho do arco no eixo Z para G02/G03. Também parâmetro em ciclos fixos, igual a endereço L. | Para arco (G2/G3), distância incremental Z do ponto inicial ao centro. No plano G17, distância Z incremental para movimentos helicoidais. Certos ciclos usam K como opcional. G18 G03 X.3 Z2.500 I0. K0.250 |
| L | Contador de loops de ciclo fixo; especificação de registrador a editar com G10 | Contador loops: define número de repetições de ciclo fixo em cada posição. Assume 1 se não programado. Às vezes K usado em vez de L. Com posicionamento incremental (G91), série de furos igualmente espaçados pode ser programada como loop. Uso G10: especificação de qual registrador editar (offsets de trabalho, raio ferramenta, comprimento ferramenta, etc.). |
| M | Função miscelânea (Miscellaneous function) | Sempre acompanhado de inteiro que determina seu significado. Apenas um M-code por bloco. Definições expandidas aparecem depois. M08 |
| N | Número de linha (bloco) no programa; número de parâmetro do sistema a alterar com G10 | Números de bloco tornam programa mais legível. Raramente requeridos para programas CAD/CAM sem subprogramas. Ocupam memória do controle; a maioria programas 3D não usa. Inteiros até 5 caracteres, sem decimal. Não aparecem antes de caractere % e geralmente não antes de bloco só de comentário. N100 T02 M06 |
| O | Nome do programa | Programas armazenados no controle por seu número. Inteiro precedido por O, sem decimais. O1234 (Exercício 1) |
| P | Endereço de parâmetro para vários códigos G e M | Tempo de espera (dwell) em segundos. Acompanha G4 a menos que usado em certos ciclos de furação. G4 P.1 |
| Q | Incremento de picotamento (peck) em ciclos enlatados | Distância de avanço incremental por passagem em ciclo de furação picotada. G83 X2.000 Y2.000 Z-.625 F20. R.2 Q.2 P9. |
| R | Define tamanho de raio de arco ou altura de retração em ciclos enlatados | Arcos definidos por raio R ou vetores I,J,K. IJK mais confiáveis que R, recomenda-se usá-los. R também usado por ciclos de furação como plano de retorno Z. G83 Z-.625 F20. R.2 Q.2 P9. |
| S | Define velocidade, seja velocidade do fuso ou velocidade de corte dependendo do modo | Velocidade do fuso em RPM. Inteiro sem decimal, sempre usado com M03 (Fuso CW) ou M04 (Fuso CCW). S2500 M03 |
| T | Seleção de ferramenta | Seleciona ferramenta. Inteiro sempre acompanhado de M6 (código troca ferramenta). T01 M06 |
| U | Eixo incremental correspondente a X (tipicamente só controles grupo A de torno). Também define tempo de espera em algumas máquinas. | Nestes controles, X e U substituem G90 e G91. Nestes tornos, G90 é endereço de ciclo fixo para desbaste. |
| V | Eixo incremental correspondente a Y | Até 2000, V raramente usado, pois tornos com U e W não tinham eixo Y. Ainda comum, mas ferramentas vivas e turn-mill tornaram V menos raro. |
| W | Eixo incremental correspondente a Z (tipicamente só controles grupo A de torno) | Nestes controles, Z e W substituem G90 e G91. Nestes tornos, G90 é endereço de ciclo fixo para desbaste. |
| X | Posição absoluta ou incremental do eixo X | Dados de coordenada para eixo X. Até 4 casas decimais permitidas, zeros à direita não usados. Coordenadas são modais, não precisam repetir se não mudam. G01 X2.250 F20. |
| Y | Posição absoluta ou incremental do eixo Y | Dados de coordenada para eixo Y. G01 Y2.250 F20. |
| Z | Posição absoluta ou incremental do eixo Z | Dados de coordenada para eixo Z. |
Definições de Códigos de Caracteres Especiais
Lista de caracteres especiais comuns, significado, uso e restrições.
- % – Início ou Fim do Programa. Todos programas começam e terminam com % em bloco separado. Código chamado "tape rewind character" (herança de fitas de papel).
- ( ) – Comentários. Comentários ao operador devem ser maiúsculos e entre parênteses. Máx. 40 caracteres, todos maiúsculos. Ex: (T02: 5/8 END MILL)
- / – Exclusão de Bloco (Block Delete). Códigos após este caractere são ignorados se chave Block Delete no controle estiver ligada. Ex: / M00
- ; – Fim de Bloco (End of Block). Não visível em editor de texto (carriage return), mas aparece no final de cada bloco quando programa exibido no controle. Ex: N8 Z0.750 ;
Códigos G e M
Códigos G e M compõem a maior parte do conteúdo do programa CNC. Definição de cada classe e significados específicos dos mais importantes a seguir.
Códigos G (Preparatórios)
Códigos começando com G são chamados palavras preparatórias porque preparam a máquina para certo tipo de movimento.
| Código | Descrição |
|---|---|
| G00 | Movimento rápido (Rapid). Usado para posicionar máquina para movimentos sem usinagem. |
| G01 | Movimento linear em taxa de avanço especificada. |
| G02 | Arco horário (Clockwise). |
| G03 | Arco anti-horário (Counterclockwise). |
| G04 | Pausa (Dwell). |
| G28 | Retornar à posição Home da máquina. |
| G40 | Compensação de Diâmetro de Corte (CDC) desligada. |
| G41 | CDC Esquerda (Left). |
| G42 | CDC Direita (Right). |
| G43 | Offset de Comprimento de Ferramenta (TLO). |
| G54 | Offset de Fixação #1. |
| G55 | Offset de Fixação #2. |
| G56 | Offset de Fixação #3. |
| G57 | Offset de Fixação #4. |
| G58 | Offset de Fixação #5. |
| G59 | Offset de Fixação #6. |
| G80 | Cancela ciclo de furação. |
| G81 | Ciclo de furação simples. |
| G82 | Ciclo de furação simples com pausa. |
| G83 | Ciclo de furação picotada (peck drilling). |
| G84 | Ciclo de rosqueamento (tapping). |
| G90 | Modo programação coordenadas absolutas. |
| G91 | Modo programação coordenadas incrementais. |
| G98 | Retorno de ciclo de furação ao ponto inicial (R). |
| G99 | Retorno de ciclo de furação ao plano de referência (última altura Z). |
Códigos M (Miscelâneos)
Códigos começando com M são chamados palavras miscelâneas. Controlam opções auxiliares da máquina como refrigerante e sentido do fuso. Apenas um M-code por bloco.
| Código | Descrição |
|---|---|
| M00 | Parada de programa. Pressione Cycle Start para continuar. |
| M01 | Parada opcional. |
| M02 | Fim de programa. |
| M03 | Fuso ligado Horário (CW). |
| M04 | Fuso ligado Anti-horário (CCW). |
| M05 | Fuso parado. |
| M06 | Troca de ferramenta. |
| M08 | Refrigerante ligado. |
| M09 | Refrigerante desligado. |
| M30 | Fim de programa e pressione Cycle Start para rodar novamente. |
Definições Selecionadas de G-Codes (Expandidas)
G00 – Movimento Rápido (Rapid Move)
Comanda a máquina a mover o mais rápido possível para ponto especificado. Sempre usado com posição de coordenada e é modal. Diferente de G01, G00 não coordena eixos para mover em linha reta. Cada eixo move em sua velocidade máxima até satisfeito. Resulta em movimento como Figura 1.
G00 X0. Y0.

Figura 1. Movimento G00
Atenção: Velocidade rápida de algumas máquinas pode exceder 1000 IPM. Offset ou movimento de coordenada incorreto pode colidir a máquina mais rápido que operador aciona emergência. Use override de avanço rápido na máquina ao rodar programa pela primeira vez.
Movimento Linear é Movimento em Linha Reta
G-Code trata de movimento, e o mais comum em programas de peça é movimento linear (linha reta). Movimento é modal. Você diz ao controle que tipo de movimento com G-Code e ele lembra até você mandar mudar com outro G-Code.
- G00 para Posicionamento Rápido; Movimento rápido máximo. Move cortador pelo ar para próxima posição de corte.
- G01 para Movimento de Corte Mais Lento; Movimento de avanço (feed) mais lento, para cortar. Avanço definido por "F".
F-word = "F" de "Feedrate".
S-word = "S" de "Spindle Speed", endereço em RPM.
Especificando Movimento Linear com X, Y, Z
Especificar G00 ou G01 não causa movimento – apenas diz ao controle que tipo de movimento esperar quando você finalmente disser para onde mover. Para movimento real, especifique destino usando X, Y, Z. Para ir ao zero da peça: G00 X0 Y0 Z0 ou use G01 se quiser mais lento: G01 X0 Y0 Z0 F40.
Movimento interpolado: quando especificamos múltiplas coordenadas na mesma linha, significa que mais de um eixo move simultaneamente. O controle move todos na velocidade relativa exata para que o cortador siga linha reta ao destino no avanço programado.
Se especificarmos mesmo destino mas espalharmos coordenadas em múltiplas linhas, cada linha é movimento separado:
G00 X0 Y0 (Move para X0 Y0 em um movimento, mantendo Z constante)
Z0 (Move para Z0 em um movimento, mantendo X e Y constantes)
G00 e G01 são modais, só especificamos quando queremos mudar modo.
Eixo Z
O conceito de movimentos interpolados levanta questão interessante para eixo Z. Frequentemente é boa ideia mover eixo de profundidade de corte sozinho, não como movimento coordenado com X e Y. Seja para julgar colisão quando cortador se aproxima da peça e fixação. Primeiro mover em X e Y, depois em Z, é mais fácil julgar se colisão acidental está prestes a ocorrer. Também menos provável bater em objeto aleatório (grampo) se mantiver cortador alto até estar diretamente sobre onde começar a cortar.
G02 e G03 – Movimento Circular é Modo Iniciado
G02 estabelece modo para arcos circulares horários.
G03 estabelece modo para arcos anti-horários.
Uma vez modo G02/G03 estabelecido, arcos são definidos em G-Code identificando seus 2 pontos finais e o centro, que deve ser equidistante de cada ponto final. Pontos finais são fáceis. Ponto de controle atual (localização quando bloco começa) estabelece um ponto final. O outro pode ser estabelecido por coordenadas XYZ. O centro é mais comumente identificado usando I, J, K para estabelecer offsets relativos do ponto inicial do arco ao centro.
EXEMPLO DE ARCO HORÁRIO

Figura 2. Centro do Arco com IJK
Este arco começa em X0 Y2. e termina em X2. Y0. Seu centro está em X0 Y0. Poderíamos especificar em G-code assim:
G02 (Configura modo arco horário)
X2 Y0 I0 J-2.0
O Centro Usando Raio "R"
O centro apenas especificando o raio do círculo. Círculo tem raio 2, então G-Code poderia ser simplesmente: G02 X2 Y0 R2
G17/G18/G19 – Designação de Plano. Arcos devem existir em plano designado por G17 (XY), G18 (XZ) ou G19 (YZ). G17 é padrão da máquina.

Figura 3. Designação de Plano
G40/G41/G42 – Compensação de Diâmetro de Corte (CDC - Cutter Diameter Compensation)
CDC é chave para usinagem CNC de precisão, permitindo compensar desgaste e deflexão da ferramenta comandando a máquina a desviar esquerda (G41) ou direita (G42) do caminho programado. G40 cancela compensação. A quantidade de offset é inserida em registrador D do controle CNC. O registrador de desgaste pode ser pensado como tabela que o controle consulta a cada movimento.
| Offset Diâmetro Ferramenta | Valor |
|---|---|
| D1 | 0.0125 |
| D2 | 0.0000 |
| D3 | 0.0000 |
| D4 | 0.0000 |
| D5 | 0.0000 |
| D6 | 0.0000 |
O valor no registrador D é calculado pelo operador, que monitora tamanho final de características da peça, compara com desenho, e insere diferença no registrador conforme necessário para manter peça dentro das especificações. Se não há desvio, registrador fica zero.
G01 G41 D1 X1.0 Y.25 F40.
G43 – Compensação de Comprimento de Ferramenta
G43 ativa compensação de comprimento de ferramenta. Sempre acompanhado de H-code e movimento Z, onde H é registrador TLO a ler, e Z é altura a ir em referência ao datum da peça.
O TLO pode ser pensado como tabela no controle:
| Registrador Comprimento Ferramenta | Z |
|---|---|
| H1 | 10.236 |
| H2 | 4.7510 |
| H3 | 6.9652 |
| H4 | 7.6841 |
| H5 | 12.4483 |
| H6 | 8.2250 |
O TLO é combinado com offset de fixação ativo no controle para que a máquina saiba onde a ponta da ferramenta está em relação ao datum da peça.
G43 H1 Z1.
G54 – Offset de Trabalho (Work Offset)
Offsets de trabalho são registradores de dados no controle CNC que guardam distância da posição home X, Y, Z da máquina ao datum da peça. Podem ser pensados como tabela no controle:
| Offset Trabalho | X | Y | Z |
|---|---|---|---|
| G54 | 14.2567 | 6.6597 | 0.0000 |
| G55 | 0.0000 | 0.0000 | 0.0000 |
| G56 | 0.0000 | 0.0000 | 0.0000 |
| G57 | 0.0000 | 0.0000 | 0.0000 |
| G58 | 0.0000 | 0.0000 | 0.0000 |
| G59 | 0.0000 | 0.0000 | 0.0000 |
Dica: G54 geralmente usado para primeiro setup de usinagem. Offsets adicionais para usinar outros lados da peça.
Valores X e Y representam distância do home da máquina ao datum XY da peça. Valor Z é distância do ponto de referência da ferramenta (ex: topo de bloco 1-2-3) ao datum Z da peça.
G54 X0. Y0.
Teste da Unidade
- Descreva as instruções da lista do programa CNC.
- Todos programas CNC começam e terminam com quê?
- Descreva códigos de comando de endereço por letra.
- Liste três códigos de caracteres especiais.
- Descreva códigos G e M.
- Descreva
G00 G90 G54 X0 Y0. - Descreva
G00 G90 G43 H1 Z1. - Qual a diferença entre G00 e G01?
- Explique a diferença entre G02 e G03.
- Descreva as palavras F e S.
Tecnologia industrial
- Fundamentos de Programação de Microprocessadores
- Entendendo a Estrutura de Programas C: Guia para Iniciantes
- Entendendo a Estrutura de Programas C#: Componentes Essenciais e Exemplo
- Dominando a Usinagem CNC: Controle de Variáveis para Resultados Consistentes
- Domine a Precisão do Fresamento CNC: Passos Comprovados para Peças de Precisão
- Serviços Premium de Usinagem CNC e Ferramentaria em Portland, Oregon
- Unidade 5: Operação CNC – Dominando Setup e Controle do Haas Mill
- Aprimorando Precisão e Exatidão de Ferramentas de Máquina CNC: Guia Completo
- Entendendo Retificadoras CNC de Ferramentas e Cortadores: Função, Usos e Benefícios
- Preajustador e Medição de Ferramentas CNC: Guia Essencial para Precisão e Eficiência