Skip to main content
CNC.wiki

Guía de Programación de Custom Macro B: Optimización CNC Fanuc

Aprenda Custom Macro B en Fanuc. Programe G65, configure parámetros 6001#6/#7 y evite alarmas 112 y 118 de colisión frente a Siemens y Mitsubishi.

Hakan Gündoğdu
Hakan Gündoğdu

Cofundador de CNC CARE

Introducción

Una colisión destructiva que estrella el husillo o la torreta contra una mordaza de sujeción (vise jaw), una brida (clamp) o el plato (chuck) es la consecuencia inmediata de descuidar la persistencia de variables tras presionar el botón de reset en el control. 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. Cuando un operador interrumpe la ejecución de una macro Custom Macro B, asume que la memoria del CNC se limpia de forma automática. Sin embargo, si la configuración retiene datos residuales en las variables locales o comunes en lugar de purgarlas a un estado vacío (vacant), reiniciar el ciclo provocará que el intérprete del control ejecute cálculos con coordenadas corruptas. Esto resulta en piezas rechazadas, daños mecánicos graves y un costoso tiempo de inactividad no planificado. Dominar la parametrización de la persistencia de memoria y la sintaxis aritmética de Fanuc es indispensable para erradicar estos riesgos en el taller.

Resumen Técnico

Especificación TécnicaDetalles
Códigos de ComandoG65, G66, G66.1, G67
Grupo Modal / ModalidadModal / No modal (G65 no es modal, G66/G66.1 son modales, G67 cancela)
Marcas CubiertasFanuc
Parámetros Críticos6000#5 (SBM), 6000#3 (V15), 6001#5 (TCS), 6001#6 (CCV), 6001#7 (CLV)
Restricción PrincipalPrecisión aritmética de 8 dígitos decimales; anidamiento de corchetes máx. 5 niveles; profundidad de bucle máx. 3 niveles; rango de variables de ±10-29 a ±1047.

Lectura Rápida

  • Purga de Memoria en Reset: Establezca los parámetros 6001#6 (CCV) y 6001#7 (CLV) en 0 para borrar automáticamente las variables locales y comunes a vacío (vacant) tras el reset de la máquina, previniendo la corrupción de coordenadas.
  • Control de Parada de Ejecución: Establezca el parámetro 6000#5 (SBM) en 1 para habilitar las paradas de bloque único durante la ejecución de sentencias de macro, permitiendo una verificación segura paso a paso del programa.
  • Automatización de Código T: Configure el parámetro 6001#5 (TCS) en 1 para llamar automáticamente a la macro O9000 con un código T, pasando el número de herramienta a la variable #149.
  • Límites de Anidamiento y Bucles: Limite la profundidad de anidamiento de bucles (DO-END) a 3 niveles y el anidamiento de corchetes a un máximo de 5 niveles para evitar activar alarmas de formato inmediatas.
  • Compatibilidad con Versiones Anteriores de Compensación: Establezca el parámetro 6000#3 (V15) en 1 para utilizar direcciones de variables de compensación de herramienta heredadas de la Serie 15 en controles modernos de la Serie 16/18.
  • Comprobaciones de Seguridad en División: Asegúrese de que todas las rutinas de división aritmética verifiquen que el divisor no sea cero para evitar que las alarmas de división por cero (PS0112) detengan las operaciones a mitad de ciclo.

Conceptos Básicos

