
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
kveces 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/G49si las activaste dentro) antes delM99. - 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/G91según diseño, y cancelaG80antes deM99. - Si activas compensación de radio
G41/G42en el sub, asegúrate de tener entrada/salida tangenciales y cancelar conG40fuera 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
Lcuando 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:
- Curso de Programación CNC en Fanuc — M98/M99, G90/G91 seguros y librería O####.
- Heidenhain — LBL/CALL y ciclos TNC equivalentes.
- Mastercam — salida como subprogramas y transformaciones por WCS.
También te puede interesar:
Cómo optimizar tus programas CNC ·
Qué es el punto cero y cómo configurarlo



