Skip to main content
CNC.wiki

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.

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

Cofundador de CNC CARE

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ónDetalles Técnicos
Códigos de ComandoG65, G66, G66.1, G67
Grupo ModalG65 es No modal (Grupo 00); G66 y G66.1 son Modales (Grupo 12); G67 cancela las llamadas modales
Marcas CompatiblesFanuc, Siemens, Mitsubishi
Parámetros CríticosFanuc: 6008#7 (IJK) y 6007#4 (CVA); Mitsubishi: #1241 (Macro argument L/P valid) y #11053; Siemens: $MC_EXTERN_FUNCTION_MASK
Restricción PrincipalEl 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 G65 para llamadas de macro simples únicas y G66 para llamadas modales que se repiten con cada movimiento de eje.
  • Programe siempre el comando de cancelación G67 inmediatamente después de las operaciones de macro modales para evitar movimientos imprevistos durante las coordenadas de despeje.
  • Establezca el parámetro de Fanuc 6008#7 en 0 para permitir la detección automática de la Especificación de Argumentos II para coordenadas complejas multipunto.
  • Programe las direcciones I, J y K en 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 G290 antes de leer las variables de sistema $C_ para evitar abortos de análisis.
  • Evite el uso de direcciones prohibidas como G o N como 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 (como A, 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íaElemento / CódigoDescripciónValor / Detalles
Parámetro6008#7 (IJK)Comportamiento global de argumentos0 = Detección automática de Spec I/II; 1 = Spec I estricta
Parámetro6007#4 (CVA)Análisis de formato decimal0 = Formato NC; 1 = Formato macro
Parámetro6020#4 (GAA)Anulación de direcciones prohibidasPermite G (mapeada a #28-#32) y L (mapeada a #12)
Parámetro6009#2 (MAA)Llamadas de macro por código MDetermina si la dirección G se convierte en argumento
AlarmaAlarm 129 (PS0129)Uso no válido de dirección GSe activa si los parámetros GAA/MAA prohíben G
AlarmaAlarm 1095 (PS1095)Límite de apilamiento superadoSe activa si se especifican más de 10 conjuntos de I/J/K
AlarmaAlarm 114 (PS0114)Error de formato en macroCódigo H no definido o formato matemático no válido
VersiónSerie TConfiguración de tornoRestringe las direcciones estrictamente a A, B, F, H, I, K, M, P, Q, R, S, T
VersiónSerie MConfiguración de centro de mecanizadoAdmite 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íaElemento / CódigoDescripciónValor / Detalles
ParámetroPIdentificador de subprogramaDe 4 a 8 dígitos (determinado por datos de máquina)
ParámetroLRecuento de repeticiones del subprogramaValor entero entre 1 y 9999
Máscara de Sistema$MC_EXTERN_FUNCTION_MASKConfiguración de bits de datos de máquinaEl bit 6 establece el formato de dígitos de P; el bit 3 habilita la evaluación del código DIN
AlarmaAlarm 12720Número de programa ausenteSe activa cuando la llamada a la macro carece de la dirección P
AlarmaAlarm 12722Llamada mixta de ciclo y macroSe activa al combinar llamadas de macro y ciclos fijos
AlarmaAlarm 14016Funciones de bloque en conflictoConflicto con M98, retornos o códigos de fin de programa
VersiónBit 6 = 0Rellena P estrictamente a 4 dígitosPasar un número de programa > 4 dígitos provoca una alarma
VersiónBit 6 = 1Admite de forma nativa 8 dígitosAcepta 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íaElemento / CódigoDescripciónValor / Detalles
Parámetro#1241 (set13/bit5)Validez de argumento macro L/PPermite pasar L/P a las variables #12 y #16
Parámetro#11053Ubicación de almacenamiento del programa de usuario0 = Memoria CN; 1 = Disco duro
AlarmaP275Límite de apilamiento superadoSe activa si se programan más de 10 conjuntos de I/J/K
AlarmaP33Error de sintaxis de programaSe activa por un valor de L/P no válido en M98 o cadenas ilegales
VersiónSerie M800V/M80VDependencias del modo de llamadaG65/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ísticaFanucSiemensMitsubishi
Mapeo de VariablesVariables locales de la #1 a la #33Variables de sistema de la $C_A a la $C_ZVariables locales de la #1 a la #33
Apilamiento de ArgumentosLa Spec II mapea hasta 10 conjuntos de I/J/K a las variables de la #4 a la #33Almacena hasta 10 conjuntos en $C_I[0]... y rastrea el recuento en $C_I_NUMLa Designación II mapea hasta 10 conjuntos de I/J/K a las variables de la #4 a la #33
Precedencia DecimalEl último tipo de argumento especificado tiene precedencia en bloques mixtos— (sin fuente)El valor de dirección especificado posteriormente es válido
Direcciones ProhibidasG/L/N/P están bloqueadas; G/L se pueden mapear usando el parámetro GAAP, L, O, N deben ser enteros; los valores reales activan alarmasG/N bloqueadas en G65/G66; L/P se pueden habilitar a través del parámetro #1241
Cambio de IntérpreteCustom Macro B nativoRequiere G290 para evaluar variables de sistema en el subprogramaCustom 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.0 se asigna a la variable local #1.
  • El valor 2.0 se asigna a la variable local #2.
  • El valor 15.0 se asigna a la variable local #24.
  • El valor 25.0 se 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.0 se mapea a $C_A.
  • El valor 20.0 se mapea a $C_C.
  • El valor 30.0 se mapea a $C_X.
  • El valor 40.0 se mapea a $C_Z.
  • A la variable de matriz $C_I[0] se le asigna 50.0, a $C_J[0] se le asigna 70.0 y a $C_K[0] se le asigna 60.0.
  • La segunda instancia de la dirección I asigna 80.0 a $C_I[1], y $C_I_NUM se actualiza a 2 para 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.1 se mapea a la variable local #1 (dirección A).
  • El valor -2.2 se mapea a la variable local #2 (dirección B).
  • La dirección D se mapea a #7, asignando 3.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 #7 se finaliza con el valor 7.7.

Análisis de Errores

MarcaCódigo de AlarmaCondición de ActivaciónSíntoma para el OperadorCausa Raíz / Solución
FanucAlarm 129Programar la dirección G como argumento cuando no está permitidoLa ejecución del CNC se detiene inmediatamente; la pantalla muestra el mensaje de alarmaLos parámetros GAA/MAA están desactivados; habilite el parámetro 6020#4 o modifique el código G
FanucAlarm 1095Se programaron más de 10 conjuntos de I/J/K en la Especificación de Argumentos IIEl control detiene el ciclo; el programa se detiene antes de comenzar el movimientoSe superó el apilamiento de la Spec II; reduzca los pares I/J/K a 10 o menos
SiemensAlarm 12720Llamar a la macro G65/G66 sin la dirección P del número de programaEl intérprete aborta la ejecución; la lámpara de inicio de ciclo se apagaFalta la dirección P en el bloque NC; especifique el número de programa P_ en la llamada de macro
SiemensAlarm 12722Mezclar ciclos fijos y llamadas de macro G65/G66 en el mismo bloqueEl control rechaza el bloque; la pantalla muestra conflicto entre macro y cicloSe combinaron G81-G89 y G65/G66 en un solo bloque; sepárelos en dos bloques
MitsubishiP275Programar más de 10 conjuntos de I/J/K en la Designación IISe inhibe el movimiento del eje; se activa el estado de alarmaSe superó el límite de apilamiento; mantenga los conjuntos repetidos de I/J/K en 10 o menos
MitsubishiP33Se activa por un valor de L/P no válido en M98 o cadenas ilegalesEl programa se detiene con un error de sintaxisEl 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.

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