Subprogramas CNC en Fanuc, Siemens y Mitsubishi: Guía de Programación
Aprenda a programar subprogramas CNC en Fanuc, Siemens y Mitsubishi. Configure parámetros, evite alarmas de anidamiento y elimine colisiones en producción.
Introducción
Una torreta que se desplaza fuera de su trayectoria y colisiona violentamente contra una mordaza de sujeción (vise jaw) o el plato del mandril (chuck) es la consecuencia inmediata de omitir la restauración del posicionamiento absoluto (G90) al finalizar un subprograma de CNC. Cuando el intérprete del control lee un comando de retorno como M99 o M17 mientras el estado modal permanece en posicionamiento incremental (G91), el programa principal reanuda su ejecución basándose en la última coordenada alcanzada en la subrutina. Si no se verifica este comportamiento antes de iniciar la producción en serie, la desviación dimensional acumulada ciclo a ciclo provocará piezas rechazadas y costosas roturas de herramientas. Para optimizar el tiempo de ciclo y evitar paradas no planificadas, los programadores deben dominar las reglas de anidamiento, la protección de parámetros de macro y los límites de búsqueda de subprogramas en Fanuc, Siemens y Mitsubishi.
Resumen Técnico
| Especificación Técnica | Detalles |
|---|---|
| Códigos de Comando | Fanuc: M98, M99, M198Siemens: L<number>, <program name>, MCALL, EXTCALL, M17, RETMitsubishi: M98, M99, M198 |
| Grupo Modal / Modalidad | Comandos de Llamada y Retorno de Subprogramas |
| Marcas Cubiertas | Fanuc, Siemens, Mitsubishi |
| Parámetros Críticos | Fanuc: 3404#2 (SBP), 6001#5/7000#0 (TCS)Siemens: P (INT), palabra clave VARMitsubishi: #8876 (dispositivo M198), #8129 (prioridad de búsqueda) |
| Restricción Principal | Límites de anidamiento: Límites de anidamiento: Máx. 4 niveles (Fanuc), Máx. 11/16 niveles (Siemens), Máx. 8/10 niveles (Mitsubishi). Las llamadas anidadas M198 en medios de almacenamiento externos están prohibidas. |
Lectura Rápida
- Acción de Restablecimiento Modal: Restablezca de manera constante el posicionamiento absoluto (G90) y cancele cualquier avance modal modificado antes de salir de un subprograma para prevenir desviaciones catastróficas en la trayectoria de la herramienta.
- Restricción del Límite de Anidamiento: Limite los niveles de anidamiento de subprogramas a 4 en Fanuc, de 8 a 10 en Mitsubishi y de 11 a 16 en Siemens para evitar desbordamientos de memoria del intérprete.
- Llamada a Almacenamiento Externo: Programe
M198(Fanuc/Mitsubishi) oEXTCALL(Siemens) para ejecutar programas de gran tamaño directamente desde tarjetas de memoria externas o servidores de datos. - Protección por Bloqueo de Parámetros: Bloquee los permisos de edición para los programas de macro de las series 8000 y 9000 en Fanuc utilizando los parámetros
PRG8(0389#2) yPRG9(0010#4) para evitar modificaciones accidentales. - Decisión de Personalización de Alias: Utilice códigos M, S, T o B personalizados para crear alias automáticos y activar subrutinas en segundo plano, como las secuencias de rotación de la torreta.
- MCALL Modal de Siemens: Aplique
MCALLen sistemas Siemens para ejecutar automáticamente un subprograma en cada posición de coordenada listada en los bloques subsiguientes hasta que sea deseleccionada.
Conceptos Básicos
El efecto práctico de programación de un subprograma es la capacidad de modularizar secuencias de mecanizado repetitivas, reduciendo significativamente los tamaños de archivo de programa y simplificando futuros cambios de ingeniería. En lugar de copiar y pegar los mismos pases geométricos de desbaste, rutinas de ranurado o secuencias de cambio de palets múltiples veces en un único programa grande, los desarrolladores guardan estas acciones como archivos independientes de nivel secundario. El programa principal simplemente llama a estas subrutinas según sea necesario y reanuda instantáneamente la trayectoria principal una vez que el subprograma termina, permitiendo archivos limpios y optimizados que consumen un mínimo de memoria.
Las marcas de control difieren en cómo localizan, llaman y ejecutan estos archivos de nivel secundario. Las plataformas heredadas requieren convenciones estrictas de nomenclatura numérica con números O, mientras que los controles modernos permiten nombres alfanuméricos descriptivos. Los subprogramas también se pueden ejecutar de tipo modal a través de diferentes coordenadas, o transmitirse dinámicamente desde interfaces de hardware externas para omitir por completo las limitaciones de la memoria interna. Debido a que un subprograma se ejecuta como una extensión activa del programa que realiza la llamada, los estados modales como los avances (feedrates) y las coordenadas de posicionamiento fluyen de manera fluida a través de los niveles, requiriendo prácticas estrictas de programación para evitar que los datos modales se filtren.
Estructura de Comandos
Para llamar a un subprograma, el intérprete de CNC debe analizar un código de comando específico junto con el identificador del programa de destino y el número de repeticiones. En entornos estándar de Fanuc y Mitsubishi, el código M98 inicia este salto, transfiriendo el control al programa designado por la dirección P. El controlador realiza un seguimiento de cada iteración del subprograma mediante un contador de iteraciones antes de ejecutar la secuencia de retorno final. Al llegar al final del subprograma, un código de retorno detiene la ejecución en la subrutina y devuelve el puntero del programa al bloque directamente posterior a la instrucción de llamada original.
Los controles Siemens admiten una estructura más flexible, lo que permite llamar a los subprogramas directamente por su nombre de programa o por una dirección L. La definición de un subprograma Siemens puede incluir un encabezado PROC, que define los tipos y nombres de parámetros para transferir valores entre niveles de programa. El salto de retorno se ejecuta mediante M17 o RET. En todas las marcas, las llamadas externas como M198 o EXTCALL permiten la transmisión desde tarjetas de memoria o unidades de red. Los parámetros y las direcciones de sintaxis rigen cómo el control busca, repite y retorna de estas rutinas.
Direcciones de Sintaxis de Comando:
- Llamada estándar de Fanuc:
M98 P_ L_ ; - Llamada externa de Fanuc:
M198 P_ ; - Retorno de Fanuc:
M99 ; - Definición de Siemens:
PROC <program name> (<ParamType> <ParamName>, VAR <ParamType> <ParamName>) [SAVE] [DISPLOF] [SBLOF] [ACTBLOCNO] - Llamada de Siemens:
<program name> (<Param1>, <Param2>)oL<number>oMCALL <program name> - Retorno de Siemens:
M17oRET - Llamada estándar de Mitsubishi:
M98 P__ H__ L__ ,D__ ;oM98 <file name> H__ L__ ,D__ ; - Llamada externa de Mitsubishi:
M198 P__ L__ ;oM198 <file name> L__ ; - Retorno de Mitsubishi:
M99 P__ ;
| Dirección de Parámetro | Marca de Control | Descripción | Ajustes Válidos |
|---|---|---|---|
P | Fanuc / Mitsubishi | Especifica el número del programa de destino a llamar | Hasta 8 dígitos |
L | Fanuc / Mitsubishi | Determina el número de veces que se repite el subprograma | 1 a 9999 (Por defecto: 1) |
H | Mitsubishi | Especifica el número de bloque de secuencia inicial dentro del subprograma | Código de secuencia (por ejemplo, H100 coincide con N100) |
,D | Mitsubishi | Dirige explícitamente la llamada a un dispositivo de almacenamiento físico específico | 0 a 4 (mapeado a través de parámetros) |
<file name> | Mitsubishi | Especifica un nombre de archivo alfanumérico dentro de corchetes angulares | Hasta 32 caracteres |
P (en llamada) | Siemens | Controla el número de veces que se repite el programa | 1 a 9999 (por ejemplo, P3) |
VAR | Siemens | Declara la transferencia de parámetros por referencia en el encabezado PROC | N/A (palabra clave) |
SAVE | Siemens | Guarda y restaura automáticamente los marcos y funciones G modales activos | N/A (atributo) |
DISPLOF | Siemens | Suprime la visualización del bloque en la HMI durante la ejecución del subprograma | N/A (atributo) |
SBLOF | Siemens | Desactiva el paso del modo de bloque único durante la ejecución | N/A (atributo) |
Aplicaciones de Marca
Integración de CNC Fanuc
Los controles Fanuc admiten alias basados en parámetros para activar subprogramas. El sistema puede ejecutar subrutinas en segundo plano utilizando el parámetro 6001#5 (TCS) para asignar llamadas de herramienta al programa O9000.
Los subprogramas estándar se llaman a través de M98, los archivos de tarjetas de almacenamiento externo a través de M198, y se retorna mediante el comando M99.
| Parámetro / Alarma / Versión | Tipo | Descripción | Ajustes / Detalles |
|---|---|---|---|
Parámetro 0010#4 (PRG9) | Parámetro | Determina si la edición de los subprogramas O9000 a O9999 está prohibida. | 0 (no prohibida), 1 (prohibida) |
Parámetro 0389#2 (PRG8) | Parámetro | Determina si la edición de los subprogramas O8000 a O8999 está prohibida. | 0 (no prohibida), 1 (prohibida) |
Parámetro 3404#2 (SBP) | Parámetro | Dicta si la dirección P en M198 especifica un número de archivo o un número de programa. | 0 (número de archivo), 1 (número de programa) |
Parámetro 3457 | Parámetro | Configuraciones de la jerarquía de carpetas de búsqueda (por ejemplo, carpetas de usuario, carpetas MTB, carpetas del sistema). | Valores de bits |
Parámetros 6071 a 6079 | Parámetro | Asigna códigos M específicos para llamar automáticamente a los subprogramas O9001 a O9009. | 3 a 99999999 (excluyendo códigos M reservados) |
Alarma 0076 | Alarma | PROGRAM NOT FOUND: El programa llamado no se puede encontrar en la memoria o en las carpetas de búsqueda. | Verifique el parámetro 3457 y confirme el registro del número O. |
Alarma 0077 | Alarma | TOO MANY SUB, MACRO NESTING: El nivel de anidamiento excede el límite. | Máx. 4 subprogramas anidados (8 incluyendo llamadas a macros). |
Alarma 1080 | Alarma | DUPLICATE DEVICE SUB PROGRAM CALL: Llamada anidada M198. | Evite llamar a M198 desde el interior de un subprograma M198 activo. |
Alarma 1091 | Alarma | DUPLICATE SUB-CALL WORD: Múltiples llamadas en el mismo bloque. | Especifique las llamadas a subprogramas en bloques separados. |
Parámetro 0001#1 (FCV) | Versión | Modo de compatibilidad heredado para formatos de cinta FS0-TC/FS15-TA. | 0 (formato estándar), 1 (revierte al formato de la Serie 15, fusionando la repetición y la dirección P) |
Advertencia: No restablecer los correctores de coordenadas o el posicionamiento modal (G91) antes de un comando de retorno M99 provoca una desviación del sistema de coordenadas, lo que puede dirigir la torreta hacia la mordaza de la prensa.
Integración de Siemens SINUMERIK
Siemens admite definiciones de subprogramas de alto nivel con alcance de variables locales. Las llamadas estándar utilizan el nombre del programa o un número L, pasando parámetros directamente a través del encabezado PROC.
Las llamadas a subprogramas modales se inician a través de MCALL, ejecutando el subprograma después de cada bloque de coordenadas hasta que se deselecciona. Los retornos utilizan M17 o RET.
| Parámetro / Alarma / Versión | Tipo | Descripción | Ajustes / Detalles |
|---|---|---|---|
P (INT) | Parámetro | Dirección para programar el número de repeticiones del subprograma. | 1 a 9999 |
VAR | Parámetro | Declara parámetros de llamada por referencia en el encabezado PROC. | N/A (palabra clave) |
SAVE | Atributo | Guarda y restaura automáticamente las funciones G modales y los marcos activos. | N/A |
DISPLOF / SBLOF | Atributo | Suprime la visualización de bloques en la HMI / desactiva el modo de bloque único. | N/A |
Alarma 14011 | Alarma | program not existing or will be edited. El archivo llamado no existe o está abierto en la HMI. | Cierre el archivo en la HMI; verifique la ruta _N_SPF_DIR. |
Alarma 14012 | Alarma | maximum subroutine level exceeded. Profundidad máxima de anidamiento superada. | Verifique los niveles de anidamiento. |
Alarma 12720 | Alarma | program number for macro call (G65/G66) missing en modo ISO. | Especifique el número de programa de destino utilizando la dirección P. |
SINUMERIK 808D vs 828D/840D sl | Versión | Diferencias de nivel de hardware para los niveles de anidamiento de subprogramas. | 808D: 11 niveles · 828D/840D sl: 16 niveles (18 con ASUB) |
Software Version 5+ | Versión | Enclavamiento de seguridad que impide la ejecución de programas abiertos para edición. | Los programas abiertos en la HMI no se pueden iniciar con NC Start. |
Advertencia: Omitir el atributo SAVE de la línea PROC permite que las configuraciones modales de código G (como G91) se filtren de regreso al programa principal, provocando colisiones inmediatas de los ejes.
Integración de CNC Mitsubishi
Mitsubishi permite llamadas a subprogramas alfanuméricos directamente en el bloque de código G. La prioridad de búsqueda se configura utilizando el parámetro #8129 para determinar el formato del número O.
Los subprogramas se invocan utilizando M98 con corchetes angulares (por ejemplo, <PART.PRG>), y se dirigen a medios externos utilizando M198 o la dirección ,D.
| Parámetro / Alarma / Versión | Tipo | Descripción | Ajustes / Detalles |
|---|---|---|---|
#8876 (M198 pro stor: dev) | Parámetro | Selecciona el dispositivo de almacenamiento de destino para los subprogramas llamados a través de M198. | G (disco duro), R (tarjeta de memoria), D (servidor de datos), N (memoria USB) |
#8880 a #8888 | Parámetro | Establece dispositivos de hardware específicos asignados a la dirección ,D (0 a 4). | M (memoria), G (disco duro), R (tarjeta de memoria), D (servidor de datos), T (Ethernet), F (FLD) |
#8129 (Subpro No. select) | Parámetro | Determina la priorización para la búsqueda de números de subprograma. | 0 (número comandado), 1 (número O de 4 dígitos), 2 (número O de 8 dígitos) |
Program Error (P230) | Alarma | Subprogram nesting over: Se superó la profundidad máxima de anidamiento. | Verifique los límites de anidamiento y las configuraciones del servidor de datos. |
Program Error (P231) | Alarma | No sequence No.: Falta el bloque de secuencia de retorno o el destino del salto. | Confirme que el número de secuencia coincida con el destino en M99 P. |
Program Error (P232) | Alarma | No program No.: Falta el archivo de destino o la unidad externa está desmontada. | Verifique el estado de montaje de la unidad y la longitud del nombre del archivo (máx. 32 caracteres). |
M70V/M700V frente a M800V/M80V | Versión | Límites de la serie CNC para los niveles de anidamiento de subprogramas. | M70V/M700V: 8 niveles · M800V/M80V: 10 niveles |
M800VW/M80VW frente a M800VS/M80V | Versión | Dispositivo de búsqueda predeterminado para M198 cuando el parámetro #8876 no está configurado. | VW/Type-W: Servidor de Datos · VS/Type-S: tarjeta SD frontal |
Advertencia: La ejecución simultánea de un subprograma M198 desde una tarjeta SD en múltiples sistemas de piezas está bloqueada, provocando paradas inmediatas de la ejecución.
Comparación de Marcas
| Tema | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| Archivos Alfanuméricos | Sin soporte nativo; requiere estrictamente números O. | Soportado nativamente utilizando cadenas de nombres de programas. | Soportado nativamente utilizando corchetes angulares (por ejemplo, <PART-FILE.PRG>). |
| Llamada Modal Repetitiva | Ejecución bloque a bloque o llamada a macro modal G66. | Ejecución modal del subprograma a través de MCALL <prog>. | Ejecución bloque a bloque. |
| Profundidad de Anidamiento | Máx. 4 niveles anidados (8 incluyendo macros). | Máx. 11 (808D), 16 (828D/840D sl), hasta 18 con ASUB. | Máx. 8 (M70V/M700V), 10 (M800V/M80V). |
| Llamada a Medios de Almacenamiento | M198 P_ transmite desde la tarjeta/servidor de datos. | EXTCALL llama a subprogramas externos. | M198 llama desde el dispositivo configurado por #8876 o el parámetro de dirección ,D explícito. |
| Paso de Parámetros | Requiere llamadas a macros personalizadas (G65/G66). | Soportado directamente a través de la definición PROC ("llamada por valor" y "llamada por referencia" a través de VAR). | Requiere llamada a macro o variables. |
Análisis Técnico
Una revisión analítica de estas tres arquitecturas de CNC revela diferentes enfoques para la ejecución de subprogramas, el alcance de la memoria y la transferencia de parámetros. Siemens modela su ejecución en lenguajes de programación de PC de alto nivel, lo que permite a los programadores definir alcances locales y mecanismos de paso de parámetros directamente en el encabezado del subprograma. Al utilizar la palabra clave VAR en la línea PROC, Siemens habilita la ejecución por referencia, permitiendo que los subprogramas modifiquen y devuelvan cálculos al programa principal. Fanuc y Mitsubishi utilizan arquitecturas de registro heredadas, lo que requiere opciones de macro como G65 o G66 para transferir valores, o fuerza a los programadores a confiar en variables comunes o globales volátiles, lo que introduce el riesgo de corrupción de datos modales.
Las jerarquías de anidamiento también reflejan distintas filosofías de hardware. El límite de anidamiento de 4 niveles de Fanuc requiere que los programadores mantengan árboles de llamadas simplificados y poco profundos. Siemens proporciona hasta 16 a 18 niveles de anidamiento, pero debido a que estos niveles se comparten dinámicamente entre los subprogramas del usuario, los ciclos fijos estándar y las rutinas en segundo plano del fabricante original (OEM) (como las limitaciones de velocidad del husillo o las macros de control de la torreta), este presupuesto se puede agotar rápidamente. Mitsubishi ocupa un punto medio, offering 8 niveles en las series heredadas M70V y 10 niveles en los controles M80V más nuevos. Exceder estos límites en cualquier control detiene inmediatamente la ejecución, lo que demuestra la necesidad de realizar un seguimiento de las profundidades de llamada en todos los sistemas activos.
El enrutamiento de directorios y los controles de seguridad diferencian a estas plataformas. Fanuc utiliza el parámetro 3457 para buscar en una jerarquía de carpetas rígida y automatizada, mientras que Mitsubishi permite el enrutamiento físico directo a través de la dirección ,D o nombres de archivos con corchetes angulares como <PART.PRG>. Siemens aísla las llamadas a subprogramas al directorio local de la pieza de trabajo a menos que se declare una declaración EXTERN. Siemens impone un bloqueo de seguridad de edición en la HMI (versión 5 y superior) que impide el NC Start si el archivo llamado está abierto en la pantalla, una característica que no está presente de forma nativa en los sistemas Fanuc o Mitsubishi.
Ejemplos de Programas
Ejemplo de Llamada a Subprograma de Fanuc
; Ejemplo de Llamada a Subprograma de Fanuc O0001 (PROGRAMA PRINCIPAL) ; G90 G54 G00 X0 Y0 Z10.0 ; Pre-posicionar los ejes M98 P1000 L5 ; Llamar al subprograma O1000 cinco veces G00 Z50.0 M30 ; Retraer y finalizar el programa principal
O1000 (SUBPROGRAMA) ; G91 G01 Z-2.0 F150 ; Cambiar a incremental y avance de Z G90 G01 X50.0 F300 ; Cambiar a absoluto y mecanizar hasta X50.0 G91 G01 Z2.0 ; Retracción incremental de Z G90 G01 X0 ; Retorno absoluto a X0 M99 ; Retorno al programa principal
ejecución en seco (dry run)
Al probar el código Fanuc en una ejecución en seco, la máquina se mueve primero a las coordenadas X0, Y0 y Z10.0 en modo absoluto. Cuando el intérprete llega al bloque M98 P1000 L5, suspende el programa principal y salta al subprograma O1000. En O1000, el controlador cambia al modo incremental (G91) para avanzar Z hacia abajo 2.0 mm, luego revierte al modo absoluto (G90) para ejecutar el avance del eje X hasta 50.0 mm. Realiza una retracción incremental, regresa a X0 en modo absoluto y luego lee M99. El controlador repite este bucle cinco veces antes de regresar al programa principal, donde retrae Z a 50.0 mm y termina a través de M30.
Ejemplo de Llamada a Subprograma de Siemens
; Ejemplo de Llamada a Subprograma de Siemens
N10 G90 G54 G00 X0 Y0 Z10.0 ; Pre-posicionar los ejes
N20 MCALL POCKET_CYCLE(3.0, 150.0) ; Llamar de forma modal al subprograma POCKET_CYCLE
N30 X50.0 Y50.0 ; Ejecutar subprograma en la coordenada 1
N40 X100.0 Y50.0 ; Ejecutar subprograma en la coordenada 2
N50 MCALL ; Deseleccionar la llamada modal al subprograma
N60 G00 Z50.0 M30 ; Retraer Z y finalizar el programa principal
Nota: A continuación se muestra el subprograma POCKET_CYCLE.SPF guardado en el directorio de la pieza de trabajo:
PROC POCKET_CYCLE(REAL DEPTH, REAL FEED) SAVE DISPLOF ;
G91 G01 Z=-DEPTH F=FEED ; Penetración incremental
G90 G01 G41 X0 Y0 ; Activar la compensación de radio de la herramienta
G03 X0 Y0 CR=25.0 ; Mecanizar cajera circular
G40 G01 X0 Y0 ; Cancelar la compensación
G91 G01 Z=DEPTH ; Retracción incremental
M17 ; Retorno al programa principal
ejecución en seco
Al probar el programa Siemens en una ejecución en seco, se muestra que la máquina se desplaza primero a X0, Y0 y Z10.0. El comando MCALL en el bloque N20 registra la rutina POCKET_CYCLE de forma modal en la memoria de control numérico. La máquina no ejecuta el subprograma en N20, pero al leer el bloque N30 (X50.0 Y50.0), se desplaza a la coordenada, se detiene y llama a la subrutina. La subrutina se ejecuta con el atributo SAVE activo, almacenando automáticamente los ajustes modales del programa que realiza la llamada. Cambia al modo incremental para avanzar Z hacia abajo 3.0 mm, fresar un círculo, se retrae y lee M17. El controlador restaura automáticamente los ajustes modales originales y continúa. Repite esta secuencia en N40 (X100.0 Y50.0), antes de que el bloque N50 borre el estado modal.
Ejemplo de Llamada a Subprograma de Mitsubishi
; Ejemplo de Llamada a Subprograma de Mitsubishi
O0002 (PROGRAMA PRINCIPAL) ;
G90 G54 G00 X0 Y0 Z10.0 ; Pre-posicionar los ejes
M98 <POCKET-ROUT.PRG> H200 L3 ,D1 ; Llamar al archivo POCKET-ROUT.PRG desde el dispositivo 1 comenzando en el bloque N200
G00 Z50.0 M30 ; Retraer y finalizar el programa principal
Nota: A continuación se muestra el subprograma POCKET-ROUT.PRG almacenado en la tarjeta CF (Dispositivo 1):
O2000 (SUBPROGRAMA) ;
N100 G01 Z-5.0 F100 ; Este bloque se omite debido a la dirección de inicio H200
N200 G91 G01 Z-2.0 F120 ; La ejecución comienza aquí; avance incremental
N300 G90 G01 X30.0 Y30.0 F250 ; Mecanizar perfil absoluto
N400 G91 G01 Z2.0 ; Retracción incremental
N500 G90 G01 X0 Y0 ; Retorno absoluto
M99 ; Retorno al programa principal
ejecución en seco
Durante una ejecución en seco, el controlador Mitsubishi pre-posiciona la herramienta en X0, Y0 y Z10.0. Al ejecutar el comando M98, el CNC comprueba el dispositivo 1 (tarjeta CF), localiza el archivo <POCKET-ROUT.PRG> y busca el bloque de secuencia N200. El intérprete omite el bloque N100 por completo, comenzando el movimiento incremental del eje Z en N200. Después de ejecutar los cortes de perfil, la herramienta regresa a X0, Y0 en modo absoluto. Al leer M99, el controlador regresa al programa principal, repitiendo este proceso tres veces antes de finalizar con M30.
Análisis de Errores
| Marca | Código de Alarma | Condición de Activación | Síntoma para el Operador | Causa Raíz / Solución |
|---|---|---|---|---|
| Fanuc | Alarm 0076 | Falta el número de programa llamado en la memoria o en las carpetas de búsqueda. | La máquina se detiene instantáneamente, mostrando un mensaje de error PROGRAM NOT FOUND. | Verifique las configuraciones de la ruta de la carpeta del parámetro 3457 y confirme que el archivo del número O existe en la memoria local. |
| Fanuc | Alarm 0077 | La profundidad de anidamiento excede el límite máximo permitido. | El CNC se detiene a mitad de ciclo, presentando un error TOO MANY SUB, MACRO NESTING. | Simplifique la lógica del programa. Confirme que los niveles de llamada no excedan los 4 niveles (8 incluyendo llamadas a macros). |
| Fanuc | Alarm 1080 | Llamada a dispositivo externo M198 anidada ejecutada dentro de un subprograma M198 activo. | La ejecución se congela y muestra un error DUPLICATE DEVICE SUB PROGRAM CALL. | Evite anidar bloques M198. Copie las rutinas secundarias en la SRAM local. |
| Fanuc | Alarm 1091 | Múltiples comandos de llamada a subprogramas programados en el mismo bloque. | El intérprete se detiene y emite un error DUPLICATE SUB-CALL WORD. | Aísle cada comando de llamada a subprograma en su propio bloque. |
| Siemens | Alarm 14011 | Falta la subrutina llamada, no ha sido liberada o está abierta para edición. | El controlador detiene la ejecución, mostrando un mensaje 'program not existing or will be edited'. | Cierre el archivo en la HMI para liberar el bloqueo de edición. Verifique la ruta en _N_SPF_DIR. |
| Siemens | Alarm 14012 | Se excede el límite de profundidad de anidamiento. | El sistema se detiene con un mensaje de 'maximum subroutine level exceeded', desactivando el NC Start. | Revise el árbol de llamadas. Reduzca los ciclos anidados o las macros OEM como Turret3_CODE_T. |
| Siemens | Alarm 12720 | Llamada a macro en modo ISO ejecutada sin definir el número de programa a través de P. | El control rechaza el comando, mostrando un error de 'program number for macro call missing'. | Especifique el número de programa de destino utilizando la dirección P. |
| Mitsubishi | Error P230 | El nivel de anidamiento excede la capacidad, o se ejecutaron llamadas anidadas M198 al servidor de datos. | El control se detiene y muestra un error 'Subprogram nesting over'. | Revise los niveles de anidamiento. Limite las llamadas a 8 (M70V/M700V) o 10 (M800V/M80V). |
| Mitsubishi | Error P231 | Falta el bloque de retorno especificado (M99 P) o el destino del salto. | El intérprete falla, mostrando un error 'No sequence No.'. | Asegúrese de que el número de secuencia programado después de P exista en el programa de destino. |
| Mitsubishi | Error P232 | Falta el archivo llamado, la unidad está desmontada o el nombre supera los 32 caracteres. | La ejecución se detiene, mostrando un error 'No program No.'. | Monte los medios externos de forma segura, verifique los nombres de los archivos y mantenga los recuentos de caracteres por debajo de 32. |
Nota de Aplicación
Una parada crítica de la producción o una colisión por desbordamiento de memoria ocurre cuando el programador excede los límites físicos de anidamiento del control o no protege sus macros de sistema contra modificaciones accidentales. En entornos Siemens, omitir el atributo SAVE en la línea del encabezado PROC permite que el estado modal incremental (G91) se filtre de regreso al programa principal, lo que provoca que la herramienta mecanice fuera de coordenadas y destruya la pieza de trabajo. Asimismo, la automatización de funciones complejas del torno mediante subrutinas de fabricante —como el control de una mordaza con Lock_unlock_T o la gestión de una torreta doble mediante la macro OEM Turret3_CODE_T— consume rápidamente los niveles de anidamiento del control. Si el anidamiento total supera los 11 niveles en un control 808D o los 16 niveles en un 828D/840D sl, el sistema activa inmediatamente la alarma 14012, interrumpiendo el ciclo de mecanizado. En sistemas Fanuc, un error de ejecución similar ocurre al intentar realizar llamadas M198 anidadas desde un dispositivo externo, lo que dispara la alarma 1080. Para evitar paradas de producción no planificadas, los operadores deben bloquear los permisos de edición de los subprogramas críticos de las series 8000 y 9000 activando los parámetros 0389#2 (PRG8) y 0010#4 (PRG9). En controles Mitsubishi, la falta de contacto físico en la tarjeta SD o en el puerto USB durante una llamada externa mediante M198 o el direccionamiento ,D provoca la alarma de error de programa P232, deteniendo la máquina en seco al no encontrar el archivo de subprograma especificado.
Red de Comandos Relacionados
G65Llamada a Macro Simple: Inicia una llamada única y no modal a un subprograma mientras permite el paso directo de variables locales a registros de macro.G66Llamada a Macro Modal: Instruye al intérprete de CNC para que ejecute automáticamente un subprograma de macro designado después de cada bloque de movimiento subsiguiente hasta que se cancele.- Suavizado Basado en Tolerancia G645: Regula las tolerancias de suavizado de contorno durante el mecanizado a alta velocidad, lo que debe coordinarse cuidadosamente con los avances de los subprogramas para evitar errores cordales.
- Control de Superficie Inclinada G68.2: Establece coordenadas de plano de trabajo inclinado para el mecanizado multieje, requiriendo un mapeo de coordenadas correcto antes de ejecutar bucles de subprograma.
- Control de Alta Velocidad Mitsubishi G05 P20000: Activa el almacenamiento en búfer de trayectoria de lectura previa avanzada para el procesamiento de microsegmentos, el cual debe programarse en un bloque independiente separado de las llamadas a subprogramas para evitar conflictos de comandos.
Conclusión
La adopción de una lista de verificación estricta para la estructura de subprogramas y la gestión de variables modales constituye la práctica más eficaz para garantizar un mecanizado de alta precisión sin colisiones. Antes de lanzar la producción a gran escala, los programadores de CNC deben definir comandos explícitos de restauración de coordenadas absolutas (G90) y de cancelación de compensaciones de herramienta (G40, G49) inmediatamente antes del bloque de retorno (M99 o M17). Implementar esta medida, junto con el bloqueo preventivo de las macros críticas y la verificación previa de las conexiones físicas de almacenamiento externo, reduce a cero las paradas no planificadas del husillo y maximiza la vida útil del herramental en el taller.
Preguntas Frecuentes (FAQ)
¿Cómo evitar la desviación de coordenadas en el programa principal después de ejecutar un subprograma de CNC?
La desviación espacial de la trayectoria ocurre cuando los comandos modales como el posicionamiento incremental (G91) o los desplazamientos de origen se activan en la subrutina y no se cancelan antes de regresar al programa principal. El control reanuda el recorrido asumiendo que el estado modal de la subrutina sigue vigente, lo que genera piezas rechazadas por errores dimensionales o colisiones catastróficas contra las bridas. Acción práctica: Programe siempre un bloque de restablecimiento modal con G90 y G40 inmediatamente antes del código de retorno M99 o M17 para restaurar de forma segura el sistema de coordenadas absolutas.
¿Por qué el control Fanuc muestra la alarma 0077 (TOO MANY SUB, MACRO NESTING) y cómo corregirla?
Esta alarma se genera cuando la profundidad de las llamadas anidadas supera el límite físico del procesador del CNC, el cual está restringido a un máximo de 4 niveles para subprogramas estándar (y 8 si se incluyen llamadas macro G65/G66). Al exceder este presupuesto, la pila de memoria del intérprete se satura y detiene el husillo a mitad de ciclo, dañando el acabado superficial. Acción práctica: Analice el árbol de llamadas del programa principal y reestructure el flujo de código para reutilizar variables globales o simplificar la jerarquía de llamadas para que no supere los 4 niveles.
¿Qué causa la alarma P232 (No program No.) en controles Mitsubishi al llamar subprogramas externos?
El error P232 se activa cuando el control de Mitsubishi no logra localizar el subprograma en el medio de almacenamiento designado, ya sea porque el nombre de archivo en los corchetes angulares supera los 32 caracteres, la tarjeta SD/CF tiene mala conexión física, o el parámetro #8876 no está configurado hacia el canal correcto. Esto provoca que el lector de tarjetas se salte la búsqueda y aborte el programa, incrementando el tiempo de inactividad del taller. Acción práctica: Asegure el contacto limpio de la tarjeta de memoria en la ranura, verifique que el nombre de archivo sea inferior a 32 caracteres y configure el parámetro #8876 según el dispositivo físico correspondiente (como R para tarjeta de memoria).
¿Aún no se ha resuelto?
Pregunta a nuestro asistente de IA sobre este tema en lenguaje natural. Basado en fuentes verificadas, sin alucinaciones.

- CNC CARE Co-Founder (May 2025 - Present)
- Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
- Reis CNC Service Engineer (2003 - 2005)
- Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)
Con más de 25 años de experiencia trabajando en todas las áreas de la industria de máquinas CNC, continúo mis actividades como cofundador de CNC CARE, donde ofrecemos servicios de consultoría, ingeniería y repuestos originales independientes de la marca.
Artículos relacionados
Otros artículos sobre este tema
Habilitación del Control de Interferencias 3D en Fanuc: Parámetros y Alarma
Guía para configurar el control de interferencias 3D en CNC Fanuc. Aprenda a programar los parámetros 10930, evitar la alarma PS0492 y prevenir colisiones graves.
Configuración de Parámetros de Habilitación de Custom Macro en Fanuc
Aprenda a habilitar los parámetros de custom macro 0932 y 8135 en Fanuc. Prevenga alarmas de colisión y optimice el ciclo frente a Siemens y Mitsubishi.
Parámetros de Gestión de Vida Útil de Herramientas Fanuc G10 L3
Aprenda a configurar la gestión de vida útil de herramientas en CNC Fanuc, Siemens y Mitsubishi. Ajuste parámetros como 6800 y evite alarmas por desgaste.
Guía de Parámetros de Aceleración de Roscado Rígido en Fanuc
Aprenda a configurar la aceleración dinámica de roscado en controles Fanuc, Siemens y Mitsubishi. Optimice parámetros y resuelva alarmas como SP0741.