Cada movimento que uma máquina CNC faz — cada avanço, cada partida do spindle, cada troca de ferramenta — é comandado por código G e código M. Esses dois tipos de comandos formam a camada de instrução entre a trajetória gerada pelo CAM e a remoção real de metal. O código G controla geometria e movimento; o código M controla o estado da máquina que torna esse movimento seguro e eficaz. Entender como eles funcionam juntos é o que separa programadores que conseguem escrever código de produção confiável daqueles que só conseguem executar o que o CAM gera.

Este artigo aborda código G e código M de um ponto de vista prático de engenharia: o que cada um controla, como funcionam a estrutura de programa e a lógica de estado modal, códigos comuns com contexto real de usinagem, diferenças entre controladores que afetam a portabilidade e os erros de programação que causam a maioria das colisões e refugo. O objetivo não é uma lista de referência de comandos — é a compreensão da lógica de execução que torna os programas CNC previsíveis e repetíveis.


O Que São Código G e Código M? A Distinção Central

A divisão fundamental é direta. O código G controla o movimento da ferramenta e a geometria. O código M controla o estado da máquina e funções auxiliares. Ambos são necessários. Nenhum funciona sem o outro.

Aspeto Código G Código M
Função principal Movimento da ferramenta e geometria Função e estado da máquina
Controlos Eixos, interpolação, avanços, sistemas de coordenadas Spindle, refrigerante, trocas de ferramenta, fluxo do programa
Afeta Precisão, acabamento superficial, tempo de ciclo Segurança, confiabilidade, condições de corte
Exemplos G00, G01, G02, G17, G54 M03, M05, M06, M08, M30

Código G: Lógica de Geometria e Movimento

Os códigos G respondem à pergunta: como a ferramenta deve se mover para criar esta geometria? Eles definem o modo de posicionamento, o tipo de interpolação, o comportamento do avanço e qual sistema de coordenadas está ativo. A qualidade do acabamento superficial, a precisão dimensional e a distribuição da carga na ferramenta são todas diretamente moldadas por como os códigos G são estruturados e sequenciados.

Pense no código G como o cérebro geométrico do programa. Ele sabe para onde a ferramenta precisa ir e como deve chegar lá.

Código M: Controle da Máquina e do PLC

Os códigos M respondem a uma pergunta diferente: como a máquina deve se comportar durante a execução desse movimento? Eles lidam com a partida e a direção do spindle, ativação do refrigerante, trocas de ferramenta e controle do fluxo do programa. Todas essas funções são gerenciadas pelo PLC (Controlador Lógico Programável) da máquina — uma camada de controle separada do controlador de movimento.

Uma forma útil de pensar nisso: o código G define o caminho; o código M prepara e mantém as condições para o corte ao longo desse caminho. Uma trajetória definida corretamente falha imediatamente se o spindle não estiver girando, a ferramenta errada estiver carregada ou o refrigerante não estiver ativo. Essas condições são inteiramente território do código M.


Estrutura do Programa CNC: Blocos, Estados Modais e Lógica de Execução

Um dos conceitos mais importantes na programação CNC — e um dos que causa o maior número de comportamentos inesperados — é entender que o controlador executa programas como uma máquina de estados, não como uma simples lista sequencial de instruções.

Blocos e Ordem de Execução

Um programa CNC consiste em blocos — tipicamente uma linha de instrução cada. O controlador lê cada bloco da esquerda para a direita e o executa como uma unidade. Criticamente, o controlador não interpreta intenção. Ele apenas vê o bloco atual combinado com quaisquer estados modais definidos por blocos anteriores.

Isso significa que dois comandos de movimento aparentemente idênticos podem se comportar de maneira completamente diferente dependendo do que foi estabelecido anteriormente no programa. Errar isso é a causa raiz da maioria dos comportamentos inesperados no CNC.

Códigos Modais vs Não-Modais

Essa distinção é essencial para entender o comportamento do programa:

Códigos modais permanecem ativos até serem explicitamente alterados. Uma vez definidos, persistem em todos os blocos subsequentes até serem substituídos. Exemplos:

  • Modo de movimento (G00, G01, G02) — permanece ativo até que um modo de movimento diferente seja chamado
  • Modo de posicionamento (G90/G91) — absoluto ou incremental permanece definido até ser alterado
  • Seleção de plano (G17/G18/G19) — o plano de corte ativo persiste

