Saltar al contenido

Subrutinas M98 y M99 en Fanuc: cuándo y cómo utilizarlas

Infografía técnica que muestra el uso de las subrutinas M98 y M99 en Fanuc, con un diagrama del flujo entre el programa principal y el subprograma O####.
Guía completa y práctica para dominar las subrutinas en controles Fanuc: estructura O####, llamadas con M98 P… L…, retorno con M99, anidación, patrones repetitivos, buenas prácticas de seguridad (G90/G91, planos y compensaciones), errores frecuentes y plantillas listas para adaptar.¿Quieres practicar con piezas reales y simulación paso a paso? Empieza por el Curso de Programación CNC en Fanuc. Si trabajas con conversacional europeo y ciclos TNC, te servirá Heidenhain. Y para automatizar patrones desde CAD/CAM, te ayudo en Mastercam.Lecturas relacionadas:

1) Qué son M98 y M99 (y por qué te ahorran tiempo)

En Fanuc, una subrutina es un bloque de código reutilizable (programa O####) que se llama desde un programa principal con M98 y que retorna con M99. El objetivo es no repetir docenas de líneas para operaciones idénticas (cavidades, patrones, taladros) y, a cambio, centralizar la lógica en un lugar.

  • M98 P#### → llama al programa O####.
  • M98 P#### Lk → repite k veces la misma llamada.
  • M99 → retorno a la línea siguiente a la llamada M98. (En muchos controles, M99 al final del principal rebobina, pero la práctica habitual es terminar el principal con M30.)

Beneficios:

  • Menos líneas, menos errores de tecleo y mayor legibilidad.
  • Reutilización entre piezas similares o familias de productos.
  • Mantenimiento: corriges en un sitio y se arregla en todo el flujo.

2) Anatomía: programa principal y subrutina O####

; --- Principal ---
%
O1200 (PLACA CON PATRON 3x2)
G21 G90 G17 G40 G49 G80
G54
T2 M06 S3200 M03 M08
G00 X20 Y20 Z5
M98 P2200            (llama al subprograma O2200 una vez)
G00 Z50
X100 Y30 Z5
M98 P2200            (repite el patrón en otra ubicación)
G00 Z80
M09 M05
M30
%

; --- Subprograma ---
O2200 (TALADRO Ø6 - Z-12 - PATRON 3x2)
G81 Z-12 R2 F250
X60
X120
G91 Y30 X-120
X60
X60
G80
G90
M99

Lectura: el principal posiciona sobre el “cero local” del patrón, llama a O2200 y este ejecuta el ciclo. Observa el uso consciente de G90/G91 en el sub para crear un patrón relativo y volver limpio a G90 antes del M99.

Consejo: estandariza tus números: p. ej., O2xxx = cavidades/patrones, O3xxx = utilidades. Esto ayuda a encontrar y versionar subrutinas.

3) M98 con repetición L y reposicionamientos

Si el patrón se repite en la misma posición, usa L; si cambia la posición, reposiciona entre llamadas.

; Repetir la misma operación 4 veces (mismo punto)
M98 P2200 L4

; O repetir el patrón moviendo el origen (posiciona y llama)
G00 X0 Y0 Z5   (cavidad 1)
M98 P2300
G00 X80 Y0 Z5  (cavidad 2)
M98 P2300

Cuando uses L, confirma que tu sub no “acumula” desplazamientos indeseados; por eso es vital fijar G91 al principio (si procede) y G90 al final.

4) Subrutinas relativas (G91) vs absolutas (G90)

Un sub “portátil” suele escribirse en incrementales (G91) para que funcione desde cualquier punto de entrada. Reglas de oro:

  • Forzar G91 al entrar y G90 al salir del sub.
  • Cancelar ciclos (G80) y compensaciones (G40/G49 si las activaste dentro) antes del M99.
  • Evitar estados “heredados” que dependan del principal.
