Subprogramas M98/M99: escrever uma forma repetida uma vez e chamá-la várias vezes
Explica com um exemplo a estrutura para chamar um subprograma com M98 e retornar com M99, o número P e a contagem de repetições L, como usinar a mesma ranhura em várias posições com um subprograma incremental e os tipos de erros de chamada.
Por que usar subprogramas?
É comum cortar a mesma ranhura em cinco locais ou usinar o mesmo contorno várias vezes em profundidades diferentes. Copiar e colar os mesmos blocos a cada vez torna o programa longo, e corrigir uma dimensão exige corrigir os cinco locais. Omitir apenas um produz uma peça rejeitada, pois um dos cinco fica com tamanho diferente.
Um subprograma separa a parte repetida em um programa próprio, que o programa principal chama quando necessário. A forma é mantida em um único local, e o programa principal só precisa informar “onde e quantas vezes”.
Chamada e retorno
| Comando | Significado | Exemplo |
|---|---|---|
M98 P_ | Chama o programa cujo número P corresponde ao número O | M98 P3100 |
L_ ou dígitos iniciais de P | Contagem de repetições | L3 → 3 vezes |
M99 | Retorna à linha posterior ao bloco de chamada | Última linha de O3100 |
M99 P_ | Retorna, mas salta para o número de sequência especificado | Usado em estruturas de ramificação e laço |
Exemplo: três ranhuras com um subprograma incremental
O subprograma O3100 é escrito no modo incremental G91. A partir da posição atual, desce 6 mm, corta uma ranhura de 30 mm em X, sobe 6 mm e avança 10 mm em Y enquanto retorna ao X inicial. A posição final se torna o início da próxima repetição; portanto, repetir a mesma chamada três vezes produz três ranhuras espaçadas em 10 mm.
Chamada do subprograma O3100 três vezes com L3 para cortar três ranhuras espaçadas em 10 mm
O3007
T1 M6
G21 G90 G17 G94
G54
S3000 M03
G00 X0. Y0. Z5.
M98 P3100 L3
G90 G00 Z50.
M30
O3100
G91 G01 Z-6. F100
X30. F300
G00 Z6.
X-30. Y10.
M99A figura acima é o resultado deste programa no CNC Path Analyzer (rápido 8 segmentos, corte linear 6 segmentos).
Regras do programa principal
- Restaurar o modo: o subprograma termina em G91, portanto comande
G90novamente no programa principal logo após o retorno. OG90 G00 Z50.do exemplo faz isso. Escrever apenasZ50.sem G90 é interpretado como “50 mm acima da posição atual”, e não como “altura 50”. Aqui é um movimento ascendente e causa pouco dano, mas no bloco de aproximação da ferramenta seguinte poderia provocar uma colisão. - Posição inicial: um subprograma incremental produz resultados diferentes conforme a posição no momento da chamada. Comande claramente a posição inicial em coordenadas absolutas imediatamente antes da chamada.
- Estado da compensação e do ciclo: chamar com a compensação do raio da ferramenta ou um ciclo fixo ativos pode fazer os movimentos do subprograma se comportarem de forma inesperada. Organize deliberadamente o estado modal antes e depois da chamada.
- Posição de M30: quando o subprograma estiver no mesmo arquivo, coloque-o depois do
M30do programa principal. O programa principal termina em M30, portanto o subprograma não é executado por engano.
Contagem de repetições e cálculo do tempo de ciclo
Uma execução do subprograma corta Z 6 mm (F100) e X 30 mm (F300): 3.6 segundos e 6 segundos, ou 9.6 segundos por execução e cerca de 29 segundos de corte puro em três execuções. Alterar a contagem para L5 modifica um único caractere do programa principal e gera cinco ranhuras e cerca de 48 segundos de corte. Isso mostra como uma estrutura de repetição simplifica as alterações no programa e as estimativas de tempo. O método é explicado em mais detalhes em Cálculo do tempo de usinagem.
Tipos de erros de chamada
Na ferramenta, programas chamados em arquivos separados podem ser carregados junto com o programa principal, e o número P é associado ao número O dentro do arquivo, não ao nome do arquivo.
| Erro | Causa | O que o CNC Path Analyzer mostra |
|---|---|---|
| Programa chamado não encontrado | Não há programa com número O correspondente a P | A linha da chamada e o número não encontrado |
| Número O duplicado | Dois ou mais programas têm o mesmo número | Um aviso de que não é possível decidir qual usar |
| M99 ausente | O subprograma não termina e avança para o programa seguinte | Um aviso de retorno ausente |
| Chamadas infinitas | Os programas continuam chamando uns aos outros, ou um programa chama a si mesmo | O cálculo para no limite de recursão ou execução |
Perguntas frequentes
Um subprograma pode chamar outro subprograma?
Qual é a diferença entre M98 e uma chamada de macro G65?
G65 é uma chamada de macro que passa argumentos (A, B, C…) como variáveis. É usada para chamar a mesma forma com dimensões diferentes, enquanto M98 repete a mesma operação sem argumentos.