Códigos não modais executam uma vez no bloco onde aparecem, depois não têm mais efeito. Cancelamentos específicos de ciclos fixos e comandos de permanência são exemplos típicos.

Comportamento Códigos Modais Códigos Não Modais
Persistência de estado Ativo até ser alterado Executa uma vez
Risco se mal interpretado Movimento indesejado em blocos posteriores Efeito geralmente localizado
Exemplos comuns G00, G01, G90, G91, G17 Ações únicas, cancelamentos específicos de ciclos

A implicação prática: um G01 modal deixado ativo de uma operação anterior fará com que o próximo movimento de posicionamento rápido seja executado como um movimento de corte em avanço. Isso é um crash esperando para acontecer — e é totalmente evitável ao entender o estado modal.

Fases da Lógica do Programa

Todo programa CNC confiável segue três fases lógicas:

Inicialização: Estabeleça o estado da máquina explicitamente. Defina unidades (G20/G21), plano (G17), modo de posicionamento (G90), offset de trabalho (G54 ou equivalente) e modo de avanço. Nunca confie nos padrões do controlador — eles variam entre máquinas.

Maquinação: O código G domina para movimento e geometria. Os códigos M mantêm as condições de corte em segundo plano — o spindle permanece girando, o refrigerante permanece ativo, a ferramenta permanece engajada.

Desligamento: Retorne a um estado seguro e conhecido. A ferramenta recua, o spindle e o refrigerante param, o programa termina e reinicia para o próximo ciclo.


Principais Tipos de Código G: Movimento, Posicionamento e Ciclos Fixos

Em vez de listar todos os códigos G, entender as três categorias funcionais esclarece quando e por que cada tipo é usado em operações práticas de usinagem.

Códigos G de Movimento e Interpolação

Esses códigos definem como a ferramenta de corte se move entre pontos. Eles têm o impacto mais direto no acabamento superficial, tempo de ciclo e carga da ferramenta.

G00 – Posicionamento rápido Move a ferramenta na velocidade máxima da máquina. Usado exclusivamente para movimentos sem corte: aproximação, recuo, posicionamento para troca de ferramenta e movimentos de afastamento. G00 prioriza velocidade sobre precisão de trajetória — a trajetória real entre pontos não é uma linha reta na maioria das máquinas. A folga do dispositivo e da peça deve ser verificada, não presumida.

G01 – Interpolação linear Move a ferramenta em linha reta a uma taxa de avanço programada. Este é o movimento de corte principal para a maioria das operações de fresamento e torneamento. A taxa de avanço é especificada com F — e esse valor de F persiste de forma modal até ser alterado.

G02 / G03 – Interpolação circular G02 gera arcos no sentido horário; G03 gera arcos no sentido anti-horário. Usados para cavidades circulares, raios de canto, filetes e contornamento. O ponto central ou raio (R) deve ser especificado. Na maioria dos controladores, a direção do arco é relativa ao plano ativo (G17/G18/G19) — um detalhe importante ao programar arcos fora do plano XY.

A distinção crítica: G00 é para posicionamento entre cortes. G01/G02/G03 são para remoção de material. Usar G00 onde G01 é pretendido — ou deixar G01 ativo quando o posicionamento rápido é necessário — é uma das causas mais comuns de crashes e cortes excessivos.

Códigos G de Sistema de Coordenadas e Posicionamento

Esses códigos definem onde o movimento ocorre, não como a ferramenta se move.

Sistemas de coordenadas de trabalho (G54–G59) Cada offset armazena uma relação entre o zero da máquina e o zero da peça. Múltiplos dispositivos ou setups podem estar ativos no mesmo programa chamando diferentes offsets de trabalho. Na usinagem prática, G54 é o padrão para trabalho de setup único; G55–G59 são usados para pallets multi-dispositivo ou dispositivos tipo tombstone.

G90 – Posicionamento absoluto Todas as coordenadas referenciam o zero de trabalho ativo. Um movimento para X50 sempre vai para X50 em relação ao zero da peça, independentemente da posição atual da ferramenta. Este é o modo padrão para a maioria dos programas de produção — é previsível e fácil de verificar.

