Guía de Subprogramas Anidados en CNC: Fanuc, Siemens y Mitsubishi
Aprenda a configurar subprogramas anidados en Fanuc, Siemens y Mitsubishi. Evite las alarmas 0077 y P230, prevenga colisiones y reduzca el tiempo de ciclo.
Introducción
Una colisión catastrófica del turret contra una mordaza (vise jaw), el chuck o una brida de sujeción (clamp) ocurre instantáneamente si el operador no restablece el estado de posicionamiento absoluto (G90) tras la ejecución de subprogramas anidados en modo incremental (G91). Si no se verifica este parámetro antes de producción, la desviación dimensional se acumula ciclo a ciclo y solo se detecta en la inspección final como pieza rechazada, deteniendo la línea de ensamblaje por completo. Cuando un subprograma de segundo o tercer nivel modifica las coordenadas locales o desactiva la compensación de herramienta y finaliza con un comando de retorno (M99 o M17) sin restaurar las condiciones previas, el programa maestro continúa ejecutándose desde un origen desplazado. Esto se traduce en un costoso tiempo de inactividad por mantenimiento correctivo del spindle y en piezas rechazadas que arruinan la rentabilidad de la serie. Optimizar el tiempo de ciclo en procesos automatizados exige configurar de forma precisa la jerarquía de búsqueda, respetar los límites físicos de anidamiento de cada controlador y bloquear los parámetros críticos de edición en sistemas Fanuc, Siemens y Mitsubishi.
Resumen Técnico
| Especificación Técnica | Detalles |
|---|---|
| Códigos de Comando | Fanuc: M98, M198, M99Siemens: Nombre Alfanumérico, PROC, M17, RETMitsubishi: M98, M198, M99 |
| Grupo Modal / Modalidad | Control de Llamada y Retorno de Subprograma / Modal-Code |
| Marcas Cubiertas | Fanuc, Siemens, Mitsubishi |
| Parámetros Críticos | Fanuc: 3457 (Ruta de búsqueda), 0010#4 (PRG9)Siemens: atributo SAVE, palabra clave VARMitsubishi: #8876 (dispositivo M198), #8129 (prioridad de búsqueda) |
| Restricción Principal | Profundidad de anidamiento: Máx 4 niveles (Fanuc), Máx 8/16 niveles (Siemens), Máx 8/10 niveles (Mitsubishi). Sin llamadas externas anidadas de M198/EXTCALL. |
Lectura Rápida
- Restauración de Estado Modal: Restaure explícitamente las coordenadas absolutas (G90) y cancele las compensaciones inmediatamente antes del bloque de retorno del subprograma para evitar el arrastre de coordenadas.
- Límites de Anidamiento: Mantenga las llamadas anidadas dentro de los límites estrictos de profundidad definidos por hardware: 4 niveles para Fanuc, 8 a 16 para Siemens y 8 a 10 para Mitsubishi.
- Bloqueo de Parámetros de Subprograma: Bloquee los permisos de edición para las series de macro O8000 y O9000 en Fanuc estableciendo los parámetros 0389#2 (PRG8) y 0010#4 (PRG9) en 1.
- Llamadas a Medios Externos: Ejecute archivos más grandes directamente desde tarjetas de memoria o servidores de datos usando M198 (Fanuc/Mitsubishi) o EXTCALL (Siemens) para omitir las limitaciones de memoria interna.
- Enrutamiento de Almacenamiento Directo: Enrute los subprogramas de Mitsubishi a medios de almacenamiento físico específicos en el bloque de llamada usando la dirección local
,D(0 a 4). - Guardado Modal Automático: Declare el atributo
SAVEen los encabezadosPROCde Siemens para guardar y restaurar automáticamente los sistemas de coordenadas (frames) y los códigos G modales.
Conceptos Básicos
El efecto práctico de programación de los subprogramas anidados es la capacidad de comprimir al máximo trayectorias de herramienta complejas y repetitivas apilando subrutinas unas dentro de otras, lo que reduce drásticamente el consumo de memoria y simplifica las ediciones para características como patrones de rejilla de agujeros o pasadas de desbaste. En lugar de repetir bloques geométricos idénticos en el programa principal, los desarrolladores pueden escribir estas rutinas una vez como archivos independientes y llamarlas secuencialmente. Esta estructura modular mantiene el tamaño de los programas pequeño y permite a los programadores actualizar secciones de mecanizado específicas sin editar todo el archivo maestro. Si es nuevo en el uso de subprogramas, consulte nuestra guía sobre escritura y llamada de subprogramas para comprender los conceptos básicos.
Las marcas de control difieren en cómo localizan, llaman y ejecutan estos archivos de subnivel. 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 manera modal a través de diferentes coordenadas, o transmitirse dinámicamente desde interfaces de hardware externas para omitir por completo las limitaciones de memoria interna. Debido a que un subprograma se ejecuta como una extensión activa del programa que lo llama, los estados modal como los feedrates y las coordenadas de posicionamiento fluyen de manera fluida entre niveles, lo que requiere prácticas de programación estrictas para evitar el arrastre de coordenadas. Para técnicas de cycle relacionadas, puede consultar el g83-deep-hole-peck-drilling-cycle y el g84-g74-rigid-tapping.
Estructura de Comandos
La sintaxis y estructura de una llamada de subprograma anidado requieren que el intérprete del control analice el nombre o número del programa de destino, el bloque de inicio y el conteo de repeticiones. En entornos tradicionales, el comando M98 inicia un salto, redirigiendo la ejecución al subprograma almacenado en la memoria del CNC. Una vez que el intérprete lee el subprograma, ejecuta los bloques de forma secuencial. Al llegar al final del subprograma, un bloque de retorno redirige el puntero de ejecución de vuelta al programa que lo llamó. Si se especifican repeticiones, el intérprete realiza un bucle a través de la subrutina el número de veces ordenado antes de reanudar la secuencia del programa principal.
Los controles Siemens implementan un sistema de nomenclatura alfanumérico altamente avanzado en el que los subprogramas se llaman directamente por sus nombres de archivo. En lugar de depender de números O rígidos, las subrutinas de Siemens pueden aceptar parámetros pasados por valor o referencia, los cuales se declaran en un encabezado PROC. El retorno de una subrutina de Siemens se termina usando M17 o RET. Por el contrario, Fanuc y Mitsubishi utilizan arquitecturas de registro heredadas, lo que requiere opciones de macro para transferir valores, o fuerza a los programadores a depender de variables comunes o globales volátiles. Los parámetros y las direcciones de sintaxis gobiernan cómo el control busca, repite y retorna de estas rutinas.
Direcciones de Sintaxis de Comandos:
- Llamada Estándar de Fanuc:
M98 P_ L_ ; - Llamada Externa de Fanuc:
M198 P_ ; - Retorno de Fanuc:
M99 ; - Definición de Siemens:
PROC <nombre de programa> (<TipoParam> <NombreParam>, VAR <TipoParam> <NombreParam>) [SAVE] - Llamada de Siemens:
<nombre de programa> (<Param1>, <Param2>)oMCALL <nombre de programa> - Retorno de Siemens:
M17oRET - Llamada Estándar de Mitsubishi:
M98 P__ H__ L__ ,D__ ;oM98 <nombre de archivo> H__ L__ ,D__ ; - Llamada Externa de Mitsubishi:
M198 P__ L__ ;oM198 <nombre de archivo> L__ ; - Retorno de Mitsubishi:
M99 P__ ;
| Parámetro / Dirección | Marca de Control | Descripción | Rango de Valores / Ajustes |
|---|---|---|---|
P | Fanuc / Mitsubishi | Identificador de número de programa del subprograma a llamar. | Hasta 8 dígitos |
L | Fanuc / Mitsubishi | Número de ejecuciones repetitivas para la subrutina. | 1 a 9999 |
H | Mitsubishi | Número de secuencia inicial (número N) dentro del subprograma llamado. | Número N válido |
,D | Mitsubishi | Enrutamiento explícito del número de dispositivo para buscar archivos. | 0 a 4 |
<file name> | Mitsubishi | Llamada directa por nombre alfanumérico del archivo de subprograma. | Hasta 32 caracteres |
PROC parameter types | Siemens | Tipos de datos aceptados por la subrutina (por ejemplo, REAL, INT, CHAR, BOOL). | Tipos de variables estándar |
VAR | Siemens | Palabra clave para declarar que un parámetro se pasa por referencia. | Palabra clave |
SAVE | Siemens | Atributo para guardar y restaurar los ajustes modal activos y frames. | Bandera de atributo |
Aplicaciones de Marca
Integración de CNC Fanuc
El entorno de subprogramas anidados de Fanuc utiliza mecanismos basados en parámetros para gestionar el acceso y la seguridad. En este sistema, el parámetro 0010#4 (PRG9) restringe el acceso a los programas de macro de la serie 9000, mientras que el parámetro 0389#2 (PRG8) realiza la misma función para los programas de la serie 8000.
Para invocar una subrutina anidada estándar, los programadores programan un bloque M98 especificando el número de programa y los bucles, como: M98 P1000 L5 ;. Las rutinas externas se transmiten usando: M198 P50 ;, mientras que los subprogramas terminan con: M99 ;.
| Tipo | Nombre / Código | Descripción y Ajustes |
|---|---|---|
| Parámetro | 0010#4 (PRG9) | Prohíbe la edición de subprogramas 09000 a 09999 cuando se establece en 1 (no prohibido cuando es 0). |
| Parámetro | 0389#2 (PRG8) | Prohíbe la edición de subprogramas 08000 a 08999 cuando se establece en 1 (no prohibido cuando es 0). |
| Parámetro | 3404#2 (SBP) | Especifica si la dirección P en M198 se refiere al número de archivo (0) o al número de programa (1). |
| Parámetro | 6005#0 (SQC) | Determina si la llamada al número de secuencia del subprograma no se utiliza (0) o se utiliza (1). |
| Parámetro | 3457 | Configura la ruta de búsqueda de la jerarquía de carpetas (carpetas LIB, MC1/MC2, SYS) para localizar archivos. |
| Alarma | 0077 | TOO MANY SUB, MACRO NESTING: Profundidad de anidamiento excedida o llamada M198 anidada. |
| Alarma | 1080 | DUPLICATE DEVICE SUB PROGRAM CALL: Llamada M198 anidada dentro de un programa M198 activo. |
| Alarma | 1091 | DUPLICATE SUB-CALL WORD: Se encontraron múltiples palabras de llamada en el mismo bloque. |
| Alarma | 0076 | PROGRAM NOT FOUND: El número de subprograma llamado no se encontró en la memoria o en las rutas de carpetas. |
| Versión | 0001#1 (FCV) | Compatibilidad con cintas heredadas. Establecer en 1 analiza el código P para fusionar la repetición y el número de programa. |
Advertencia: Omitir cambiar del posicionamiento incremental de vuelta al posicionamiento absoluto antes del comando M99 provocará una desviación del decalaje de coordenadas, lo que provocará colisiones graves.
Integración de Siemens SINUMERIK
Los sistemas Siemens SINUMERIK no utilizan números O numéricos, sino que invocan las subrutinas directamente por sus nombres alfanuméricos. Los parámetros del programa se pueden pasar a estas subrutinas usando el comando PROC en la declaración de la subrutina.
Para llamar a un subprograma por su nombre, use: SUB_NAME(parámetros). El bloque de retorno se escribe como: M17 o RET, permitiendo RET saltos de múltiples niveles como: RET("N200", 2) ;.
| Tipo | Nombre / Código | Descripción y Ajustes |
|---|---|---|
| Parámetro | PROC Param Types | Tipos de datos de parámetros formales aceptados por el subprograma (por ejemplo, REAL, INT, CHAR, BOOL). |
| Parámetro | VAR | Palabra clave para declarar que los parámetros formales se pasan por referencia en lugar de por valor. |
| Parámetro | SAVE | Atributo que guarda y restaura automáticamente los G-codes modales y los frames de coordenadas al retornar. |
| Alarma | 14012 | Maximum subroutine level exceeded: Se ha excedido la profundidad de anidamiento (8 niveles para 808D, 16 niveles para 840D/828D). |
| Alarma | 14011 | Program not existing or will be edited: Archivo de subprograma faltante o actualmente abierto en el editor de HMI. |
| Alarma | 14013 | Number of subroutine passes invalid: El conteo de repeticiones de la subrutina no es válido o está fuera de rango. |
| Versión | 808D vs 828D/840D sl | SINUMERIK 808D restringe el anidamiento a 8 niveles, mientras que 828D y 840D sl admiten hasta 16 niveles. |
Advertencia: Llamar a un archivo de subprograma activo que se está editando actualmente en la HMI activará instantáneamente la Alarma 14011 y detendrá la máquina.
Integración de Mitsubishi CNC
Los controladores Mitsubishi admiten el enrutamiento directo de medios de almacenamiento físico dentro del bloque de llamada. Los programadores configuran los destinos de almacenamiento utilizando los parámetros #8876 y #8880 para asignar los destinos de los dispositivos a la dirección local ,D.
Para llamar a un subprograma desde el lector de tarjetas utilizando el bloque de inicio de secuencia N100, programe: M98 <PATTERN.PRG> H100 ,D1 ;. El retorno al programa que llama se termina mediante: M99 ;.
| Tipo | Nombre / Código | Descripción y Ajustes |
|---|---|---|
| Parámetro | #8876 | Configuración del dispositivo de almacenamiento para llamadas a subprogramas externos M198 (G=HD, R=M-Card, D=Server, N=USB). |
| Parámetro | #8880 to #8884 | Asigna destinos de dispositivos a las direcciones ,D0 a ,D4 (M=Memoria, E=Memoria 2, G=HD, R=M-Card, D=Servidor). |
| Parámetro | #8129 | Prioridad de búsqueda de subprogramas (0=número de programa ordenado, 1=número O de 4 dígitos, 2=número O de 8 dígitos). |
| Alarma | P230 | Subprogram nesting over: Se ha excedido la profundidad de anidamiento o llamada M198 dentro de un programa del servidor de datos. |
| Alarma | P231 | No sequence No.: El destino del número de secuencia del bloque de retorno (M99 P) no se encontró en el programa que llama. |
| Alarma | P232 | No program No.: El número de programa ordenado o el nombre de archivo entre corchetes angulares no se encontró en el dispositivo especificado. |
| Versión | M70V vs M80V | Las series M70V/M700V admiten anidamiento de hasta 8 niveles de profundidad, mientras que las modernas M80V/M800V admiten hasta 10 niveles. |
| Versión | M800VW vs M800VS | Si el parámetro #8876 está en blanco, M800VW/M80VW tiene como valor predeterminado el servidor de datos, mientras que M800VS/M80V tiene como valor predeterminado la tarjeta SD frontal. |
Advertencia: Interrumpir la conexión al almacenamiento externo durante la ejecución activará una alarma P232 y provocará una parada de emergencia peligrosa a mitad del cycle.
Comparación de Marcas
| Tema | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| Comando de Llamada de Subprograma | M98 (Interno), M198 (Externo) | Nombre de programa alfanumérico o CALL / PCALL / MCALL | M98 (Interno/External), M198 (Externo) |
| Comando de Retorno | M99 | M17 o RET | M99 |
| Nombres Alfanuméricos | — (no source) | Sí (designación directa de nombre) | Sí (usando la sintaxis <filename>) |
| Profundidad Máxima de Anidamiento | 4 niveles (8 con macros) | 8 niveles (808D), 16 niveles (840D sl / 828D) | 8 niveles (M70V), 10 niveles (M80V) |
| Paso de Parámetros | — (no source) | Sí (parámetros locales declarados en PROC) | — (no source) |
| Selección de Medios de Almacenamiento en Llamada | Parámetro de carpeta de búsqueda global (3457) | Búsqueda de ruta / Memoria | Sí (a través de la dirección de dispositivo ,D en el bloque) |
| Retención de Modo al Retornar | Restauración manual | Automática (a través del atributo SAVE en PROC) | Restauración manual |
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 basándose en lenguajes de programación de PC de alto nivel, lo que permite a los programadores definir alcances locales y mechanisms de paso de parámetros directamente en el encabezado del subprograma. Al usar la palabra clave VAR en la línea PROC, Siemens habilita la ejecución por referencia (call-by-reference), lo que permite a los subprogramas modificar y devolver 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 depender de variables comunes o globales volátiles, lo que introduce el riesgo de corrupción de datos modal.
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 niveles de anidamiento, pero debido a que estos niveles se comparten dinámicamente entre subprogramas de usuario, canned cycles estándar y rutinas de fondo OEM del fabricante (como las limitaciones de velocidad del spindle o los macros de control de la turret), este presupuesto se puede agotar rápidamente. Mitsubishi ocupa un término medio, ofreciendo 8 niveles en la serie heredada 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 rastrear las profundidades de las llamadas en todos los sistemas activos.
El enrutamiento de directorios y los controles de seguridad diferencian 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 archivo entre corchetes angulares como <PART.PRG>. Siemens aísla las llamadas de subprograma al directorio de la pieza de trabajo local a menos que se declare una declaración EXTERN. Siemens impone un bloqueo de seguridad de edición de HMI (versión 5 y superior) que evita 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 Subprograma Anidado de Fanuc
Este ejemplo demuestra un programa principal (O0001) llamando a un subprograma anidado (O1000) cinco veces para realizar cortes repetitivos desplazados en coordenadas.
O0001 (PROGRAMA PRINCIPAL) ; " "G90 G54 G00 X0 Y0 Z10.0 ; Pre-posicionar los ejes al cero absoluto de la pieza " "M98 P1000 L5 ; Llamar al subprograma O1000 cinco veces secuencialmente " "G00 Z50.0 M30 ; Retraer el eje Z y terminar el programa principal ;
" "O1000 (SUBPROGRAMA) ; " "G91 G01 Z-2.0 F150 ; Cambiar a modo incremental, avance del eje Z hacia abajo 2.0 mm " "G90 G01 X50.0 F300 ; Volver a posicionamiento absoluto, avance del eje X a 50.0 mm " "G91 G01 Z2.0 ; Retracción incremental del eje Z en 2.0 mm " "G90 G01 X0 ; Retorno de X absoluto a cero " "M99 ; Retornar el control al programa principal
ejecución en seco (dry run)
Durante una ejecución en seco, el controlador Fanuc mueve los ejes de la máquina a X0, Y0 y Z10.0 en modo de posicionamiento absoluto. Al leer M98 P1000 L5, salta a la subrutina O1000. En O1000, el controlador cambia a modo incremental (G91) para realizar un corte vertical (plunge) en Z de 2.0 mm, luego vuelve al modo absoluto (G90) para cortar hasta X50.0. Después de realizar una retracción incremental de Z de 2.0 mm, la herramienta regresa a X0 en modo absoluto. El controlador ejecuta este bucle de subprograma completo cinco veces en total, lo que da como resultado una profundidad total de Z incremental de 10.0 mm. Luego regresa al programa principal, se retrae a Z50.0 y termina el cycle a través de M30.
Ejemplo de Subprograma Alfanumérico de Siemens
Este programa utiliza las convenciones de llamada alfanuméricas de Siemens con paso de parámetros en un encabezado PROC, protegiendo automáticamente el sistema de coordenadas utilizando el atributo SAVE.
; Programa Principal (MAIN_PROG.MPF) " "N10 G90 G54 G00 X0 Y0 Z10.0 ; Pre-posicionar la herramienta al cero absoluto " "N20 MCALL CUT_POCKET(3.0, 150.0) ; Registrar de forma modal la subrutina CUT_POCKET " "N30 X50.0 Y50.0 ; Ejecutar automáticamente el subprograma en la coordenada 1 " "N40 X100.0 Y50.0 ; Ejecutar automáticamente el subprograma en la coordenada 2 " "N50 MCALL ; Deseleccionar la llamada de subprograma modal " "N60 G00 Z50.0 M30 ; Retraer Z y terminar el programa principal ;
" "; Subprograma CUT_POCKET.SPF (almacenado en el directorio SPF) " "PROC CUT_POCKET(REAL DEPTH, REAL FEED) SAVE DISPLOF ; " "G91 G01 Z=-DEPTH F=FEED ; Corte vertical (plunge) incremental basado en el parámetro DEPTH " "G90 G01 G41 X0 Y0 ; Posicionamiento absoluto con compensación de radio de herramienta activa " "G03 X0 Y0 CR=25.0 ; Interpolación circular del perfil del pocket " "G40 G01 X0 Y0 ; Cancelar la compensación de radio de herramienta " "G91 G01 Z=DEPTH ; Retracción incremental del eje Z " "M17 ; Terminar la subrutina y retornar el control
ejecución en seco
En una ejecución en seco del programa Siemens, el controlador primero ejecuta el posicionamiento absoluto a X0, Y0 y Z10.0. El comando MCALL en el bloque N20 registra CUT_POCKET como una subrutina modal. Moverse a N30 (X50.0 Y50.0) posiciona los ejes, realiza una pausa y llama a la subrutina con los valores de parámetro 3.0 y 150.0. La subrutina comienza la ejecución bajo el atributo SAVE, el cual captura el estado absoluto activo del programa principal. Realiza el corte de la cajera utilizando movimientos incrementales, se retrae y regresa a través de M17. El control restaura automáticamente el estado absoluto G90 y procede a N40 (X100.0 Y50.0) para repetir el proceso. Finalmente, el bloque N50 cancela la llamada a la rutina modal antes de que Z se retraiga a 50.0 mm y termine con M30.
Ejemplo de Subprograma Alfanumérico de Mitsubishi
Este programa demuestra la capacidad de Mitsubishi para llamar a un nombre de archivo alfanumérico desde un dispositivo de almacenamiento específico usando la dirección del parámetro ,D.
O0002 (PROGRAMA PRINCIPAL) ; " "G90 G54 G00 X0 Y0 Z10.0 ; Pre-posicionar la herramienta al cero absoluto de la pieza " "M98 <ROUGH-CUT.PRG> H200 L3 ,D1 ; Llamar al archivo ROUGH-CUT.PRG del dispositivo 1 comenzando en la secuencia N200 " "G00 Z50.0 M30 ; Retraer y terminar el programa principal ;
" "; ROUGH-CUT.PRG (almacenado en la tarjeta CF - Dispositivo 1) " "O2000 (SUBPROGRAMA) ; " "N100 G01 Z-5.0 F100 ; Este bloque se omite debido al bloque de búsqueda de secuencia H200 " "N200 G91 G01 Z-2.0 F120 ; La ejecución de la subrutina comienza aquí; avance incremental " "N300 G90 G01 X30.0 Y30.0 F250 ; Corte de trayectoria de herramienta con posicionamiento absoluto " "N400 G91 G01 Z2.0 ; Retracción incremental en Z de 2.0 mm " "N500 G90 G01 X0 Y0 ; Retorno a la posición absoluta X0 Y0 " "M99 ; Retornar el control al programa principal
ejecución en seco
Durante una ejecución en seco en el sistema Mitsubishi, la herramienta se pre-posiciona en X0, Y0 y Z10.0. Al ejecutar el bloque M98, el controlador accede al dispositivo 1 (la tarjeta CF) para abrir el archivo ROUGH-CUT.PRG. Busca en la subrutina el bloque N200 según lo especificado por la dirección H200. El bloque N100 se omite por completo. La ejecución comienza en N200 con un movimiento incremental en Z, seguido de cortes de perfilado absolutos. Luego la herramienta se retrae, regresa a las coordenadas absolutas y encuentra el bloque M99. El controlador repite este bucle tres veces antes de regresar al programa principal para retraer Z y terminar a través de M30.
Análisis de Errores
| Marca | Código de Alarma | Condición de Activación | Síntoma del Operador | Causa Raíz / Solución |
|---|---|---|---|---|
| Fanuc | 0076 | El número de programa llamado no se encuentra 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". | Compruebe las rutas de carpetas del parámetro 3457 y verifique que el archivo con número O esté presente en la memoria. |
| Fanuc | 0077 | La profundidad de anidamiento del subprograma o macro excede el límite máximo permitido. | El CNC se detiene a mitad del cycle, presentando un error "TOO MANY SUB, MACRO NESTING". | Verifique que los niveles de anidamiento de ejecución no excedan 4 (o 8 incluyendo las llamadas de macro). |
| Fanuc | 1080 | Llamada de dispositivo externo M198 anidada ejecutada dentro de un subprograma M198 activo. | El controlador congela la ejecución y muestra un error "DUPLICATE DEVICE SUB PROGRAM CALL". | Evite llamadas M198 anidadas. Transfiera subrutinas secundarias a la SRAM interna. |
| Fanuc | 1091 | Más de una instrucción de llamada de subprograma especificada en el mismo bloque. | El intérprete se detiene y emite un error "DUPLICATE SUB-CALL WORD". | Aísle cada comando de llamada de subprograma en su propio bloque. |
| Siemens | 14011 | La subrutina llamada no existe, no está liberada o está abierta para edición. | El controlador detiene la ejecución, mostrando el 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 | 14012 | Se ha excedido el límite de profundidad de anidamiento de los niveles de programa. | El sistema se detiene con un mensaje "maximum subroutine level exceeded". | Revise los niveles de anidamiento. Los canned cycles de Siemens consumen hasta 3 niveles; estructure las llamadas en el nivel 12 o superior. |
| Siemens | 14013 | El número de pasadas de la subrutina se especifica incorrectamente o está fuera de rango. | El control rechaza la ejecución, mostrando "Number of subroutine passes invalid". | Verifique y corrija el valor del número de pasadas en la llamada a la subrutina. |
| Mitsubishi | P230 | Profundidad de anidamiento del subprograma excedida, o llamada M198 realizada dentro de un programa del servidor de datos. | El control se detiene y muestra un error "Subprogram nesting over". | Verifique que los niveles de anidamiento no excedan 8 (M70V) o 10 (M80V). Reestructure las llamadas M198. |
| Mitsubishi | P231 | El número de secuencia designado como destino de retorno no se encuentra en el programa que llama. | El intérprete falla y muestra un error "No sequence No.". | Verifique que el número de secuencia programado después de P en el bloque M99 exista en el programa que llama. |
| Mitsubishi | P232 | El número de programa o nombre de archivo designado no se encuentra en el dispositivo especificado. | La ejecución se detiene, mostrando un error "No program No.". | Verifique la inserción del dispositivo, el mapeo de parámetros de las direcciones y que la longitud del nombre sea inferior a 32 caracteres. |
Nota de Aplicación
Una parada no planificada por la Alarma 14011 de Siemens o la Alarma P232 de Mitsubishi paraliza la producción cuando el intérprete no localiza el archivo del subprograma o este permanece abierto para edición en la interfaz HMI. Validar el parámetro 3457 en Fanuc elimina la causa más frecuente de parada no planificada en este comando, ya que instruye al control a buscar automáticamente en las carpetas del fabricante (LIB, MC1/MC2, SYS) en lugar de interrumpir el mecanizado con una alarma 0076 (PROGRAM NOT FOUND). En la práctica industrial, la colisión grave del spindle contra un dispositivo de sujeción (fixture) se previene de forma automatizada en controles Siemens Sinumerik declarando la palabra clave SAVE en el encabezado PROC, lo que congela y restablece los frames dinámicos de forma automática al leer el comando M17 o RET. Para los talleres que operan centros de torneado Mitsubishi, la asignación física de la dirección ,D (0 a 4) mapeada a través de los parámetros #8880 a #8884 desvía la búsqueda hacia la tarjeta de memoria (M-Card) o el disco duro (HD) sin depender de prioridades globales. Asimismo, la seguridad del proceso exige bloquear la edición de los macros O8000 y O9000 en Fanuc mediante el bit 0010#4 (PRG9) y 0389#2 (PRG8) en valor 1, impidiendo modificaciones accidentales del operador en los cycles de cambio de herramienta.
Red de Comandos Relacionados
- writing-and-calling-subprograms: Establece la lógica fundacional de la organización de subrutinas, mostrando la transición de programas individuales a llamadas modulares.
- g83-deep-hole-peck-drilling-cycle: Invoca un canned cycle de taladrado profundo (peck drilling) que se puede anidar dentro de subprogramas personalizados para manejar patrones de rejilla de agujeros profundos.
- g84-g74-rigid-tapping: Llama a un rigid tapping cycle dentro de subrutinas anidadas para automatizar el roscado interno en múltiples ubicaciones de coordenadas.
- Llamada de Macro Simple
G65: Ejecuta un programa de macro para un solo bloque mientras pasa variables locales a los registros de macro, similar a las llamadas de subprograma pero con soporte de parámetros. - Llamada de Macro Modal
G66: Ordena al control ejecutar una subrutina de macro de forma modal después de cada bloque de movimiento subsiguiente hasta que se cancele.
Conclusión
La estandarización de las rutinas de configuración en el taller mecánico requiere que cada subprograma finalice restaurando las condiciones iniciales del G-code modal mediante un bloque de coordenadas absolutas (G90) y la cancelación de compensaciones (G40/G49) antes del comando de retorno M99 o M17. Traspasar los límites físicos de anidamiento de 4 niveles en Fanuc, de 8 a 16 en Siemens, o de 8 a 10 en Mitsubishi genera interrupciones que dañan la eficiencia del tiempo de ciclo. Los supervisores de planta deben implementar un procedimiento obligatorio para verificar que los dispositivos de almacenamiento externo permanezcan bloqueados y conectados físicamente al puerto durante toda la operación de mecanizado, asegurando una producción automatizada libre de errores y sin piezas de desecho.
Preguntas Frecuentes (FAQ)
¿Por qué se genera la Alarma 0077 en Fanuc al usar llamadas M198 y cómo se corrige?
La Alarma 0077 en Fanuc ocurre cuando la ejecución supera el límite físico de 4 niveles de anidamiento estándar (o 8 con macros), o si se intenta realizar una llamada a un dispositivo externo (M198) dentro de un subprograma que ya fue ejecutado mediante M198. El procesador de Fanuc no puede gestionar llamadas externas anidadas concurrentes debido al direccionamiento de memoria. Acción práctica: Reestructure el programa maestro para llamar a subprogramas externos únicamente desde el nivel de memoria SRAM principal o consolide las subrutinas de segundo nivel en un solo bloque.
¿Cómo evita el atributo SAVE de Siemens que las coordenadas locales alteren la pieza de trabajo en la HMI?
El atributo SAVE guarda el estado modal completo del canal, incluyendo compensaciones y transformaciones de coordenadas activas (frames), antes de transferir el control a la subrutina. Al concluir con M17, el intérprete de Siemens restaura automáticamente el estado exacto sin necesidad de programar líneas de cancelación manuales, lo que previene atajos destructivos. Acción práctica: Agregue el atributo SAVE en la línea PROC del subprograma (por ejemplo, PROC MI_SUB SAVE) al realizar operaciones auxiliares que impliquen movimientos en coordenadas incrementales.
¿Qué causa el error P230 de anidamiento en controles Mitsubishi M80V y cómo se soluciona en producción?
El error P230 se activa cuando las llamadas de subprograma apiladas superan la profundidad permitida de 10 niveles (o 8 niveles en la serie M70V), o si se programa un comando M198 desde un subprograma almacenado en el data server. Superar esta capacidad satura la pila de memoria del controlador, provocando una detención del ciclo de mecanizado y posibles piezas defectuosas. Acción práctica: Modifique la estructura de llamadas para aplanar la jerarquía del código y verifique mediante una simulación que el número de subprogramas anidados activos simultáneamente sea menor al límite físico de la serie de la máquina.
¿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.