15 min de lectura
Nivel Intermedio
Requisito: G-Code básico

¿Qué son las Macros B?

Las Macros B (también conocidas como "Custom Macro B" o programación paramétrica) son una extensión del lenguaje G-Code estándar que permite crear programas CNC dinámicos y reutilizables.

A diferencia de un programa G-Code tradicional donde cada valor es fijo, con Macros B puedes:

  • Usar variables para representar dimensiones, velocidades y posiciones
  • Realizar cálculos aritméticos directamente en el programa
  • Crear bucles para operaciones repetitivas
  • Tomar decisiones con estructuras condicionales

Ejemplo comparativo

Sin Macros (código fijo):

G-Code
G01 X50.0 Y25.0 F200
G01 X100.0 Y25.0
G01 X100.0 Y50.0
G01 X50.0 Y50.0

Con Macros (código paramétrico):

Macro B
#1 = 50.0    (Posición X inicial)
#2 = 25.0    (Posición Y inicial)
#3 = 50.0    (Ancho del rectángulo)
#4 = 25.0    (Alto del rectángulo)

G01 X#1 Y#2 F200
G01 X[#1+#3] Y#2
G01 X[#1+#3] Y[#2+#4]
G01 X#1 Y[#2+#4]

Con el segundo enfoque, cambiar las dimensiones del rectángulo solo requiere modificar los valores de las variables al inicio.

Variables en Macro B

Las variables son contenedores que almacenan valores numéricos. Fanuc utiliza el símbolo # seguido de un número para identificar variables.

Tipos de Variables

Tipo Rango Persistencia Uso
Locales #1 - #33 Solo en la macro actual Parámetros de entrada, cálculos temporales
Comunes #100 - #199 Hasta apagar máquina Compartir datos entre programas
Permanentes #500 - #999 Se mantienen al apagar Configuraciones, contadores
Sistema #1000+ Controlador Leer estado de máquina, fecha, etc.

Asignación de valores

Macro B
#100 = 25.5          (Asignación directa)
#101 = #100 * 2      (Resultado de operación)
#102 = [#100 + #101] (Expresión entre corchetes)

⚠️ Importante: Las expresiones complejas deben ir entre corchetes [ ]

Operadores Aritméticos

Macro B soporta operaciones matemáticas completas:

Operador Función Ejemplo
+ Suma #1 = #2 + 10
- Resta #1 = #2 - 5
* Multiplicación #1 = #2 * 2
/ División #1 = #2 / 4
SIN Seno #1 = SIN[#2]
COS Coseno #1 = COS[#2]
SQRT Raíz cuadrada #1 = SQRT[#2]
ABS Valor absoluto #1 = ABS[#2]
ROUND Redondear #1 = ROUND[#2]

Ejemplo: Cálculo de RPM

Macro B
( Calcular RPM desde velocidad de corte )
( #1 = Velocidad de corte en m/min )
( #2 = Diámetro de herramienta en mm )

#100 = [[#1 * 1000] / [3.14159 * #2]]
#100 = ROUND[#100]

S#100 M03  ( Aplicar velocidad calculada )

Estructuras de Control

Condicional IF/THEN

Permite ejecutar código solo si se cumple una condición:

Macro B
IF [#1 GT 100] THEN #1 = 100

Operadores de comparación:

Operador Significado
EQ Igual a (Equal)
NE No igual (Not Equal)
GT Mayor que (Greater Than)
GE Mayor o igual
LT Menor que (Less Than)
LE Menor o igual

Bucle WHILE/DO

Para repetir código mientras se cumpla una condición:

Macro B
#100 = 0

WHILE [#100 LT 10] DO1
  G01 Z[#100 * -1] F100
  #100 = #100 + 1
END1

📌 Nota: El número después de DO y END debe coincidir (DO1...END1, DO2...END2, etc.)

Macro de Ejemplo Completa

Ciclo de Taladrado con Peck

Esta macro realiza un taladrado profundo con retracción periódica para evacuar viruta:

Macro B - Peck Drill
O9100 ( MACRO: PECK DRILL )
( Parámetros de entrada: )
( #1 = Posición X )
( #2 = Posición Y )
( #3 = Profundidad total (valor negativo) )
( #4 = Incremento de peck )
( #5 = Altura de retracción )
( #6 = Avance de taladrado )

( --- Inicialización --- )
#100 = 0                    ( Profundidad actual )
#101 = #5                   ( Guardar altura segura )

( --- Posicionamiento --- )
G90 G00 X#1 Y#2            ( Ir a posición XY )
G43 Z#101 H01              ( Altura segura con comp. )
M08                         ( Refrigerante ON )

( --- Ciclo de peck --- )
WHILE [#100 GT #3] DO1
  #100 = #100 - #4         ( Calcular siguiente peck )
  
  IF [#100 LT #3] THEN #100 = #3  ( Limitar a prof. final )
  
  G01 Z#100 F#6            ( Taladrar )
  G00 Z#101                ( Retracción rápida )
END1

( --- Finalización --- )
M09                         ( Refrigerante OFF )
G00 Z#5                    ( Altura de retorno )
M99                         ( Fin de subrutina )

Llamada a la macro:

G-Code
G65 P9100 X50.0 Y30.0 Z-25.0 Q5.0 R2.0 F150

Buenas Prácticas

  1. Documenta siempre - Usa comentarios para explicar las variables y la lógica
  2. Valida entradas - Verifica que los parámetros estén en rangos seguros
  3. Usa variables con sentido - #100 para resultados, #500+ para configuración permanente
  4. Prueba con SINGLE BLOCK - Ejecuta paso a paso la primera vez
  5. Limita valores - Usa IF para evitar velocidades o profundidades peligrosas

Ejercicio Práctico

Crea una macro que dibuje un cuadrado de lado variable:

  • Parámetro #1 = Lado del cuadrado
  • Parámetro #2 = Posición X inicial
  • Parámetro #3 = Posición Y inicial
  • Avance fijo de 200 mm/min
Ver solución
Macro B
O9200 ( MACRO: CUADRADO )
G90 G01 X#2 Y#3 F200          ( Ir a inicio )
G01 X[#2+#1]                   ( Lado derecho )
G01 Y[#3+#1]                   ( Lado superior )
G01 X#2                        ( Lado izquierdo )
G01 Y#3                        ( Cerrar cuadrado )
M99                            ( Fin de macro )