G91 – Posicionamento incremental Cada coordenada se move em relação à posição atual da ferramenta. G91 é poderoso para padrões repetitivos e recursos simétricos, mas perigoso se deixado ativo involuntariamente. Um G01 Z-1.0 incremental significa “descer 1mm de onde você está agora” — não do zero da peça. Esta é uma fonte significativa de erros de profundidade e crashes.

Ciclos Fixos

Os ciclos fixos condensam sequências repetitivas de furação, mandrilamento e roscamento em chamadas de linha única. Em vez de programar aproximação, avanço, permanência, recuo e afastamento separadamente para cada furo, um ciclo fixo gerencia a sequência completa automaticamente.

Exemplos comuns incluem G81 (furação), G83 (furação com pica-pau para furos profundos), G84 (roscamento) e G76 (mandrilamento fino). Os parâmetros tipicamente incluem profundidade do furo, plano de recuo, taxa de avanço e opções específicas do ciclo.

Dois pontos de engenharia importam aqui. Primeiro, os ciclos fixos são modais — eles permanecem ativos até serem explicitamente cancelados (tipicamente com G80). Esquecer de cancelar um ciclo de furação antes de um movimento de reposicionamento pode fazer a máquina furar em cada posição intermediária. Segundo, o comportamento de recuo varia entre controladores — verifique a lógica de recuo da furação com pica-pau antes de executar ciclos de furos profundos em máquinas desconhecidas.


Códigos M comuns: o que eles controlam e por que o timing é importante

Os códigos M costumam ser tratados como detalhes secundários — comandos básicos para ligar o spindle e acionar o refrigerante. Na prática, o timing e o sequenciamento dos códigos M são tão críticos quanto a geometria da trajetória da ferramenta. Erros neles custam ferramentas, peças e, às vezes, máquinas.

Controle do spindle

M03 – Spindle ligado (sentido horário) Direção de corte padrão para ferramentas de corte à direita. Deve estar ativo antes da execução de qualquer código G de corte. Inclua um valor S (rotação do spindle) no mesmo bloco ou no bloco anterior.

M04 – Spindle ligado (sentido anti-horário) Usado para ferramentas de corte à esquerda, certas operações de mandrilamento e fresamento de roscas em configurações específicas. Usar M04 com uma fresa de topo padrão à direita danifica imediatamente tanto a ferramenta quanto a peça.

M05 – Parada do spindle Necessário antes de trocas de ferramenta, operações de apalpação e pausas do programa. Na maioria das máquinas, M06 (troca de ferramenta) para o spindle automaticamente — mas programar explicitamente M05 antes de M06 é uma prática melhor e mais portável.

Controle de refrigerante

M08 – Refrigerante ligado Ativa o refrigerante em inundação. Em máquinas com múltiplas opções de refrigerante, códigos M específicos podem selecionar entre inundação, névoa e refrigerante através do spindle — consulte a lista de códigos M da máquina.

M09 – Refrigerante desligado Desligue antes de trocas de ferramenta e no final do programa. Deixar o refrigerante ativo durante uma troca de ferramenta cria problemas de organização e potenciais riscos de segurança na posição de troca de ferramenta.

O timing do refrigerante importa mais do que a maioria dos programadores reconhece. Na usinagem de titânio (Ti-6Al-4V), o refrigerante deve estar ativo antes que a aresta de corte entre em contato com a peça — ligá-lo após o contato é tarde demais para proteção térmica. Em alumínio 6061, refrigerante em névoa ou inundação previne aresta postiça e mantém o acabamento superficial. A chamada M08 pertence antes do primeiro G01 de corte, não depois.

Troca de ferramenta e fluxo do programa

M06 – Troca de ferramenta Executa a troca automática de ferramenta para a ferramenta especificada por um código T. A execução segura exige que a ferramenta seja recuada para a posição de troca e que o spindle esteja parado. Sequência padrão: G00 para folga em Z → M05 → T___ → M06.

M00 – Parada do programa (incondicional) Pausa a execução. A máquina para e aguarda a intervenção do operador. Usado para inspeção em processo, operações manuais ou ajustes de dispositivo no meio do ciclo.

M01 – Parada opcional Para somente se o interruptor de parada opcional estiver ativo no controlador. Útil para pontos de inspeção que podem ser ignorados em produção, mas ativados durante setup ou execução da primeira peça.

M30 – Fim do programa e reset Encerra o programa e rebobina para o início. A maneira correta de encerrar um programa de produção CNC. M02 encerra sem rebobinar — evite-o em código de produção.

