Asignación de Argumentos en Macros CNC: Guía de G65 y G66
Domine la asignación de argumentos en macros G65/G66 para Fanuc, Siemens y Mitsubishi. Evite colisiones físicas del cabezal y configure parámetros críticos.
Introducción
Un movimiento rápido no ordenado que clava el cabezal directamente contra una mordaza de sujeción o un plato de garras es la consecuencia física directa de una asignación incorrecta de argumentos en una macro CNC. Cuando el programa principal transfiere coordenadas erróneas a través de una llamada G65 o G66, un parámetro mal configurado o una secuencia de variables desalineada altera el cálculo matemático del subprograma. El control procesa la información corrupta a velocidad de avance rápido y, antes de que el operador pueda pulsar la parada de emergencia, el CNC calcula una trayectoria distorsionada y dirige la herramienta contra el utillaje de sujeción, provocando la rotura del husillo, piezas rechazadas y costosas horas de tiempo de inactividad.
Resumen Técnico
| Especificación | Detalles Técnicos |
|---|---|
| Códigos de Comando | G65, G66, G66.1, G67 |
| Grupo Modal | G65 es No modal (Grupo 00); G66 y G66.1 son Modales (Grupo 12); G67 cancela las llamadas modales |
| Marcas Compatibles | Fanuc, Siemens, Mitsubishi |
| Parámetros Críticos | Fanuc: 6008#7 (IJK) y 6007#4 (CVA); Mitsubishi: #1241 (Macro argument L/P valid) y #11053; Siemens: $MC_EXTERN_FUNCTION_MASK |
| Restricción Principal | El apilamiento de argumentos está limitado a 10 conjuntos de coordenadas I, J y K; los códigos en conflicto no se pueden combinar en el mismo bloque de programa |
Lectura Rápida
- Seleccione
G65para llamadas de macro simples únicas yG66para llamadas modales que se repiten con cada movimiento de eje. - Programe siempre el comando de cancelación
G67inmediatamente después de las operaciones de macro modales para evitar movimientos imprevistos durante las coordenadas de despeje. - Establezca el parámetro de Fanuc
6008#7en 0 para permitir la detección automática de la Especificación de Argumentos II para coordenadas complejas multipunto. - Programe las direcciones
I,JyKen estricta secuencia alfabética cuando utilice la Designación de Argumentos I de Mitsubishi para garantizar un mapeo de variables correcto. - Cambie el intérprete de Siemens al modo nativo usando
G290antes de leer las variables de sistema$C_para evitar abortos de análisis. - Evite el uso de direcciones prohibidas como
GoNcomo argumentos a menos que estén explícitamente habilitadas mediante parámetros específicos de la máquina.
Conceptos Básicos
La asignación de argumentos durante las llamadas de macro proporciona la capacidad de transferir valores numéricos directamente desde el bloque de llamada a variables locales dentro del subprograma. Esto permite a los programadores escribir programas universales y paramétricos que se pueden reutilizar para diferentes piezas y operaciones con solo cambiar las entradas en la línea de llamada. Mediante este método, las coordenadas, los avances (feedrates), las velocidades del cabezal o las entradas geométricas se inyectan dinámicamente en el subprograma macro.
Para comprender cómo funciona esto, debemos referirnos a la relación entre las direcciones del bloque de código G y los registros de variables internas. Por ejemplo, en un sistema Fanuc o Mitsubishi, una letra de dirección como A corresponde a la variable #1, mientras que B corresponde a #2. In un sistema Siemens, las letras de dirección se transfieren directamente a variables del sistema con nombre propio como $C_A y $C_B. Garantizar la configuración adecuada de los parámetros, el orden alfabético de los argumentos cuando corresponda y evitar mapeos de variables duplicados son requisitos universales para prevenir errores lógicos que puedan provocar colisiones físicas o piezas rechazadas.
Estructura de Comandos
Para iniciar una llamada a un subprograma macro y transferir datos, el intérprete CNC debe procesar códigos de comando específicos que definen tanto el comportamiento de la llamada como el programa de destino. Los comandos principales son G65 para una llamada simple no modal y G66 para una llamada modal. Mientras que una llamada simple ejecuta el subprograma macro exactamente una vez en el bloque donde se invoca, una llamada modal permanece activa y ejecuta el subprograma en cada bloque subsiguiente que contenga comandos de movimiento hasta que sea cancelada.
Durante estas llamadas, los caracteres de dirección especificados en el bloque del programa principal se mapean a variables locales en el subprograma. Un bloque de llamada estándar debe incluir la dirección del número de programa P y opcionalmente un recuento de repeticiones L. Todas las demás letras actúan como argumentos que transfieren valores.
Sintaxis para llamadas de macro en diferentes sistemas:
- Fanuc/Mitsubishi:
G65 P_ L_ <arguments>; - Siemens:
G65 P_ L_ <Arguments>;
Parámetros utilizados en las estructuras de llamada de macro:
P: Número de programa del subprograma (o identificador).L: Número de veces que se repite el subprograma (repeticiones).<arguments>: Caracteres de dirección que transfieren valores a las variables locales (comoA,B,C,I,J,K).
Aplicaciones de Marca
Fanuc
En Fanuc Custom Macro B, los parámetros 6008#7 y 6007#4 rigen cómo se mapean las coordenadas. Estos parámetros determinan si el control utiliza la Especificación de Argumentos I o II.
La siguiente sintaxis ilustra una llamada de macro G65 simple y una llamada apilada de Especificación de Argumentos II:
; Llamada simple de Fanuc: G65 P1000 A1.0 B2.0 X15.0 Y25.0;
; Llamada apilada de Fanuc (Especificación de Arg. II): G66 P9100 I10.0 J20.0 K30.0 I40.0 J50.0 K60.0;
| Categoría | Elemento / Código | Descripción | Valor / Detalles |
|---|---|---|---|
| Parámetro | 6008#7 (IJK) | Comportamiento global de argumentos | 0 = Detección automática de Spec I/II; 1 = Spec I estricta |
| Parámetro | 6007#4 (CVA) | Análisis de formato decimal | 0 = Formato NC; 1 = Formato macro |
| Parámetro | 6020#4 (GAA) | Anulación de direcciones prohibidas | Permite G (mapeada a #28-#32) y L (mapeada a #12) |
| Parámetro | 6009#2 (MAA) | Llamadas de macro por código M | Determina si la dirección G se convierte en argumento |
| Alarma | Alarm 129 (PS0129) | Uso no válido de dirección G | Se activa si los parámetros GAA/MAA prohíben G |
| Alarma | Alarm 1095 (PS1095) | Límite de apilamiento superado | Se activa si se especifican más de 10 conjuntos de I/J/K |
| Alarma | Alarm 114 (PS0114) | Error de formato en macro | Código H no definido o formato matemático no válido |
| Versión | Serie T | Configuración de torno | Restringe las direcciones estrictamente a A, B, F, H, I, K, M, P, Q, R, S, T |
| Versión | Serie M | Configuración de centro de mecanizado | Admite lista completamente expandida: A, B, D, F, H, I, J, K, L, M, P, Q, R, S, T, X, Y, Z |
Los programadores deben verificar la configuración de los parámetros antes de ejecutar programas que contengan coordenadas I, J y K apiladas, ya que una configuración incorrecta provocará la sobrescritura de coordenadas y colisiones mecánicas.
Siemens
Los controles Siemens Sinumerik no mapean los argumentos a variables locales numeradas. En su lugar, escriben los valores directamente en variables de sistema predefinidas como de $C_A a $C_Z al ejecutar una llamada.
El siguiente ejemplo ilustra cómo se declaran los parámetros en un bloque de llamada G65 y cómo se recuperan dentro del subprograma:
; Bloque de llamada de Siemens: N30 G65 P10 F55 X150. Y100. S2000
; Recuperación de parámetros en subprograma Siemens: N15 X_AXIS = $C_X Y_AXIS = $C_Y SPEED = $C_S FEEDRATE = $C_F
| Categoría | Elemento / Código | Descripción | Valor / Detalles |
|---|---|---|---|
| Parámetro | P | Identificador de subprograma | De 4 a 8 dígitos (determinado por datos de máquina) |
| Parámetro | L | Recuento de repeticiones del subprograma | Valor entero entre 1 y 9999 |
| Máscara de Sistema | $MC_EXTERN_FUNCTION_MASK | Configuración de bits de datos de máquina | El bit 6 establece el formato de dígitos de P; el bit 3 habilita la evaluación del código DIN |
| Alarma | Alarm 12720 | Número de programa ausente | Se activa cuando la llamada a la macro carece de la dirección P |
| Alarma | Alarm 12722 | Llamada mixta de ciclo y macro | Se activa al combinar llamadas de macro y ciclos fijos |
| Alarma | Alarm 14016 | Funciones de bloque en conflicto | Conflicto con M98, retornos o códigos de fin de programa |
| Versión | Bit 6 = 0 | Rellena P estrictamente a 4 dígitos | Pasar un número de programa > 4 dígitos provoca una alarma |
| Versión | Bit 6 = 1 | Admite de forma nativa 8 dígitos | Acepta números de programa de hasta 8 dígitos sin rellenar |
Los operadores deben colocar todos los parámetros de argumento estrictamente después de los códigos de llamada del programa para evitar alarmas de análisis inmediatas y ciclos abortados.
Mitsubishi
Los controles Mitsubishi asignan argumentos a las variables locales de la #1 a la #33. Los programadores pueden usar el parámetro #1241 para habilitar las variables L y P.
El siguiente bloque representa una llamada de macro Mitsubishi que transfiere argumentos y muestra la precedencia de sobrescritura en llamadas de formato mixto:
; Llamada simple de Mitsubishi: G65 P9900 A60. S100. F800;
; Demostración de sobrescritura: G65 A1.1 B-2.2 D3.3 I4.4 I7.7;
| Categoría | Elemento / Código | Descripción | Valor / Detalles |
|---|---|---|---|
| Parámetro | #1241 (set13/bit5) | Validez de argumento macro L/P | Permite pasar L/P a las variables #12 y #16 |
| Parámetro | #11053 | Ubicación de almacenamiento del programa de usuario | 0 = Memoria CN; 1 = Disco duro |
| Alarma | P275 | Límite de apilamiento superado | Se activa si se programan más de 10 conjuntos de I/J/K |
| Alarma | P33 | Error de sintaxis de programa | Se activa por un valor de L/P no válido en M98 o cadenas ilegales |
| Versión | Serie M800V/M80V | Dependencias del modo de llamada | G65/G66 prohíben G y N; G66.1 permite los argumentos G y N |
Los operadores deben programar las variables I, J y K en orden alfabético durante la Designación I para evitar mapeos de parámetros incorrectos.
Comparación de Marcas
| Característica | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| Mapeo de Variables | Variables locales de la #1 a la #33 | Variables de sistema de la $C_A a la $C_Z | Variables locales de la #1 a la #33 |
| Apilamiento de Argumentos | La Spec II mapea hasta 10 conjuntos de I/J/K a las variables de la #4 a la #33 | Almacena hasta 10 conjuntos en $C_I[0]... y rastrea el recuento en $C_I_NUM | La Designación II mapea hasta 10 conjuntos de I/J/K a las variables de la #4 a la #33 |
| Precedencia Decimal | El último tipo de argumento especificado tiene precedencia en bloques mixtos | — (sin fuente) | El valor de dirección especificado posteriormente es válido |
| Direcciones Prohibidas | G/L/N/P están bloqueadas; G/L se pueden mapear usando el parámetro GAA | P, L, O, N deben ser enteros; los valores reales activan alarmas | G/N bloqueadas en G65/G66; L/P se pueden habilitar a través del parámetro #1241 |
| Cambio de Intérprete | Custom Macro B nativo | Requiere G290 para evaluar variables de sistema en el subprograma | Custom Macro nativo |
Análisis Técnico
El análisis de las diferencias en la asignación de argumentos en estos controles revela tres rutas arquitectónicas distintas. Fanuc depende en gran medida del direccionamiento alias basado en parámetros y de capacidades de multiplexación exclusivas. Al admitir la Especificación de Argumentos II, Fanuc permite a los programadores eludir los límites de direcciones alfabéticas al repetir I, J y K hasta diez veces en un solo bloque. El control secuencia automática e invisiblemente estas direcciones repetidas en las variables locales de la #4 a la #33. Los parámetros como 6020#4 (GAA) y 6009#2 (MAA) también permiten a los programadores anular la prohibición predeterminada de las direcciones G y L, mapeándolas directamente a las variables #28-#32 y #12.
Siemens rechaza el sistema de variables locales numeradas a favor de variables de sistema autodocumentadas. En lugar de transferir valores a variables locales numeradas, Siemens asigna argumentos a variables nombradas según los propios ejes o funciones, como $C_X o $C_S. Para los argumentos de matriz, Siemens implementa un manejo nativo de matrices, apilando las entradas repetidas de I, J y K en matrices indexadas (como $C_I[0]) y rastreando el recuento a través de $C_I_NUM. Siemens también admite la compilación cruzada dinámica, lo que permite a los programadores alternar entre el modo de alto nivel (G290) y el modo de dialecto ISO (G291) para realizar cálculos matemáticos complejos sobre los parámetros.
Mitsubishi proporciona un punto medio robusto con una lógica de sobrescritura especializada y captura de direcciones dependiente del modo de llamada. En los casos en que se programan formatos superpuestos en el mismo bloque, el intérprete de Mitsubishi prioriza y acepta el último valor sin detener la máquina. El control también ofrece una flexibilidad única a través del parámetro #1241, que permite pasar las direcciones L y P como las variables #12 y #16. En la Llamada Modal B (G66.1), Mitsubishi permite capturar incluso direcciones reservadas como G y N como los argumentos #10 y #14, siempre que aparezcan después de los códigos CN ejecutables.
Ejemplos de Programas
Ejemplo de Fanuc
G65 P1000 A1.0 B2.0 X15.0 Y25.0;
ejecución en seco (dry run)
- El intérprete lee G65 y transfiere el control al programa O1000.
- El valor
1.0se asigna a la variable local#1. - El valor
2.0se asigna a la variable local#2. - El valor
15.0se asigna a la variable local#24. - El valor
25.0se asigna a la variable local#25. - El programa macro procesa las operaciones utilizando estas variables y regresa al programa principal a través de M99.
Ejemplo de Siemens
G65 P1234 A10. C20. X30. Z40. I50. K60. J70. I80.
ejecución en seco
- El intérprete lee G65 y llama al número de programa 1234.
- El valor
10.0se mapea a$C_A. - El valor
20.0se mapea a$C_C. - El valor
30.0se mapea a$C_X. - El valor
40.0se mapea a$C_Z. - A la variable de matriz
$C_I[0]se le asigna50.0, a$C_J[0]se le asigna70.0y a$C_K[0]se le asigna60.0. - La segunda instancia de la dirección I asigna
80.0a$C_I[1], y$C_I_NUMse actualiza a2para rastrear el tamaño de la matriz.
Ejemplo de Mitsubishi
G65 A1.1 B-2.2 D3.3 I4.4 I7.7;
ejecución en seco
- El intérprete procesa la llamada simple.
- El valor
1.1se mapea a la variable local#1(dirección A). - El valor
-2.2se mapea a la variable local#2(dirección B). - La dirección D se mapea a
#7, asignando3.3. - La primera instancia de la dirección I se mapea a
#4(valor 4.4). - La segunda instancia de la dirección I se mapea a
#7(valor 7.7) debido a la secuencia de la Designación II. Debido a que tanto D como la segunda I se mapean a#7, la lógica de sobrescritura prioriza el último argumento, y la variable#7se finaliza con el valor7.7.
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 129 | Programar la dirección G como argumento cuando no está permitido | La ejecución del CNC se detiene inmediatamente; la pantalla muestra el mensaje de alarma | Los parámetros GAA/MAA están desactivados; habilite el parámetro 6020#4 o modifique el código G |
| Fanuc | Alarm 1095 | Se programaron más de 10 conjuntos de I/J/K en la Especificación de Argumentos II | El control detiene el ciclo; el programa se detiene antes de comenzar el movimiento | Se superó el apilamiento de la Spec II; reduzca los pares I/J/K a 10 o menos |
| Siemens | Alarm 12720 | Llamar a la macro G65/G66 sin la dirección P del número de programa | El intérprete aborta la ejecución; la lámpara de inicio de ciclo se apaga | Falta la dirección P en el bloque NC; especifique el número de programa P_ en la llamada de macro |
| Siemens | Alarm 12722 | Mezclar ciclos fijos y llamadas de macro G65/G66 en el mismo bloque | El control rechaza el bloque; la pantalla muestra conflicto entre macro y ciclo | Se combinaron G81-G89 y G65/G66 en un solo bloque; sepárelos en dos bloques |
| Mitsubishi | P275 | Programar más de 10 conjuntos de I/J/K en la Designación II | Se inhibe el movimiento del eje; se activa el estado de alarma | Se superó el límite de apilamiento; mantenga los conjuntos repetidos de I/J/K en 10 o menos |
| Mitsubishi | P33 | Se activa por un valor de L/P no válido en M98 o cadenas ilegales | El programa se detiene con un error de sintaxis | El parámetro #1241 está activo, convirtiendo L/P en argumentos de variable; use el comando M98 estándar sin L/P |
Nota de Aplicación
La rotura catastrófica de la herramienta de corte y la deformación de las garras del plato ocurren instantáneamente si el parámetro de usuario 6008#7 (IJK) de Fanuc se establece incorrectamente en 1 al ejecutar programas con coordenadas tridimensionales complejas. Esta configuración de bit obliga al control a evaluar de forma estricta los argumentos I, J y K bajo la Especificación de Argumentos I, lo que desactiva la Especificación II y provoca que cada nuevo conjunto de coordenadas sobrescriba los valores anteriores en lugar de indexarse secuencialmente desde la variable #4 hasta la #33. Si el subprograma utiliza estas variables tridimensionales para calcular una profundidad de pasada crítica en el eje Z o un contorno helicoidal, el cálculo lógico se corrompe por completo, dirigiendo la herramienta a una posición destructiva dentro del área de trabajo. Asimismo, los programadores deben validar el estado del parámetro 6007#4 (CVA) en la puesta en marcha: si está configurado en 1 (formato macro), una coordenada programada como X10 sin punto decimal se interpretará como 0.01 mm en lugar de 10.0 mm. Esta drástica reducción dimensional genera una trayectoria incorrecta que destruye el acabado superficial de la pieza, aumentando la tasa de rechazo en el control de calidad final.
Red de Comandos Relacionados
- G65 Custom Macro B: Comando de llamada de macro simple no modal utilizado para iniciar subprogramas y transferir valores de variables.
G66: Comando de llamada de macro modal que repite la ejecución del subprograma en cada bloque que contenga movimiento axial hasta que se cancele.G67: Comando de cancelación modal utilizado para desactivar los ciclos modales G66 o G66.1 y retornar a la ejecución normal del intérprete.- Escritura y Llamada de Subprogramas: Comando de ejecución general de subprogramas que llama a programas secundarios pero no permite la transferencia de argumentos de variables.
- Operadores Lógicos de Macro: Operaciones lógicas utilizadas dentro de los subprogramas macro para validar los argumentos transferidos y controlar el flujo del programa.
Conclusión
La validación rigurosa de los parámetros de llamada de macro en el control numérico elimina la causa más frecuente de parada no planificada por errores de sintaxis en programación paramétrica. Configurar de forma inequívoca el parámetro 6008#7 en Fanuc, verificar el bit 6 del parámetro $MC_EXTERN_FUNCTION_MASK en Siemens y activar el parámetro #1241 en Mitsubishi antes de transferir variables de geometría garantiza la integridad del código G en cada ciclo de mecanizado. Adoptar la práctica de documentar las tablas de mapeo de variables locales y realizar simulaciones preliminares sin pieza en la máquina protege las herramientas de corte y el utillaje, asegurando que las variaciones dimensionales se controlen antes de que comience la producción en serie.
Preguntas Frecuentes (FAQ)
¿Por qué se produce la alarma PS0129 al usar la dirección G en una llamada macro G65?
En los sistemas Fanuc, la dirección G está reservada por defecto y no se puede transferir como argumento. Si se programa G en una llamada G65 sin configurar el parámetro 6020#4 (GAA), el control detiene la máquina inmediatamente para evitar comandos incoherentes. Acción práctica: Active el parámetro 6020#4 para mapear las primeras cinco direcciones G a las variables #28 a #32, o reemplace la letra G por otra dirección permitida en el bloque de llamada.
¿Cómo afecta el orden alfabético de I, J y K al mapeo de variables en Mitsubishi?
Al utilizar la Designación de Argumentos I en controles Mitsubishi, el intérprete asigna las variables según la secuencia física de entrada. Si programa estas letras fuera del orden alfabético estricto, el control asociará los valores a variables locales incorrectas, lo que provoca desplazamientos erróneos de los ejes en el subprograma. Acción práctica: Escriba siempre las coordenadas I, J y K de forma estrictamente alfabética en la línea de comando G65, o configure el control para usar la Designación II si necesita apilar múltiples conjuntos.
¿Qué causa el error de formato al pasar números de programa de más de cuatro dígitos en Siemens?
En los controles Siemens Sinumerik que interpretan código ISO, el comportamiento depende del parámetro de máquina $MC_EXTERN_FUNCTION_MASK. Si el bit 6 está desactivado (0), el control requiere que el número de programa P tenga exactamente 4 dígitos, generando una alarma inmediata si se supera este límite. Acción práctica: Verifique el estado del bit 6 en la configuración del sistema para habilitar números de programa de hasta 8 dígitos de forma nativa, o renombre el subprograma a un número de 4 dígitos para evitar paradas en producció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.

- 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.