; Sub relativo "limpio"
O3000 (MATRIZ 3x2 RELATIVA)
G91
G81 Z-10 R2 F250
X40
X40
G90 X0
G91 Y30 X-80
X40
X40
G80
G90
M99

5) Anidación de subrutinas (llamar a una desde otra)

Es común que un sub posicione y llame a otro sub con la operación estándar. Mantén la profundidad de anidación baja (2–3 niveles) y comenta con claridad.

; Principal
O1400
...
M98 P2400 L2   ; dos cavidades
...
M30

; Sub posicionador (O2400)
O2400
; posiciona a la cavidad N (puede ser absoluta o relativa)
M98 P2500      ; llama a la operación estándar
M99

; Sub operación estándar (O2500)
O2500
; ... operaciones (taladro, cajera, etc.)
M99

6) Seguridad: “estado seguro”, alturas y compensaciones

La mayoría de errores con subrutinas se deben a estados modales mal controlados. Checklist mínimo:

  • En el principal, línea de estado seguro: G21 G90 G17 G40 G49 G80 + G54….
  • En el sub, fija explícitamente G90/G91 según diseño, y cancela G80 antes de M99.
  • Si activas compensación de radio G41/G42 en el sub, asegúrate de tener entrada/salida tangenciales y cancelar con G40 fuera del contorno.
  • Alturas Z seguras y R de ciclo apropiados; evita retracts “al techo”.

Repasamos estos patrones de seguridad con ejercicios en el Curso de Programación CNC en Fanuc y cómo configurarlos automáticamente desde Mastercam.

7) Bibliotecas de subrutinas: estandariza tu taller

Crear una biblioteca corporativa de O#### acelera la vida del programador y del operador. Sugerencia de catálogo:

  • O5000–O5099 Cavidades estándar (40×30×5, 60×40×10, etc.).
  • O5200–O5299 Patrones de taladros (3×2, circunferencia 6/8/12, bridas típicas).
  • O5400–O5499 Acabados 2D con G41/G42 y entradas seguras.
  • O5600–O5699 Utilidades (chaflán, ranura, planeado rápido).

Incluye comentario de versión y fecha al inicio de cada sub, y controla su distribución entre máquinas.

8) Ejemplo completo: patrón circular con entrada polar + sub

Combina coordenadas polares (G16/G15) con subrutina de taladro. Origen G54 en el centro del patrón.

% 
O1600 (CIRCULO 8 AGUJEROS R=50 - SUB POLAR)
G21 G90 G17 G40 G49 G80
G54
T2 M06 S2800 M03 M08
G00 X0 Y0 Z50
G43 H02 Z5

G16                 (entrada polar)
#100 = 50          (radio)
#101 = 0           (angulo inicial)

; Recorremos 8 posiciones cada 45°
WHILE [#101 LT 360] DO1
  G00 X#101 Y#100 Z5   (angulo #101, radio #100)
  M98 P6000            (taladrar en ese punto)
  #101 = #101 + 45
END1

G15
G00 Z50
M09 M05
G49
G00 X0 Y0
M30

; Sub estandar de taladro
O6000 (TALADRO Ø6 A Z-12)
G81 Z-12 R2 F250
G80
M99

Si tu control no soporta variables, puedes listar los ángulos manualmente (0,45,90…). Para entender la entrada polar a fondo, revisa esta guía de coordenadas polares en Fanuc.

9) Integración con CAM (Mastercam): salida como subprogramas

En Mastercam y otros CAM puedes configurar la salida como subprogramas para operaciones repetidas. Ventajas:

  • G-code más corto y modular.
  • Vinculación clara entre WCS/orígenes (G54…G59) y llamadas a subs.
  • Fácil de depurar y reutilizar piezas “familia”.

Tip: activa opciones de Transform → Translate/Rotate con “Output as subprogram” y revisa que el post nombre los O#### de forma consistente con tu biblioteca.

10) Errores frecuentes (y cómo evitarlos)