Grupo de função Códigos M Função de engenheiro
Fuso M03 / M04 / M05 Habilita e para o corte; controla a direção
Líquido de arrefecimento M08 / M09 Controle térmico, evacuação de cavacos, acabamento superficial
Gerenciamento de ferramentas M06 Sequenciamento de troca de ferramenta
Fluxo do programa M00 / M01 / M30 Paradas de segurança, inspeção, reset do ciclo

Como o código G e o código M trabalham juntos: um exemplo prático de fresamento

A coordenação entre códigos G e M fica clara quando você acompanha a lógica de execução de uma operação de usinagem real. Veja como um passe simples de fresamento de topo em uma peça de alumínio 6061 se apresenta do ponto de vista de gerenciamento de estado:

Fase 1: Preparação da máquina (códigos M estabelecem as condições de corte)

G21 G90 G17 G54       ; Definir métrico, absoluto, plano XY, offset de trabalho

Antes de qualquer movimento de corte, o estado da máquina está totalmente definido: ferramenta correta, spindle girando na direção certa na velocidade correta, refrigerante ativo, ferramenta posicionada com segurança acima da peça.

Fase 2: Movimento de corte (códigos G controlam a trajetória)

G00 Z2.0              ; Avanço rápido para altura de aproximação em Z

Os comandos G01 controlam a remoção real de material. Os códigos M de spindle e refrigerante da Fase 1 permanecem ativos de forma modal — não é necessário chamá-los novamente para cada corte, mas eles devem ter sido estabelecidos antes do início da Fase 2.

Fase 3: Saída segura (restaurar a máquina a um estado conhecido)

G01 Z2.0 F600         ; Recuar na taxa de avanço (não em rápido — controlado)

Cada elemento da sequência de saída tem um propósito. Recuar na taxa de avanço antes de ir para rápido previne marcas de mergulho se a ferramenta ainda estiver em leve contato. Refrigerante desligado antes da parada do spindle evita que o refrigerante seja pulverizado durante a desaceleração. G00 para a posição home prepara confiavelmente para o próximo ciclo.

Essa lógica de três fases — preparar, executar, restaurar — é o modelo mental que previne a maioria dos erros de programação CNC.


Diferenças entre controladores: por que o código G e o código M não são verdadeiramente universais

ISO 6983 / RS274 fornece uma base de sintaxe comum, mas os fabricantes de controladores estendem e modificam significativamente o comportamento. Um programa que funciona perfeitamente em uma máquina pode produzir alarmes ou movimentos inesperados em outra — mesmo com hardware idêntico.

Áreas Comuns de Variação

Controladores baseados em Fanuc: Os controladores industriais mais amplamente utilizados. A Fanuc define um grande núcleo comum, mas as opções do fabricante da máquina adicionam ou modificam o comportamento. A sintaxe Macro B, os códigos M de apalpação e os parâmetros de ciclos fixos frequentemente variam entre máquinas, mesmo dentro da família Fanuc.

Controladores Haas: Amplamente compatíveis com Fanuc para códigos G de movimento básico, mas a Haas utiliza códigos M simplificados ou proprietários para muitas funções. Programas escritos em máquinas Haas frequentemente precisam de ajustes nos códigos M quando transferidos para máquinas Fanuc.

LinuxCNC: Código aberto e altamente configurável. Suporta sintaxe RS274 padrão, mas o comportamento avançado é definido pelo usuário. Poderoso para máquinas personalizadas; requer documentação cuidadosa de configuração para garantir comportamento consistente.

Área Variação Típica
Troca de ferramenta (M06) Posicionamento, verificações de segurança, comportamento do ATC
Ciclos fixos Parâmetros, modos de retração, comportamento de pica-pau
Códigos M de refrigerante Múltiplos tipos de refrigerante, atribuições específicas de códigos
Variáveis de macro Sintaxe, disponibilidade, numeração de variáveis
Estados modais padrão Seleção de plano, modo de avanço, unidades na energização

Melhores Práticas de Portabilidade

