CNC Path Analyzer

Subprogramas M98/M99: escribir una forma repetida una vez y llamarla muchas veces

Explica con un ejemplo la estructura para llamar a un subprograma con M98 y retornar con M99, el número P y el número de repeticiones L, cómo mecanizar la misma ranura en varias posiciones con un subprograma incremental y los tipos de errores de llamada.

¿Por qué usar subprogramas?

Es habitual cortar la misma ranura en cinco lugares o mecanizar el mismo contorno varias veces a distintas profundidades. Copiar y pegar los mismos bloques cada vez alarga el programa, y corregir una dimensión obliga a corregir los cinco lugares. Omitir uno solo produce una pieza defectuosa porque uno de los cinco queda con un tamaño diferente.

Un subprograma separa la parte repetida en un programa propio, que el programa principal llama cuando es necesario. La forma se mantiene en un único lugar y el programa principal solo tiene que indicar «dónde y cuántas veces».

Llamada y retorno

ComandoSignificadoEjemplo
M98 P_Llama al programa cuyo número P coincide con el número OM98 P3100
L_ o dígitos iniciales de PNúmero de repeticionesL3 → 3 veces
M99Retorna a la línea posterior al bloque de llamadaÚltima línea de O3100
M99 P_Retorna, pero salta al número de secuencia especificadoSe usa para estructuras de ramificación y bucle

Ejemplo: tres ranuras con un subprograma incremental

El subprograma O3100 está escrito en modo incremental G91. Desde la posición actual baja 6 mm, corta una ranura de 30 mm en X, sube 6 mm y avanza 10 mm en Y mientras vuelve al X inicial. La posición final se convierte en el inicio de la siguiente repetición, por lo que repetir la misma llamada tres veces produce tres ranuras separadas 10 mm.

Llamada tres veces al subprograma O3100 con L3 para cortar tres ranuras separadas 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.
M99
Llamada tres veces al subprograma O3100 con L3 para cortar tres ranuras separadas 10 mm — XY trayectoriaXY
La línea azul clara discontinua es avance rápido G00; la naranja continua es movimiento de corte. Los arcos se muestran como curvas estáticas calculadas.

La figura anterior es el resultado de analizar este programa con CNC Path Analyzer (rápido 8 segmentos, corte lineal 6 segmentos).

Reglas del programa principal

  • Restablecer el modo: el subprograma termina en G91, así que ordene de nuevo G90 en el programa principal justo después del retorno. El G90 G00 Z50. del ejemplo lo hace. Escribir solo Z50. sin G90 se interpreta como «50 mm por encima de la posición actual», no como «altura 50». Aquí es un movimiento ascendente y causa poco daño, pero en el bloque de aproximación de la siguiente herramienta podría provocar una colisión.
  • Posición inicial: un subprograma incremental da resultados diferentes según la posición en el momento de la llamada. Ordene claramente la posición inicial en coordenadas absolutas justo antes de la llamada.
  • Estado de compensación y ciclo: llamar con la compensación del radio de herramienta o un ciclo fijo activos puede hacer que los movimientos del subprograma se comporten de forma inesperada. Ordene deliberadamente el estado modal antes y después de la llamada.
  • Posición de M30: si el subprograma está en el mismo archivo, colóquelo después del M30 del programa principal. El programa principal termina en M30, por lo que el subprograma no se ejecuta por error.

Número de repeticiones y cálculo del tiempo de ciclo

Una ejecución del subprograma corta Z 6 mm (F100) y X 30 mm (F300): 3.6 segundos y 6 segundos, es decir, 9.6 segundos por ejecución y unos 29 segundos de corte puro en tres ejecuciones. Cambiar el número de repeticiones a L5 modifica un solo carácter del programa principal y produce cinco ranuras y unos 48 segundos de corte. Así se ve cómo una estructura repetitiva simplifica tanto los cambios del programa como las estimaciones de tiempo. El método se explica con más detalle en Cálculo del tiempo de mecanizado.

Tipos de errores de llamada

En la herramienta, los programas llamados que están en archivos separados pueden cargarse junto con el programa principal, y el número P se vincula al número O dentro del archivo, no al nombre del archivo.

ErrorCausaQué muestra CNC Path Analyzer
No se encontró el programa llamadoNo hay ningún programa con un número O que coincida con PLa línea de llamada y el número no encontrado
Número O duplicadoDos o más programas tienen el mismo númeroUna advertencia de que no puede decidir cuál usar
Falta M99El subprograma no termina y continúa en el programa siguienteUna advertencia de retorno ausente
Llamadas infinitasLos programas se llaman entre sí continuamente, o un programa se llama a sí mismoEl cálculo se detiene por el límite de recursión o ejecución

Preguntas frecuentes

¿Puede un subprograma llamar a otro subprograma?
Sí. Esto se denomina anidamiento, y el número de niveles permitidos (normalmente cuatro o más) varía según el controlador. Cuanto más profundo es el anidamiento, más difícil resulta seguir el estado modal, por lo que se recomienda no superar dos niveles.
¿En qué se diferencia M98 de una llamada de macro G65?
G65 es una llamada de macro que pasa argumentos (A, B, C…) como variables. Se usa para llamar a la misma forma con dimensiones diferentes, mientras que M98 repite la misma operación sin argumentos.

Siguientes pasos

Comprobar la trayectoria en CNC Path Analyzer