El efecto práctico de programación de Fanuc Custom Macro B es la transformación de un código G estático en un lenguaje de programación matemático y altamente dinámico. En lugar de escribir un programa exclusivo para cada dimensión de pieza, los programadores pueden crear rutinas paramétricas donde las variables dictan las coordenadas X, Y y Z. El operador simplemente introduce las dimensiones deseadas en un único bloque de llamada a macro G65, y el CNC calcula las trayectorias necesarias sobre la marcha. Además, debido a que las macros pueden leer Variables del Sistema (como #5021 para coordenadas de máquina o #5061 para posiciones de señal de salto), la máquina puede tomar decisiones lógicas, inspeccionar sus propios resultados de palpado y recalcular automáticamente las compensaciones de desgaste de herramienta sin ninguna intervención humana.

Este control paramétrico es similar a las llamadas de subprograma estándar pero con el poder adicional de las operaciones matemáticas y lógicas. Mientras que los talleres básicos pueden depender de escritura y llamada de subprogramas para repetir trayectorias estáticas, Custom Macro B permite que las variables calculen dinámicamente las coordenadas. Esto representa un gran salto en la automatización más allá de los ciclos fijos tradicionales como el g84 g74 rigid tapping o los m98 nested subprograms, ya que las variables pueden modificar velocidades de avance, profundidades y conteos sobre la marcha.

Estructura de Comandos

La estructura de comandos de Custom Macro B se basa en una sintaxis sistemática para transferir datos desde un programa principal a un subprograma de macro. Cuando se ejecuta una llamada de macro simple mediante G65, el control abre el programa de destino y carga las variables locales (normalmente de #1 a #33) con los argumentos transferidos en el bloque de llamada. La sintaxis asigna direcciones alfabéticas específicas a sus variables locales correspondientes. Por ejemplo, la dirección A se asigna a la variable #1, B a #2 y C a #3, lo que permite al programador transferir dimensiones de la pieza o tolerancias de mecanizado directamente. Una vez dentro de la macro, el intérprete ejecuta la lógica matemática y los desplazamientos de coordenadas antes de devolver el control.

Para operaciones repetitivas o continuas, se puede iniciar una llamada a macro modal usando G66 o G66.1. Con G66, el control ejecuta el programa de macro inmediatamente después de cada bloque de comando de movimiento, mientras que G66.1 activa la macro después de cada bloque de programa. Este comportamiento modal permanece activo, transfiriendo variables actualizadas, hasta que el control lee un comando de cancelación G67. El direccionamiento de códigos G y códigos M mediante asignaciones de parámetros permite que estas macros se ejecuten de forma invisible. El intérprete del CNC traduce un código estándar para ejecutar subprogramas de la serie O9000 mientras transfiere variables en segundo plano.

Direcciones de Sintaxis de Comandos:

  • Llamada a Macro Simple: G65 P_ L_ <arguments>
  • Llamada a Macro Modal (después del movimiento): G66 P_ L_ <arguments>
  • Llamada a Macro Modal (en cada bloque): G66.1 P_ L_ <arguments>
  • Cancelar Llamada a Macro Modal: G67
  • Bifurcación Condicional: IF [<conditional expression>] GOTO n
  • Bucle Condicional: WHILE [<conditional expression>] DO n ... END n
Parámetro / VariableDescripciónRango / Valor
#1 to #33Variables locales mapeadas a direcciones alfabéticas (por ejemplo, A se asigna a #1, B a #2). Se borran en reset según el parámetro 6001#7.±10-29 to ±1047
#100 to #149Variables comunes. Se borran o retienen en reset según el parámetro 6001#6.±10-29 to ±1047
#500 to #531Variables comunes. Siempre se retienen en reset.±10-29 to ±1047
Parameter 6000#5 (SBM)Parada en bloque único durante la sentencia de macro. 1: Válida, 0: Inválida.0 or 1
Parameter 6000#3 (V15)Mapeo de variables de compensación de herramienta. 1: especificación heredada FS15, 0: especificación estándar FS16.0 or 1
Parameter 6001#5 (TCS)Llamar a la macro personalizada O9000 por código T. El valor del código T se pasa a la variable #149. 1: Habilitado, 0: Deshabilitado.0 or 1
Parameter 6001#6 (CCV)Borrado de variables comunes #100 a #149 en reset. 0: Borradas a vacío (vacant), 1: Retenidas.0 or 1
Parameter 6001#7 (CLV)Borrado de variables locales #1 a #33 en reset. 0: Borradas a vacío (vacant), 1: Retenidas.0 or 1

Aplicaciones de Marca

Fanuc

Fanuc distingue profundamente su arquitectura de macros de otras marcas de control a través de sus integraciones de direccionamiento de códigos y su retroalimentación de diagnóstico integrada. Primero, Fanuc permite a los constructores de máquinas y programadores direccionar códigos estándar G, M, S y T para que apunten directamente a macros personalizadas. Con solo configurar un parámetro (como el parámetro 6050 para códigos G o habilitando TCS para códigos T), un operador puede ordenar una indexación estándar de la torreta, y el control ejecutará silenciosamente una macro compleja de la serie O9000 en segundo plano mientras transfiere automáticamente el número de herramienta a la variable #149. Segundo, Fanuc integra de forma nativa la generación de alarmas y mensajes personalizados en la macro. Al programar un valor en la variable del sistema #3000, la macro puede detener intencionadamente la máquina y proyectar una cadena de texto altamente específica y personalizada directamente en la pantalla de alarmas del CNC para alertar al operador sobre un error de dimensionamiento de la pieza. Finalmente, Fanuc proporciona una compatibilidad extrema con versiones anteriores a través del parámetro V15; los operadores pueden ordenar a los controles modernos que asignen variables de manera idéntica a las arquitecturas de la Serie 15 de hace décadas, garantizando que las macros heredadas se ejecuten sin problemas en la maquinaria nueva.

Comparación de Marcas

Característica / VersiónFanuc Serie 15 / Controles HeredadosFanuc Serie 16 / 18 / 21 / 0i (Moderno)
Variables de Sistema de Compensación de HerramientaUtiliza la asignación de variables de compensación de herramienta heredada.Utiliza la asignación de variables estándar moderna: #2001–#2200 para centros de mecanizado, pero puede alternar la emulación heredada utilizando el parámetro 6000#3 (V15) configurado en 1.
Asignación de Torno frente a Centro de MecanizadoRequiere direcciones específicas heredadas para la compensación.La serie M utiliza variables contiguas de #2001 a #2200. La serie T divide las compensaciones en #2001–#2064 (desgaste de X), #2101–#2164 (desgaste de Z) y #2201–#2264 (desgaste de la punta de la herramienta).
Comportamiento de Reset de VariablesLas variables volátiles se borran automáticamente tras el reset de la máquina.Permite la configuración de retención de variables. Los parámetros 6001#6 (CCV) y 6001#7 (CLV) determinan si las variables #100–#149 y #1–#33 se borran a vacío (vacant) (0) o se retienen (1) en reset.

Análisis Técnico

Un análisis de la arquitectura Custom Macro B de Fanuc revela un diseño centrado en la compatibilidad con versiones anteriores y en la configuración de la seguridad. La diferencia principal entre las aplicaciones para torno (serie T) y centro de mecanizado (serie M) radica en su asignación de variables de sistema para compensación de herramientas. La serie M utiliza un conjunto unificado y continuo desde #2001 hasta #2200. La serie T segrega las compensaciones para adaptarse a las geometrías de tornos multieje. Separa el desgaste de X (#2001–#2064), el desgaste de Z (#2101–#2164) y el desgaste del radio de la punta de la herramienta (#2201–#2264). Esta segregación evita conflictos de coordenadas durante las operaciones de torneado, pero requiere que los programadores escriban macros específicas para cada eje dependiendo del tipo de máquina.

La compatibilidad con versiones anteriores se mantiene a través del parámetro 6000#3 (V15). Cambiar este parámetro a 1 ordena a un controlador moderno de la Serie 16 o 18 traducir las direcciones de variables para que coincidan con el hardware heredado de la Serie 15. Esto permite a los talleres mecánicos ejecutar programas de macro de hace décadas sin necesidad de reescribirlos.

Además, los comportamientos de borrado de memoria dependen de los parámetros. En las configuraciones estándar, las variables locales y comunes se purgan tras el reset para evitar la ejecución de datos obsoletos. Sin embargo, configurar el parámetro 6001#6 (CCV) en 1 retiene las variables comunes. Del mismo modo, configurar el parámetro 6001#7 (CLV) en 1 retiene las variables locales, lo que puede provocar desplazamientos de coordenadas si se reinicia un ciclo a mitad de programa.

Ejemplos de Programas

Ejemplo de Código G de Fanuc

O9010 (EJEMPLO DE CUSTOM MACRO B DE FANUC) ;
#100 = #1 + #2 ;
IF [#100 GT 10.0] GOTO 5 ;
#1 = 1.0 ;
WHILE [#1 LT 5.0] DO 1 ;
G91 G01 Z-2.0 F150 ;
G90 G01 X#100 F300 ;
G00 Z2.0 ;
G00 X0 ;
#1 = #1 + 1.0 ;
END 1 ;
GOTO 10 ;
N5 #3000 = 1 (LA SUMA SUPERA EL LIMITE) ;
N10 M99 ;

ejecución en seco (dry run)

Durante una ejecución en seco del programa de macro G65, el controlador recibe el comando G65 P9010 A1.0 B2.0. La dirección A se asigna a la variable local #1 (1.0) y B se asigna a #2 (2.0). El intérprete calcula la suma de #1 y #2, almacenando 3.0 en la variable común #100. Verifica la condición IF [#100 GT 10.0]. Dado que 3.0 no es mayor que 10.0, se omite la bifurcación al bloque N5. Luego, la variable #1 se inicializa en 1.0 como contador del bucle. Comienza el bucle WHILE [#1 LT 5.0] DO 1. La herramienta ejecuta una penetración (plunge) incremental de Z en 2.0 mm, se desplaza a la posición absoluta X3.0, se retrae y regresa a X0. La variable #1 se incrementa en 1.0. Este bucle se repite cuatro veces (para #1 = 1.0, 2.0, 3.0 y 4.0) hasta que #1 alcanza 5.0. En ese punto, el bucle finaliza. El intérprete salta al bloque N10 a través de GOTO 10, ejecutando M99 para devolver el control al programa principal.

Análisis de Errores

MarcaCódigo de AlarmaCondición de ActivaciónSíntoma del OperadorCausa Raíz / Solución
Fanuc112 (PS0112)ZERO DIVIDE: Se especificó una división por cero dentro de una sentencia aritmética de macro.El controlador CNC se detiene instantáneamente a mitad de ciclo y muestra una pantalla de alarma "ZERO DIVIDE".Asegúrese de que la variable divisora no sea cero. Añada una comprobación condicional antes de la división.
Fanuc114 (PS0114)FORMAT ERROR IN MACRO: Código H no definido en un bloque G65, o la expresión contiene un formato ilegal.El intérprete detiene la ejecución y proyecta un mensaje "FORMAT ERROR IN MACRO".Compruebe el formato de la expresión matemática, verifique que los corchetes coincidan y asegúrese de que los códigos de dirección G65 sean válidos.
Fanuc116 (PS0116)WRITE PROTECTED VARIABLE: Se coloca una variable de solo lectura en el lado izquierdo de una sentencia de sustitución.La máquina se bloquea, impidiendo el movimiento de los ejes, y muestra un error "WRITE PROTECTED VARIABLE".No intente escribir datos en variables de sistema de solo lectura (como el estado de coordenadas o las señales de salto).
Fanuc118 (PS0118)TOO MANY BRACKET NESTING: El anidamiento de corchetes [] supera el límite quíntuple (5 niveles de profundidad).El controlador no puede analizar el bloque, activando la alarma "TOO MANY BRACKET NESTING" y deteniéndose.Reduzca la profundidad de los corchetes anidados en expresiones matemáticas a 5 niveles o menos.
Fanuc124 (PS0124)MISSING END STATEMENT: Se programa un comando DO sin el correspondiente comando END.La ejecución del CN se detiene con una alarma "MISSING END STATEMENT" antes de iniciar el bucle.Asegúrese de que cada bloque DO tenga una sentencia END correspondiente con el mismo índice (por ejemplo, DO 1 y END 1).

Nota de Aplicación

Una colisión grave de la torreta contra el plato de sujeción (chuck) o una mordaza (vise jaw) destruyendo la herramienta y doblando las guías lineales es el resultado físico directo de configurar los parámetros de retención 6001#6 (CCV) y 6001#7 (CLV) para conservar valores en reset. Validar el parámetro 6001#7 elimina la causa más frecuente de parada no planificada en este comando, ya que garantiza la purga inmediata de variables locales a vacant al presionar reset. En la producción industrial, si se interrumpe un ciclo y se reinicia con variables persistentes que conservan coordenadas obsoletas, el control calculará desplazamientos espaciales erróneos y enviará la herramienta contra un obstáculo mecánico. Asimismo, para asegurar la integridad física de la máquina, los programadores deben habilitar el stop de bloque único para sentencias de macro configurando el parámetro 6000#5 (SBM) en 1. Esta precaución, combinada con la protección de edición de macros O9000 mediante el parámetro 6001#5 (TCS) para llamadas de cambio de herramienta automáticas con la variable #149, previene paradas de máquina y el desperdicio de materia prima por piezas rechazadas.

Red de Comandos Relacionados

  • M98 (Llamada de Subprograma): Ejecuta subprogramas estáticos estándar sin transferir variables locales ni evaluar lógica aritmética, proporcionando una alternativa más simple a las llamadas G65. Consulte nuestra guía sobre m98 nested subprograms para más detalles.
  • M198 (Llamada de Subprograma de Dispositivo Externo): Llama a subprogramas almacenados en medios externos, como tarjetas CF o rutas de servidor, lo que permite a las máquinas ejecutar archivos más grandes de lo que cabe en la memoria interna. Consulte nuestra guía sobre writing and calling subprograms para conocer los flujos de trabajo de subprogramas.
  • BPRNT / DPRNT (Salida de Datos Externa): Envía valores de variables y texto formateado a computadoras externas o dispositivos seriales, permitiendo a los programadores registrar datos de palpado y métricas de ciclo.

Conclusión

Establecer una rutina estricta de auditoría de parámetros en el taller es el único camino seguro para aprovechar el dinamismo de Custom Macro B sin poner en peligro los husillos ni el herramental de la planta. Mantener los parámetros 6001#6 (CCV) y 6001#7 (CLV) configurados en 0 elimina permanentemente el riesgo de que valores residuales alteren las trayectorias al reiniciar un ciclo interrumpido. Esta política de configuración, sumada a la validación paso a paso de las expresiones matemáticas con el bloque único (SBM) activo, maximiza la eficiencia del tiempo de ciclo y garantiza una producción continua libre de colisiones mecánicas y piezas rechazadas.

Preguntas Frecuentes (FAQ)

¿Por qué se produce la alarma PS0112 (ZERO DIVIDE) y cómo se previene en producción?

Esta alarma ocurre cuando el intérprete encuentra una operación de división donde el divisor equivale a cero o un valor no definido, lo cual detiene el ciclo de mecanizado inmediatamente. Para evitar la generación de piezas rechazadas debido a paradas inesperadas a mitad de corte, se debe validar algebraicamente la variable divisora antes de realizar la operación. Acción práctica: Introduzca una condicional en el programa como IF [#102 EQ 0] GOTO 9000 para redirigir el flujo a un bloque de alarma seguro antes de ejecutar la división.

¿Cómo afecta el límite de anidamiento de corchetes a la estructura matemática en Custom Macro B?

El control Fanuc restringe el anidamiento de corchetes a un máximo de 5 niveles para evitar la saturación del procesador aritmético. Si se supera este límite, la máquina detiene su marcha y muestra la alarma 118 (TOO MANY BRACKET NESTING), afectando el tiempo de ciclo global. Acción práctica: Simplifique las ecuaciones complejas dividiendo la fórmula original en ecuaciones parciales más simples y almacene los resultados temporales en variables comunes como #100 o #101.

¿De qué manera automatiza el parámetro 6001#5 (TCS) el cambio de herramienta sin intervención manual?

Al activar el bit TCS, el control ejecuta automáticamente la macro O9000 cada vez que lee un código T en el flujo de trabajo, transfiriendo el número de herramienta solicitado a la variable común #149. Esto reduce el error humano y acelera el tiempo de ciclo al unificar la lógica de indexación de la torreta. Acción práctica: Establezca el bit 6001#5 (TCS) en 1 en la pantalla de parámetros del CNC y programe la subrutina O9000 para gestionar de forma segura el posicionamiento y la indexación.

¿Aún no se ha resuelto?

Pregunta a nuestro asistente de IA sobre este tema en lenguaje natural. Basado en fuentes verificadas, sin alucinaciones.

Preguntar al asistente de IA
Hakan Gündoğdu
Hakan Gündoğdu
  • 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