A abordagem mais confiável para compatibilidade entre controladores:

  • Nunca confie nos padrões. Defina explicitamente unidades, plano, modo de posicionamento e offset de trabalho no início do programa.
  • Evite atalhos específicos de controladores em programas destinados a múltiplas máquinas.
  • Comente códigos M não padronizados com sua função — programadores futuros não saberão o que M88 faz na sua máquina específica sem documentação.
  • Valide em cada controlador antes da primeira execução de produção, mesmo que o programa “deveria funcionar.”

Erros Comuns de Código G e Código M: Diagnóstico e Prevenção

A maioria das falhas de CNC remonta a erros de gerenciamento de estado, não a erros de sintaxe. O controlador executou exatamente o que lhe foi dito — o problema é que o programador não considerou completamente quais estados modais estavam ativos.

Erro Causa Raiz Prevenção
Herança modal G90/G91, G00/G01 ou seleção de plano deixada ativa do bloco anterior Redefina explicitamente estados modais críticos no início do programa e antes de operações críticas
Sistema de coordenadas errado O programa assume um offset de trabalho ou sistema de unidades diferente da configuração da máquina Defina G54–G59, G90/G91, G20/G21 explicitamente — nunca presuma
Movimento rápido inesperado G01 ainda ativo quando o posicionamento rápido é pretendido, ou vice-versa Reafirme o código G de movimento em cada bloco onde a intenção de movimento muda
Temporização do spindle/refrigerante Códigos M colocados após o início do movimento de corte Trate M08 e M03 como pré-condições: ativos antes do primeiro G01
Troca de ferramenta insegura M06 chamado sem parada do spindle ou posição segura de retração Imponha sequência padrão de troca de ferramenta: retrair → M05 → T___ → M06
Comportamento inconsistente de ciclo Ciclo fixo modal (G83, G84) não cancelado antes do reposicionamento Cancele ciclos fixos com G80 explicitamente; não presuma que eles se autocancelam
Programa falha na segunda execução Estados modais ocultos persistem após o fim do programa Use M30 com sequência completa de desligamento; inicialize todos os estados no início do programa

Um Exemplo Real: Modo Incremental Deixado Ativo

Um incidente comum na oficina: um programador usa G91 (incremental) para um padrão de furação em círculo de parafusos. O ciclo canned executa corretamente. Então G80 cancela o ciclo, mas G91 nunca é redefinido para G90. A próxima operação — uma passada de fresamento de bolsão — usa coordenadas incrementais. Em vez de mover para X50 Y30 (absoluto), a máquina se move 50 mm e 30 mm de onde quer que esteja no momento.

Resultado: passada de fresamento no local errado, peça refugada, potencial colisão.

Correção: adicione G90 à linha imediatamente após G80 ao retornar do modo incremental. Um caractere. Salva uma peça.


Melhores Práticas para Programação Confiável de CNC

Programas confiáveis compartilham características estruturais comuns independentemente da máquina ou do controlador. Essas práticas reduzem erros, simplificam a solução de problemas e tornam os programas mantíveis por alguém que não seja o autor original.

Bloco de Inicialização — Sempre

Inicie cada programa com uma inicialização completa de estado:

G21 G90 G17 G54 G94 G40 G49    ; Métrico, absoluto, plano XY, WCS 1,

Este único bloco elimina a maioria dos problemas de carryover de estado modal. Leva cinco segundos para escrever e economiza horas de solução de problemas.

Mudanças Explícitas de Estado em Limites Lógicos

Antes de qualquer novo tipo de operação — especialmente mudanças entre furação e fresamento, entre diferentes dispositivos de fixação, ou após intervenções manuais — restabeleça os estados modais críticos. Não presuma que a operação anterior deixou a máquina na condição correta.

Regras de Sequenciamento de Código M

Siga esta ordem consistentemente:

  1. Recuar para folga segura em Z
  2. Parada do spindle (M05) se troca de ferramenta for necessária
  3. Troca de ferramenta (M06) com código T
  4. Partida do spindle na nova velocidade (M03 S___) e refrigerante ligado (M08)
  5. Posicionar ao ponto de aproximação
  6. Iniciar movimento de corte

Inverter os passos 4 e 5 — mover para a posição antes do spindle e refrigerante estarem ativos — é tecnicamente válido na maioria dos controladores, mas é uma prática ruim. O spindle precisa de tempo para atingir a velocidade; o refrigerante precisa alcançar a zona de corte antes da ferramenta engatar.

Comente a Intenção, Não Apenas a Sintaxe