Síntoma Causa Solución
Trayectorias “se van” tras el primer punto Olvidar volver a G90 al final del sub Forzar G91 al entrar y G90 antes de M99
Alarma por ciclo activo al salir Sub termina con G81 activo Insertar G80 antes de M99
No encuentra O#### Programa no cargado o número incorrecto Revisar numeración y carga de archivos
Marcas en contorno/errores con G41/G42 Activación/cancelación en esquina Entradas/salidas tangenciales y G40 fuera del perfil
Colisión en la 2ª repetición Altura R o Z segura insuficiente Ajustar R/Z seguras en sub y principal

Amplía con esta guía de errores comunes y evita sustos desde la primera pieza.

11) Buenas prácticas de documentación y versión

  • Cabecera clara (pieza, material, origen, herramientas, alturas seguras).
  • Comentarios en el sub indicando si es relativo o absoluto, qué planos usa y qué estados espera/cancela.
  • Versionado: un changelog con fecha y cambios (v1.1: mejor R; v1.2: entrada tangencial…).
  • Convención de nombres y rangos O#### por tipo de operación.

Para ordenar tu biblioteca, te ayudará revisar estos “códigos secretos” (G53, G52, G68, G10) que combinan muy bien con librerías de subrutinas.

12) Plantillas que puedes adaptar hoy

12.1 Taladro estándar (sub)

O5100 (TALADRO Ø6 A Z-10 - SUB)
G81 Z-10 R2 F250
G80
M99

12.2 Cavidad 40×30×5 (sub con acabado)

O5200 (CAVIDAD 40x30x5)
G17 G40
G00 Z5
G01 Z-4 F250
X40
Y30
X0
Y0
G00 Z2
G01 Z-5 F200
G01 G41 D02 X0 Y2 F600
X40
Y30
X0
Y0
G40 X-5 Y-5
G00 Z5
M99

12.3 Patrón 3×2 relativo (sub)

O5300 (PATRON 3x2 RELATIVO)
G91
G81 Z-12 R2 F220
X40
X40
G90 X0
G91 Y30 X-80
X40
X40
G80
G90
M99

Integra estas plantillas en un principal con posicionamientos limpios y alturas seguras realistas. Si quieres ver cómo encajarlas en una estructura robusta de programa Fanuc, revisa la guía del control Fanuc.

13) Itinerario de estudio 30/60/90

Días 0–30: fundamentos y seguridad

  • Escribe un sub de taladro y otro de patrón 3×2. Controla G90/G91 y G80/M99.
  • Implementa una cabecera “estado seguro” estándar.
  • Simula y haz dry run con rapid override bajo.

Días 31–60: productividad con patrones

  • Crea una cavidad estándar como sub y repítela en dos orígenes (G54/G55).
  • Aplica repetición L cuando no haya reposicionamientos intermedios.
  • Optimiza R de ciclos y alturas seguras para reducir aire.

Días 61–90: librería corporativa

  • Construye catálogo O5xxx y documenta un changelog.
  • Integra salida como subprogramas desde Mastercam.
  • Establece estándares de nombres, estados y pruebas.

14) Conclusión: subrutinas que escalan contigo

Dominar M98/M99 convierte programas largos y frágiles en flujos compactos, fáciles de mantener y replicables entre máquinas. La clave es la disciplina modal (G90/G91, ciclos, compensaciones), alturas seguras realistas y buenas plantillas. Empieza por un patrón y una cavidad estándar; en pocos días tendrás una librería que te hará más rápido y fiable.

Para acelerar el aprendizaje con proyectos guiados y simulación:

También te puede interesar:
Cómo optimizar tus programas CNC ·
Qué es el punto cero y cómo configurarlo

¿Quieres convertir tu código actual en una biblioteca de subrutinas estándar para tu taller? Envíame un ejemplo desde la página de contacto y te propongo una plantilla O#### optimizada.