Comentário ruim: ; G01 X50 F300 (movimento linear) Comentário bom: ; Passada de acabamento na face de referência - profundidade 0,1mm, deixar 0 de sobremetal

Comentários devem explicar porquê por que uma sequência de código existe e quais premissas ela faz, não repetir o que o código já diz.

Valide com Simulação Antes de Executar

Mesmo programadores experientes simulam antes de cortar. A simulação moderna de CAM captura erros de trajetória da ferramenta, colisões com suportes e interferência em movimentos rápidos que parecem corretos no código mas causam colisões na máquina. Execuções a seco com avanço de 10% com uma verificação visual de cada fase da operação capturam os problemas restantes que a simulação não detecta.


Conclusão

Código G e código M não são duas listas separadas de comandos CNC — são duas camadas coordenadas de um único sistema de controle da máquina. O código G define onde e como a ferramenta se move; o código M garante que a máquina esteja no estado correto para executar esse movimento de forma segura e eficaz. Entender como eles interagem, como o estado modal persiste entre blocos do programa, e como as diferenças entre controladores afetam o comportamento é o que faz a diferença entre código que funciona de forma confiável em produção e código que funciona uma vez, em uma máquina, sob condições ideais.

A programação confiável de CNC vem da disciplina de gerenciamento de estado: inicialização explícita, fases de execução previsíveis e temporização cuidadosa do código M. Programadores que entendem código G e código M como um sistema lógico coordenado — em vez de comandos isolados para memorizar — escrevem programas que são portáveis, seguros e fáceis de manter entre máquinas e turnos.


Perguntas frequentes

O código G é o mesmo para fresadoras e tornos?

Não exatamente. Códigos de movimento principais (G01, G02) aparecem em ambos, mas o contexto difere significativamente. O fresamento usa seleção de plano (G17/G18/G19) e coordenadas multi-eixo. Centros de torneamento usam controle de diâmetro/raio (G7/G8 em alguns controladores), movimento sincronizado com o spindle para roscamento (G32, G92) e ciclos canned específicos de torno (G71, G72). A sintaxe subjacente é compartilhada; a lógica de aplicação é suficientemente diferente que a experiência em fresamento não se transfere automaticamente para a programação de torneamento.

Os códigos M são universais entre máquinas CNC?

Não — e presumir que são é arriscado. Códigos básicos como M03 (spindle horário), M05 (parada do spindle) e M30 (fim do programa) são amplamente consistentes. Mas controle de refrigerante, apalpação, fixação, trocas de pallet e funções relacionadas à automação variam significativamente por controlador, fabricante da máquina e configuração. Sempre verifique as atribuições de código M em cada máquina específica antes de confiar nelas.

Por que o mesmo código G se comporta de forma diferente em controladores diferentes?

A ISO 6983 define sintaxe, não comportamento. Os controladores estendem o padrão com seus próprios padrões, opções e interpretações. Parâmetros de ciclos canned, definições de arco, estados modais padrão ao ligar e posicionamento de troca de ferramenta podem todos diferir. Escrever código explícito e defensivo — definindo todos os estados modais em vez de confiar nos padrões — é a única maneira confiável de lidar com diferenças entre controladores.

O software CAM pode substituir o conhecimento manual de código G/M?

O software CAM gera trajetórias de ferramenta corretas de forma eficiente, mas não elimina a necessidade de entender o código. Engenheiros e maquinistas ainda precisam de conhecimento de código G e M para verificar a lógica do programa, depurar comportamentos inesperados, otimizar o tempo de ciclo e se comunicar claramente com fornecedores e operadores. O CAM substitui a digitação; não substitui o julgamento de engenharia.

Quais são os erros mais perigosos de código G e M?

Erros relacionados ao estado causam os incidentes mais graves. Os erros de maior risco são: movimentos rápidos G00 executados muito próximos à peça de trabalho; modo incremental G91 deixado ativo involuntariamente; partida do spindle M03 omitida antes do movimento de corte; troca de ferramenta M06 chamada sem recuo seguro; e ciclos fixos (G83, G84) não cancelados antes do reposicionamento. Nenhum deles produz erros de sintaxe — o controlador os executa sem reclamar. O dano acontece mecanicamente.

conteúdo da publicação

Informações de contacto

Telemóvel: +8617196430663

Receba as últimas notícias e atualizações

subscreva a nossa newsletter